summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorChema Guerra <[email protected]>2023-06-12 08:18:31 +0200
committerGitHub <[email protected]>2023-06-12 08:18:31 +0200
commitf385d0ce1cb71338c49025db43a78ac25ed0c35f (patch)
treecc09612c6b39dd0ca792503309a10bacf2a4ac60 /src
parent2e00d16f3d3808defe76d9af75df2dd714c66af2 (diff)
downloadraylib-f385d0ce1cb71338c49025db43a78ac25ed0c35f.tar.gz
raylib-f385d0ce1cb71338c49025db43a78ac25ed0c35f.zip
Continuation of support for ES3/WebGL2 (#3107)
* Continuation of support for ES3/WebGL2 * GetTouchPointState() * Amends to the WebGL2 PR --------- Co-authored-by: root <root@DESKTOP-GLOV9QV> Co-authored-by: chemguerra <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/Makefile1
-rw-r--r--src/rlgl.h52
2 files changed, 49 insertions, 4 deletions
diff --git a/src/Makefile b/src/Makefile
index c6cd30e8..fc4c5b0c 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -246,6 +246,7 @@ endif
ifeq ($(PLATFORM),PLATFORM_WEB)
# On HTML5 OpenGL ES 2.0 is used, emscripten translates it to WebGL 1.0
GRAPHICS = GRAPHICS_API_OPENGL_ES2
+ #GRAPHICS = GRAPHICS_API_OPENGL_ES3 # Uncomment to use ES3/WebGL2 (preliminary support).
endif
ifeq ($(PLATFORM),PLATFORM_ANDROID)
# By default use OpenGL ES 2.0 on Android
diff --git a/src/rlgl.h b/src/rlgl.h
index 5ba2593f..8c101a79 100644
--- a/src/rlgl.h
+++ b/src/rlgl.h
@@ -148,7 +148,8 @@
!defined(GRAPHICS_API_OPENGL_21) && \
!defined(GRAPHICS_API_OPENGL_33) && \
!defined(GRAPHICS_API_OPENGL_43) && \
- !defined(GRAPHICS_API_OPENGL_ES2)
+ !defined(GRAPHICS_API_OPENGL_ES2) && \
+ !defined(GRAPHICS_API_OPENGL_ES3)
#define GRAPHICS_API_OPENGL_33
#endif
@@ -1711,7 +1712,7 @@ void rlDisableFramebuffer(void)
// NOTE: One color buffer is always active by default
void rlActiveDrawBuffers(int count)
{
-#if (defined(GRAPHICS_API_OPENGL_33) && defined(RLGL_RENDER_TEXTURES_HINT))
+#if ((defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES3)) && defined(RLGL_RENDER_TEXTURES_HINT))
// NOTE: Maximum number of draw buffers supported is implementation dependant,
// it can be queried with glGet*() but it must be at least 8
//GLint maxDrawBuffers = 0;
@@ -1723,6 +1724,16 @@ void rlActiveDrawBuffers(int count)
else
{
unsigned int buffers[8] = {
+#if defined(GRAPHICS_API_OPENGL_ES3)
+ GL_COLOR_ATTACHMENT0_EXT,
+ GL_COLOR_ATTACHMENT1_EXT,
+ GL_COLOR_ATTACHMENT2_EXT,
+ GL_COLOR_ATTACHMENT3_EXT,
+ GL_COLOR_ATTACHMENT4_EXT,
+ GL_COLOR_ATTACHMENT5_EXT,
+ GL_COLOR_ATTACHMENT6_EXT,
+ GL_COLOR_ATTACHMENT7_EXT,
+#else
GL_COLOR_ATTACHMENT0,
GL_COLOR_ATTACHMENT1,
GL_COLOR_ATTACHMENT2,
@@ -1731,9 +1742,14 @@ void rlActiveDrawBuffers(int count)
GL_COLOR_ATTACHMENT5,
GL_COLOR_ATTACHMENT6,
GL_COLOR_ATTACHMENT7,
+#endif
};
+#if defined(GRAPHICS_API_OPENGL_ES3)
+ glDrawBuffersEXT(count, buffers);
+#else
glDrawBuffers(count, buffers);
+#endif
}
}
else TRACELOG(LOG_WARNING, "GL: One color buffer active by default");
@@ -2201,7 +2217,29 @@ void rlLoadExtensions(void *loader)
#endif // GRAPHICS_API_OPENGL_33
-#if defined(GRAPHICS_API_OPENGL_ES2)
+#if defined(GRAPHICS_API_OPENGL_ES3)
+ // Register supported extensions flags
+ // OpenGL ES 3.0 extensions supported by default
+ RLGL.ExtSupported.vao = true;
+ RLGL.ExtSupported.instancing = true;
+ RLGL.ExtSupported.texNPOT = true;
+ RLGL.ExtSupported.texFloat32 = true;
+ RLGL.ExtSupported.texDepth = true;
+ RLGL.ExtSupported.texDepthWebGL = true;
+ RLGL.ExtSupported.maxDepthBits = 24;
+ RLGL.ExtSupported.texAnisoFilter = true;
+ RLGL.ExtSupported.texMirrorClamp = true;
+ // TODO: Make sure that the ones above are actually present by default
+ // TODO: Check for these...
+ // RLGL.ExtSupported.texCompDXT
+ // RLGL.ExtSupported.texCompETC1
+ // RLGL.ExtSupported.texCompETC2
+ // RLGL.ExtSupported.texCompPVRT
+ // RLGL.ExtSupported.texCompASTC
+ // RLGL.ExtSupported.computeShader
+ // RLGL.ExtSupported.ssbo
+ // RLGL.ExtSupported.maxAnisotropyLevel
+#elif defined(GRAPHICS_API_OPENGL_ES2)
#if defined(PLATFORM_DESKTOP)
// TODO: Support OpenGL ES 3.0
@@ -3057,7 +3095,7 @@ unsigned int rlLoadTextureDepth(int width, int height, bool useRenderBuffer)
// Possible formats: GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT32 and GL_DEPTH_COMPONENT32F
unsigned int glInternalFormat = GL_DEPTH_COMPONENT;
-#if defined(GRAPHICS_API_OPENGL_ES2)
+#if (defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_ES3))
// WARNING: WebGL platform requires unsized internal format definition (GL_DEPTH_COMPONENT)
// while other platforms using OpenGL ES 2.0 require/support sized internal formats depending on the GPU capabilities
if (!RLGL.ExtSupported.texDepthWebGL || useRenderBuffer)
@@ -3214,10 +3252,16 @@ void rlGetGlTextureFormats(int format, unsigned int *glInternalFormat, unsigned
case RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: *glInternalFormat = GL_RGBA; *glFormat = GL_RGBA; *glType = GL_UNSIGNED_SHORT_4_4_4_4; break;
case RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: *glInternalFormat = GL_RGBA; *glFormat = GL_RGBA; *glType = GL_UNSIGNED_BYTE; break;
#if !defined(GRAPHICS_API_OPENGL_11)
+ #if defined(GRAPHICS_API_OPENGL_ES3)
+ case RL_PIXELFORMAT_UNCOMPRESSED_R32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_R32F_EXT; *glFormat = GL_RED_EXT; *glType = GL_FLOAT; break;
+ case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_RGB32F_EXT; *glFormat = GL_RGB; *glType = GL_FLOAT; break;
+ case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_RGBA32F_EXT; *glFormat = GL_RGBA; *glType = GL_FLOAT; break;
+ #else
case RL_PIXELFORMAT_UNCOMPRESSED_R32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_LUMINANCE; *glFormat = GL_LUMINANCE; *glType = GL_FLOAT; break; // NOTE: Requires extension OES_texture_float
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_RGB; *glFormat = GL_RGB; *glType = GL_FLOAT; break; // NOTE: Requires extension OES_texture_float
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_RGBA; *glFormat = GL_RGBA; *glType = GL_FLOAT; break; // NOTE: Requires extension OES_texture_float
#endif
+ #endif
#elif defined(GRAPHICS_API_OPENGL_33)
case RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: *glInternalFormat = GL_R8; *glFormat = GL_RED; *glType = GL_UNSIGNED_BYTE; break;
case RL_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: *glInternalFormat = GL_RG8; *glFormat = GL_RG; *glType = GL_UNSIGNED_BYTE; break;