replace GLAD.h with an internal opengl loader (RLGL)
This commit is contained in:
parent
1aa3559155
commit
4b9617764f
8682
src/external/glad.h
vendored
8682
src/external/glad.h
vendored
File diff suppressed because it is too large
Load Diff
653
src/rlgl.h
653
src/rlgl.h
|
|
@ -322,26 +322,6 @@
|
||||||
#define RL_READ_FRAMEBUFFER 0x8CA8 // GL_READ_FRAMEBUFFER
|
#define RL_READ_FRAMEBUFFER 0x8CA8 // GL_READ_FRAMEBUFFER
|
||||||
#define RL_DRAW_FRAMEBUFFER 0x8CA9 // GL_DRAW_FRAMEBUFFER
|
#define RL_DRAW_FRAMEBUFFER 0x8CA9 // GL_DRAW_FRAMEBUFFER
|
||||||
|
|
||||||
// Default shader vertex attribute locations
|
|
||||||
#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_POSITION
|
|
||||||
#define RL_DEFAULT_SHADER_ATTRIB_LOCATION_POSITION 0
|
|
||||||
#endif
|
|
||||||
#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD
|
|
||||||
#define RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD 1
|
|
||||||
#endif
|
|
||||||
#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_NORMAL
|
|
||||||
#define RL_DEFAULT_SHADER_ATTRIB_LOCATION_NORMAL 2
|
|
||||||
#endif
|
|
||||||
#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR
|
|
||||||
#define RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR 3
|
|
||||||
#endif
|
|
||||||
#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT
|
|
||||||
#define RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT 4
|
|
||||||
#endif
|
|
||||||
#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2
|
|
||||||
#define RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2 5
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Types and Structures Definition
|
// Types and Structures Definition
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
@ -809,11 +789,10 @@ RLAPI void rlLoadDrawQuad(void); // Load and draw a quad
|
||||||
#define GLAD_API_CALL_EXPORT_BUILD
|
#define GLAD_API_CALL_EXPORT_BUILD
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_11)
|
#if defined(__APPLE__)
|
||||||
#if defined(__APPLE__)
|
|
||||||
#include <OpenGL/gl.h> // OpenGL 1.1 library for OSX
|
#include <OpenGL/gl.h> // OpenGL 1.1 library for OSX
|
||||||
#include <OpenGL/glext.h> // OpenGL extensions library
|
#include <OpenGL/glext.h> // OpenGL extensions library
|
||||||
#else
|
#else
|
||||||
// APIENTRY for OpenGL function pointer declarations is required
|
// APIENTRY for OpenGL function pointer declarations is required
|
||||||
#if !defined(APIENTRY)
|
#if !defined(APIENTRY)
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
|
|
@ -828,15 +807,284 @@ RLAPI void rlLoadDrawQuad(void); // Load and draw a quad
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <GL/gl.h> // OpenGL 1.1 library
|
#include <GL/gl.h> // OpenGL 1.1 library
|
||||||
#endif
|
#include <GL/glext.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_33)
|
#ifndef GL_TEXTURE_SWIZZLE_RGBA
|
||||||
#define GLAD_MALLOC RL_MALLOC
|
#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46
|
||||||
#define GLAD_FREE RL_FREE
|
#endif
|
||||||
|
|
||||||
#define GLAD_GL_IMPLEMENTATION
|
#ifndef GL_NUM_EXTENSIONS
|
||||||
#include "external/glad.h" // GLAD extensions loading library, includes OpenGL headers
|
#define GL_NUM_EXTENSIONS 0x821D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
|
/*
|
||||||
|
load OpenGL 2.1 and 3.3
|
||||||
|
*/
|
||||||
|
#if defined(__WIN32) && !defined(__linux__) && !defined(GL_VERTEX_SHADER)
|
||||||
|
typedef char GLchar;
|
||||||
|
typedef int GLsizei;
|
||||||
|
typedef uintptr_t GLsizeiptr;
|
||||||
|
typedef intptr_t GLintptr;
|
||||||
|
|
||||||
|
#define GL_VERTEX_SHADER 0x8B31
|
||||||
|
#define GL_FRAGMENT_SHADER 0x8B30
|
||||||
|
#define GL_ARRAY_BUFFER 0x8892
|
||||||
|
#define GL_ELEMENT_ARRAY_BUFFER 0x8893
|
||||||
|
#define GL_STATIC_DRAW 0x88E4
|
||||||
|
#define GL_DYNAMIC_DRAW 0x88E8
|
||||||
|
#define GL_TEXTURE0 0x84C0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef void (*RLGLapiproc)(void);
|
||||||
|
typedef RLGLapiproc (*RLGLloadfunc)(const char *name);
|
||||||
|
|
||||||
|
typedef void (*glShaderSourcePROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
|
||||||
|
typedef GLuint (*glCreateShaderPROC) (GLenum type);
|
||||||
|
typedef void (*glCompileShaderPROC) (GLuint shader);
|
||||||
|
typedef GLuint (*glCreateProgramPROC) (void);
|
||||||
|
typedef void (*glAttachShaderPROC) (GLuint program, GLuint shader);
|
||||||
|
typedef void (*glBindAttribLocationPROC) (GLuint program, GLuint index, const GLchar *name);
|
||||||
|
typedef void (*glLinkProgramPROC) (GLuint program);
|
||||||
|
typedef void (*glBindBufferPROC) (GLenum target, GLuint buffer);
|
||||||
|
typedef void (*glBufferDataPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
|
||||||
|
typedef void (*glEnableVertexAttribArrayPROC) (GLuint index);
|
||||||
|
typedef void (*glVertexAttribPointerPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
|
||||||
|
typedef void (*glDisableVertexAttribArrayPROC) (GLuint index);
|
||||||
|
typedef void (*glDeleteBuffersPROC) (GLsizei n, const GLuint *buffers);
|
||||||
|
typedef void (*glDeleteVertexArraysPROC) (GLsizei n, const GLuint *arrays);
|
||||||
|
typedef void (*glUseProgramPROC) (GLuint program);
|
||||||
|
typedef void (*glDetachShaderPROC) (GLuint program, GLuint shader);
|
||||||
|
typedef void (*glDeleteShaderPROC) (GLuint shader);
|
||||||
|
typedef void (*glDeleteProgramPROC) (GLuint program);
|
||||||
|
typedef void (*glBufferSubDataPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
|
||||||
|
typedef void (*glGetShaderivPROC)(GLuint shader, GLenum pname, GLint *params);
|
||||||
|
typedef void (*glGetShaderInfoLogPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
|
||||||
|
typedef void (*glGetProgramivPROC)(GLuint program, GLenum pname, GLint *params);
|
||||||
|
typedef void (*glGetProgramInfoLogPROC)(GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
|
||||||
|
typedef void (*glGenVertexArraysPROC)(GLsizei n, GLuint *arrays);
|
||||||
|
typedef void (*glGenBuffersPROC)(GLsizei n, GLuint *buffers);
|
||||||
|
typedef void (*glBindVertexArrayPROC)(GLuint array);
|
||||||
|
typedef GLint (*glGetUniformLocationPROC)(GLuint program, const GLchar *name);
|
||||||
|
typedef void (*glUniformMatrix4fvPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
|
||||||
|
typedef void (*glTexImage2DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
|
||||||
|
typedef void (*glActiveTexturePROC) (GLenum texture);
|
||||||
|
typedef void (*glBindFramebufferPROC) (GLenum target, GLuint framebuffer);
|
||||||
|
typedef void (*glBlitFramebufferPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
|
||||||
|
typedef void (*glDrawBuffersPROC) (GLsizei n, const GLenum *bufs);
|
||||||
|
typedef void (*glBlendEquationPROC) (GLenum mode);
|
||||||
|
typedef void (*glBlendFuncSeparatePROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
|
||||||
|
typedef void (*glBlendEquationSeparatePROC) (GLenum modeRGB, GLenum modeAlpha);
|
||||||
|
typedef void (*glUniform4fPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
|
||||||
|
typedef void (*glUniformiPROC) (GLint location, GLint v0);
|
||||||
|
typedef void (*glCompressedTexImageDPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
|
||||||
|
typedef GLuint (*glLoadTextureDepthPROC) (const char *filename, int *width, int *height, int *depth);
|
||||||
|
typedef void (*glGenRenderbuffersPROC) (GLsizei n, GLuint *renderbuffers);
|
||||||
|
typedef void (*glBindRenderbufferPROC) (GLenum target, GLuint renderbuffer);
|
||||||
|
typedef void (*glRenderbufferStoragePROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
|
||||||
|
typedef void (*glGenerateMipmapPROC) (GLenum target);
|
||||||
|
typedef void (*glGenFramebuffersPROC) (GLsizei n, GLuint *framebuffers);
|
||||||
|
typedef void (*glFramebufferTextureDPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
|
||||||
|
typedef void (*glFramebufferRenderbufferPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
|
||||||
|
typedef GLenum (*glCheckFramebufferStatusPROC) (GLenum target);
|
||||||
|
typedef void (*glGetFramebufferAttachmentParameterivPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
|
||||||
|
typedef void (*glDeleteRenderbuffersPROC) (GLsizei n, const GLuint *renderbuffers);
|
||||||
|
typedef void (*glDeleteFramebuffersPROC) (GLsizei n, const GLuint *framebuffers);
|
||||||
|
typedef void (*glDrawArraysInstancedPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
|
||||||
|
typedef void (*glDrawElementsInstancedPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
|
||||||
|
typedef void (*glVertexAttribDivisorPROC) (GLuint index, GLuint divisor);
|
||||||
|
typedef GLint (*glGetAttribLocationPROC) (GLuint program, const GLchar *name);
|
||||||
|
typedef void (*glUniformfvPROC) (GLint location, GLsizei count, const GLfloat *value);
|
||||||
|
typedef void (*glUniform3fvPROC) (GLint location, GLsizei count, const GLfloat *value);
|
||||||
|
typedef void (*glUniform4fvPROC) (GLint location, GLsizei count, const GLfloat *value);
|
||||||
|
typedef void (*glUniformivPROC) (GLint location, GLsizei count, const GLint *value);
|
||||||
|
typedef void (*glUniform3ivPROC) (GLint location, GLsizei count, const GLint *value);
|
||||||
|
typedef void (*glUniform4ivPROC) (GLint location, GLsizei count, const GLint *value);
|
||||||
|
typedef void (*glVertexAttribfvPROC) (GLuint index, const GLfloat *v);
|
||||||
|
typedef void (*glVertexAttrib3fvPROC) (GLuint index, const GLfloat *v);
|
||||||
|
typedef void (*glVertexAttrib4fvPROC) (GLuint index, const GLfloat *v);
|
||||||
|
typedef void (*glUniform1iPROC) (GLint location, GLint v0);
|
||||||
|
typedef void (*glCompressedTexImage2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
|
||||||
|
typedef void (*glFramebufferTexture2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
|
||||||
|
typedef void (*glUniform1fvPROC) (GLint location, GLsizei count, const GLfloat *value);
|
||||||
|
typedef void (*glUniform2fvPROC) (GLint location, GLsizei count, const GLfloat *value);
|
||||||
|
typedef void (*glUniform1ivPROC) (GLint location, GLsizei count, const GLint *value);
|
||||||
|
typedef void (*glUniform2ivPROC) (GLint location, GLsizei count, const GLint *value);
|
||||||
|
typedef void (*glVertexAttrib1fvPROC) (GLuint index, const GLfloat *v);
|
||||||
|
typedef void (*glVertexAttrib2fvPROC) (GLuint index, const GLfloat *v);
|
||||||
|
typedef const GLubyte* (*glGetStringiPROC) (GLenum name, GLuint index);
|
||||||
|
|
||||||
|
glShaderSourcePROC glShaderSourceSRC = NULL;
|
||||||
|
glCreateShaderPROC glCreateShaderSRC = NULL;
|
||||||
|
glCompileShaderPROC glCompileShaderSRC = NULL;
|
||||||
|
glCreateProgramPROC glCreateProgramSRC = NULL;
|
||||||
|
glAttachShaderPROC glAttachShaderSRC = NULL;
|
||||||
|
glBindAttribLocationPROC glBindAttribLocationSRC = NULL;
|
||||||
|
glLinkProgramPROC glLinkProgramSRC = NULL;
|
||||||
|
glBindBufferPROC glBindBufferSRC = NULL;
|
||||||
|
glBufferDataPROC glBufferDataSRC = NULL;
|
||||||
|
glEnableVertexAttribArrayPROC glEnableVertexAttribArraySRC = NULL;
|
||||||
|
glVertexAttribPointerPROC glVertexAttribPointerSRC = NULL;
|
||||||
|
glDisableVertexAttribArrayPROC glDisableVertexAttribArraySRC = NULL;
|
||||||
|
glDeleteBuffersPROC glDeleteBuffersSRC = NULL;
|
||||||
|
glUseProgramPROC glUseProgramSRC = NULL;
|
||||||
|
glDetachShaderPROC glDetachShaderSRC = NULL;
|
||||||
|
glDeleteShaderPROC glDeleteShaderSRC = NULL;
|
||||||
|
glDeleteProgramPROC glDeleteProgramSRC = NULL;
|
||||||
|
glBufferSubDataPROC glBufferSubDataSRC = NULL;
|
||||||
|
glGetShaderivPROC glGetShaderivSRC = NULL;
|
||||||
|
glGetShaderInfoLogPROC glGetShaderInfoLogSRC = NULL;
|
||||||
|
glGetProgramivPROC glGetProgramivSRC = NULL;
|
||||||
|
glGetProgramInfoLogPROC glGetProgramInfoLogSRC = NULL;
|
||||||
|
glGenBuffersPROC glGenBuffersSRC = NULL;
|
||||||
|
glGetUniformLocationPROC glGetUniformLocationSRC = NULL;
|
||||||
|
glUniformMatrix4fvPROC glUniformMatrix4fvSRC = NULL;
|
||||||
|
glActiveTexturePROC glActiveTextureSRC = NULL;
|
||||||
|
glGenVertexArraysPROC glGenVertexArraysSRC = NULL;
|
||||||
|
glBindVertexArrayPROC glBindVertexArraySRC = NULL;
|
||||||
|
glDeleteVertexArraysPROC glDeleteVertexArraysSRC = NULL;
|
||||||
|
glBindFramebufferPROC glBindFramebufferSRC = NULL;
|
||||||
|
glBlitFramebufferPROC glBlitFramebufferSRC = NULL;
|
||||||
|
glDrawBuffersPROC glDrawBuffersSRC = NULL;
|
||||||
|
glBlendEquationPROC glBlendEquationSRC = NULL;
|
||||||
|
glBlendFuncSeparatePROC glBlendFuncSeparateSRC = NULL;
|
||||||
|
glBlendEquationSeparatePROC glBlendEquationSeparateSRC = NULL;
|
||||||
|
glUniform4fPROC glUniform4fSRC = NULL;
|
||||||
|
glUniformiPROC glUniformiSRC = NULL;
|
||||||
|
glCompressedTexImageDPROC glCompressedTexImageDSRC = NULL;
|
||||||
|
glLoadTextureDepthPROC glLoadTextureDepthSRC = NULL;
|
||||||
|
glGenRenderbuffersPROC glGenRenderbuffersSRC = NULL;
|
||||||
|
glBindRenderbufferPROC glBindRenderbufferSRC = NULL;
|
||||||
|
glRenderbufferStoragePROC glRenderbufferStorageSRC = NULL;
|
||||||
|
glGenerateMipmapPROC glGenerateMipmapSRC = NULL;
|
||||||
|
glGenFramebuffersPROC glGenFramebuffersSRC = NULL;
|
||||||
|
glFramebufferTextureDPROC glFramebufferTextureDSRC = NULL;
|
||||||
|
glFramebufferRenderbufferPROC glFramebufferRenderbufferSRC = NULL;
|
||||||
|
glCheckFramebufferStatusPROC glCheckFramebufferStatusSRC = NULL;
|
||||||
|
glGetFramebufferAttachmentParameterivPROC glGetFramebufferAttachmentParameterivSRC = NULL;
|
||||||
|
glDeleteRenderbuffersPROC glDeleteRenderbuffersSRC = NULL;
|
||||||
|
glDeleteFramebuffersPROC glDeleteFramebuffersSRC = NULL;
|
||||||
|
glDrawArraysInstancedPROC glDrawArraysInstancedSRC = NULL;
|
||||||
|
glDrawElementsInstancedPROC glDrawElementsInstancedSRC = NULL;
|
||||||
|
glVertexAttribDivisorPROC glVertexAttribDivisorSRC = NULL;
|
||||||
|
glGetAttribLocationPROC glGetAttribLocationSRC = NULL;
|
||||||
|
glUniformfvPROC glUniformfvSRC = NULL;
|
||||||
|
glUniform3fvPROC glUniform3fvSRC = NULL;
|
||||||
|
glUniform4fvPROC glUniform4fvSRC = NULL;
|
||||||
|
glUniformivPROC glUniformivSRC = NULL;
|
||||||
|
glUniform3ivPROC glUniform3ivSRC = NULL;
|
||||||
|
glUniform4ivPROC glUniform4ivSRC = NULL;
|
||||||
|
glVertexAttribfvPROC glVertexAttribfvSRC = NULL;
|
||||||
|
glVertexAttrib3fvPROC glVertexAttrib3fvSRC = NULL;
|
||||||
|
glVertexAttrib4fvPROC glVertexAttrib4fvSRC = NULL;
|
||||||
|
glUniform1iPROC glUniform1iSRC = NULL;
|
||||||
|
glCompressedTexImage2DPROC glCompressedTexImage2DSRC = NULL;
|
||||||
|
glFramebufferTexture2DPROC glFramebufferTexture2DSRC = NULL;
|
||||||
|
glUniform1fvPROC glUniform1fvSRC = NULL;
|
||||||
|
glUniform2fvPROC glUniform2fvSRC = NULL;
|
||||||
|
glUniform1ivPROC glUniform1ivSRC = NULL;
|
||||||
|
glUniform2ivPROC glUniform2ivSRC = NULL;
|
||||||
|
glVertexAttrib1fvPROC glVertexAttrib1fvSRC = NULL;
|
||||||
|
glVertexAttrib2fvPROC glVertexAttrib2fvSRC = NULL;
|
||||||
|
glGetStringiPROC glGetStringiSRC = NULL;
|
||||||
|
|
||||||
|
#define glActiveTexture glActiveTextureSRC
|
||||||
|
#define glShaderSource glShaderSourceSRC
|
||||||
|
#define glCreateShader glCreateShaderSRC
|
||||||
|
#define glCompileShader glCompileShaderSRC
|
||||||
|
#define glCreateProgram glCreateProgramSRC
|
||||||
|
#define glAttachShader glAttachShaderSRC
|
||||||
|
#define glBindAttribLocation glBindAttribLocationSRC
|
||||||
|
#define glLinkProgram glLinkProgramSRC
|
||||||
|
#define glBindBuffer glBindBufferSRC
|
||||||
|
#define glBufferData glBufferDataSRC
|
||||||
|
#define glEnableVertexAttribArray glEnableVertexAttribArraySRC
|
||||||
|
#define glVertexAttribPointer glVertexAttribPointerSRC
|
||||||
|
#define glDisableVertexAttribArray glDisableVertexAttribArraySRC
|
||||||
|
#define glDeleteBuffers glDeleteBuffersSRC
|
||||||
|
#define glDeleteVertexArrays glDeleteVertexArraysSRC
|
||||||
|
#define glUseProgram glUseProgramSRC
|
||||||
|
#define glDetachShader glDetachShaderSRC
|
||||||
|
#define glDeleteShader glDeleteShaderSRC
|
||||||
|
#define glDeleteProgram glDeleteProgramSRC
|
||||||
|
#define glBufferSubData glBufferSubDataSRC
|
||||||
|
#define glGetShaderiv glGetShaderivSRC
|
||||||
|
#define glGetShaderInfoLog glGetShaderInfoLogSRC
|
||||||
|
#define glGetProgramiv glGetProgramivSRC
|
||||||
|
#define glGetProgramInfoLog glGetProgramInfoLogSRC
|
||||||
|
#define glGenVertexArrays glGenVertexArraysSRC
|
||||||
|
#define glGenBuffers glGenBuffersSRC
|
||||||
|
#define glBindVertexArray glBindVertexArraySRC
|
||||||
|
#define glGetUniformLocation glGetUniformLocationSRC
|
||||||
|
#define glUniformMatrix4fv glUniformMatrix4fvSRC
|
||||||
|
#define glBindFramebuffer glBindFramebufferSRC
|
||||||
|
#define glBlitFramebuffer glBlitFramebufferSRC
|
||||||
|
#define glDrawBuffers glDrawBuffersSRC
|
||||||
|
#define glBlendEquation glBlendEquationSRC
|
||||||
|
#define glBlendFuncSeparate glBlendFuncSeparateSRC
|
||||||
|
#define glBlendEquationSeparate glBlendEquationSeparateSRC
|
||||||
|
#define glUniform4f glUniform4fSRC
|
||||||
|
#define glUniformi glUniformiSRC
|
||||||
|
#define glCompressedTexImageD glCompressedTexImageDSRC
|
||||||
|
#define glLoadTextureDepth glLoadTextureDepthSRC
|
||||||
|
#define glGenRenderbuffers glGenRenderbuffersSRC
|
||||||
|
#define glBindRenderbuffer glBindRenderbufferSRC
|
||||||
|
#define glRenderbufferStorage glRenderbufferStorageSRC
|
||||||
|
#define glGenerateMipmap glGenerateMipmapSRC
|
||||||
|
#define glGenFramebuffers glGenFramebuffersSRC
|
||||||
|
#define glFramebufferTextureD glFramebufferTextureDSRC
|
||||||
|
#define glFramebufferRenderbuffer glFramebufferRenderbufferSRC
|
||||||
|
#define glCheckFramebufferStatus glCheckFramebufferStatusSRC
|
||||||
|
#define glGetFramebufferAttachmentParameteriv glGetFramebufferAttachmentParameterivSRC
|
||||||
|
#define glDeleteRenderbuffers glDeleteRenderbuffersSRC
|
||||||
|
#define glDeleteFramebuffers glDeleteFramebuffersSRC
|
||||||
|
#define glDrawArraysInstanced glDrawArraysInstancedSRC
|
||||||
|
#define glDrawElementsInstanced glDrawElementsInstancedSRC
|
||||||
|
#define glVertexAttribDivisor glVertexAttribDivisorSRC
|
||||||
|
#define glGetAttribLocation glGetAttribLocationSRC
|
||||||
|
#define glUniformfv glUniformfvSRC
|
||||||
|
#define glUniform3fv glUniform3fvSRC
|
||||||
|
#define glUniform4fv glUniform4fvSRC
|
||||||
|
#define glUniformiv glUniformivSRC
|
||||||
|
#define glUniform3iv glUniform3ivSRC
|
||||||
|
#define glUniform4iv glUniform4ivSRC
|
||||||
|
#define glVertexAttribfv glVertexAttribfvSRC
|
||||||
|
#define glVertexAttrib3fv glVertexAttrib3fvSRC
|
||||||
|
#define glVertexAttrib4fv glVertexAttrib4fvSRC
|
||||||
|
#define glUniform1i glUniform1iSRC
|
||||||
|
#define glCompressedTexImage2D glCompressedTexImage2DSRC
|
||||||
|
#define glFramebufferTexture2D glFramebufferTexture2DSRC
|
||||||
|
#define glUniform1fv glUniform1fvSRC
|
||||||
|
#define glUniform2fv glUniform2fvSRC
|
||||||
|
#define glUniform1iv glUniform1ivSRC
|
||||||
|
#define glUniform2iv glUniform2ivSRC
|
||||||
|
#define glVertexAttrib1fv glVertexAttrib1fvSRC
|
||||||
|
#define glVertexAttrib2fv glVertexAttrib2fvSRC
|
||||||
|
#define glGetStringi glGetStringiSRC
|
||||||
|
|
||||||
|
int RLGL_GL_ARB_vertex_array_object = 0;
|
||||||
|
int RLGL_GL_EXT_draw_instanced = 0;
|
||||||
|
int RLGL_GL_ARB_instanced_arrays = 0;
|
||||||
|
int RLGL_GL_ARB_texture_non_power_of_two = 0;
|
||||||
|
|
||||||
|
int RLGL_GL_ARB_texture_float = 0;
|
||||||
|
int RLGL_GL_ARB_depth_texture = 0;
|
||||||
|
|
||||||
|
int RLGL_GL_EXT_texture_filter_anisotropic = 0;
|
||||||
|
int RLGL_GL_EXT_texture_mirror_clamp = 0;
|
||||||
|
|
||||||
|
int RLGL_GL_KHR_texture_compression_astc_hdr = 0;
|
||||||
|
int RLGL_GL_KHR_texture_compression_astc_ldr = 0;
|
||||||
|
int RLGL_GL_EXT_texture_compression_s3tc = 0; // Texture compression: DXT
|
||||||
|
int RLGL_GL_ARB_ES3_compatibility = 0; // Texture compression: ETC2/EAC
|
||||||
|
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_43)
|
||||||
|
int RLGL_GL_ARB_compute_shader = 0;
|
||||||
|
int RLGL_GL_ARB_shader_storage_buffer_object = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int rlLoadGL(RLGLloadfunc proc);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_ES3)
|
#if defined(GRAPHICS_API_OPENGL_ES3)
|
||||||
|
|
@ -846,7 +1094,7 @@ RLAPI void rlLoadDrawQuad(void); // Load and draw a quad
|
||||||
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
// NOTE: OpenGL ES 2.0 can be enabled on PLATFORM_DESKTOP,
|
// NOTE: OpenGL ES 2.0 can be enabled on PLATFORM_DESKTOP,
|
||||||
// in that case, functions are loaded from a custom glad for OpenGL ES 2.0
|
// in that case, functions are loaded from a custom glad for OpenGL ES 2.0
|
||||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_DESKTOP_SDL)
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_DESKTOP_SDL) || defined(PLATFORM_DESKTOP_RGFW)
|
||||||
#define GLAD_GLES2_IMPLEMENTATION
|
#define GLAD_GLES2_IMPLEMENTATION
|
||||||
#include "external/glad_gles2.h"
|
#include "external/glad_gles2.h"
|
||||||
#else
|
#else
|
||||||
|
|
@ -954,6 +1202,26 @@ RLAPI void rlLoadDrawQuad(void); // Load and draw a quad
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Default shader vertex attribute locations
|
||||||
|
#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_POSITION
|
||||||
|
#define RL_DEFAULT_SHADER_ATTRIB_LOCATION_POSITION 0
|
||||||
|
#endif
|
||||||
|
#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD
|
||||||
|
#define RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD 1
|
||||||
|
#endif
|
||||||
|
#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_NORMAL
|
||||||
|
#define RL_DEFAULT_SHADER_ATTRIB_LOCATION_NORMAL 2
|
||||||
|
#endif
|
||||||
|
#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR
|
||||||
|
#define RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR 3
|
||||||
|
#endif
|
||||||
|
#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT
|
||||||
|
#define RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT 4
|
||||||
|
#endif
|
||||||
|
#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2
|
||||||
|
#define RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2 5
|
||||||
|
#endif
|
||||||
|
|
||||||
// Default shader vertex attribute names to set location points
|
// Default shader vertex attribute names to set location points
|
||||||
#ifndef RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION
|
#ifndef RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION
|
||||||
#define RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION "vertexPosition" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION
|
#define RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION "vertexPosition" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION
|
||||||
|
|
@ -1296,7 +1564,7 @@ void rlMultMatrixf(const float *matf)
|
||||||
matf[2], matf[6], matf[10], matf[14],
|
matf[2], matf[6], matf[10], matf[14],
|
||||||
matf[3], matf[7], matf[11], matf[15] };
|
matf[3], matf[7], matf[11], matf[15] };
|
||||||
|
|
||||||
*RLGL.State.currentMatrix = rlMatrixMultiply(mat, *RLGL.State.currentMatrix);
|
*RLGL.State.currentMatrix = rlMatrixMultiply(*RLGL.State.currentMatrix, mat);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Multiply the current matrix by a perspective matrix generated by parameters
|
// Multiply the current matrix by a perspective matrix generated by parameters
|
||||||
|
|
@ -2313,7 +2581,7 @@ void rlLoadExtensions(void *loader)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) // Also defined for GRAPHICS_API_OPENGL_21
|
#if defined(GRAPHICS_API_OPENGL_33) // Also defined for GRAPHICS_API_OPENGL_21
|
||||||
// NOTE: glad is generated and contains only required OpenGL 3.3 Core extensions (and lower versions)
|
// NOTE: glad is generated and contains only required OpenGL 3.3 Core extensions (and lower versions)
|
||||||
if (gladLoadGL((GLADloadfunc)loader) == 0) TRACELOG(RL_LOG_WARNING, "GLAD: Cannot load OpenGL extensions");
|
if (rlLoadGL(loader) == 0) TRACELOG(RL_LOG_WARNING, "GLAD: Cannot load OpenGL extensions");
|
||||||
else TRACELOG(RL_LOG_INFO, "GLAD: OpenGL extensions loaded successfully");
|
else TRACELOG(RL_LOG_INFO, "GLAD: OpenGL extensions loaded successfully");
|
||||||
|
|
||||||
// Get number of supported extensions
|
// Get number of supported extensions
|
||||||
|
|
@ -2331,15 +2599,15 @@ void rlLoadExtensions(void *loader)
|
||||||
#if defined(GRAPHICS_API_OPENGL_21)
|
#if defined(GRAPHICS_API_OPENGL_21)
|
||||||
// Register supported extensions flags
|
// Register supported extensions flags
|
||||||
// Optional OpenGL 2.1 extensions
|
// Optional OpenGL 2.1 extensions
|
||||||
RLGL.ExtSupported.vao = GLAD_GL_ARB_vertex_array_object;
|
RLGL.ExtSupported.vao = RLGL_GL_ARB_vertex_array_object;
|
||||||
RLGL.ExtSupported.instancing = (GLAD_GL_EXT_draw_instanced && GLAD_GL_ARB_instanced_arrays);
|
RLGL.ExtSupported.instancing = (RLGL_GL_EXT_draw_instanced && RLGL_GL_ARB_instanced_arrays);
|
||||||
RLGL.ExtSupported.texNPOT = GLAD_GL_ARB_texture_non_power_of_two;
|
RLGL.ExtSupported.texNPOT = RLGL_GL_ARB_texture_non_power_of_two;
|
||||||
RLGL.ExtSupported.texFloat32 = GLAD_GL_ARB_texture_float;
|
RLGL.ExtSupported.texFloat32 = RLGL_GL_ARB_texture_float;
|
||||||
RLGL.ExtSupported.texFloat16 = GLAD_GL_ARB_texture_float;
|
RLGL.ExtSupported.texFloat16 = RLGL_GL_ARB_texture_float;
|
||||||
RLGL.ExtSupported.texDepth = GLAD_GL_ARB_depth_texture;
|
RLGL.ExtSupported.texDepth = RLGL_GL_ARB_depth_texture;
|
||||||
RLGL.ExtSupported.maxDepthBits = 32;
|
RLGL.ExtSupported.maxDepthBits = 32;
|
||||||
RLGL.ExtSupported.texAnisoFilter = GLAD_GL_EXT_texture_filter_anisotropic;
|
RLGL.ExtSupported.texAnisoFilter = RLGL_GL_EXT_texture_filter_anisotropic;
|
||||||
RLGL.ExtSupported.texMirrorClamp = GLAD_GL_EXT_texture_mirror_clamp;
|
RLGL.ExtSupported.texMirrorClamp = RLGL_GL_EXT_texture_mirror_clamp;
|
||||||
#else
|
#else
|
||||||
// Register supported extensions flags
|
// Register supported extensions flags
|
||||||
// OpenGL 3.3 extensions supported by default (core)
|
// OpenGL 3.3 extensions supported by default (core)
|
||||||
|
|
@ -2355,12 +2623,12 @@ void rlLoadExtensions(void *loader)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Optional OpenGL 3.3 extensions
|
// Optional OpenGL 3.3 extensions
|
||||||
RLGL.ExtSupported.texCompASTC = GLAD_GL_KHR_texture_compression_astc_hdr && GLAD_GL_KHR_texture_compression_astc_ldr;
|
RLGL.ExtSupported.texCompASTC = RLGL_GL_KHR_texture_compression_astc_hdr && RLGL_GL_KHR_texture_compression_astc_ldr;
|
||||||
RLGL.ExtSupported.texCompDXT = GLAD_GL_EXT_texture_compression_s3tc; // Texture compression: DXT
|
RLGL.ExtSupported.texCompDXT = RLGL_GL_EXT_texture_compression_s3tc; // Texture compression: DXT
|
||||||
RLGL.ExtSupported.texCompETC2 = GLAD_GL_ARB_ES3_compatibility; // Texture compression: ETC2/EAC
|
RLGL.ExtSupported.texCompETC2 = RLGL_GL_ARB_ES3_compatibility; // Texture compression: ETC2/EAC
|
||||||
#if defined(GRAPHICS_API_OPENGL_43)
|
#if defined(GRAPHICS_API_OPENGL_43)
|
||||||
RLGL.ExtSupported.computeShader = GLAD_GL_ARB_compute_shader;
|
RLGL.ExtSupported.computeShader = RLGL_GL_ARB_compute_shader;
|
||||||
RLGL.ExtSupported.ssbo = GLAD_GL_ARB_shader_storage_buffer_object;
|
RLGL.ExtSupported.ssbo = RLGL_GL_ARB_shader_storage_buffer_object;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // GRAPHICS_API_OPENGL_33
|
#endif // GRAPHICS_API_OPENGL_33
|
||||||
|
|
@ -2390,7 +2658,7 @@ void rlLoadExtensions(void *loader)
|
||||||
|
|
||||||
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
|
|
||||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_DESKTOP_SDL)
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_DESKTOP_SDL) || defined(PLATFORM_DESKTOP_RGFW)
|
||||||
// TODO: Support GLAD loader for OpenGL ES 3.0
|
// TODO: Support GLAD loader for OpenGL ES 3.0
|
||||||
if (gladLoadGLES2((GLADloadfunc)loader) == 0) TRACELOG(RL_LOG_WARNING, "GLAD: Cannot load OpenGL ES2.0 functions");
|
if (gladLoadGLES2((GLADloadfunc)loader) == 0) TRACELOG(RL_LOG_WARNING, "GLAD: Cannot load OpenGL ES2.0 functions");
|
||||||
else TRACELOG(RL_LOG_INFO, "GLAD: OpenGL ES 2.0 loaded successfully");
|
else TRACELOG(RL_LOG_INFO, "GLAD: OpenGL ES 2.0 loaded successfully");
|
||||||
|
|
@ -3406,6 +3674,14 @@ unsigned int rlLoadTextureCubemap(const void *data, int size, int format)
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef GL_RGB565
|
||||||
|
#define GL_RGB565 0x8D62
|
||||||
|
#define GL_RGB32F 0x8815
|
||||||
|
#define GL_RGBA32F 0x8814
|
||||||
|
#define GL_RGB16F 0x881B
|
||||||
|
#define GL_RGBA16F 0x881A
|
||||||
|
#endif
|
||||||
|
|
||||||
// Update already loaded texture in GPU with new data
|
// Update already loaded texture in GPU with new data
|
||||||
// NOTE: We don't know safely if internal texture format is the expected one...
|
// NOTE: We don't know safely if internal texture format is the expected one...
|
||||||
void rlUpdateTexture(unsigned int id, int offsetX, int offsetY, int width, int height, int format, const void *data)
|
void rlUpdateTexture(unsigned int id, int offsetX, int offsetY, int width, int height, int format, const void *data)
|
||||||
|
|
@ -5118,4 +5394,289 @@ static Matrix rlMatrixInvert(Matrix mat)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
|
/*
|
||||||
|
these glad_ functions are sourced from GLAD.h
|
||||||
|
These are sourced from a generated glad.h file and are thereby Public Domain
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(GL_ES_VERSION_3_0) || defined(GL_VERSION_3_0)
|
||||||
|
#define GLAD_GL_IS_SOME_NEW_VERSION 1
|
||||||
|
#else
|
||||||
|
#define GLAD_GL_IS_SOME_NEW_VERSION 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static int glad_gl_has_extension(int version, const char *exts, unsigned int num_exts_i, char **exts_i, const char *ext) {
|
||||||
|
if(!GLAD_GL_IS_SOME_NEW_VERSION) {
|
||||||
|
const char *extensions;
|
||||||
|
const char *loc;
|
||||||
|
const char *terminator;
|
||||||
|
extensions = exts;
|
||||||
|
if(extensions == NULL || ext == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
while(1) {
|
||||||
|
loc = strstr(extensions, ext);
|
||||||
|
if(loc == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
terminator = loc + strlen(ext);
|
||||||
|
if((loc == extensions || *(loc - 1) == ' ') &&
|
||||||
|
(*terminator == ' ' || *terminator == '\0')) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
extensions = terminator;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
unsigned int index;
|
||||||
|
for(index = 0; index < num_exts_i; index++) {
|
||||||
|
const char *e = exts_i[index];
|
||||||
|
if(strcmp(e, ext) == 0) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define GLAD_MAKE_VERSION(major, minor) (major * 10000 + minor)
|
||||||
|
#define GLAD_VERSION_MAJOR(version) (version / 10000)
|
||||||
|
#define GLAD_VERSION_MINOR(version) (version % 10000)
|
||||||
|
|
||||||
|
static int glad_gl_find_core_gl(void) {
|
||||||
|
int i;
|
||||||
|
const char* version;
|
||||||
|
const char* prefixes[] = {
|
||||||
|
"OpenGL ES-CM ",
|
||||||
|
"OpenGL ES-CL ",
|
||||||
|
"OpenGL ES ",
|
||||||
|
"OpenGL SC ",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
int major = 0;
|
||||||
|
int minor = 0;
|
||||||
|
version = (const char*) glGetString(GL_VERSION);
|
||||||
|
if (!version) return 0;
|
||||||
|
for (i = 0; prefixes[i]; i++) {
|
||||||
|
const size_t length = strlen(prefixes[i]);
|
||||||
|
if (strncmp(version, prefixes[i], length) == 0) {
|
||||||
|
version += length;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
sscanf_s(version, "%d.%d", &major, &minor);
|
||||||
|
#else
|
||||||
|
sscanf(version, "%d.%d", &major, &minor);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return GLAD_MAKE_VERSION(major, minor);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int glad_gl_get_extensions( int version, const char **out_exts, unsigned int *out_num_exts_i, char ***out_exts_i) {
|
||||||
|
#if GLAD_GL_IS_SOME_NEW_VERSION
|
||||||
|
if(GLAD_VERSION_MAJOR(version) < 3) {
|
||||||
|
#else
|
||||||
|
(void) version;
|
||||||
|
(void) out_num_exts_i;
|
||||||
|
(void) out_exts_i;
|
||||||
|
#endif
|
||||||
|
*out_exts = (const char *)glGetString(GL_EXTENSIONS);
|
||||||
|
#if GLAD_GL_IS_SOME_NEW_VERSION
|
||||||
|
} else {
|
||||||
|
unsigned int index = 0;
|
||||||
|
unsigned int num_exts_i = 0;
|
||||||
|
char **exts_i = NULL;
|
||||||
|
if (glGetStringi == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
glGetIntegerv(GL_NUM_EXTENSIONS, (int*) &num_exts_i);
|
||||||
|
if (num_exts_i > 0) {
|
||||||
|
exts_i = (char **) RL_MALLOC(num_exts_i * (sizeof *exts_i));
|
||||||
|
}
|
||||||
|
if (exts_i == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
for(index = 0; index < num_exts_i; index++) {
|
||||||
|
const char *gl_str_tmp = (const char*) glGetStringi(GL_EXTENSIONS, index);
|
||||||
|
size_t len = strlen(gl_str_tmp) + 1;
|
||||||
|
|
||||||
|
char *local_str = (char*) RL_MALLOC(len * sizeof(char));
|
||||||
|
if(local_str != NULL) {
|
||||||
|
memcpy(local_str, gl_str_tmp, len * sizeof(char));
|
||||||
|
}
|
||||||
|
|
||||||
|
exts_i[index] = local_str;
|
||||||
|
}
|
||||||
|
|
||||||
|
*out_num_exts_i = num_exts_i;
|
||||||
|
*out_exts_i = exts_i;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
back to rlgl, no more glad sourced stuff
|
||||||
|
*/
|
||||||
|
|
||||||
|
int rlLoadGL(RLGLloadfunc proc) {
|
||||||
|
#define RLGL_PROC_DEF(proc, name) name##SRC = (name##PROC)proc(#name)
|
||||||
|
|
||||||
|
RLGL_PROC_DEF(proc, glShaderSource);
|
||||||
|
RLGL_PROC_DEF(proc, glCreateShader);
|
||||||
|
RLGL_PROC_DEF(proc, glCompileShader);
|
||||||
|
RLGL_PROC_DEF(proc, glCreateProgram);
|
||||||
|
RLGL_PROC_DEF(proc, glAttachShader);
|
||||||
|
RLGL_PROC_DEF(proc, glBindAttribLocation);
|
||||||
|
RLGL_PROC_DEF(proc, glLinkProgram);
|
||||||
|
RLGL_PROC_DEF(proc, glBindBuffer);
|
||||||
|
RLGL_PROC_DEF(proc, glBufferData);
|
||||||
|
RLGL_PROC_DEF(proc, glEnableVertexAttribArray);
|
||||||
|
RLGL_PROC_DEF(proc, glVertexAttribPointer);
|
||||||
|
RLGL_PROC_DEF(proc, glDisableVertexAttribArray);
|
||||||
|
RLGL_PROC_DEF(proc, glDeleteBuffers);
|
||||||
|
RLGL_PROC_DEF(proc, glUseProgram);
|
||||||
|
RLGL_PROC_DEF(proc, glDetachShader);
|
||||||
|
RLGL_PROC_DEF(proc, glDeleteShader);
|
||||||
|
RLGL_PROC_DEF(proc, glDeleteProgram);
|
||||||
|
RLGL_PROC_DEF(proc, glBufferSubData);
|
||||||
|
RLGL_PROC_DEF(proc, glGetShaderiv);
|
||||||
|
RLGL_PROC_DEF(proc, glGetShaderInfoLog);
|
||||||
|
RLGL_PROC_DEF(proc, glGetProgramiv);
|
||||||
|
RLGL_PROC_DEF(proc, glGetProgramInfoLog);
|
||||||
|
RLGL_PROC_DEF(proc, glGenBuffers);
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_33) && !defined(GRAPHICS_API_ES2) && !defined(RGL_OPENGL_ES3)
|
||||||
|
RLGL_PROC_DEF(proc, glBindVertexArray);
|
||||||
|
RLGL_PROC_DEF(proc, glGenVertexArrays);
|
||||||
|
RLGL_PROC_DEF(proc, glDeleteVertexArrays);
|
||||||
|
#endif
|
||||||
|
RLGL_PROC_DEF(proc, glGetUniformLocation);
|
||||||
|
RLGL_PROC_DEF(proc, glUniformMatrix4fv);
|
||||||
|
RLGL_PROC_DEF(proc, glActiveTexture);
|
||||||
|
RLGL_PROC_DEF(proc, glBindFramebuffer);
|
||||||
|
RLGL_PROC_DEF(proc, glBindFramebuffer);
|
||||||
|
RLGL_PROC_DEF(proc, glBlitFramebuffer);
|
||||||
|
RLGL_PROC_DEF(proc, glDrawBuffers);
|
||||||
|
RLGL_PROC_DEF(proc, glBlendEquation);
|
||||||
|
RLGL_PROC_DEF(proc, glBlendFuncSeparate);
|
||||||
|
RLGL_PROC_DEF(proc, glBlendEquationSeparate);
|
||||||
|
RLGL_PROC_DEF(proc, glUniform4f);
|
||||||
|
RLGL_PROC_DEF(proc, glUniformi);
|
||||||
|
RLGL_PROC_DEF(proc, glCompressedTexImageD);
|
||||||
|
RLGL_PROC_DEF(proc, glLoadTextureDepth);
|
||||||
|
RLGL_PROC_DEF(proc, glGenRenderbuffers);
|
||||||
|
RLGL_PROC_DEF(proc, glBindRenderbuffer);
|
||||||
|
RLGL_PROC_DEF(proc, glRenderbufferStorage);
|
||||||
|
RLGL_PROC_DEF(proc, glGenerateMipmap);
|
||||||
|
RLGL_PROC_DEF(proc, glGenFramebuffers);
|
||||||
|
RLGL_PROC_DEF(proc, glFramebufferTextureD);
|
||||||
|
RLGL_PROC_DEF(proc, glFramebufferRenderbuffer);
|
||||||
|
RLGL_PROC_DEF(proc, glCheckFramebufferStatus);
|
||||||
|
RLGL_PROC_DEF(proc, glGetFramebufferAttachmentParameteriv);
|
||||||
|
RLGL_PROC_DEF(proc, glDeleteRenderbuffers);
|
||||||
|
RLGL_PROC_DEF(proc, glDeleteFramebuffers);
|
||||||
|
RLGL_PROC_DEF(proc, glDrawArraysInstanced);
|
||||||
|
RLGL_PROC_DEF(proc, glDrawElementsInstanced);
|
||||||
|
RLGL_PROC_DEF(proc, glVertexAttribDivisor);
|
||||||
|
RLGL_PROC_DEF(proc, glGetAttribLocation);
|
||||||
|
RLGL_PROC_DEF(proc, glUniformfv);
|
||||||
|
RLGL_PROC_DEF(proc, glUniform3fv);
|
||||||
|
RLGL_PROC_DEF(proc, glUniform4fv);
|
||||||
|
RLGL_PROC_DEF(proc, glUniformiv);
|
||||||
|
RLGL_PROC_DEF(proc, glUniform3iv);
|
||||||
|
RLGL_PROC_DEF(proc, glUniform4iv);
|
||||||
|
RLGL_PROC_DEF(proc, glVertexAttribfv);
|
||||||
|
RLGL_PROC_DEF(proc, glVertexAttrib3fv);
|
||||||
|
RLGL_PROC_DEF(proc, glVertexAttrib4fv);
|
||||||
|
RLGL_PROC_DEF(proc, glUniform1i);
|
||||||
|
RLGL_PROC_DEF(proc, glCompressedTexImage2D);
|
||||||
|
RLGL_PROC_DEF(proc, glFramebufferTexture2D);
|
||||||
|
RLGL_PROC_DEF(proc, glUniform1fv);
|
||||||
|
RLGL_PROC_DEF(proc, glUniform2fv);
|
||||||
|
RLGL_PROC_DEF(proc, glUniform1iv);
|
||||||
|
RLGL_PROC_DEF(proc, glUniform2iv);
|
||||||
|
RLGL_PROC_DEF(proc, glVertexAttrib1fv);
|
||||||
|
RLGL_PROC_DEF(proc, glVertexAttrib2fv);
|
||||||
|
RLGL_PROC_DEF(proc, glGetStringi);
|
||||||
|
|
||||||
|
if (
|
||||||
|
glShaderSourceSRC == NULL ||
|
||||||
|
glCreateShaderSRC == NULL ||
|
||||||
|
glCompileShaderSRC == NULL ||
|
||||||
|
glCreateProgramSRC == NULL ||
|
||||||
|
glAttachShaderSRC == NULL ||
|
||||||
|
glBindAttribLocationSRC == NULL ||
|
||||||
|
glLinkProgramSRC == NULL ||
|
||||||
|
glBindBufferSRC == NULL ||
|
||||||
|
glBufferDataSRC == NULL ||
|
||||||
|
glVertexAttribPointerSRC == NULL ||
|
||||||
|
glDisableVertexAttribArraySRC == NULL ||
|
||||||
|
glDeleteBuffersSRC == NULL ||
|
||||||
|
glUseProgramSRC == NULL ||
|
||||||
|
glDetachShaderSRC == NULL ||
|
||||||
|
glDeleteShaderSRC == NULL ||
|
||||||
|
glDeleteProgramSRC == NULL ||
|
||||||
|
glBufferSubDataSRC == NULL ||
|
||||||
|
glGetShaderivSRC == NULL ||
|
||||||
|
glGetShaderInfoLogSRC == NULL ||
|
||||||
|
glGetProgramivSRC == NULL ||
|
||||||
|
glGetProgramInfoLogSRC == NULL ||
|
||||||
|
glGenBuffersSRC == NULL ||
|
||||||
|
glGetUniformLocationSRC == NULL ||
|
||||||
|
glUniformMatrix4fvSRC == NULL
|
||||||
|
)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
TRACELOG(RL_LOG_INFO, "RLGL: Finished loading GL functions");
|
||||||
|
|
||||||
|
#if !defined(GRAPHICS_API_OPENGL_21) && !defined(GRAPHICS_API_OPENGL_ES3) && !defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
|
/* quick check to make sure things work */
|
||||||
|
GLuint vao;
|
||||||
|
glGenVertexArraysSRC(1, &vao);
|
||||||
|
|
||||||
|
if (vao == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
glDeleteVertexArraysSRC(1, &vao);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
TRACELOG(RL_LOG_INFO, "RLGL: Loaded GL functions successfully");
|
||||||
|
|
||||||
|
#define RLGL_GL_CHECK_FOR(gl_var) gl_var = glad_gl_has_extension(version, exts, num_exts_i, exts_i, #gl_var)
|
||||||
|
|
||||||
|
int version = glad_gl_find_core_gl();
|
||||||
|
const char *exts = NULL;
|
||||||
|
unsigned int num_exts_i = 0;
|
||||||
|
char **exts_i = NULL;
|
||||||
|
if (!glad_gl_get_extensions(version, &exts, &num_exts_i, &exts_i)) return 0;
|
||||||
|
|
||||||
|
RLGL_GL_CHECK_FOR(RLGL_GL_ARB_vertex_array_object);
|
||||||
|
RLGL_GL_CHECK_FOR(RLGL_GL_EXT_draw_instanced);
|
||||||
|
RLGL_GL_CHECK_FOR(RLGL_GL_ARB_instanced_arrays);
|
||||||
|
RLGL_GL_CHECK_FOR(RLGL_GL_ARB_instanced_arrays);
|
||||||
|
RLGL_GL_CHECK_FOR(RLGL_GL_ARB_texture_non_power_of_two);
|
||||||
|
|
||||||
|
RLGL_GL_CHECK_FOR(RLGL_GL_ARB_texture_float);
|
||||||
|
RLGL_GL_CHECK_FOR(RLGL_GL_ARB_texture_float);
|
||||||
|
RLGL_GL_CHECK_FOR(RLGL_GL_ARB_depth_texture);
|
||||||
|
|
||||||
|
RLGL_GL_CHECK_FOR(RLGL_GL_EXT_texture_filter_anisotropic);
|
||||||
|
RLGL_GL_CHECK_FOR(RLGL_GL_EXT_texture_mirror_clamp);
|
||||||
|
|
||||||
|
RLGL_GL_CHECK_FOR(RLGL_GL_KHR_texture_compression_astc_hdr);
|
||||||
|
RLGL_GL_CHECK_FOR(RLGL_GL_KHR_texture_compression_astc_ldr);
|
||||||
|
RLGL_GL_CHECK_FOR(RLGL_GL_EXT_texture_compression_s3tc); // Texture compression: DXT
|
||||||
|
RLGL_GL_CHECK_FOR(RLGL_GL_ARB_ES3_compatibility); // Texture compression: ETC2/EAC
|
||||||
|
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_43)
|
||||||
|
RLGL_GL_CHECK_FOR(RLGL_GL_ARB_compute_shader);
|
||||||
|
RLGL_GL_CHECK_FOR(RLGL_GL_ARB_shader_storage_buffer_object);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // RLGL_IMPLEMENTATION
|
#endif // RLGL_IMPLEMENTATION
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user