|
@@ -544,7 +544,7 @@ RLAPI void rlSetBlendFactors(int glSrcFactor, int glDstFactor, int glEquation);
|
|
|
// rlgl initialization functions
|
|
|
RLAPI void rlglInit(int width, int height); // Initialize rlgl (buffers, shaders, textures, states)
|
|
|
RLAPI void rlglClose(void); // De-inititialize rlgl (buffers, shaders, textures)
|
|
|
-RLAPI void rlLoadExtensions(void* loader); // Load OpenGL extensions (loader function pointer required)
|
|
|
+RLAPI void rlLoadExtensions(void *loader); // Load OpenGL extensions (loader function required)
|
|
|
RLAPI int rlGetVersion(void); // Returns current OpenGL version
|
|
|
RLAPI int rlGetFramebufferWidth(void); // Get default framebuffer width
|
|
|
RLAPI int rlGetFramebufferHeight(void); // Get default framebuffer height
|
|
@@ -689,7 +689,7 @@ RLAPI void rlLoadDrawQuad(void); // Load and draw a quad
|
|
|
|
|
|
#if defined(GRAPHICS_API_OPENGL_ES2)
|
|
|
#define GL_GLEXT_PROTOTYPES
|
|
|
- #include <EGL/egl.h> // EGL library
|
|
|
+ //#include <EGL/egl.h> // EGL library -> not required, platform layer
|
|
|
#include <GLES2/gl2.h> // OpenGL ES 2.0 library
|
|
|
#include <GLES2/gl2ext.h> // OpenGL ES 2.0 extensions library
|
|
|
|
|
@@ -839,11 +839,14 @@ typedef struct rlglData {
|
|
|
bool texMirrorClamp; // Clamp mirror wrap mode supported (GL_EXT_texture_mirror_clamp)
|
|
|
bool texAnisoFilter; // Anisotropic texture filtering support (GL_EXT_texture_filter_anisotropic)
|
|
|
|
|
|
- float maxAnisotropyLevel; // Maximum anisotropy level supported (minimum is 2.0f)
|
|
|
+ float maxAnisotropyLevel; // Maximum anisotropy level supported (minimum is 2.0f)
|
|
|
int maxDepthBits; // Maximum bits for depth component
|
|
|
|
|
|
} ExtSupported; // Extensions supported flags
|
|
|
} rlglData;
|
|
|
+
|
|
|
+typedef void *(*rlglLoadProc)(const char *name); // OpenGL extension functions loader signature (same as GLADloadproc)
|
|
|
+
|
|
|
#endif // GRAPHICS_API_OPENGL_33 || GRAPHICS_API_OPENGL_ES2
|
|
|
|
|
|
//----------------------------------------------------------------------------------
|
|
@@ -1664,7 +1667,7 @@ void rlglClose(void)
|
|
|
}
|
|
|
|
|
|
// Load OpenGL extensions
|
|
|
-// NOTE: External loader function could be passed as a pointer
|
|
|
+// NOTE: External loader function must be provided
|
|
|
void rlLoadExtensions(void *loader)
|
|
|
{
|
|
|
#if defined(GRAPHICS_API_OPENGL_33) // Also defined for GRAPHICS_API_OPENGL_21
|
|
@@ -1747,10 +1750,10 @@ void rlLoadExtensions(void *loader)
|
|
|
{
|
|
|
// The extension is supported by our hardware and driver, try to get related functions pointers
|
|
|
// NOTE: emscripten does not support VAOs natively, it uses emulation and it reduces overall performance...
|
|
|
- glGenVertexArrays = (PFNGLGENVERTEXARRAYSOESPROC)eglGetProcAddress("glGenVertexArraysOES");
|
|
|
- glBindVertexArray = (PFNGLBINDVERTEXARRAYOESPROC)eglGetProcAddress("glBindVertexArrayOES");
|
|
|
- glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSOESPROC)eglGetProcAddress("glDeleteVertexArraysOES");
|
|
|
- //glIsVertexArray = (PFNGLISVERTEXARRAYOESPROC)eglGetProcAddress("glIsVertexArrayOES"); // NOTE: Fails in WebGL, omitted
|
|
|
+ glGenVertexArrays = (PFNGLGENVERTEXARRAYSOESPROC)((rlglLoadProc)loader)("glGenVertexArraysOES");
|
|
|
+ glBindVertexArray = (PFNGLBINDVERTEXARRAYOESPROC)((rlglLoadProc)loader)("glBindVertexArrayOES");
|
|
|
+ glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSOESPROC)((rlglLoadProc)loader)("glDeleteVertexArraysOES");
|
|
|
+ //glIsVertexArray = (PFNGLISVERTEXARRAYOESPROC)loader("glIsVertexArrayOES"); // NOTE: Fails in WebGL, omitted
|
|
|
|
|
|
if ((glGenVertexArrays != NULL) && (glBindVertexArray != NULL) && (glDeleteVertexArrays != NULL)) RLGL.ExtSupported.vao = true;
|
|
|
}
|
|
@@ -1758,9 +1761,9 @@ void rlLoadExtensions(void *loader)
|
|
|
// Check instanced rendering support
|
|
|
if (strcmp(extList[i], (const char *)"GL_ANGLE_instanced_arrays") == 0) // Web ANGLE
|
|
|
{
|
|
|
- glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDEXTPROC)eglGetProcAddress("glDrawArraysInstancedANGLE");
|
|
|
- glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)eglGetProcAddress("glDrawElementsInstancedANGLE");
|
|
|
- glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISOREXTPROC)eglGetProcAddress("glVertexAttribDivisorANGLE");
|
|
|
+ glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDEXTPROC)((rlglLoadProc)loader)("glDrawArraysInstancedANGLE");
|
|
|
+ glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)((rlglLoadProc)loader)("glDrawElementsInstancedANGLE");
|
|
|
+ glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISOREXTPROC)((rlglLoadProc)loader)("glVertexAttribDivisorANGLE");
|
|
|
|
|
|
if ((glDrawArraysInstanced != NULL) && (glDrawElementsInstanced != NULL) && (glVertexAttribDivisor != NULL)) RLGL.ExtSupported.instancing = true;
|
|
|
}
|
|
@@ -1769,9 +1772,9 @@ void rlLoadExtensions(void *loader)
|
|
|
if ((strcmp(extList[i], (const char *)"GL_EXT_draw_instanced") == 0) && // Standard EXT
|
|
|
(strcmp(extList[i], (const char *)"GL_EXT_instanced_arrays") == 0))
|
|
|
{
|
|
|
- glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDEXTPROC)eglGetProcAddress("glDrawArraysInstancedEXT");
|
|
|
- glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)eglGetProcAddress("glDrawElementsInstancedEXT");
|
|
|
- glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISOREXTPROC)eglGetProcAddress("glVertexAttribDivisorEXT");
|
|
|
+ glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDEXTPROC)((rlglLoadProc)loader)("glDrawArraysInstancedEXT");
|
|
|
+ glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)((rlglLoadProc)loader)("glDrawElementsInstancedEXT");
|
|
|
+ glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISOREXTPROC)((rlglLoadProc)loader)("glVertexAttribDivisorEXT");
|
|
|
|
|
|
if ((glDrawArraysInstanced != NULL) && (glDrawElementsInstanced != NULL) && (glVertexAttribDivisor != NULL)) RLGL.ExtSupported.instancing = true;
|
|
|
}
|