]> git.lizzy.rs Git - irrlicht.git/blob - source/Irrlicht/COpenGLCommon.h
Merging r5975 through r6036 from trunk to ogl-es branch.
[irrlicht.git] / source / Irrlicht / COpenGLCommon.h
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 #ifndef __C_OPENGL_COMMON_H_INCLUDED__\r
6 #define __C_OPENGL_COMMON_H_INCLUDED__\r
7 \r
8 #include "IrrCompileConfig.h"\r
9 \r
10 #ifdef _IRR_COMPILE_WITH_OPENGL_\r
11 \r
12 #if defined(_IRR_WINDOWS_API_)\r
13         #define WIN32_LEAN_AND_MEAN\r
14         #include <windows.h>\r
15         #if defined(_IRR_OPENGL_USE_EXTPOINTER_)\r
16                 #define GL_GLEXT_LEGACY 1\r
17         #endif\r
18         #include <GL/gl.h>\r
19         #if defined(_IRR_OPENGL_USE_EXTPOINTER_)\r
20                 #include "glext.h"\r
21         #endif\r
22         #include "wglext.h"\r
23 \r
24         #ifdef _MSC_VER\r
25                 #pragma comment(lib, "OpenGL32.lib")\r
26         #endif\r
27 \r
28 #elif defined(_IRR_COMPILE_WITH_OSX_DEVICE_)\r
29         #if defined(_IRR_OPENGL_USE_EXTPOINTER_)\r
30                 #define GL_GLEXT_LEGACY 1\r
31         #endif\r
32         #include <OpenGL/gl.h>\r
33         #if defined(_IRR_OPENGL_USE_EXTPOINTER_)\r
34                 #include "glext.h"\r
35         #endif\r
36 #elif defined(_IRR_COMPILE_WITH_SDL_DEVICE_) && !defined(_IRR_COMPILE_WITH_X11_DEVICE_)\r
37         #if defined(_IRR_OPENGL_USE_EXTPOINTER_)\r
38                 #define GL_GLEXT_LEGACY 1\r
39                 #define GLX_GLXEXT_LEGACY 1\r
40         #else\r
41                 #define GL_GLEXT_PROTOTYPES 1\r
42                 #define GLX_GLXEXT_PROTOTYPES 1\r
43         #endif\r
44         #define NO_SDL_GLEXT\r
45         #include <SDL/SDL_video.h>\r
46         #include <SDL/SDL_opengl.h>\r
47         #include "glext.h"\r
48 #else\r
49         #if defined(_IRR_OPENGL_USE_EXTPOINTER_)\r
50                 #define GL_GLEXT_LEGACY 1\r
51                 #define GLX_GLXEXT_LEGACY 1\r
52         #else\r
53                 #define GL_GLEXT_PROTOTYPES 1\r
54                 #define GLX_GLXEXT_PROTOTYPES 1\r
55         #endif\r
56         #include <GL/gl.h>\r
57         #include <GL/glx.h>\r
58         #if defined(_IRR_OPENGL_USE_EXTPOINTER_)\r
59         #include "glext.h"\r
60         #undef GLX_ARB_get_proc_address\r
61         #include "glxext.h"\r
62         #endif\r
63 #endif\r
64 \r
65 #ifndef GL_ARB_shader_objects\r
66 typedef char GLcharARB;\r
67 typedef unsigned int GLhandleARB;\r
68 #endif\r
69 \r
70 #ifndef GL_VERSION_2_0\r
71 typedef char GLchar;\r
72 #endif\r
73 \r
74 // Blending definitions.\r
75 \r
76 #if !defined(GL_VERSION_1_4)\r
77 #if defined(GL_EXT_blend_subtract) || defined(GL_EXT_blend_minmax) || defined(GL_EXT_blend_logic_op)\r
78 #define GL_FUNC_ADD GL_FUNC_ADD_EXT\r
79 #else\r
80 #define GL_FUNC_ADD 0\r
81 #endif\r
82 #endif\r
83 \r
84 // FBO definitions.\r
85 \r
86 #if !defined(GL_VERSION_3_0) && !defined(GL_ARB_framebuffer_object)\r
87 #ifdef GL_EXT_framebuffer_object\r
88 #define GL_FRAMEBUFFER GL_FRAMEBUFFER_EXT\r
89 #define GL_COLOR_ATTACHMENT0 GL_COLOR_ATTACHMENT0_EXT\r
90 #define GL_DEPTH_ATTACHMENT GL_DEPTH_ATTACHMENT_EXT\r
91 #define GL_STENCIL_ATTACHMENT GL_STENCIL_ATTACHMENT_EXT\r
92 #define GL_FRAMEBUFFER_COMPLETE GL_FRAMEBUFFER_COMPLETE_EXT\r
93 #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT\r
94 #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT\r
95 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT\r
96 #define GL_FRAMEBUFFER_INCOMPLETE_FORMATS GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT\r
97 #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT\r
98 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT\r
99 #define GL_FRAMEBUFFER_UNSUPPORTED GL_FRAMEBUFFER_UNSUPPORTED_EXT\r
100 #else\r
101 #define GL_FRAMEBUFFER 0\r
102 #define GL_COLOR_ATTACHMENT0 0\r
103 #define GL_DEPTH_ATTACHMENT 0\r
104 #define GL_STENCIL_ATTACHMENT 0\r
105 #define GL_FRAMEBUFFER_COMPLETE 0\r
106 #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 1\r
107 #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 2\r
108 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 3\r
109 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 4\r
110 #define GL_FRAMEBUFFER_UNSUPPORTED 5\r
111 #endif\r
112 #endif\r
113 \r
114 #ifdef GL_EXT_framebuffer_object\r
115 #define GL_FRAMEBUFFER_INCOMPLETE_FORMATS GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT\r
116 #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT\r
117 #else\r
118 #define GL_FRAMEBUFFER_INCOMPLETE_FORMATS 6\r
119 #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 7\r
120 #endif\r
121 \r
122 // MipMaps definitions.\r
123 \r
124 #if !defined(GL_VERSION_1_4)\r
125 #ifdef GL_SGIS_generate_mipmap\r
126 #define GL_GENERATE_MIPMAP GL_GENERATE_MIPMAP_SGIS\r
127 #define GL_GENERATE_MIPMAP_HINT GL_GENERATE_MIPMAP_HINT_SGIS\r
128 #else\r
129 #define GL_GENERATE_MIPMAP 0\r
130 #define GL_GENERATE_MIPMAP_HINT 0\r
131 #endif\r
132 #endif\r
133 \r
134 // Texture definitions.\r
135 \r
136 #if !defined(GL_VERSION_1_3)\r
137 #ifdef GL_ARB_multitexture\r
138 #define GL_TEXTURE0 GL_TEXTURE0_ARB\r
139 #else\r
140 #define GL_TEXTURE0 0\r
141 #endif\r
142 #endif\r
143 \r
144 #if !defined(GL_VERSION_1_3)\r
145 #ifdef GL_ARB_texture_cube_map\r
146 #define GL_TEXTURE_CUBE_MAP GL_TEXTURE_CUBE_MAP_ARB\r
147 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB\r
148 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB\r
149 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB\r
150 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB\r
151 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB\r
152 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB\r
153 #elif defined(GL_EXT_texture_cube_map)\r
154 #define GL_TEXTURE_CUBE_MAP GL_TEXTURE_CUBE_MAP_EXT\r
155 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT\r
156 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT\r
157 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT\r
158 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT\r
159 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT\r
160 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT\r
161 #else\r
162 #define GL_TEXTURE_CUBE_MAP 0\r
163 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0\r
164 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0\r
165 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0\r
166 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0\r
167 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0\r
168 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0\r
169 #endif\r
170 #endif\r
171 \r
172 // To check if this header is in the current compile unit (different GL driver implementations use different "GLCommon" headers in Irrlicht)\r
173 #define IRR_COMPILE_GL_COMMON\r
174 \r
175 namespace irr\r
176 {\r
177 namespace video\r
178 {\r
179 \r
180         // Forward declarations.\r
181 \r
182         class COpenGLCoreFeature;\r
183 \r
184         template <class TOpenGLDriver>\r
185         class COpenGLCoreTexture;\r
186 \r
187         template <class TOpenGLDriver, class TOpenGLTexture>\r
188         class COpenGLCoreRenderTarget;\r
189 \r
190         template <class TOpenGLDriver, class TOpenGLTexture>\r
191         class COpenGLCoreCacheHandler;\r
192 \r
193         class COpenGLDriver;\r
194         typedef COpenGLCoreTexture<COpenGLDriver> COpenGLTexture;\r
195         typedef COpenGLCoreRenderTarget<COpenGLDriver, COpenGLTexture> COpenGLRenderTarget;\r
196         class COpenGLCacheHandler;\r
197 \r
198 }\r
199 }\r
200 \r
201 #endif\r
202 #endif\r