Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/******************************Module*Header*******************************\
* Module Name: state.h * * STATE * * Copyright (c) 1995 Microsoft Corporation * \**************************************************************************/
#ifndef __state_h__
#define __state_h__
#include "sscommon.hxx"
#include "pipe.h"
#include "node.h"
#include "view.h"
#include "nstate.h"
#include "fstate.h"
#define MAX_DRAW_THREADS 4
#define TEAPOT 66
#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
};
class DRAW_THREAD { private: HDC hdc; HTEXTURE htex;
public: HGLRC hglrc; // rc to draw with (public so STATE can delete)
int priority;
DRAW_THREAD(); ~DRAW_THREAD(); PIPE *pPipe; // generic pipe ptr
void SetRCDC( HGLRC rc, HDC hdc ); BOOL HasRC(); HGLRC GetRC(); void MakeRCCurrent(); void SetTexture( HTEXTURE htex ); void SetPipe( PIPE *pipe ); BOOL StartPipe(); void DrawPipe(); void KillPipe(); };
// Program existence instance
class NORMAL_STATE; class FLEX_STATE;
class STATE { public: HGLRC shareRC; // RC that objects are shared from
PIPE *pLeadPipe; // lead pipe for chase scenarios
int nSlices; // reference # of slices around a pipe
BOOL bTexture; // global texture enable
int nTextures; TEXTURE texture[MAX_TEXTURES]; IPOINT2D texRep[MAX_TEXTURES];
VIEW view; // viewing parameters
float radius; // 'reference' pipe radius value
NODE_ARRAY *nodes; // for keeping track of draw space
NORMAL_STATE *pNState; FLEX_STATE *pFState;
STATE( BOOL bFlexMode, BOOL bMultiPipes ); ~STATE(); void Reshape( int width, int height, void *data ); void Repaint( LPRECT pRect, void *data ); void Draw( void *data ); void Finish( void *data );
private: int drawMode; // drawing mode (flex or normal for now)
int drawScheme; // random or chase
int maxPipesPerFrame; // max number of separate pipes/frame
int nPipesDrawn; // number of pipes drawn or drawing in frame
int maxDrawThreads; // max number of concurrently drawing pipes
int nDrawThreads; // number of live threads
DRAW_THREAD drawThreads[MAX_DRAW_THREADS];
int resetStatus;
SS_DIGITAL_DISSOLVE_CLEAR ddClear; int bCalibrateClear;
void GLInit(); void DrawValidate(); // validation to do before each Draw
void ResetView(); void FrameReset(); void Clear(); void ChooseNewLeadPipe(); void CompactThreadList(); BOOL LoadTextureFiles(); BOOL LoadTextureFiles( TEXFILE *pTexFile, int nTexFiles, TEX_RES *pTexRes ); void CalcTexRepFactors(); int CalcMaxPipesPerFrame(); };
#endif // __state_h__
|