Read texture data as RGBA from FBO on GLES 2.0
This commit is contained in:
parent
1397242d88
commit
e614942a2d
2 changed files with 9 additions and 14 deletions
12
src/rlgl.h
12
src/rlgl.h
|
@ -2904,15 +2904,9 @@ void *rlReadTexturePixels(Texture2D texture)
|
||||||
// NOTE: Previoust attached texture is automatically detached
|
// NOTE: Previoust attached texture is automatically detached
|
||||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture.id, 0);
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture.id, 0);
|
||||||
|
|
||||||
// Allocate enough memory to read back our texture data
|
// We read data as RGBA because FBO texture is configured as RGBA, despite binding another texture format
|
||||||
pixels = (unsigned char *)RL_MALLOC(GetPixelDataSize(texture.width, texture.height, texture.format));
|
pixels = (unsigned char *)RL_MALLOC(GetPixelDataSize(texture.width, texture.height, UNCOMPRESSED_R8G8B8A8));
|
||||||
|
glReadPixels(0, 0, texture.width, texture.height, UNCOMPRESSED_R8G8B8A8, GL_UNSIGNED_BYTE, pixels);
|
||||||
// Get OpenGL internal formats and data type from our texture format
|
|
||||||
unsigned int glInternalFormat, glFormat, glType;
|
|
||||||
rlGetGlTextureFormats(texture.format, &glInternalFormat, &glFormat, &glType);
|
|
||||||
|
|
||||||
// NOTE: We read data as RGBA because FBO texture is configured as RGBA, despite binding a RGB texture...
|
|
||||||
glReadPixels(0, 0, texture.width, texture.height, glFormat, glType, pixels);
|
|
||||||
|
|
||||||
// Re-attach internal FBO color texture before deleting it
|
// Re-attach internal FBO color texture before deleting it
|
||||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fbo.texture.id, 0);
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fbo.texture.id, 0);
|
||||||
|
|
|
@ -773,11 +773,12 @@ Image GetTextureData(Texture2D texture)
|
||||||
image.format = texture.format;
|
image.format = texture.format;
|
||||||
image.mipmaps = 1;
|
image.mipmaps = 1;
|
||||||
|
|
||||||
// NOTE: Data retrieved on OpenGL ES 2.0 should be RGBA
|
#if defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
// coming from FBO color buffer, but it seems original
|
// NOTE: Data retrieved on OpenGL ES 2.0 should be RGBA,
|
||||||
// texture format is retrieved on RPI... weird...
|
// coming from FBO color buffer attachment, but it seems
|
||||||
//image.format = UNCOMPRESSED_R8G8B8A8;
|
// original texture format is retrieved on RPI...
|
||||||
|
image.format = UNCOMPRESSED_R8G8B8A8;
|
||||||
|
#endif
|
||||||
TraceLog(LOG_INFO, "Texture pixel data obtained successfully");
|
TraceLog(LOG_INFO, "Texture pixel data obtained successfully");
|
||||||
}
|
}
|
||||||
else TraceLog(LOG_WARNING, "Texture pixel data could not be obtained");
|
else TraceLog(LOG_WARNING, "Texture pixel data could not be obtained");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue