SBSPSS/Utils/MapEdit/GLEnabledView.h
2000-09-22 16:56:20 +00:00

249 lines
9.0 KiB
C++

#if !defined(AFX_GLENABLEDVIEW_H__59CED13F_E584_11D1_ACB3_E52ED8AC9002__INCLUDED_)
#define AFX_GLENABLEDVIEW_H__59CED13F_E584_11D1_ACB3_E52ED8AC9002__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
/////////////////////////////////////////////////////////////////////////////
// CGLEnabledView.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// Global type definitions
enum ColorsNumber{INDEXED,THOUSANDS,MILLIONS,MILLIONS_WITH_TRANSPARENCY};
enum ZAccuracy{NORMAL,ACCURATE};
struct GLInfoStruct
{
CString vendor;
CString renderer;
CString acceleration;
CString glextensions;
CString glversion;
CString gluextensions;
CString gluversion;
int max_lights;
int max_clip_planes;
int max_model_stack_depth;
int max_proj_stack_depth;
int max_txtr_stack_depth;
int max_name_stack_depth;
int max_attrib_stack_depth;
int max_texture_size;
int max_list_nesting;
int max_eval_order;
CSize max_viewport_dims;
int auxiliary_buffers;
int max_smooth_point_size;
int min_smooth_point_size;
float smooth_point_granularity;
int max_smooth_line_size;
int min_smooth_line_size;
float smooth_line_granularity;
int red_bits;
int blue_bits;
int green_bits;
int alpha_bits;
int depth_bits;
int stencil_bits;
};
/////////////////////////////////////////////////////////////////////////////
// CGLEnabledView view
class CGLEnabledView : public CView
{
protected:
CGLEnabledView();// protected constructor used by dynamic creation
DECLARE_DYNCREATE(CGLEnabledView)
/** CGLDispList
DESC:-this is an helper class which let you create "display list objects",
use these objects to define the key elements in your scene (a disp.
list is faster than the corresponding GL commands).
-Through the class members functions you have total control on a
single display list.
-An isolated display list save OGL parameters before execution
(so it's not affected by preceding transformations or settings).
*******/
class CGLDispList
{
friend class CGLEnabledView;
private:
BOOL m_bIsolated;
int m_glListId;
public:
CGLDispList(); // constructor
~CGLDispList(); // destructor
void StartDef(BOOL bImmediateExec=FALSE);// enclose a disp.list def.
void EndDef();
void Draw();// execute disp list GL commands
void SetIsolation(BOOL bValue) {m_bIsolated=bValue;}; // set isolation property
};
/** CGLTesselator
DESC:-this is a wrapper class which let you create "tesselator objects",
use these objects to create concave or self intersecting polygons.
-OGL tessellation objects converts a vertices list describing a convex
or self-intersecting polygon in one or more GL primitives.Read the
docs to understand the callbacks mechanism.
-The callbacks have been defined as a simple and direct mapping to
corresponding GL primitive (no per vertex color or texture information).
-The callbacks have to be global functions.
-A very simple garbage collection list has been implemented to manage new
vertices create by combine callback.
-Elaboration and drawing occur after EndDef().
*******/
class CGLTesselator
{
public:
CGLTesselator(); // constructor
~CGLTesselator(); // destructor
// properties functions
void SetFilling(BOOL bFill=TRUE);
BOOL GetFilling();
void SetWindingRule(GLdouble which);
GLdouble GetWindingRule();
// definition functions
void StartDef();
void AddVertexArray(GLdouble arr[][3],int size);
void AddVertex(GLdouble vertData[3]);
void ContourSeparator();
void EndDef();// here occur drawing
private:
GLUtesselator* m_tessObj;
};
/** CGLQuadric
DESC:-This is a wrapper class which let you create "quadric objects",
use these objects to create spheres, disks and cylinders.
-All GL commands related to quadrics have been wrapped hiding the
quadric object parameter.
*******/
class CGLQuadric
{
public:
CGLQuadric(GLenum drwStyle=GLU_FILL, // constructor
GLenum normals=GLU_FLAT,
GLenum side=GLU_OUTSIDE,
BOOL bGenerateTxtrCoords=FALSE);
~CGLQuadric(); // destructor
// properties functions
void SetDrawStyle(GLenum style);
void SetOrientation(GLenum type);
void SetTextureCoordsGen(BOOL flag);
void SetNormals(GLenum type);
// drawing functions
void DrawPartialDisk(GLdouble innerRadius,GLdouble outerRadius,int slices,int loops,GLdouble startAngle,GLdouble sweepAngle);
void DrawDisk(GLdouble innerRadius,GLdouble outerRadius,int slices,int loops);
void DrawCylinder(GLdouble baseRadius,GLdouble topRadius,GLdouble height,int slices,int stacks);
void DrawSphere(GLdouble radius,int longitudeSubdiv,int latitudeSubdiv);
private:
GLUquadricObj* m_quadrObj;
};
// Attributes
public:
// Operations
public:
/* Stock Display lists functions
DESC.: these display lists are internally organized in a vector (20 max),
you have control on definition and redrawing only.
use them for background elements which are to be drawn everytime
all together.
NOTE: between BeginStockDispList and EndStockDispList should be present OpenGL calls only (see documentation for which are allowed and how are them treated)
*/
void StartStockDListDef(); // allocates a new stock display list entry and opens a display list definition
void EndStockListDef(); // closes a stock display list definition
void DrawStockDispLists(); // executes all the stock display lists
void ClearStockDispLists(); // deletes all the stock display lists
// Information retrieval function
GLInfoStruct GetInformation();
// Mouse cursor function
void SetMouseCursor(HCURSOR mcursor=NULL);
// Attribute retrieval function
double GetAspectRatio() {return m_dAspectRatio;};
// Text functions
void PrepareCharset3D(CString fontname,float extrusion,BOOL boldface=FALSE,BOOL italicface=FALSE,BOOL uselines=false,float precision=0.01f);// prepare a 3D charset to be used by successive Text3D calls
void PrepareCharset3D(const LOGFONT* pLF,float extrusion,BOOL uselines=false,float precision=0.01f);// alternate method to prepare a 3D charset
void PrepareCharset2D(CString fontname,int height=10,BOOL boldface=FALSE,BOOL italicface=FALSE);// prepare a 2D charset to be used by successive Text2D calls
void PrepareCharset2D(const LOGFONT* pLF);// alternate method to prepare a 2D charset
float Text3D(CString text);// draw a 3D text string
void Text2D(CString text);// draw a bitmapped text string at the current raster position
// Rendering Context switching
void BeginGLCommands();// use to issue GL commands outside Overridables
void EndGLCommands();// i.e: in menu event handlers, button events handler etc.
// Overridables
virtual void OnCreateGL(); // override to set bg color, activate z-buffer, and other global settings
virtual void OnSizeGL(int cx, int cy); // override to adapt the viewport to the window
virtual void OnDrawGL(); // override to issue drawing functions
virtual void VideoMode(ColorsNumber &c,ZAccuracy &z,BOOL &dbuf); // override to specify some video mode parameters
// Overrides
// NOTE: these have been declared private because they shouldn't be
// overridden, use the provided virtual functions instead.
private:
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CGLEnabledView)
public:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
//}}AFX_VIRTUAL
// Implementation
protected:
int m_glErrorCode;
virtual ~CGLEnabledView();
CRect m_ClientRect; // client area size
double m_dAspectRatio; // aspect
GLYPHMETRICSFLOAT* m_gmfvector;
const int m_numchars;
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
// Generated message map functions
// NOTE: these have been declared private because they shouldn't be
// overridden, use the provided virtual functions instead.
private:
//{{AFX_MSG(CGLEnabledView)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnDestroy();
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
// member variables
private:
CDC* m_pCDC; // WinGDI Device Context
HGLRC m_hRC; // OpenGL Rendering Context
HCURSOR m_hMouseCursor; // mouse cursor handle for the view
CPalette m_CurrentPalette; // palettes
CPalette* m_pOldPalette;
int m_DispListVector[20]; // Internal stock display list vector
BOOL m_bInsideDispList; // Disp List definition semaphore
BOOL m_bExternGLCall;
BOOL m_bExternDispListCall;
int m_charsetDListBase;
// initialization helper functions
unsigned char ComponentFromIndex(int i, UINT nbits, UINT shift);
void CreateRGBPalette();
BOOL bSetupPixelFormat();
CDC* GetCDC() {return m_pCDC;};
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_GLENABLEDVIEW_H__59CED13F_E584_11D1_ACB3_E52ED8AC9002__INCLUDED_)