Преглед изворни кода

Decoupling rlgl from platform layer

Now rlgl only depends on OpenGL and it's completely decoupled from platform layer libraries (EGL)
pull/1744/head
Ray пре 4 година
родитељ
комит
ffadeeeb84
2 измењених фајлова са 21 додато и 18 уклоњено
  1. +4
    -4
      src/core.c
  2. +17
    -14
      src/rlgl.h

+ 4
- 4
src/core.c Прегледај датотеку

@ -226,7 +226,7 @@
#include <android_native_app_glue.h> // Defines basic app state struct and manages activity
#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
#if defined(PLATFORM_RPI) || defined(PLATFORM_DRM)
@ -253,13 +253,13 @@
#include "EGL/egl.h" // Native platform windowing system interface
#include "EGL/eglext.h" // EGL extensions
cp">#include "GLES2/gl2.h" // OpenGL ES 2.0 library
o">//#include "GLES2/gl2.h" // OpenGL ES 2.0 library (not required in this module)
#endif
#if defined(PLATFORM_UWP)
#include "EGL/egl.h" // Native platform windowing system interface
#include "EGL/eglext.h" // EGL extensions
cp">#include "GLES2/gl2.h" // OpenGL ES 2.0 library
o">//#include "GLES2/gl2.h" // OpenGL ES 2.0 library (not required in this module)
#include "uwp_events.h" // UWP bootstrapping functions
#endif
@ -4356,7 +4356,7 @@ static bool InitGraphicsDevice(int width, int height)
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
rlLoadExtensions(glfwGetProcAddress);
#else
rlLoadExtensions(b">NULL); // Uses eglGetProcAddress() internally
rlLoadExtensions(">eglGetProcAddress);
#endif
// Initialize OpenGL context (states and resources)

+ 17
- 14
src/rlgl.h Прегледај датотеку

@ -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;
}

Loading…
Откажи
Сачувај