Decoupling rlgl from platform layer
Now rlgl only depends on OpenGL and it's completely decoupled from platform layer libraries (EGL)
This commit is contained in:
parent
f516f4099b
commit
ffadeeeb84
2 changed files with 21 additions and 18 deletions
|
@ -226,7 +226,7 @@
|
||||||
#include <android_native_app_glue.h> // Defines basic app state struct and manages activity
|
#include <android_native_app_glue.h> // Defines basic app state struct and manages activity
|
||||||
|
|
||||||
#include <EGL/egl.h> // Native platform windowing system interface
|
#include <EGL/egl.h> // Native platform windowing system interface
|
||||||
//#include <GLES2/gl2.h> // OpenGL ES 2.0 library (not required in this module)
|
//#include <GLES2/gl2.h> // OpenGL ES 2.0 library (not required in this module)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PLATFORM_RPI) || defined(PLATFORM_DRM)
|
#if defined(PLATFORM_RPI) || defined(PLATFORM_DRM)
|
||||||
|
@ -253,13 +253,13 @@
|
||||||
|
|
||||||
#include "EGL/egl.h" // Native platform windowing system interface
|
#include "EGL/egl.h" // Native platform windowing system interface
|
||||||
#include "EGL/eglext.h" // EGL extensions
|
#include "EGL/eglext.h" // EGL extensions
|
||||||
#include "GLES2/gl2.h" // OpenGL ES 2.0 library
|
//#include "GLES2/gl2.h" // OpenGL ES 2.0 library (not required in this module)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PLATFORM_UWP)
|
#if defined(PLATFORM_UWP)
|
||||||
#include "EGL/egl.h" // Native platform windowing system interface
|
#include "EGL/egl.h" // Native platform windowing system interface
|
||||||
#include "EGL/eglext.h" // EGL extensions
|
#include "EGL/eglext.h" // EGL extensions
|
||||||
#include "GLES2/gl2.h" // OpenGL ES 2.0 library
|
//#include "GLES2/gl2.h" // OpenGL ES 2.0 library (not required in this module)
|
||||||
#include "uwp_events.h" // UWP bootstrapping functions
|
#include "uwp_events.h" // UWP bootstrapping functions
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -4356,7 +4356,7 @@ static bool InitGraphicsDevice(int width, int height)
|
||||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
||||||
rlLoadExtensions(glfwGetProcAddress);
|
rlLoadExtensions(glfwGetProcAddress);
|
||||||
#else
|
#else
|
||||||
rlLoadExtensions(NULL); // Uses eglGetProcAddress() internally
|
rlLoadExtensions(eglGetProcAddress);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Initialize OpenGL context (states and resources)
|
// Initialize OpenGL context (states and resources)
|
||||||
|
|
31
src/rlgl.h
31
src/rlgl.h
|
@ -544,7 +544,7 @@ RLAPI void rlSetBlendFactors(int glSrcFactor, int glDstFactor, int glEquation);
|
||||||
// rlgl initialization functions
|
// rlgl initialization functions
|
||||||
RLAPI void rlglInit(int width, int height); // Initialize rlgl (buffers, shaders, textures, states)
|
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 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 rlGetVersion(void); // Returns current OpenGL version
|
||||||
RLAPI int rlGetFramebufferWidth(void); // Get default framebuffer width
|
RLAPI int rlGetFramebufferWidth(void); // Get default framebuffer width
|
||||||
RLAPI int rlGetFramebufferHeight(void); // Get default framebuffer height
|
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)
|
#if defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
#define GL_GLEXT_PROTOTYPES
|
#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/gl2.h> // OpenGL ES 2.0 library
|
||||||
#include <GLES2/gl2ext.h> // OpenGL ES 2.0 extensions 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 texMirrorClamp; // Clamp mirror wrap mode supported (GL_EXT_texture_mirror_clamp)
|
||||||
bool texAnisoFilter; // Anisotropic texture filtering support (GL_EXT_texture_filter_anisotropic)
|
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
|
int maxDepthBits; // Maximum bits for depth component
|
||||||
|
|
||||||
} ExtSupported; // Extensions supported flags
|
} ExtSupported; // Extensions supported flags
|
||||||
} rlglData;
|
} rlglData;
|
||||||
|
|
||||||
|
typedef void *(*rlglLoadProc)(const char *name); // OpenGL extension functions loader signature (same as GLADloadproc)
|
||||||
|
|
||||||
#endif // GRAPHICS_API_OPENGL_33 || GRAPHICS_API_OPENGL_ES2
|
#endif // GRAPHICS_API_OPENGL_33 || GRAPHICS_API_OPENGL_ES2
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
@ -1664,7 +1667,7 @@ void rlglClose(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load OpenGL extensions
|
// Load OpenGL extensions
|
||||||
// NOTE: External loader function could be passed as a pointer
|
// NOTE: External loader function must be provided
|
||||||
void rlLoadExtensions(void *loader)
|
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
|
||||||
|
@ -1747,10 +1750,10 @@ void rlLoadExtensions(void *loader)
|
||||||
{
|
{
|
||||||
// The extension is supported by our hardware and driver, try to get related functions pointers
|
// 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...
|
// NOTE: emscripten does not support VAOs natively, it uses emulation and it reduces overall performance...
|
||||||
glGenVertexArrays = (PFNGLGENVERTEXARRAYSOESPROC)eglGetProcAddress("glGenVertexArraysOES");
|
glGenVertexArrays = (PFNGLGENVERTEXARRAYSOESPROC)((rlglLoadProc)loader)("glGenVertexArraysOES");
|
||||||
glBindVertexArray = (PFNGLBINDVERTEXARRAYOESPROC)eglGetProcAddress("glBindVertexArrayOES");
|
glBindVertexArray = (PFNGLBINDVERTEXARRAYOESPROC)((rlglLoadProc)loader)("glBindVertexArrayOES");
|
||||||
glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSOESPROC)eglGetProcAddress("glDeleteVertexArraysOES");
|
glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSOESPROC)((rlglLoadProc)loader)("glDeleteVertexArraysOES");
|
||||||
//glIsVertexArray = (PFNGLISVERTEXARRAYOESPROC)eglGetProcAddress("glIsVertexArrayOES"); // NOTE: Fails in WebGL, omitted
|
//glIsVertexArray = (PFNGLISVERTEXARRAYOESPROC)loader("glIsVertexArrayOES"); // NOTE: Fails in WebGL, omitted
|
||||||
|
|
||||||
if ((glGenVertexArrays != NULL) && (glBindVertexArray != NULL) && (glDeleteVertexArrays != NULL)) RLGL.ExtSupported.vao = true;
|
if ((glGenVertexArrays != NULL) && (glBindVertexArray != NULL) && (glDeleteVertexArrays != NULL)) RLGL.ExtSupported.vao = true;
|
||||||
}
|
}
|
||||||
|
@ -1758,9 +1761,9 @@ void rlLoadExtensions(void *loader)
|
||||||
// Check instanced rendering support
|
// Check instanced rendering support
|
||||||
if (strcmp(extList[i], (const char *)"GL_ANGLE_instanced_arrays") == 0) // Web ANGLE
|
if (strcmp(extList[i], (const char *)"GL_ANGLE_instanced_arrays") == 0) // Web ANGLE
|
||||||
{
|
{
|
||||||
glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDEXTPROC)eglGetProcAddress("glDrawArraysInstancedANGLE");
|
glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDEXTPROC)((rlglLoadProc)loader)("glDrawArraysInstancedANGLE");
|
||||||
glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)eglGetProcAddress("glDrawElementsInstancedANGLE");
|
glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)((rlglLoadProc)loader)("glDrawElementsInstancedANGLE");
|
||||||
glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISOREXTPROC)eglGetProcAddress("glVertexAttribDivisorANGLE");
|
glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISOREXTPROC)((rlglLoadProc)loader)("glVertexAttribDivisorANGLE");
|
||||||
|
|
||||||
if ((glDrawArraysInstanced != NULL) && (glDrawElementsInstanced != NULL) && (glVertexAttribDivisor != NULL)) RLGL.ExtSupported.instancing = true;
|
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
|
if ((strcmp(extList[i], (const char *)"GL_EXT_draw_instanced") == 0) && // Standard EXT
|
||||||
(strcmp(extList[i], (const char *)"GL_EXT_instanced_arrays") == 0))
|
(strcmp(extList[i], (const char *)"GL_EXT_instanced_arrays") == 0))
|
||||||
{
|
{
|
||||||
glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDEXTPROC)eglGetProcAddress("glDrawArraysInstancedEXT");
|
glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDEXTPROC)((rlglLoadProc)loader)("glDrawArraysInstancedEXT");
|
||||||
glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)eglGetProcAddress("glDrawElementsInstancedEXT");
|
glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)((rlglLoadProc)loader)("glDrawElementsInstancedEXT");
|
||||||
glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISOREXTPROC)eglGetProcAddress("glVertexAttribDivisorEXT");
|
glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISOREXTPROC)((rlglLoadProc)loader)("glVertexAttribDivisorEXT");
|
||||||
|
|
||||||
if ((glDrawArraysInstanced != NULL) && (glDrawElementsInstanced != NULL) && (glVertexAttribDivisor != NULL)) RLGL.ExtSupported.instancing = true;
|
if ((glDrawArraysInstanced != NULL) && (glDrawElementsInstanced != NULL) && (glVertexAttribDivisor != NULL)) RLGL.ExtSupported.instancing = true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue