Eliminate GLEW dependency
GL entrypoint resolution is now done manually. This has a couple immediate benefits, such as not having to retrieve hundreds of functions pointers that we'll never use. It's also nice to have an exact overview of all the entrypoints used by mkxp. This change allows mkxp to run fine with core contexts, not sure how relevant that is going to be in the future. What's noteworthy is that _all_ entrypoints, even the ones core in 1.1 and guaranteed to be in every libGL, are resolved dynamically. This has the added benefit of not having to link directly against libGL anymore, which also cleans up the output of `ldd` quite a bit (SDL2 loads most system deps dynamically at runtime). GL headers are still required at build time.
This commit is contained in:
parent
640b01e518
commit
6c481e5eb8
16 changed files with 470 additions and 272 deletions
src
148
src/gl-fun.h
Normal file
148
src/gl-fun.h
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
#ifndef GLFUN_H
|
||||
#define GLFUN_H
|
||||
|
||||
#include <SDL_opengl.h>
|
||||
|
||||
/* Etc */
|
||||
typedef GLenum (APIENTRYP PFNGLGETERRORPROC) (void);
|
||||
typedef void (APIENTRYP PFNGLCLEARCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
|
||||
typedef void (APIENTRYP PFNGLCLEARPROC) (GLbitfield mask);
|
||||
typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGPROC) (GLenum name);
|
||||
typedef void (APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *params);
|
||||
typedef void (APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param);
|
||||
typedef void (APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
|
||||
typedef void (APIENTRYP PFNGLENABLEPROC) (GLenum cap);
|
||||
typedef void (APIENTRYP PFNGLDISABLEPROC) (GLenum cap);
|
||||
typedef void (APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
typedef void (APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
typedef void (APIENTRYP PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor);
|
||||
typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
|
||||
typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
|
||||
typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
|
||||
|
||||
/* Texture */
|
||||
typedef void (APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures);
|
||||
typedef void (APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures);
|
||||
typedef void (APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture);
|
||||
typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
|
||||
typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
|
||||
typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
|
||||
typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
|
||||
|
||||
/* Debug callback */
|
||||
typedef void (APIENTRY * GLDEBUGPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam);
|
||||
typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const GLvoid *userParam);
|
||||
|
||||
#define GL_20_FUN \
|
||||
/* Etc */ \
|
||||
GL_FUN(GetError, PFNGLGETERRORPROC) \
|
||||
GL_FUN(ClearColor, PFNGLCLEARCOLORPROC) \
|
||||
GL_FUN(Clear, PFNGLCLEARPROC) \
|
||||
GL_FUN(GetString, PFNGLGETSTRINGPROC) \
|
||||
GL_FUN(GetIntegerv, PFNGLGETINTEGERVPROC) \
|
||||
GL_FUN(PixelStorei, PFNGLPIXELSTOREIPROC) \
|
||||
GL_FUN(ReadPixels, PFNGLREADPIXELSPROC) \
|
||||
GL_FUN(Enable, PFNGLENABLEPROC) \
|
||||
GL_FUN(Disable, PFNGLDISABLEPROC) \
|
||||
GL_FUN(Scissor, PFNGLSCISSORPROC) \
|
||||
GL_FUN(Viewport, PFNGLVIEWPORTPROC) \
|
||||
GL_FUN(BlendFunc, PFNGLBLENDFUNCPROC) \
|
||||
GL_FUN(BlendFuncSeparate, PFNGLBLENDFUNCSEPARATEPROC) \
|
||||
GL_FUN(BlendEquation, PFNGLBLENDEQUATIONPROC) \
|
||||
GL_FUN(DrawElements, PFNGLDRAWELEMENTSPROC) \
|
||||
/* Texture */ \
|
||||
GL_FUN(GenTextures, PFNGLGENTEXTURESPROC) \
|
||||
GL_FUN(DeleteTextures, PFNGLDELETETEXTURESPROC) \
|
||||
GL_FUN(BindTexture, PFNGLBINDTEXTUREPROC) \
|
||||
GL_FUN(TexImage2D, PFNGLTEXIMAGE2DPROC) \
|
||||
GL_FUN(TexSubImage2D, PFNGLTEXSUBIMAGE2DPROC) \
|
||||
GL_FUN(TexParameteri, PFNGLTEXPARAMETERIPROC) \
|
||||
GL_FUN(ActiveTexture, PFNGLACTIVETEXTUREPROC) \
|
||||
/* Buffer objcet */ \
|
||||
GL_FUN(GenBuffers, PFNGLGENBUFFERSPROC) \
|
||||
GL_FUN(DeleteBuffers, PFNGLDELETEBUFFERSPROC) \
|
||||
GL_FUN(BindBuffer, PFNGLBINDBUFFERPROC) \
|
||||
GL_FUN(BufferData, PFNGLBUFFERDATAPROC) \
|
||||
GL_FUN(BufferSubData, PFNGLBUFFERSUBDATAPROC) \
|
||||
/* Shader */ \
|
||||
GL_FUN(CreateShader, PFNGLCREATESHADERPROC) \
|
||||
GL_FUN(DeleteShader, PFNGLDELETESHADERPROC) \
|
||||
GL_FUN(ShaderSource, PFNGLSHADERSOURCEPROC) \
|
||||
GL_FUN(CompileShader, PFNGLCOMPILESHADERPROC) \
|
||||
GL_FUN(AttachShader, PFNGLATTACHSHADERPROC) \
|
||||
GL_FUN(GetObjectParameterivARB, PFNGLGETOBJECTPARAMETERIVARBPROC) \
|
||||
GL_FUN(GetShaderiv, PFNGLGETSHADERIVPROC) \
|
||||
GL_FUN(GetShaderInfoLog, PFNGLGETSHADERINFOLOGPROC) \
|
||||
/* Program */ \
|
||||
GL_FUN(CreateProgram, PFNGLCREATEPROGRAMPROC) \
|
||||
GL_FUN(DeleteProgram, PFNGLDELETEPROGRAMPROC) \
|
||||
GL_FUN(UseProgram, PFNGLUSEPROGRAMPROC) \
|
||||
GL_FUN(LinkProgram, PFNGLLINKPROGRAMPROC) \
|
||||
GL_FUN(GetProgramiv, PFNGLGETPROGRAMIVPROC) \
|
||||
GL_FUN(GetProgramInfoLog, PFNGLGETPROGRAMINFOLOGPROC) \
|
||||
/* Uniform */ \
|
||||
GL_FUN(GetUniformLocation, PFNGLGETUNIFORMLOCATIONPROC) \
|
||||
GL_FUN(Uniform1f, PFNGLUNIFORM1FPROC) \
|
||||
GL_FUN(Uniform2f, PFNGLUNIFORM2FPROC) \
|
||||
GL_FUN(Uniform4f, PFNGLUNIFORM4FPROC) \
|
||||
GL_FUN(Uniform1i, PFNGLUNIFORM1IPROC) \
|
||||
GL_FUN(UniformMatrix4fv, PFNGLUNIFORMMATRIX4FVPROC) \
|
||||
/* Vertex attribute */ \
|
||||
GL_FUN(BindAttribLocation, PFNGLBINDATTRIBLOCATIONPROC) \
|
||||
GL_FUN(EnableVertexAttribArray, PFNGLENABLEVERTEXATTRIBARRAYPROC) \
|
||||
GL_FUN(VertexAttribPointer, PFNGLVERTEXATTRIBPOINTERPROC) \
|
||||
/* Queries */ \
|
||||
GL_FUN(GenQueries, PFNGLGENQUERIESPROC) \
|
||||
GL_FUN(DeleteQueries, PFNGLDELETEQUERIESPROC) \
|
||||
GL_FUN(BeginQuery, PFNGLBEGINQUERYPROC) \
|
||||
GL_FUN(EndQuery, PFNGLENDQUERYPROC) \
|
||||
GL_FUN(GetQueryObjectiv, PFNGLGETQUERYOBJECTIVPROC)
|
||||
|
||||
#define GL_FBO_FUN \
|
||||
/* Framebuffer object */ \
|
||||
GL_FUN(GenFramebuffers, PFNGLGENFRAMEBUFFERSPROC) \
|
||||
GL_FUN(DeleteFramebuffers, PFNGLDELETEFRAMEBUFFERSPROC) \
|
||||
GL_FUN(BindFramebuffer, PFNGLBINDFRAMEBUFFERPROC) \
|
||||
GL_FUN(FramebufferTexture2D, PFNGLFRAMEBUFFERTEXTURE2DPROC) \
|
||||
GL_FUN(FramebufferRenderbuffer, PFNGLFRAMEBUFFERRENDERBUFFERPROC) \
|
||||
GL_FUN(BlitFramebuffer, PFNGLBLITFRAMEBUFFERPROC) \
|
||||
/* Renderbuffer object */ \
|
||||
GL_FUN(GenRenderbuffers, PFNGLGENRENDERBUFFERSPROC) \
|
||||
GL_FUN(DeleteRenderbuffers, PFNGLDELETERENDERBUFFERSPROC) \
|
||||
GL_FUN(BindRenderbuffer, PFNGLBINDRENDERBUFFERPROC) \
|
||||
GL_FUN(RenderbufferStorage, PFNGLRENDERBUFFERSTORAGEPROC)
|
||||
|
||||
#define GL_VAO_FUN \
|
||||
/* Vertex array object */ \
|
||||
GL_FUN(GenVertexArrays, PFNGLGENVERTEXARRAYSPROC) \
|
||||
GL_FUN(DeleteVertexArrays, PFNGLDELETEVERTEXARRAYSPROC) \
|
||||
GL_FUN(BindVertexArray, PFNGLBINDVERTEXARRAYPROC)
|
||||
|
||||
#define GL_TIMER_QUERY_FUN \
|
||||
GL_FUN(GetQueryObjecti64v, PFNGLGETQUERYOBJECTI64VPROC) \
|
||||
GL_FUN(GetQueryObjectui64v, PFNGLGETQUERYOBJECTUI64VPROC)
|
||||
|
||||
#define GL_DEBUG_KHR_FUN \
|
||||
GL_FUN(DebugMessageCallback, PFNGLDEBUGMESSAGECALLBACKPROC)
|
||||
|
||||
|
||||
struct GLFunctions
|
||||
{
|
||||
#define GL_FUN(name, type) type name;
|
||||
|
||||
GL_20_FUN
|
||||
GL_FBO_FUN
|
||||
GL_VAO_FUN
|
||||
|
||||
bool timerQuery;
|
||||
GL_TIMER_QUERY_FUN
|
||||
|
||||
GL_DEBUG_KHR_FUN
|
||||
|
||||
#undef GL_FUN
|
||||
};
|
||||
|
||||
extern GLFunctions gl;
|
||||
void initGLFunctions();
|
||||
|
||||
#endif // GLFUN_H
|
||||
Loading…
Add table
Add a link
Reference in a new issue