]> git.lizzy.rs Git - irrlicht.git/blob - source/Irrlicht/COpenGLCacheHandler.cpp
Add OpenGL3 renderer
[irrlicht.git] / source / Irrlicht / COpenGLCacheHandler.cpp
1 // Copyright (C) 2015 Patryk Nadrowski\r
2 // This file is part of the "Irrlicht Engine".\r
3 // For conditions of distribution and use, see copyright notice in Irrlicht.h\r
4 \r
5 #include "COpenGLCacheHandler.h"\r
6 \r
7 #ifdef _IRR_COMPILE_WITH_OPENGL_\r
8 \r
9 #include "COpenGLDriver.h"\r
10 \r
11 namespace irr\r
12 {\r
13 namespace video\r
14 {\r
15 \r
16 /* COpenGLCacheHandler */\r
17 \r
18 COpenGLCacheHandler::COpenGLCacheHandler(COpenGLDriver* driver) :\r
19         COpenGLCoreCacheHandler<COpenGLDriver, COpenGLTexture>(driver), AlphaMode(GL_ALWAYS), AlphaRef(0.f), AlphaTest(false),\r
20         MatrixMode(GL_MODELVIEW), ClientActiveTexture(GL_TEXTURE0), ClientStateVertex(false),\r
21         ClientStateNormal(false), ClientStateColor(false), ClientStateTexCoord0(false)\r
22 {\r
23         // Initial OpenGL values from specification.\r
24 \r
25         glAlphaFunc(AlphaMode, AlphaRef);\r
26         glDisable(GL_ALPHA_TEST);\r
27 \r
28         glMatrixMode(MatrixMode);\r
29 \r
30         Driver->irrGlClientActiveTexture(ClientActiveTexture);\r
31 \r
32         glDisableClientState(GL_VERTEX_ARRAY);\r
33         glDisableClientState(GL_NORMAL_ARRAY);\r
34         glDisableClientState(GL_COLOR_ARRAY);\r
35         glDisableClientState(GL_TEXTURE_COORD_ARRAY);\r
36 }\r
37 \r
38 COpenGLCacheHandler::~COpenGLCacheHandler()\r
39 {\r
40 }\r
41 \r
42 void COpenGLCacheHandler::setAlphaFunc(GLenum mode, GLclampf ref)\r
43 {\r
44         if (AlphaMode != mode || AlphaRef != ref)\r
45         {\r
46                 glAlphaFunc(mode, ref);\r
47 \r
48                 AlphaMode = mode;\r
49                 AlphaRef = ref;\r
50         }\r
51 }\r
52 \r
53 void COpenGLCacheHandler::setAlphaTest(bool enable)\r
54 {\r
55         if (AlphaTest != enable)\r
56         {\r
57                 if (enable)\r
58                         glEnable(GL_ALPHA_TEST);\r
59                 else\r
60                         glDisable(GL_ALPHA_TEST);\r
61                 AlphaTest = enable;\r
62         }\r
63 }\r
64 \r
65 void COpenGLCacheHandler::setClientState(bool vertex, bool normal, bool color, bool texCoord0)\r
66 {\r
67         if (ClientStateVertex != vertex)\r
68         {\r
69                 if (vertex)\r
70                         glEnableClientState(GL_VERTEX_ARRAY);\r
71                 else\r
72                         glDisableClientState(GL_VERTEX_ARRAY);\r
73 \r
74                 ClientStateVertex = vertex;\r
75         }\r
76 \r
77         if (ClientStateNormal != normal)\r
78         {\r
79                 if (normal)\r
80                         glEnableClientState(GL_NORMAL_ARRAY);\r
81                 else\r
82                         glDisableClientState(GL_NORMAL_ARRAY);\r
83 \r
84                 ClientStateNormal = normal;\r
85         }\r
86 \r
87         if (ClientStateColor != color)\r
88         {\r
89                 if (color)\r
90                         glEnableClientState(GL_COLOR_ARRAY);\r
91                 else\r
92                         glDisableClientState(GL_COLOR_ARRAY);\r
93 \r
94                 ClientStateColor = color;\r
95         }\r
96 \r
97         if (ClientStateTexCoord0 != texCoord0)\r
98         {\r
99                 setClientActiveTexture(GL_TEXTURE0_ARB);\r
100 \r
101                 if (texCoord0)\r
102                         glEnableClientState(GL_TEXTURE_COORD_ARRAY);\r
103                 else\r
104                         glDisableClientState(GL_TEXTURE_COORD_ARRAY);\r
105 \r
106                 ClientStateTexCoord0 = texCoord0;\r
107         }\r
108 }\r
109 \r
110 void COpenGLCacheHandler::setMatrixMode(GLenum mode)\r
111 {\r
112         if (MatrixMode != mode)\r
113         {\r
114                 glMatrixMode(mode);\r
115                 MatrixMode = mode;\r
116         }\r
117 }\r
118 \r
119 void COpenGLCacheHandler::setClientActiveTexture(GLenum texture)\r
120 {\r
121         if (ClientActiveTexture != texture)\r
122         {\r
123                 Driver->irrGlClientActiveTexture(texture);\r
124                 ClientActiveTexture = texture;\r
125         }\r
126 }\r
127 \r
128 } // end namespace\r
129 } // end namespace\r
130 \r
131 #endif // _IRR_COMPILE_WITH_OPENGL_\r