618 lines
29 KiB
C++
618 lines
29 KiB
C++
#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);
|
|
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;
|