[rlgl] Added rlLoadTextureCubemapDepth
This commit is contained in:
parent
99cab6d3a7
commit
2a49eb757f
88
src/rlgl.h
88
src/rlgl.h
|
|
@ -3573,6 +3573,94 @@ unsigned int rlLoadTextureCubemap(const void *data, int size, int format, int mi
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Load depth cubemap (to be attached to fbo)
|
||||||
|
// WARNING: OpenGL ES 2.0 requires GL_OES_depth_texture and WebGL requires WEBGL_depth_texture extensions
|
||||||
|
// Stored the following convention: +X, -X, +Y, -Y, +Z, -Z
|
||||||
|
unsigned int rlLoadTextureCubemapDepth(int width, int height)
|
||||||
|
{
|
||||||
|
unsigned int id = 0;
|
||||||
|
if (!isGpuReady) { TRACELOG(RL_LOG_WARNING, "GL: GPU is not ready to load data, trying to load before InitWindow()?"); return id; }
|
||||||
|
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
|
if (!RLGL.ExtSupported.texDepth)
|
||||||
|
{
|
||||||
|
TRACELOG(RL_LOG_WARNING, "GL: Depth cubemap textures not supported");
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int glInternalFormat = GL_DEPTH_COMPONENT;
|
||||||
|
unsigned int glType = GL_FLOAT;
|
||||||
|
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
|
// 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)
|
||||||
|
{
|
||||||
|
if (RLGL.ExtSupported.maxDepthBits == 32)
|
||||||
|
{
|
||||||
|
glInternalFormat = GL_DEPTH_COMPONENT32_OES;
|
||||||
|
glType = GL_FLOAT;
|
||||||
|
}
|
||||||
|
else if (RLGL.ExtSupported.maxDepthBits == 24)
|
||||||
|
{
|
||||||
|
glInternalFormat = GL_DEPTH_COMPONENT24_OES;
|
||||||
|
glType = GL_UNSIGNED_INT;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
glInternalFormat = GL_DEPTH_COMPONENT16;
|
||||||
|
glType = GL_UNSIGNED_SHORT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_ES3)
|
||||||
|
// NOTE: This sized internal format should also work for WebGL 2.0
|
||||||
|
// WARNING: Specification only allows GL_DEPTH_COMPONENT32F for GL_FLOAT type
|
||||||
|
// REF: https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glTexImage2D.xhtml
|
||||||
|
if (RLGL.ExtSupported.maxDepthBits == 32)
|
||||||
|
{
|
||||||
|
glInternalFormat = GL_DEPTH_COMPONENT32F;
|
||||||
|
glType = GL_FLOAT;
|
||||||
|
}
|
||||||
|
else if (RLGL.ExtSupported.maxDepthBits == 24)
|
||||||
|
{
|
||||||
|
glInternalFormat = GL_DEPTH_COMPONENT24;
|
||||||
|
glType = GL_UNSIGNED_INT;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
glInternalFormat = GL_DEPTH_COMPONENT16;
|
||||||
|
glType = GL_UNSIGNED_SHORT;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
glGenTextures(1, &id);
|
||||||
|
glBindTexture(GL_TEXTURE_CUBE_MAP, id);
|
||||||
|
|
||||||
|
// Load cubemap faces
|
||||||
|
for (int i = 0; i < 6; i++)
|
||||||
|
{
|
||||||
|
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, width, height, 0, GL_DEPTH_COMPONENT, glType, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set cubemap texture sampling parameters
|
||||||
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||||
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_33)|| defined(GRAPHICS_API_OPENGL_ES3)
|
||||||
|
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); // Flag not supported on OpenGL ES 2.0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
glBindTexture(GL_TEXTURE_CUBE_MAP, 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (id > 0) TRACELOG(RL_LOG_INFO, "TEXTURE: [ID %i] Depth cubemap texture loaded successfully (%ix%i)", id, width, height);
|
||||||
|
else TRACELOG(RL_LOG_WARNING, "TEXTURE: Failed to load depth cubemap texture");
|
||||||
|
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
// Update already loaded texture in GPU with new data
|
// Update already loaded texture in GPU with new data
|
||||||
// WARNING: Not possible to know safely if internal texture format is the expected one...
|
// WARNING: Not possible to know safely if internal texture format is the expected one...
|
||||||
void rlUpdateTexture(unsigned int id, int offsetX, int offsetY, int width, int height, int format, const void *data)
|
void rlUpdateTexture(unsigned int id, int offsetX, int offsetY, int width, int height, int format, const void *data)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user