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
5 #ifndef __C_OPENGL_COMMON_H_INCLUDED__
\r
6 #define __C_OPENGL_COMMON_H_INCLUDED__
\r
8 #include "IrrCompileConfig.h"
\r
10 #ifdef _IRR_COMPILE_WITH_OPENGL_
\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
19 #if defined(_IRR_OPENGL_USE_EXTPOINTER_)
\r
20 #include <GL/glext.h>
\r
22 #include <GL/wglext.h>
\r
25 #pragma comment(lib, "OpenGL32.lib")
\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
32 #include <OpenGL/gl.h>
\r
33 #if defined(_IRR_OPENGL_USE_EXTPOINTER_)
\r
34 #include <GL/glext.h>
\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
41 #define GL_GLEXT_PROTOTYPES 1
\r
42 #define GLX_GLXEXT_PROTOTYPES 1
\r
44 #include <SDL/SDL_video.h>
\r
45 #include <SDL/SDL_opengl.h>
\r
47 #if defined(_IRR_OPENGL_USE_EXTPOINTER_)
\r
48 #define GL_GLEXT_LEGACY 1
\r
49 #define GLX_GLXEXT_LEGACY 1
\r
51 #define GL_GLEXT_PROTOTYPES 1
\r
52 #define GLX_GLXEXT_PROTOTYPES 1
\r
56 #if defined(_IRR_OPENGL_USE_EXTPOINTER_)
\r
57 #include <GL/glext.h>
\r
58 #include <GL/glxext.h>
\r
62 #ifndef GL_ARB_shader_objects
\r
63 typedef char GLcharARB;
\r
64 typedef unsigned int GLhandleARB;
\r
67 #ifndef GL_VERSION_2_0
\r
68 typedef char GLchar;
\r
71 // Blending definitions.
\r
73 #if !defined(GL_VERSION_1_4)
\r
74 #if defined(GL_EXT_blend_subtract) || defined(GL_EXT_blend_minmax) || defined(GL_EXT_blend_logic_op)
\r
75 #define GL_FUNC_ADD GL_FUNC_ADD_EXT
\r
77 #define GL_FUNC_ADD 0
\r
83 #if !defined(GL_VERSION_3_0) && !defined(GL_ARB_framebuffer_object)
\r
84 #ifdef GL_EXT_framebuffer_object
\r
85 #define GL_FRAMEBUFFER GL_FRAMEBUFFER_EXT
\r
86 #define GL_COLOR_ATTACHMENT0 GL_COLOR_ATTACHMENT0_EXT
\r
87 #define GL_DEPTH_ATTACHMENT GL_DEPTH_ATTACHMENT_EXT
\r
88 #define GL_STENCIL_ATTACHMENT GL_STENCIL_ATTACHMENT_EXT
\r
89 #define GL_FRAMEBUFFER_COMPLETE GL_FRAMEBUFFER_COMPLETE_EXT
\r
90 #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT
\r
91 #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT
\r
92 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT
\r
93 #define GL_FRAMEBUFFER_INCOMPLETE_FORMATS GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT
\r
94 #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT
\r
95 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT
\r
96 #define GL_FRAMEBUFFER_UNSUPPORTED GL_FRAMEBUFFER_UNSUPPORTED_EXT
\r
98 #define GL_FRAMEBUFFER 0
\r
99 #define GL_COLOR_ATTACHMENT0 0
\r
100 #define GL_DEPTH_ATTACHMENT 0
\r
101 #define GL_STENCIL_ATTACHMENT 0
\r
102 #define GL_FRAMEBUFFER_COMPLETE 0
\r
103 #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 1
\r
104 #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 2
\r
105 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 3
\r
106 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 4
\r
107 #define GL_FRAMEBUFFER_UNSUPPORTED 5
\r
111 #ifdef GL_EXT_framebuffer_object
\r
112 #define GL_FRAMEBUFFER_INCOMPLETE_FORMATS GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT
\r
113 #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT
\r
115 #define GL_FRAMEBUFFER_INCOMPLETE_FORMATS 6
\r
116 #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 7
\r
119 // MipMaps definitions.
\r
121 #if !defined(GL_VERSION_1_4)
\r
122 #ifdef GL_SGIS_generate_mipmap
\r
123 #define GL_GENERATE_MIPMAP GL_GENERATE_MIPMAP_SGIS
\r
124 #define GL_GENERATE_MIPMAP_HINT GL_GENERATE_MIPMAP_HINT_SGIS
\r
126 #define GL_GENERATE_MIPMAP 0
\r
127 #define GL_GENERATE_MIPMAP_HINT 0
\r
131 // Texture definitions.
\r
133 #if !defined(GL_VERSION_1_3)
\r
134 #ifdef GL_ARB_multitexture
\r
135 #define GL_TEXTURE0 GL_TEXTURE0_ARB
\r
137 #define GL_TEXTURE0 0
\r
141 #if !defined(GL_VERSION_1_3)
\r
142 #ifdef GL_ARB_texture_cube_map
\r
143 #define GL_TEXTURE_CUBE_MAP GL_TEXTURE_CUBE_MAP_ARB
\r
144 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB
\r
145 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB
\r
146 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB
\r
147 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB
\r
148 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB
\r
149 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB
\r
150 #elif defined(GL_EXT_texture_cube_map)
\r
151 #define GL_TEXTURE_CUBE_MAP GL_TEXTURE_CUBE_MAP_EXT
\r
152 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT
\r
153 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT
\r
154 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT
\r
155 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT
\r
156 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT
\r
157 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT
\r
159 #define GL_TEXTURE_CUBE_MAP 0
\r
160 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0
\r
161 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0
\r
162 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0
\r
163 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0
\r
164 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0
\r
165 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0
\r
169 // To check if this header is in the current compile unit (different GL driver implementations use different "GLCommon" headers in Irrlicht)
\r
170 #define IRR_COMPILE_GL_COMMON
\r
177 // Forward declarations.
\r
179 class COpenGLCoreFeature;
\r
181 template <class TOpenGLDriver>
\r
182 class COpenGLCoreTexture;
\r
184 template <class TOpenGLDriver, class TOpenGLTexture>
\r
185 class COpenGLCoreRenderTarget;
\r
187 template <class TOpenGLDriver, class TOpenGLTexture>
\r
188 class COpenGLCoreCacheHandler;
\r
190 class COpenGLDriver;
\r
191 typedef COpenGLCoreTexture<COpenGLDriver> COpenGLTexture;
\r
192 typedef COpenGLCoreRenderTarget<COpenGLDriver, COpenGLTexture> COpenGLRenderTarget;
\r
193 class COpenGLCacheHandler;
\r