windows-nt/Source/XPSP1/NT/shell/osshell/control/scrnsave/pipes/state.h
2020-09-26 16:20:57 +08:00

139 lines
4 KiB
C++

//-----------------------------------------------------------------------------
// File: state.h
//
// Desc: STATE
//
// Copyright (c) 1994-2000 Microsoft Corporation
//-----------------------------------------------------------------------------
#ifndef __state_h__
#define __state_h__
#define MAX_DRAW_THREADS 4
#define MAX_TESS 3
// type(s) of pipes that are drawn
enum
{
DRAW_NORMAL,
DRAW_FLEX,
DRAW_BOTH // not currently used
};
// Reset status
#define RESET_STARTUP_BIT (1L << 0)
#define RESET_NORMAL_BIT (1L << 1)
#define RESET_RESIZE_BIT (1L << 2)
#define RESET_REPAINT_BIT (1L << 3)
// Frame draw schemes
enum
{
FRAME_SCHEME_RANDOM, // pipes draw randomly
FRAME_SCHEME_CHASE, // pipes chase a lead pipe
};
//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
class DRAW_THREAD
{
private:
public:
TEXTUREINFO* m_pTextureInfo;
IDirect3DDevice8* m_pd3dDevice;
PIPE* m_pPipe; // generic pipe ptr
int m_priority;
DRAW_THREAD();
~DRAW_THREAD();
HRESULT InitDeviceObjects( IDirect3DDevice8* pd3dDevice );
HRESULT RestoreDeviceObjects();
HRESULT InvalidateDeviceObjects();
HRESULT DeleteDeviceObjects();
HRESULT Render();
HRESULT FrameMove( FLOAT fElapsedTime );
void SetTexture( TEXTUREINFO* pTextureInfo );
void SetPipe( PIPE* pPipe );
BOOL StartPipe();
void KillPipe();
};
// Program existence instance
class NORMAL_STATE;
class FLEX_STATE;
struct CONFIG;
//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
class STATE
{
public:
CONFIG* m_pConfig;
BOOL m_bUseTexture; // global texture enable
TEXTUREINFO m_textureInfo[MAX_TEXTURES];
int m_nTextures;
IDirect3DDevice8* m_pd3dDevice;
ID3DXMatrixStack* m_pWorldMatrixStack;
D3DLIGHT8 m_light;
FLOAT m_fLastTime;
PIPE* m_pLeadPipe; // lead pipe for chase scenarios
int m_nSlices; // reference # of slices around a pipe
IPOINT2D m_texRep[MAX_TEXTURES];
VIEW m_view; // viewing parameters
float m_radius; // 'reference' pipe radius value
NODE_ARRAY* m_nodes; // for keeping track of draw space
NORMAL_STATE* m_pNState;
FLEX_STATE* m_pFState;
LPDIRECT3DVERTEXBUFFER8 m_pClearVB;
STATE( CONFIG* pConfig );
~STATE();
void Reshape( int width, int height );
void Repaint();
HRESULT InitDeviceObjects( IDirect3DDevice8* pd3dDevice );
HRESULT RestoreDeviceObjects();
HRESULT InvalidateDeviceObjects();
HRESULT DeleteDeviceObjects();
HRESULT Render();
HRESULT FrameMove( FLOAT fElapsedTime );
private:
int m_drawMode; // drawing mode (flex or normal for now)
int m_drawScheme; // random or chase
int m_maxPipesPerFrame; // max number of separate pipes/frame
int m_nPipesDrawn; // number of pipes drawn or drawing in frame
int m_maxDrawThreads; // max number of concurrently drawing pipes
int m_nDrawThreads; // number of live threads
DRAW_THREAD m_drawThreads[MAX_DRAW_THREADS];
int m_resetStatus;
HRESULT LoadTextureFiles( int nTextures, TCHAR strTextureFileNames[MAX_PATH][MAX_TEXTURES], int* anDefaultTextureResource );
int PickRandomTexture( int iThread, int nTextures );
BOOL Clear();
void ChooseNewLeadPipe();
void CompactThreadList();
void GLInit();
void DrawValidate(); // validation to do before each Draw
void ResetView();
BOOL FrameReset();
void CalcTexRepFactors();
int CalcMaxPipesPerFrame();
};
#endif // __state_h__