//-----------------------------------------------------------------------------
// File: Render.h
//
// Desc: Frame move and render
//
// Note: This code uses the D3D Framework helper library.
//
//
// Copyright (c) 2001 Black Sphere Corp.
//-----------------------------------------------------------------------------
#include <math.h>
#include <time.h>
#include <d3dx.h>
#include <d3dxmath.h>
#include "D3DFrame.h"
#include "D3DTextr.h"
#include "D3DUtil.h"
#include "D3DFile.h"
#include "D3DMath.h"
#include "screensaver.h"
#include "resource.h"
//-----------------------------------------------------------------------------
// Declare the application globals for use in WinMain.cpp
//-----------------------------------------------------------------------------
extern TCHAR* g_strAppTitle;
extern BOOL g_bAppUseZBuffer; // Create/use a z-buffer
//-----------------------------------------------------------------------------
// Defines, constants, and global variables
//-----------------------------------------------------------------------------
extern CD3DFile* g_pPP1Object;
extern CD3DFile* g_pPP2Object;
extern CD3DFile* g_pPP3Object;
extern CD3DFile* g_pPP4Object;
extern D3DMATRIX g_matPP1Matrix;
extern D3DMATRIX g_matPP2Matrix;
extern D3DMATRIX g_matPP3Matrix;
extern D3DMATRIX g_matPP4Matrix;
extern CD3DFile* g_pSphereObject;
extern D3DMATRIX g_matSphereMatrix;
extern HRESULT hr;
//extern DWORD dwCoopFlags;
//extern RECT rc;
extern DWORD dwRenderWidth;
extern DWORD dwRenderHeight;
extern D3DVIEWPORT7 vp;
//extern DDSURFACEDESC2 ddsd;
//extern LPDIRECTDRAWSURFACE7 pddsCoverSurface;
//extern LPDIRECTDRAWCLIPPER pcClipper;
//extern D3DMATRIX matBsc;
// extern D3DMATRIX matView;
// extern D3DVECTOR vEyePt;
// extern D3DVECTOR vLookatPt;
// extern D3DVECTOR vUpVec;
extern D3DXMATRIX matAll;
extern D3DXMATRIX matTrans;
extern D3DXMATRIX matScale;
extern D3DXMATRIX matRot;
extern D3DXQUATERNION qRot;
extern float fX;
extern float fY;
extern float fZ;
extern float fRadsX;
extern float fRadsY;
extern float fRadsZ;
extern bool moveXUpPP1;
extern bool moveYUpPP1;
extern bool moveZUpPP1;
extern bool moveXUpPP2;
extern bool moveYUpPP2;
extern bool moveZUpPP2;
extern bool moveXUpPP3;
extern bool moveYUpPP3;
extern bool moveZUpPP3;
extern bool moveXUpPP4;
extern bool moveYUpPP4;
extern bool moveZUpPP4;
//extern bool bLButtonDown;
//extern bool bRButtonDown;
extern bool bHitRightPP1;
extern bool bHitRightPP2;
extern bool bHitRightPP3;
extern bool bHitRightPP4;
// alpha-blending
extern int iAlpha1;
extern int iAlpha2;
extern bool fadeIn1;
extern bool fadeIn2;
extern int count1;
extern int count2;
extern bool bStartTumble;
extern int i;
extern bool tumblePP1;
extern bool tumblePP2;
extern bool tumblePP3;
extern bool tumblePP4;
extern float fAspect;
extern D3DMATRIX matProj;
//extern bool bRenderTargetTooSmall;
// options
// TODO: put these in ScreenSaverOptions struct
extern float g_fSpeed;
extern float g_fRotation;
// NOTE: using BOOL (i.e. int) instead of bool will prevent C4800 warnings when
// assigning it a DWORD reg value
extern BOOL g_bSound;
extern BOOL g_bShowTrace;
extern float g_fXLimit;
extern float g_fYLimit;
extern float g_fZLimit;
extern float fRandomPP1DeltaX;
extern float fRandomPP1DeltaY;
extern float fRandomPP2DeltaX;
extern float fRandomPP2DeltaY;
extern float fRandomPP3DeltaX;
extern float fRandomPP3DeltaY;
extern float fRandomPP4DeltaX;
extern float fRandomPP4DeltaY;
extern int iRandomPP1X;
extern int iRandomPP1Y;
extern int iRandomPP2X;
extern int iRandomPP2Y;
extern int iRandomPP3X;
extern int iRandomPP3Y;
extern int iRandomPP4X;
extern int iRandomPP4Y;
extern CD3DFramework7* g_pFramework;
void TumblePP( D3DMATRIX& matPP, bool& moveXUp, bool& moveYUp, bool& bHitRight,
int& iRandomX, int& iRandomY, float& fRandomDeltaX, float& fRandomDeltaY );
void DrawLogo();
void DrawLogo1( LPDIRECT3DDEVICE7 pd3dDevice);
void DrawLogo2( LPDIRECT3DDEVICE7 pd3dDevice);
void DrawLogo3( LPDIRECT3DDEVICE7 pd3dDevice);
void DrawLogo4( LPDIRECT3DDEVICE7 pd3dDevice);
void BltAlphaFactor( LPDIRECT3DDEVICE7 pdev, LPDIRECTDRAWSURFACE7 pTex,
WORD x, WORD y, WORD x2, WORD y2, BYTE factor, bool clear );
// textures
enum {
TEX_SPHERE0, TEX_SPHERE1, TEX_SPHERE2, TEX_SPHERE3,
NUM_TEXTURES
};
extern char* g_szTexName[NUM_TEXTURES];
extern LPDIRECTDRAWSURFACE7 g_ppTex[NUM_TEXTURES];
//-----------------------------------------------------------------------------
// Function prototypes and global (or static) variables
//-----------------------------------------------------------------------------
VOID AppPause( BOOL );
VOID RotateVertexInX( FLOAT, DWORD, D3DVERTEX*, D3DVERTEX* );
BOOL GenerateSphere( FLOAT, DWORD, DWORD, FLOAT, FLOAT, FLOAT, D3DVERTEX**,
DWORD*, WORD**, DWORD* );
VOID BlendObjects( DWORD, D3DVERTEX*, D3DVERTEX*, D3DVERTEX* );