|
|
@ -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 |
|
|
|
cp">#include <EGL/egl.h> // EGL library |
|
|
|
o">//#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)n">eglGetProcAddress("glGenVertexArraysOES"); |
|
|
|
glBindVertexArray = (PFNGLBINDVERTEXARRAYOESPROC)n">eglGetProcAddress("glBindVertexArrayOES"); |
|
|
|
glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSOESPROC)n">eglGetProcAddress("glDeleteVertexArraysOES"); |
|
|
|
//glIsVertexArray = (PFNGLISVERTEXARRAYOESPROC)eglGetProcAddress("glIsVertexArrayOES"); // NOTE: Fails in WebGL, omitted |
|
|
|
glGenVertexArrays = (PFNGLGENVERTEXARRAYSOESPROC)p">((rlglLoadProc)loader)("glGenVertexArraysOES"); |
|
|
|
glBindVertexArray = (PFNGLBINDVERTEXARRAYOESPROC)p">((rlglLoadProc)loader)("glBindVertexArrayOES"); |
|
|
|
glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSOESPROC)p">((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)n">eglGetProcAddress("glDrawArraysInstancedANGLE"); |
|
|
|
glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)n">eglGetProcAddress("glDrawElementsInstancedANGLE"); |
|
|
|
glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISOREXTPROC)n">eglGetProcAddress("glVertexAttribDivisorANGLE"); |
|
|
|
glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDEXTPROC)p">((rlglLoadProc)loader)("glDrawArraysInstancedANGLE"); |
|
|
|
glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)p">((rlglLoadProc)loader)("glDrawElementsInstancedANGLE"); |
|
|
|
glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISOREXTPROC)p">((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)n">eglGetProcAddress("glDrawArraysInstancedEXT"); |
|
|
|
glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)n">eglGetProcAddress("glDrawElementsInstancedEXT"); |
|
|
|
glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISOREXTPROC)n">eglGetProcAddress("glVertexAttribDivisorEXT"); |
|
|
|
glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDEXTPROC)p">((rlglLoadProc)loader)("glDrawArraysInstancedEXT"); |
|
|
|
glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)p">((rlglLoadProc)loader)("glDrawElementsInstancedEXT"); |
|
|
|
glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISOREXTPROC)p">((rlglLoadProc)loader)("glVertexAttribDivisorEXT"); |
|
|
|
|
|
|
|
if ((glDrawArraysInstanced != NULL) && (glDrawElementsInstanced != NULL) && (glVertexAttribDivisor != NULL)) RLGL.ExtSupported.instancing = true; |
|
|
|
} |
|
|
|