137 lines
4.2 KiB
C++
137 lines
4.2 KiB
C++
#include "utils/logger.h"
|
|
#include "render/gl_shared.h"
|
|
#include "render/render_shared.h"
|
|
|
|
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 )
|
|
Msg( "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 )
|
|
Msg( "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 )
|
|
Msg( "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));
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
|
|
#define LOAD_GL_FUNC(functype, funcname) \
|
|
{ \
|
|
funcname = (functype)wglGetProcAddress(#funcname); \
|
|
if (funcname == NULL) \
|
|
LogMsg("Failed to load %s", #funcname); \
|
|
}
|
|
|
|
void GL_Load()
|
|
{
|
|
// 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);
|
|
|
|
}
|
|
|
|
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; |