#include "utils/logger.h" #include "render/gl_shared.h" #include "render/render_shared.h" #include "render/render.h" HDC hDC = NULL; HGLRC hRC = NULL; const char *GL_ErrorString( int err ) { switch( err ) { case GL_STACK_OVERFLOW: return "GL_STACK_OVERFLOW"; case GL_STACK_UNDERFLOW: return "GL_STACK_UNDERFLOW"; case GL_INVALID_ENUM: return "GL_INVALID_ENUM"; case GL_INVALID_VALUE: return "GL_INVALID_VALUE"; case GL_INVALID_OPERATION: return "GL_INVALID_OPERATION"; case GL_OUT_OF_MEMORY: return "GL_OUT_OF_MEMORY"; default: return "UNKNOWN ERROR"; } } void GL_CheckError() { GLenum err; if ( (err = glGetError()) != GL_NO_ERROR ) LogMsg( "OpenGL Error: %s", GL_ErrorString( err ) );// Msg("OpenGL Error: %s [%s]\n", GL_ErrorString(err), GL_TargetToString(tex->target)); } void GL_CheckErrorEx( const char* filename, int line ) { GLenum err; if ( (err = glGetError()) != GL_NO_ERROR ) LogMsg( "OpenGL Error: %s at %s:%i", GL_ErrorString( err ), filename, line );// Msg("OpenGL Error: %s [%s]\n", GL_ErrorString(err), GL_TargetToString(tex->target)); } void GL_CheckErrorFunction(const char* expression, const char* filename, int line) { GLenum err; if ( (err = glGetError()) != GL_NO_ERROR ) LogMsg( "OpenGL Error: %s (%s) at %s:%i", expression, GL_ErrorString( err ), filename, line );// Msg("OpenGL Error: %s [%s]\n", GL_ErrorString(err), GL_TargetToString(tex->target)); } void GL_SetTexture( int slot, uint texture ) { } uint GetGLBlendFactor(BlendFactor factor) { switch (factor) { case BF_ZERO: return GL_ZERO; case BF_ONE: return GL_ONE; case BF_SRC_COLOR: return GL_SRC_COLOR; case BF_ONE_MINUS_SRC_COLOR: return GL_ONE_MINUS_SRC_COLOR; case BF_DST_COLOR: return GL_DST_COLOR; case BF_ONE_MINUS_DST_COLOR: return GL_ONE_MINUS_DST_COLOR; case BF_SRC_ALPHA: return GL_SRC_ALPHA; case BF_ONE_MINUS_SRC_ALPHA: return GL_ONE_MINUS_SRC_ALPHA; case BF_DST_ALPHA: return GL_DST_ALPHA; case BF_ONE_MINUS_DST_ALPHA: return GL_ONE_MINUS_DST_ALPHA; case BF_CONSTANT_COLOR: return GL_CONSTANT_COLOR; case BF_ONE_MINUS_CONSTANT_COLOR: return GL_ONE_MINUS_CONSTANT_COLOR; case BF_CONSTANT_ALPHA: return GL_CONSTANT_ALPHA; case BF_ONE_MINUS_CONSTANT_ALPHA: return GL_ONE_MINUS_CONSTANT_ALPHA; default: break; } return 0; } GLint GetGlWrap(TextureWrap wrap) { GLint param = 0; if (wrap == TW_REPEAT) param = GL_REPEAT; else if (wrap == TW_MIRRORED_REPEAT) param = GL_MIRRORED_REPEAT; else if (wrap == TW_CLAMP_TO_EDGE) param = GL_CLAMP_TO_EDGE; else if (wrap == TW_CLAMP_TO_BORDER) param = GL_CLAMP_TO_BORDER; return param; } GLint GetGlTexFilter(TextureFilter filter) { GLint param = 0; if (filter == TF_LINEAR) param = GL_LINEAR; else if (filter == TF_NEAREST) param = GL_NEAREST; else if (filter == TF_LINEAR_MIPMAP_LINEAR) param = GL_LINEAR_MIPMAP_LINEAR; else if (filter == TF_LINEAR_MIPMAP_NEAREST) param = GL_LINEAR_MIPMAP_NEAREST; else if (filter == TF_NEAREST_MIPMAP_LINEAR) param = GL_NEAREST_MIPMAP_LINEAR; else if (filter == TF_NEAREST_MIPMAP_NEAREST) param = GL_NEAREST_MIPMAP_NEAREST; return param; } uint GetGLPF(PixelFormat pf) { return 0; //return uint32_t(); } // Kirill: Remove to render_main.cpp or something else uint GetGLInternalPF(PixelFormat pf) { switch (pf) { case PF_UNKNOWN: return 0; case PF_R8G8B8: case PF_R8G8B8F: return GL_RGB; case PF_R8G8B8A8: case PF_R8G8B8A8F: return GL_RGBA; } return 0; } uint GetGLTypePF(PixelFormat pf) { switch (pf) { case PF_UNKNOWN: return 0; case PF_R8G8B8: case PF_R8G8B8A8: return GL_UNSIGNED_BYTE; case PF_R8G8B8F: case PF_R8G8B8A8F: return GL_FLOAT; } return 0; } #define LOAD_GL_FUNC(functype, funcname) \ { \ funcname = (functype)wglGetProcAddress(#funcname); \ if (funcname == NULL) \ LogMsg("Failed to load %s", #funcname); \ } bool GL_CheckExtensions(const char* name) { const char* extensions = (const char*)glGetString(GL_EXTENSIONS); if (strstr(extensions, name)) { LogMsg("Found: %s", name); return true; } LogMsg("Not found: %s", name); return false; } void GL_CreateContext() { // create opengl context PIXELFORMATDESCRIPTOR pfd; int iFormat; HWND hWnd = (HWND)R_GetWindow(); /* get the device context (DC) */ hDC = GetDC(hWnd); /* set the pixel format for the DC */ ZeroMemory(&pfd, sizeof(pfd)); pfd.nSize = sizeof(pfd); pfd.nVersion = 1; pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; pfd.iPixelType = PFD_TYPE_RGBA; pfd.cColorBits = 24; pfd.cDepthBits = 16; pfd.iLayerType = PFD_MAIN_PLANE; iFormat = ChoosePixelFormat(hDC, &pfd); SetPixelFormat(hDC, iFormat, &pfd); LogMsg("SetPixelFormat successful"); /* create and enable the render context (RC) */ hRC = wglCreateContext(hDC); LogMsg("wglCreateContext successful"); wglMakeCurrent(hDC, hRC); } void GL_Load() { GL_CreateContext(); const char* vendor_string = (const char*)glGetString(GL_VENDOR); const char* renderer_string = (const char*)glGetString(GL_RENDERER); const char* version_string = (const char*)glGetString(GL_VERSION); const char* extensions_string = (const char*)glGetString(GL_EXTENSIONS); LogMsg("GL_VENDOR: %s", vendor_string); LogMsg("GL_RENDERER: %s", renderer_string); LogMsg("GL_VERSION: %s", version_string); if (strlen(extensions_string) >= 2048) LogMsg("GL_EXTENSIONS: cannot print, too long string"); else LogMsg("GL_EXTENSIONS: %s", extensions_string); // OpenGL 1.3 LOAD_GL_FUNC( PFNGLACTIVETEXTUREPROC, glActiveTexture); LOAD_GL_FUNC( PFNGLSAMPLECOVERAGEPROC, glSampleCoverage); LOAD_GL_FUNC( PFNGLCOMPRESSEDTEXIMAGE3DPROC, glCompressedTexImage3D); LOAD_GL_FUNC( PFNGLCOMPRESSEDTEXIMAGE2DPROC, glCompressedTexImage2D); LOAD_GL_FUNC( PFNGLCOMPRESSEDTEXIMAGE1DPROC, glCompressedTexImage1D); LOAD_GL_FUNC( PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC, glCompressedTexSubImage3D); LOAD_GL_FUNC( PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC, glCompressedTexSubImage2D); LOAD_GL_FUNC( PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC, glCompressedTexSubImage1D); LOAD_GL_FUNC( PFNGLGETCOMPRESSEDTEXIMAGEPROC, glGetCompressedTexImage); LOAD_GL_FUNC( PFNGLCLIENTACTIVETEXTUREPROC, glClientActiveTexture); LOAD_GL_FUNC( PFNGLMULTITEXCOORD1DPROC, glMultiTexCoord1d); LOAD_GL_FUNC( PFNGLMULTITEXCOORD1DVPROC, glMultiTexCoord1dv); LOAD_GL_FUNC( PFNGLMULTITEXCOORD1FPROC, glMultiTexCoord1f); LOAD_GL_FUNC( PFNGLMULTITEXCOORD1FVPROC, glMultiTexCoord1fv); LOAD_GL_FUNC( PFNGLMULTITEXCOORD1IPROC, glMultiTexCoord1i); LOAD_GL_FUNC( PFNGLMULTITEXCOORD1IVPROC, glMultiTexCoord1iv); LOAD_GL_FUNC( PFNGLMULTITEXCOORD1SPROC, glMultiTexCoord1s); LOAD_GL_FUNC( PFNGLMULTITEXCOORD1SVPROC, glMultiTexCoord1sv); LOAD_GL_FUNC( PFNGLMULTITEXCOORD2DPROC, glMultiTexCoord2d); LOAD_GL_FUNC( PFNGLMULTITEXCOORD2DVPROC, glMultiTexCoord2dv); LOAD_GL_FUNC( PFNGLMULTITEXCOORD2FPROC, glMultiTexCoord2f); LOAD_GL_FUNC( PFNGLMULTITEXCOORD2FVPROC, glMultiTexCoord2fv); LOAD_GL_FUNC( PFNGLMULTITEXCOORD2IPROC, glMultiTexCoord2i); LOAD_GL_FUNC( PFNGLMULTITEXCOORD2IVPROC, glMultiTexCoord2iv); LOAD_GL_FUNC( PFNGLMULTITEXCOORD2SPROC, glMultiTexCoord2s); LOAD_GL_FUNC( PFNGLMULTITEXCOORD2SVPROC, glMultiTexCoord2sv); LOAD_GL_FUNC( PFNGLMULTITEXCOORD3DPROC, glMultiTexCoord3d); LOAD_GL_FUNC( PFNGLMULTITEXCOORD3DVPROC, glMultiTexCoord3dv); LOAD_GL_FUNC( PFNGLMULTITEXCOORD3FPROC, glMultiTexCoord3f); LOAD_GL_FUNC( PFNGLMULTITEXCOORD3FVPROC, glMultiTexCoord3fv); LOAD_GL_FUNC( PFNGLMULTITEXCOORD3IPROC, glMultiTexCoord3i); LOAD_GL_FUNC( PFNGLMULTITEXCOORD3IVPROC, glMultiTexCoord3iv); LOAD_GL_FUNC( PFNGLMULTITEXCOORD3SPROC, glMultiTexCoord3s); LOAD_GL_FUNC( PFNGLMULTITEXCOORD3SVPROC, glMultiTexCoord3sv); LOAD_GL_FUNC( PFNGLMULTITEXCOORD4DPROC, glMultiTexCoord4d); LOAD_GL_FUNC( PFNGLMULTITEXCOORD4DVPROC, glMultiTexCoord4dv); LOAD_GL_FUNC( PFNGLMULTITEXCOORD4FPROC, glMultiTexCoord4f); LOAD_GL_FUNC( PFNGLMULTITEXCOORD4FVPROC, glMultiTexCoord4fv); LOAD_GL_FUNC( PFNGLMULTITEXCOORD4IPROC, glMultiTexCoord4i); LOAD_GL_FUNC( PFNGLMULTITEXCOORD4IVPROC, glMultiTexCoord4iv); LOAD_GL_FUNC( PFNGLMULTITEXCOORD4SPROC, glMultiTexCoord4s); LOAD_GL_FUNC( PFNGLMULTITEXCOORD4SVPROC, glMultiTexCoord4sv); LOAD_GL_FUNC( PFNGLLOADTRANSPOSEMATRIXFPROC, glLoadTransposeMatrixf); LOAD_GL_FUNC( PFNGLLOADTRANSPOSEMATRIXDPROC, glLoadTransposeMatrixd); LOAD_GL_FUNC( PFNGLMULTTRANSPOSEMATRIXFPROC, glMultTransposeMatrixf); LOAD_GL_FUNC( PFNGLMULTTRANSPOSEMATRIXDPROC, glMultTransposeMatrixd); // OpenGL 1.5 LOAD_GL_FUNC(PFNGLGENQUERIESPROC, glGenQueries); LOAD_GL_FUNC(PFNGLDELETEQUERIESPROC, glDeleteQueries); LOAD_GL_FUNC(PFNGLISQUERYPROC, glIsQuery); LOAD_GL_FUNC(PFNGLBEGINQUERYPROC, glBeginQuery); LOAD_GL_FUNC(PFNGLENDQUERYPROC, glEndQuery); LOAD_GL_FUNC(PFNGLGETQUERYIVPROC, glGetQueryiv); LOAD_GL_FUNC(PFNGLGETQUERYOBJECTIVPROC, glGetQueryObjectiv); LOAD_GL_FUNC(PFNGLGETQUERYOBJECTUIVPROC, glGetQueryObjectuiv); LOAD_GL_FUNC(PFNGLBINDBUFFERPROC, glBindBuffer); LOAD_GL_FUNC(PFNGLDELETEBUFFERSPROC, glDeleteBuffers); LOAD_GL_FUNC(PFNGLGENBUFFERSPROC, glGenBuffers); LOAD_GL_FUNC(PFNGLISBUFFERPROC, glIsBuffer); LOAD_GL_FUNC(PFNGLBUFFERDATAPROC, glBufferData); LOAD_GL_FUNC(PFNGLBUFFERSUBDATAPROC, glBufferSubData); LOAD_GL_FUNC(PFNGLGETBUFFERSUBDATAPROC, glGetBufferSubData); LOAD_GL_FUNC(PFNGLMAPBUFFERPROC, glMapBuffer); LOAD_GL_FUNC(PFNGLUNMAPBUFFERPROC, glUnmapBuffer); LOAD_GL_FUNC(PFNGLGETBUFFERPARAMETERIVPROC, glGetBufferParameteriv); LOAD_GL_FUNC(PFNGLGETBUFFERPOINTERVPROC, glGetBufferPointerv); // OpenGL 2.0 LOAD_GL_FUNC(PFNGLBLENDEQUATIONSEPARATEPROC, glBlendEquationSeparate); LOAD_GL_FUNC(PFNGLDRAWBUFFERSPROC, glDrawBuffers); LOAD_GL_FUNC(PFNGLSTENCILOPSEPARATEPROC, glStencilOpSeparate); LOAD_GL_FUNC(PFNGLSTENCILFUNCSEPARATEPROC, glStencilFuncSeparate); LOAD_GL_FUNC(PFNGLSTENCILMASKSEPARATEPROC, glStencilMaskSeparate); LOAD_GL_FUNC(PFNGLATTACHSHADERPROC, glAttachShader); LOAD_GL_FUNC(PFNGLBINDATTRIBLOCATIONPROC, glBindAttribLocation); LOAD_GL_FUNC(PFNGLCOMPILESHADERPROC, glCompileShader); LOAD_GL_FUNC(PFNGLCREATEPROGRAMPROC, glCreateProgram); LOAD_GL_FUNC(PFNGLCREATESHADERPROC, glCreateShader); LOAD_GL_FUNC(PFNGLDELETEPROGRAMPROC, glDeleteProgram); LOAD_GL_FUNC(PFNGLDELETESHADERPROC, glDeleteShader); LOAD_GL_FUNC(PFNGLDETACHSHADERPROC, glDetachShader); LOAD_GL_FUNC(PFNGLDISABLEVERTEXATTRIBARRAYPROC, glDisableVertexAttribArray); LOAD_GL_FUNC(PFNGLENABLEVERTEXATTRIBARRAYPROC, glEnableVertexAttribArray); LOAD_GL_FUNC(PFNGLGETACTIVEATTRIBPROC, glGetActiveAttrib); LOAD_GL_FUNC(PFNGLGETACTIVEUNIFORMPROC, glGetActiveUniform); LOAD_GL_FUNC(PFNGLGETATTACHEDSHADERSPROC, glGetAttachedShaders); LOAD_GL_FUNC(PFNGLGETATTRIBLOCATIONPROC, glGetAttribLocation); LOAD_GL_FUNC(PFNGLGETPROGRAMIVPROC, glGetProgramiv); LOAD_GL_FUNC(PFNGLGETPROGRAMINFOLOGPROC, glGetProgramInfoLog); LOAD_GL_FUNC(PFNGLGETSHADERIVPROC, glGetShaderiv); LOAD_GL_FUNC(PFNGLGETSHADERINFOLOGPROC, glGetShaderInfoLog); LOAD_GL_FUNC(PFNGLGETSHADERSOURCEPROC, glGetShaderSource); LOAD_GL_FUNC(PFNGLGETUNIFORMLOCATIONPROC, glGetUniformLocation); LOAD_GL_FUNC(PFNGLGETUNIFORMFVPROC, glGetUniformfv); LOAD_GL_FUNC(PFNGLGETUNIFORMIVPROC, glGetUniformiv); LOAD_GL_FUNC(PFNGLGETVERTEXATTRIBDVPROC, glGetVertexAttribdv); LOAD_GL_FUNC(PFNGLGETVERTEXATTRIBFVPROC, glGetVertexAttribfv); LOAD_GL_FUNC(PFNGLGETVERTEXATTRIBIVPROC, glGetVertexAttribiv); LOAD_GL_FUNC(PFNGLGETVERTEXATTRIBPOINTERVPROC, glGetVertexAttribPointerv); LOAD_GL_FUNC(PFNGLISPROGRAMPROC, glIsProgram); LOAD_GL_FUNC(PFNGLISSHADERPROC, glIsShader); LOAD_GL_FUNC(PFNGLLINKPROGRAMPROC, glLinkProgram); LOAD_GL_FUNC(PFNGLSHADERSOURCEPROC, glShaderSource); LOAD_GL_FUNC(PFNGLUSEPROGRAMPROC, glUseProgram); LOAD_GL_FUNC(PFNGLUNIFORM1FPROC, glUniform1f); LOAD_GL_FUNC(PFNGLUNIFORM2FPROC, glUniform2f); LOAD_GL_FUNC(PFNGLUNIFORM3FPROC, glUniform3f); LOAD_GL_FUNC(PFNGLUNIFORM4FPROC, glUniform4f); LOAD_GL_FUNC(PFNGLUNIFORM1IPROC, glUniform1i); LOAD_GL_FUNC(PFNGLUNIFORM2IPROC, glUniform2i); LOAD_GL_FUNC(PFNGLUNIFORM3IPROC, glUniform3i); LOAD_GL_FUNC(PFNGLUNIFORM4IPROC, glUniform4i); LOAD_GL_FUNC(PFNGLUNIFORM1FVPROC, glUniform1fv); LOAD_GL_FUNC(PFNGLUNIFORM2FVPROC, glUniform2fv); LOAD_GL_FUNC(PFNGLUNIFORM3FVPROC, glUniform3fv); LOAD_GL_FUNC(PFNGLUNIFORM4FVPROC, glUniform4fv); LOAD_GL_FUNC(PFNGLUNIFORM1IVPROC, glUniform1iv); LOAD_GL_FUNC(PFNGLUNIFORM2IVPROC, glUniform2iv); LOAD_GL_FUNC(PFNGLUNIFORM3IVPROC, glUniform3iv); LOAD_GL_FUNC(PFNGLUNIFORM4IVPROC, glUniform4iv); LOAD_GL_FUNC(PFNGLUNIFORMMATRIX2FVPROC, glUniformMatrix2fv); LOAD_GL_FUNC(PFNGLUNIFORMMATRIX3FVPROC, glUniformMatrix3fv); LOAD_GL_FUNC(PFNGLUNIFORMMATRIX4FVPROC, glUniformMatrix4fv); LOAD_GL_FUNC(PFNGLVALIDATEPROGRAMPROC, glValidateProgram); LOAD_GL_FUNC(PFNGLVERTEXATTRIB1DPROC, glVertexAttrib1d); LOAD_GL_FUNC(PFNGLVERTEXATTRIB1DVPROC, glVertexAttrib1dv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB1FPROC, glVertexAttrib1f); LOAD_GL_FUNC(PFNGLVERTEXATTRIB1FVPROC, glVertexAttrib1fv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB1SPROC, glVertexAttrib1s); LOAD_GL_FUNC(PFNGLVERTEXATTRIB1SVPROC, glVertexAttrib1sv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB2DPROC, glVertexAttrib2d); LOAD_GL_FUNC(PFNGLVERTEXATTRIB2DVPROC, glVertexAttrib2dv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB2FPROC, glVertexAttrib2f); LOAD_GL_FUNC(PFNGLVERTEXATTRIB2FVPROC, glVertexAttrib2fv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB2SPROC, glVertexAttrib2s); LOAD_GL_FUNC(PFNGLVERTEXATTRIB2SVPROC, glVertexAttrib2sv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB3DPROC, glVertexAttrib3d); LOAD_GL_FUNC(PFNGLVERTEXATTRIB3DVPROC, glVertexAttrib3dv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB3FPROC, glVertexAttrib3f); LOAD_GL_FUNC(PFNGLVERTEXATTRIB3FVPROC, glVertexAttrib3fv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB3SPROC, glVertexAttrib3s); LOAD_GL_FUNC(PFNGLVERTEXATTRIB3SVPROC, glVertexAttrib3sv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB4NBVPROC, glVertexAttrib4Nbv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB4NIVPROC, glVertexAttrib4Niv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB4NSVPROC, glVertexAttrib4Nsv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB4NUBPROC, glVertexAttrib4Nub); LOAD_GL_FUNC(PFNGLVERTEXATTRIB4NUBVPROC, glVertexAttrib4Nubv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB4NUIVPROC, glVertexAttrib4Nuiv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB4NUSVPROC, glVertexAttrib4Nusv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB4BVPROC, glVertexAttrib4bv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB4DPROC, glVertexAttrib4d); LOAD_GL_FUNC(PFNGLVERTEXATTRIB4DVPROC, glVertexAttrib4dv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB4FPROC, glVertexAttrib4f); LOAD_GL_FUNC(PFNGLVERTEXATTRIB4FVPROC, glVertexAttrib4fv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB4IVPROC, glVertexAttrib4iv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB4SPROC, glVertexAttrib4s); LOAD_GL_FUNC(PFNGLVERTEXATTRIB4SVPROC, glVertexAttrib4sv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB4UBVPROC, glVertexAttrib4ubv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB4UIVPROC, glVertexAttrib4uiv); LOAD_GL_FUNC(PFNGLVERTEXATTRIB4USVPROC, glVertexAttrib4usv); LOAD_GL_FUNC(PFNGLVERTEXATTRIBPOINTERPROC, glVertexAttribPointer); //LogMsg("GL_Load: glActiveTexture=%i glGenBuffers=%i", !!glActiveTexture, !!glGenBuffers); g_EXTFramebufferSupport = GL_CheckExtensions("GL_EXT_framebuffer_object"); if (g_EXTFramebufferSupport) { LOAD_GL_FUNC(PFNGLISRENDERBUFFEREXTPROC, glIsRenderbufferEXT); LOAD_GL_FUNC(PFNGLBINDRENDERBUFFEREXTPROC, glBindRenderbufferEXT); LOAD_GL_FUNC(PFNGLDELETERENDERBUFFERSEXTPROC, glDeleteRenderbuffersEXT); LOAD_GL_FUNC(PFNGLGENRENDERBUFFERSEXTPROC, glGenRenderbuffersEXT); LOAD_GL_FUNC(PFNGLRENDERBUFFERSTORAGEEXTPROC, glRenderbufferStorageEXT); LOAD_GL_FUNC(PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC, glGetRenderbufferParameterivEXT); LOAD_GL_FUNC(PFNGLISFRAMEBUFFEREXTPROC, glIsFramebufferEXT); LOAD_GL_FUNC(PFNGLBINDFRAMEBUFFEREXTPROC, glBindFramebufferEXT); LOAD_GL_FUNC(PFNGLDELETEFRAMEBUFFERSEXTPROC, glDeleteFramebuffersEXT); LOAD_GL_FUNC(PFNGLGENFRAMEBUFFERSEXTPROC, glGenFramebuffersEXT); LOAD_GL_FUNC(PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC, glCheckFramebufferStatusEXT); LOAD_GL_FUNC(PFNGLFRAMEBUFFERTEXTURE1DEXTPROC, glFramebufferTexture1DEXT); LOAD_GL_FUNC(PFNGLFRAMEBUFFERTEXTURE2DEXTPROC, glFramebufferTexture2DEXT); LOAD_GL_FUNC(PFNGLFRAMEBUFFERTEXTURE3DEXTPROC, glFramebufferTexture3DEXT); LOAD_GL_FUNC(PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC, glFramebufferRenderbufferEXT); LOAD_GL_FUNC(PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC, glGetFramebufferAttachmentParameterivEXT); LOAD_GL_FUNC(PFNGLGENERATEMIPMAPEXTPROC, glGenerateMipmapEXT); } } void GL_SwapBuffers(int inverval) { } // Extensions bool g_EXTFramebufferSupport = false; // OpenGL 1.3 PFNGLACTIVETEXTUREPROC glActiveTexture = NULL; PFNGLSAMPLECOVERAGEPROC glSampleCoverage = NULL; PFNGLCOMPRESSEDTEXIMAGE3DPROC glCompressedTexImage3D = NULL; PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D = NULL; PFNGLCOMPRESSEDTEXIMAGE1DPROC glCompressedTexImage1D = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glCompressedTexSubImage3D = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glCompressedTexSubImage2D = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glCompressedTexSubImage1D = NULL; PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage = NULL; PFNGLCLIENTACTIVETEXTUREPROC glClientActiveTexture = NULL; PFNGLMULTITEXCOORD1DPROC glMultiTexCoord1d = NULL; PFNGLMULTITEXCOORD1DVPROC glMultiTexCoord1dv = NULL; PFNGLMULTITEXCOORD1FPROC glMultiTexCoord1f = NULL; PFNGLMULTITEXCOORD1FVPROC glMultiTexCoord1fv = NULL; PFNGLMULTITEXCOORD1IPROC glMultiTexCoord1i = NULL; PFNGLMULTITEXCOORD1IVPROC glMultiTexCoord1iv = NULL; PFNGLMULTITEXCOORD1SPROC glMultiTexCoord1s = NULL; PFNGLMULTITEXCOORD1SVPROC glMultiTexCoord1sv = NULL; PFNGLMULTITEXCOORD2DPROC glMultiTexCoord2d = NULL; PFNGLMULTITEXCOORD2DVPROC glMultiTexCoord2dv = NULL; PFNGLMULTITEXCOORD2FPROC glMultiTexCoord2f = NULL; PFNGLMULTITEXCOORD2FVPROC glMultiTexCoord2fv = NULL; PFNGLMULTITEXCOORD2IPROC glMultiTexCoord2i = NULL; PFNGLMULTITEXCOORD2IVPROC glMultiTexCoord2iv = NULL; PFNGLMULTITEXCOORD2SPROC glMultiTexCoord2s = NULL; PFNGLMULTITEXCOORD2SVPROC glMultiTexCoord2sv = NULL; PFNGLMULTITEXCOORD3DPROC glMultiTexCoord3d = NULL; PFNGLMULTITEXCOORD3DVPROC glMultiTexCoord3dv = NULL; PFNGLMULTITEXCOORD3FPROC glMultiTexCoord3f = NULL; PFNGLMULTITEXCOORD3FVPROC glMultiTexCoord3fv = NULL; PFNGLMULTITEXCOORD3IPROC glMultiTexCoord3i = NULL; PFNGLMULTITEXCOORD3IVPROC glMultiTexCoord3iv = NULL; PFNGLMULTITEXCOORD3SPROC glMultiTexCoord3s = NULL; PFNGLMULTITEXCOORD3SVPROC glMultiTexCoord3sv = NULL; PFNGLMULTITEXCOORD4DPROC glMultiTexCoord4d = NULL; PFNGLMULTITEXCOORD4DVPROC glMultiTexCoord4dv = NULL; PFNGLMULTITEXCOORD4FPROC glMultiTexCoord4f = NULL; PFNGLMULTITEXCOORD4FVPROC glMultiTexCoord4fv = NULL; PFNGLMULTITEXCOORD4IPROC glMultiTexCoord4i = NULL; PFNGLMULTITEXCOORD4IVPROC glMultiTexCoord4iv = NULL; PFNGLMULTITEXCOORD4SPROC glMultiTexCoord4s = NULL; PFNGLMULTITEXCOORD4SVPROC glMultiTexCoord4sv = NULL; PFNGLLOADTRANSPOSEMATRIXFPROC glLoadTransposeMatrixf = NULL; PFNGLLOADTRANSPOSEMATRIXDPROC glLoadTransposeMatrixd = NULL; PFNGLMULTTRANSPOSEMATRIXFPROC glMultTransposeMatrixf = NULL; PFNGLMULTTRANSPOSEMATRIXDPROC glMultTransposeMatrixd = NULL; // OpenGL 1.5 PFNGLGENQUERIESPROC glGenQueries = NULL; PFNGLDELETEQUERIESPROC glDeleteQueries = NULL; PFNGLISQUERYPROC glIsQuery = NULL; PFNGLBEGINQUERYPROC glBeginQuery = NULL; PFNGLENDQUERYPROC glEndQuery = NULL; PFNGLGETQUERYIVPROC glGetQueryiv = NULL; PFNGLGETQUERYOBJECTIVPROC glGetQueryObjectiv = NULL; PFNGLGETQUERYOBJECTUIVPROC glGetQueryObjectuiv = NULL; PFNGLBINDBUFFERPROC glBindBuffer = NULL; PFNGLDELETEBUFFERSPROC glDeleteBuffers = NULL; PFNGLGENBUFFERSPROC glGenBuffers = NULL; PFNGLISBUFFERPROC glIsBuffer = NULL; PFNGLBUFFERDATAPROC glBufferData = NULL; PFNGLBUFFERSUBDATAPROC glBufferSubData = NULL; PFNGLGETBUFFERSUBDATAPROC glGetBufferSubData = NULL; PFNGLMAPBUFFERPROC glMapBuffer = NULL; PFNGLUNMAPBUFFERPROC glUnmapBuffer = NULL; PFNGLGETBUFFERPARAMETERIVPROC glGetBufferParameteriv = NULL; PFNGLGETBUFFERPOINTERVPROC glGetBufferPointerv = NULL; // OpenGL 2.0 PFNGLBLENDEQUATIONSEPARATEPROC glBlendEquationSeparate = NULL; PFNGLDRAWBUFFERSPROC glDrawBuffers = NULL; PFNGLSTENCILOPSEPARATEPROC glStencilOpSeparate = NULL; PFNGLSTENCILFUNCSEPARATEPROC glStencilFuncSeparate = NULL; PFNGLSTENCILMASKSEPARATEPROC glStencilMaskSeparate = NULL; PFNGLATTACHSHADERPROC glAttachShader = NULL; PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation = NULL; PFNGLCOMPILESHADERPROC glCompileShader = NULL; PFNGLCREATEPROGRAMPROC glCreateProgram = NULL; PFNGLCREATESHADERPROC glCreateShader = NULL; PFNGLDELETEPROGRAMPROC glDeleteProgram = NULL; PFNGLDELETESHADERPROC glDeleteShader = NULL; PFNGLDETACHSHADERPROC glDetachShader = NULL; PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray = NULL; PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray = NULL; PFNGLGETACTIVEATTRIBPROC glGetActiveAttrib = NULL; PFNGLGETACTIVEUNIFORMPROC glGetActiveUniform = NULL; PFNGLGETATTACHEDSHADERSPROC glGetAttachedShaders = NULL; PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation = NULL; PFNGLGETPROGRAMIVPROC glGetProgramiv = NULL; PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog = NULL; PFNGLGETSHADERIVPROC glGetShaderiv = NULL; PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog = NULL; PFNGLGETSHADERSOURCEPROC glGetShaderSource = NULL; PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation = NULL; PFNGLGETUNIFORMFVPROC glGetUniformfv = NULL; PFNGLGETUNIFORMIVPROC glGetUniformiv = NULL; PFNGLGETVERTEXATTRIBDVPROC glGetVertexAttribdv = NULL; PFNGLGETVERTEXATTRIBFVPROC glGetVertexAttribfv = NULL; PFNGLGETVERTEXATTRIBIVPROC glGetVertexAttribiv = NULL; PFNGLGETVERTEXATTRIBPOINTERVPROC glGetVertexAttribPointerv = NULL; PFNGLISPROGRAMPROC glIsProgram = NULL; PFNGLISSHADERPROC glIsShader = NULL; PFNGLLINKPROGRAMPROC glLinkProgram = NULL; PFNGLSHADERSOURCEPROC glShaderSource = NULL; PFNGLUSEPROGRAMPROC glUseProgram = NULL; PFNGLUNIFORM1FPROC glUniform1f = NULL; PFNGLUNIFORM2FPROC glUniform2f = NULL; PFNGLUNIFORM3FPROC glUniform3f = NULL; PFNGLUNIFORM4FPROC glUniform4f = NULL; PFNGLUNIFORM1IPROC glUniform1i = NULL; PFNGLUNIFORM2IPROC glUniform2i = NULL; PFNGLUNIFORM3IPROC glUniform3i = NULL; PFNGLUNIFORM4IPROC glUniform4i = NULL; PFNGLUNIFORM1FVPROC glUniform1fv = NULL; PFNGLUNIFORM2FVPROC glUniform2fv = NULL; PFNGLUNIFORM3FVPROC glUniform3fv = NULL; PFNGLUNIFORM4FVPROC glUniform4fv = NULL; PFNGLUNIFORM1IVPROC glUniform1iv = NULL; PFNGLUNIFORM2IVPROC glUniform2iv = NULL; PFNGLUNIFORM3IVPROC glUniform3iv = NULL; PFNGLUNIFORM4IVPROC glUniform4iv = NULL; PFNGLUNIFORMMATRIX2FVPROC glUniformMatrix2fv = NULL; PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv = NULL; PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv = NULL; PFNGLVALIDATEPROGRAMPROC glValidateProgram = NULL; PFNGLVERTEXATTRIB1DPROC glVertexAttrib1d = NULL; PFNGLVERTEXATTRIB1DVPROC glVertexAttrib1dv = NULL; PFNGLVERTEXATTRIB1FPROC glVertexAttrib1f = NULL; PFNGLVERTEXATTRIB1FVPROC glVertexAttrib1fv = NULL; PFNGLVERTEXATTRIB1SPROC glVertexAttrib1s = NULL; PFNGLVERTEXATTRIB1SVPROC glVertexAttrib1sv = NULL; PFNGLVERTEXATTRIB2DPROC glVertexAttrib2d = NULL; PFNGLVERTEXATTRIB2DVPROC glVertexAttrib2dv = NULL; PFNGLVERTEXATTRIB2FPROC glVertexAttrib2f = NULL; PFNGLVERTEXATTRIB2FVPROC glVertexAttrib2fv = NULL; PFNGLVERTEXATTRIB2SPROC glVertexAttrib2s = NULL; PFNGLVERTEXATTRIB2SVPROC glVertexAttrib2sv = NULL; PFNGLVERTEXATTRIB3DPROC glVertexAttrib3d = NULL; PFNGLVERTEXATTRIB3DVPROC glVertexAttrib3dv = NULL; PFNGLVERTEXATTRIB3FPROC glVertexAttrib3f = NULL; PFNGLVERTEXATTRIB3FVPROC glVertexAttrib3fv = NULL; PFNGLVERTEXATTRIB3SPROC glVertexAttrib3s = NULL; PFNGLVERTEXATTRIB3SVPROC glVertexAttrib3sv = NULL; PFNGLVERTEXATTRIB4NBVPROC glVertexAttrib4Nbv = NULL; PFNGLVERTEXATTRIB4NIVPROC glVertexAttrib4Niv = NULL; PFNGLVERTEXATTRIB4NSVPROC glVertexAttrib4Nsv = NULL; PFNGLVERTEXATTRIB4NUBPROC glVertexAttrib4Nub = NULL; PFNGLVERTEXATTRIB4NUBVPROC glVertexAttrib4Nubv = NULL; PFNGLVERTEXATTRIB4NUIVPROC glVertexAttrib4Nuiv = NULL; PFNGLVERTEXATTRIB4NUSVPROC glVertexAttrib4Nusv = NULL; PFNGLVERTEXATTRIB4BVPROC glVertexAttrib4bv = NULL; PFNGLVERTEXATTRIB4DPROC glVertexAttrib4d = NULL; PFNGLVERTEXATTRIB4DVPROC glVertexAttrib4dv = NULL; PFNGLVERTEXATTRIB4FPROC glVertexAttrib4f = NULL; PFNGLVERTEXATTRIB4FVPROC glVertexAttrib4fv = NULL; PFNGLVERTEXATTRIB4IVPROC glVertexAttrib4iv = NULL; PFNGLVERTEXATTRIB4SPROC glVertexAttrib4s = NULL; PFNGLVERTEXATTRIB4SVPROC glVertexAttrib4sv = NULL; PFNGLVERTEXATTRIB4UBVPROC glVertexAttrib4ubv = NULL; PFNGLVERTEXATTRIB4UIVPROC glVertexAttrib4uiv = NULL; PFNGLVERTEXATTRIB4USVPROC glVertexAttrib4usv = NULL; PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer = NULL; // GL_EXT_framebuffer_object PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT = NULL; PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT = NULL; PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT = NULL; PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT = NULL; PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT = NULL; PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glGetRenderbufferParameterivEXT = NULL; PFNGLISFRAMEBUFFEREXTPROC glIsFramebufferEXT = NULL; PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT = NULL; PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT = NULL; PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT = NULL; PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT = NULL; PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glFramebufferTexture1DEXT = NULL; PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT = NULL; PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glFramebufferTexture3DEXT = NULL; PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT = NULL; PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetFramebufferAttachmentParameterivEXT = NULL; PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmapEXT = NULL;