This repository was archived by the owner on Feb 10, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCOpenGL.h
145 lines (104 loc) · 2.89 KB
/
COpenGL.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
// COpenGl.h -
#ifndef __COPENGL_INCLUDED
#define __COPENGL_INCLUDED
/////////////////////
class COpenGL;
class CDisplayList;
/////////////////////
typedef COpenGL& RENDERER;
// alphblending states
typedef enum
{
ALPHABLEND_NONE = 0,
ALPHABLEND_NORMAL,
ALPHABLEND_ADDITIVE
} ALPHABLENDING;
#define FREQUENT_STATES 13
// frequently called states
typedef enum
{
gl_TEXTURE_2D = 0,
gl_DEPTH_TEST,
gl_LIGHTING,
gl_LIGHT0,
gl_LIGHT1,
gl_LIGHT2,
gl_LIGHT3,
gl_LIGHT4,
gl_LIGHT5,
gl_LIGHT6,
gl_LIGHT7,
gl_BLEND,
gl_ALPHA_TEST
} GL_STATES;
// OpenGL Class
class COpenGL {
private:
HWND m_hWindow;
HDC m_hDeviceContext;
HGLRC m_hRenderContext; // opengl kontekst za rendirane
int m_screen_width, m_screen_height;
bool mode2d; // are we in 2D viewport mode
// cache frequently called states
bool states[FREQUENT_STATES]; // current state
bool state_was[FREQUENT_STATES]; // the state before the current one
public:
COpenGL();
~COpenGL();
// init/release
int Initialize( int , int , HWND );
void ResizeScene( GLsizei , GLsizei );
int Destroy();
void BeginScene();
void EndScene();
// states
void set2D();
void set3D();
void setState( GL_STATES state, bool enable );
bool getState( GL_STATES state ) { return states[state]; };
bool getStateWas( GL_STATES state ) { return state_was[state]; };
void restoreState( GL_STATES state );
// math
void getViewMat( CMatrix &m );
void getProjectionMat( CMatrix &m );
void setViewMat( CMatrix m );
void setProjectionMat( CMatrix m );
// retrieve
HDC GetHDC() const { return m_hDeviceContext; };
};
// Display Lists Class
class CDisplayList
{
private:
vector<unsigned int> dl;
public:
CDisplayList() { dl.clear(); };
~CDisplayList() { Destroy(); };
unsigned int Begin();
void End();
void Render( unsigned int );
void Destroy();
};
// Color class
typedef struct rgb
{
float r, g, b;
rgb() { r = g = b = 1.0f; };
rgb( float red, float green, float blue ) { r = red; g = green; b = blue; };
rgb( const rgb &c ) { r = c.r; g = c.g; b = c.b; };
rgb& operator=( const rgb &c ) { r = c.r; g = c.g; b = c.b; return *this; };
} rgb;
// Alpha color class
typedef struct rgba
{
float r, g, b, a;
rgba() { r = g = b = 1.0f; a = 1.0f; };
rgba( float red, float green, float blue ) { r = red; g = green; b = blue; a = 1.0f; };
rgba( float red, float green, float blue, float alpha ) { r = red; g = green; b = blue; a = alpha; };
rgba( const rgba &c ) { r = c.r; g = c.g; b = c.b; a = c.a; };
rgba( const rgb &c ) { r = c.r; g = c.g; b = c.b; a = 1.0f; };
rgba& operator=( const rgba &c ) { r = c.r; g = c.g; b = c.b; a = c.a; return *this; };
} rgba;
#define BLACK rgb( 0.0f, 0.0f, 0.0f )
#define WHITE rgb( 1.0f, 1.0f, 1.0f )
#endif