1 #ifndef OGLFUNC_H
2 #define OGLFUNC_H
3 
4 #if defined(_MSC_VER)
5 #include <windows.h>
6 #endif
7 
8 #include "SDL_version.h"
9 
10 #if defined(USE_OPENGL_ES)
11 #include "SDL_opengles2.h"
12 
13 // OpenGL compatibility
14 typedef GLclampf GLclampd;
15 typedef GLfloat GLdouble;
16 
17 #else
18 #include "SDL_opengl.h"
19 #endif
20 
21 #if !defined(GL_CLAMP_TO_EDGE)
22 // Originally added by GL_SGIS_texture_edge_clamp; part of OpenGL 1.2 core.
23 #define GL_CLAMP_TO_EDGE 0x812F
24 #endif
25 
26 #if !defined(APIENTRY)
27 #define APIENTRY
28 #endif
29 
30 // Base OpenGL / OpenGL ES
31 typedef void (APIENTRY *avpPFNGLACTIVETEXTUREPROC)(GLenum);
32 typedef void (APIENTRY *avpPFNGLBINDTEXTUREPROC)(GLenum, GLuint);
33 typedef void (APIENTRY *avpPFNGLBLENDFUNCPROC)(GLenum, GLenum);
34 typedef void (APIENTRY *avpPFNGLCLEARPROC)(GLbitfield);
35 typedef void (APIENTRY *avpPFNGLCLEARCOLORPROC)(GLclampf, GLclampf, GLclampf, GLclampf);
36 typedef void (APIENTRY *avpPFNGLCULLFACEPROC)(GLenum);
37 typedef void (APIENTRY *avpPFNGLDELETETEXTURESPROC)(GLsizei,const GLuint*);
38 typedef void (APIENTRY *avpPFNGLDEPTHFUNCPROC)(GLenum);
39 typedef void (APIENTRY *avpPFNGLDEPTHMASKPROC)(GLboolean);
40 typedef void (APIENTRY *avpPFNGLDEPTHRANGEPROC)(GLclampd, GLclampd);
41 typedef void (APIENTRY *avpPFNGLDISABLEPROC)(GLenum);
42 typedef void (APIENTRY *avpPFNGLDRAWELEMENTSPROC)(GLenum, GLsizei, GLenum, const GLvoid *);
43 typedef void (APIENTRY *avpPFNGLENABLEPROC)(GLenum);
44 typedef void (APIENTRY *avpPFNGLFRONTFACEPROC)(GLenum);
45 typedef void (APIENTRY *avpPFNGLGENTEXTURESPROC)(GLsizei,GLuint*);
46 typedef GLenum (APIENTRY *avpPFNGLGETERRORPROC)(void);
47 typedef void (APIENTRY *avpPFNGLGETFLOATVPROC)(GLenum, GLfloat *);
48 typedef void (APIENTRY *avpPFNGLGETINTEGERVPROC)(GLenum, GLint *);
49 typedef const GLubyte* (APIENTRY *avpPFNGLGETSTRINGPROC)(GLenum);
50 typedef void (APIENTRY *avpPFNGLGETTEXPARAMETERFVPROC)(GLenum, GLenum, GLfloat*);
51 typedef void (APIENTRY *avpPFNGLHINTPROC)(GLenum, GLenum);
52 typedef void (APIENTRY *avpPFNGLPIXELSTOREIPROC)(GLenum, GLint);
53 typedef void (APIENTRY *avpPFNGLPOLYGONOFFSETPROC)(GLfloat, GLfloat);
54 typedef void (APIENTRY *avpPFNGLREADPIXELSPROC)(GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoid *);
55 typedef void (APIENTRY *avpPFNGLTEXIMAGE2DPROC)(GLenum,GLint,GLint,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
56 typedef void (APIENTRY *avpPFNGLTEXPARAMETERFPROC)(GLenum, GLenum, GLfloat);
57 typedef void (APIENTRY *avpPFNGLTEXPARAMETERIPROC)(GLenum, GLenum, GLint);
58 typedef void (APIENTRY *avpPFNGLTEXSUBIMAGE2DPROC)(GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
59 typedef void (APIENTRY *avpPFNGLVIEWPORTPROC)(GLint, GLint, GLsizei, GLsizei);
60 
61 extern avpPFNGLACTIVETEXTUREPROC pglActiveTexture;
62 extern avpPFNGLBINDTEXTUREPROC		pglBindTexture;
63 extern avpPFNGLBLENDFUNCPROC		pglBlendFunc;
64 extern avpPFNGLCLEARPROC			pglClear;
65 extern avpPFNGLCLEARCOLORPROC		pglClearColor;
66 extern avpPFNGLCULLFACEPROC		pglCullFace;
67 extern avpPFNGLDELETETEXTURESPROC		pglDeleteTextures;
68 extern avpPFNGLDEPTHFUNCPROC		pglDepthFunc;
69 extern avpPFNGLDEPTHMASKPROC		pglDepthMask;
70 extern avpPFNGLDEPTHRANGEPROC		pglDepthRange;
71 extern avpPFNGLDISABLEPROC		pglDisable;
72 extern avpPFNGLDRAWELEMENTSPROC		pglDrawElements;
73 extern avpPFNGLENABLEPROC			pglEnable;
74 extern avpPFNGLFRONTFACEPROC		pglFrontFace;
75 extern avpPFNGLGENTEXTURESPROC		pglGenTextures;
76 extern avpPFNGLGETERRORPROC		pglGetError;
77 extern avpPFNGLGETFLOATVPROC		pglGetFloatv;
78 extern avpPFNGLGETINTEGERVPROC		pglGetIntegerv;
79 extern avpPFNGLGETSTRINGPROC		pglGetString;
80 extern avpPFNGLGETTEXPARAMETERFVPROC	pglGetTexParameterfv;
81 extern avpPFNGLHINTPROC			pglHint;
82 extern avpPFNGLPIXELSTOREIPROC		pglPixelStorei;
83 extern avpPFNGLPOLYGONOFFSETPROC		pglPolygonOffset;
84 extern avpPFNGLREADPIXELSPROC		pglReadPixels;
85 extern avpPFNGLTEXIMAGE2DPROC		pglTexImage2D;
86 extern avpPFNGLTEXPARAMETERFPROC		pglTexParameterf;
87 extern avpPFNGLTEXPARAMETERIPROC		pglTexParameteri;
88 extern avpPFNGLTEXSUBIMAGE2DPROC		pglTexSubImage2D;
89 extern avpPFNGLVIEWPORTPROC		pglViewport;
90 
91 // OpenGL 2.1 / OpenGL ES 2.0
92 typedef void (APIENTRY *avpPFNGLATTACHSHADERPROC)(GLuint, GLuint);
93 typedef void (APIENTRY *avpPFNGLBINDATTRIBLOCATIONPROC)(GLuint, GLuint, const GLchar*);
94 typedef void (APIENTRY *avpPFNGLBINDBUFFERPROC)(GLenum, GLuint);
95 typedef void (APIENTRY *avpPFNGLBUFFERDATAPROC)(GLenum, GLsizeiptr, const GLvoid*, GLenum);
96 typedef void (APIENTRY *avpPFNGLBUFFERSUBDATAPROC)(GLenum, GLintptr, GLsizeiptr, const GLvoid*);
97 typedef GLuint (APIENTRY *avpPFNGLCREATEPROGRAMPROC)(void);
98 typedef GLuint (APIENTRY *avpPFNGLCREATESHADERPROC)(GLenum);
99 typedef void (APIENTRY *avpPFNGLCOMPILESHADERPROC)(GLuint);
100 typedef void (APIENTRY *avpPFNGLDELETEBUFFERSPROC)(GLsizei, const GLuint*);
101 typedef void (APIENTRY *avpPFNGLDELETEPROGRAMPROC)(GLuint);
102 typedef void (APIENTRY *avpPFNGLDELETESHADERPROC)(GLuint);
103 typedef void (APIENTRY *avpPFNGLDISABLEVERTEXATTRIBARRAYPROC)(GLuint);
104 typedef void (APIENTRY *avpPFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint);
105 typedef void (APIENTRY *avpPFNGLGENBUFFERSPROC)(GLsizei, GLuint*);
106 typedef int (APIENTRY *avpPFNGLGETATTRIBLOCATIONPROC)(GLuint, const GLchar*);
107 typedef void (APIENTRY *avpPFNGLGETPROGRAMINFOLOGPROC)(GLuint, GLsizei, GLsizei*, GLchar*);
108 typedef void (APIENTRY *avpPFNGLGETPROGRAMIVPROC)(GLuint, GLenum, GLint*);
109 typedef void (APIENTRY *avpPFNGLGETSHADERINFOLOGPROC)(GLuint, GLsizei, GLsizei*, GLchar*);
110 typedef void (APIENTRY *avpPFNGLGETSHADERIVPROC)(GLuint, GLenum, GLint*);
111 typedef int (APIENTRY *avpPFNGLGETUNIFORMLOCATIONPROC)(GLuint, const GLchar*);
112 typedef void (APIENTRY *avpPFNGLLINKPROGRAMPROC)(GLuint);
113 typedef void (APIENTRY *avpPFNGLSHADERSOURCEPROC)(GLuint, GLsizei, const GLchar* const*, const GLint*);
114 typedef void (APIENTRY *avpPFNGLVALIDATEPROGRAMPROC)(GLuint);
115 typedef void (APIENTRY *avpPFNGLVERTEXATTRIBPOINTERPROC)(GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid*);
116 typedef void (APIENTRY *avpPFNGLUNIFORM1IPROC)(GLint, GLint);
117 typedef void (APIENTRY *avpPFNGLUNIFORMMATRIX4FVPROC)(GLint, GLsizei, GLboolean, const GLfloat*);
118 typedef void (APIENTRY *avpPFNGLUSEPROGRAMPROC)(GLuint);
119 
120 extern avpPFNGLATTACHSHADERPROC pglAttachShader;
121 extern avpPFNGLBINDATTRIBLOCATIONPROC pglBindAttribLocation;
122 extern avpPFNGLBINDBUFFERPROC pglBindBuffer;
123 extern avpPFNGLBUFFERDATAPROC pglBufferData;
124 extern avpPFNGLBUFFERSUBDATAPROC pglBufferSubData;
125 extern avpPFNGLCREATEPROGRAMPROC pglCreateProgram;
126 extern avpPFNGLCREATESHADERPROC pglCreateShader;
127 extern avpPFNGLCOMPILESHADERPROC pglCompileShader;
128 extern avpPFNGLDELETEBUFFERSPROC pglDeleteBuffers;
129 extern avpPFNGLDELETEPROGRAMPROC pglDeleteProgram;
130 extern avpPFNGLDELETESHADERPROC pglDeleteShader;
131 extern avpPFNGLDISABLEVERTEXATTRIBARRAYPROC pglDisableVertexAttribArray;
132 extern avpPFNGLENABLEVERTEXATTRIBARRAYPROC pglEnableVertexAttribArray;
133 extern avpPFNGLGENBUFFERSPROC pglGenBuffers;
134 extern avpPFNGLGETATTRIBLOCATIONPROC pglGetAttribLocation;
135 extern avpPFNGLGETPROGRAMINFOLOGPROC pglGetProgramInfoLog;
136 extern avpPFNGLGETPROGRAMIVPROC pglGetProgramiv;
137 extern avpPFNGLGETSHADERINFOLOGPROC pglGetShaderInfoLog;
138 extern avpPFNGLGETSHADERIVPROC pglGetShaderiv;
139 extern avpPFNGLGETUNIFORMLOCATIONPROC pglGetUniformLocation;
140 extern avpPFNGLLINKPROGRAMPROC pglLinkProgram;
141 extern avpPFNGLSHADERSOURCEPROC pglShaderSource;
142 extern avpPFNGLVALIDATEPROGRAMPROC pglValidateProgram;
143 extern avpPFNGLVERTEXATTRIBPOINTERPROC pglVertexAttribPointer;
144 extern avpPFNGLUNIFORM1IPROC pglUniform1i;
145 extern avpPFNGLUNIFORMMATRIX4FVPROC pglUniformMatrix4fv;
146 extern avpPFNGLUSEPROGRAMPROC pglUseProgram;
147 
148 // GL_EXT_framebuffer_object / GL_ARB_framebuffer_object / OpenGL ES 2.0
149 typedef void (APIENTRY *avpPFNGLBINDFRAMEBUFFERPROC)(GLenum, GLuint);
150 typedef void (APIENTRY *avpPFNGLBINDRENDERBUFFERPROC)(GLenum, GLuint);
151 typedef GLenum (APIENTRY *avpPFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum);
152 typedef void (APIENTRY *avpPFNGLDELETEFRAMEBUFFERSPROC)(GLsizei, const GLuint*);
153 typedef void (APIENTRY *avpPFNGLDELETERENDERBUFFERSPROC)(GLsizei, const GLuint*);
154 typedef void (APIENTRY *avpPFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum, GLenum, GLenum, GLuint);
155 typedef void (APIENTRY *avpPFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum, GLenum, GLenum, GLuint, GLint);
156 typedef void (APIENTRY *avpPFNGLGENERATEMIPMAPPROC)(GLenum);
157 typedef void (APIENTRY *avpPFNGLGENFRAMEBUFFERSPROC)(GLsizei, GLuint*);
158 typedef void (APIENTRY *avpPFNGLGENRENDERBUFFERSPROC)(GLsizei, GLuint*);
159 typedef void (APIENTRY *avpPFNGLRENDERBUFFERSTORAGEPROC)(GLenum, GLenum, GLsizei, GLsizei);
160 
161 extern avpPFNGLBINDFRAMEBUFFERPROC pglBindFramebuffer;
162 extern avpPFNGLBINDRENDERBUFFERPROC pglBindRenderbuffer;
163 extern avpPFNGLCHECKFRAMEBUFFERSTATUSPROC pglCheckFramebufferStatus;
164 extern avpPFNGLDELETEFRAMEBUFFERSPROC pglDeleteFramebuffers;
165 extern avpPFNGLDELETERENDERBUFFERSPROC pglDeleteRenderbuffers;
166 extern avpPFNGLFRAMEBUFFERRENDERBUFFERPROC pglFramebufferRenderbuffer;
167 extern avpPFNGLFRAMEBUFFERTEXTURE2DPROC pglFramebufferTexture2D;
168 extern avpPFNGLGENERATEMIPMAPPROC pglGenerateMipmap;
169 extern avpPFNGLGENFRAMEBUFFERSPROC pglGenFramebuffers;
170 extern avpPFNGLGENRENDERBUFFERSPROC pglGenRenderbuffers;
171 extern avpPFNGLRENDERBUFFERSTORAGEPROC pglRenderbufferStorage;
172 
173 
174 extern int ogl_have_multisample_filter_hint;
175 extern int ogl_have_texture_filter_anisotropic;
176 extern int ogl_have_framebuffer_object;
177 
178 extern int ogl_use_multisample_filter_hint;
179 extern int ogl_use_texture_filter_anisotropic;
180 extern int ogl_use_framebuffer_object;
181 
182 extern void load_ogl_functions(int mode);
183 
184 extern int check_for_errors_(const char *file, int line);
185 #define check_for_errors() check_for_errors_(__FILE__, __LINE__)
186 
187 #endif
188