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