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