REVIEWED: LoadImageFromTexture() for Wasm https://github.com/raysan5/rguistyler/issues/10
Let's see if it breaks on some other platform...
This commit is contained in:
@@ -3777,9 +3777,17 @@ void *rlReadTexturePixels(unsigned int id, int width, int height, int format)
|
|||||||
// Attach our texture to FBO
|
// Attach our texture to FBO
|
||||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, id, 0);
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, id, 0);
|
||||||
|
|
||||||
|
#if defined(FBO_READ_TEXTURE_AS_RGBA)
|
||||||
// Reading data as RGBA because FBO texture is configured as RGBA, despite binding another texture format
|
// Reading data as RGBA because FBO texture is configured as RGBA, despite binding another texture format
|
||||||
pixels = RL_CALLOC(rlGetPixelDataSize(width, height, RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8), 1);
|
pixels = RL_CALLOC(rlGetPixelDataSize(width, height, RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8), 1);
|
||||||
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
|
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
|
||||||
|
#else
|
||||||
|
// Reading data as original texture format, in some platforms (RPI, Wasm) it works
|
||||||
|
pixels = (unsigned char *)RL_MALLOC(GetPixelDataSize(texture.width, texture.height, texture.format));
|
||||||
|
unsigned int glInternalFormat = 0, glFormat = 0, glType = 0;
|
||||||
|
rlGetGlTextureFormats(texture.format, &glInternalFormat, &glFormat, &glType);
|
||||||
|
glReadPixels(0, 0, texture.width, texture.height, glFormat, glType, pixels);
|
||||||
|
#endif
|
||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
|
||||||
|
|||||||
+10
-7
@@ -562,15 +562,18 @@ Image LoadImageFromTexture(Texture2D texture)
|
|||||||
{
|
{
|
||||||
image.width = texture.width;
|
image.width = texture.width;
|
||||||
image.height = texture.height;
|
image.height = texture.height;
|
||||||
image.format = texture.format;
|
#if defined(FBO_READ_TEXTURE_AS_RGBA)
|
||||||
image.mipmaps = 1;
|
// WARNING: On OpenGL ES 2.0/WebGL 1.0, there is no glGetTexImage() so,
|
||||||
|
// texture data is retrieved by creating an RGBA fbo, binding the texture
|
||||||
#if defined(GRAPHICS_API_OPENGL_ES2)
|
// to the fbo color attachment, and reading it as RGBA data with glReadPixels()
|
||||||
// NOTE: Data retrieved on OpenGL ES 2.0 should be RGBA,
|
// Returned data *should* be RGBA but it seems on some platforms (RPI, WASM)
|
||||||
// coming from FBO color buffer attachment, but it seems
|
// original texture format is retrieved, so adding a define for this patch
|
||||||
// original texture format is retrieved on RPI...
|
|
||||||
image.format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8;
|
image.format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8;
|
||||||
|
#else
|
||||||
|
image.format = texture.format;
|
||||||
#endif
|
#endif
|
||||||
|
image.mipmaps = 1;
|
||||||
|
|
||||||
TRACELOG(LOG_INFO, "TEXTURE: [ID %i] Pixel data retrieved successfully", texture.id);
|
TRACELOG(LOG_INFO, "TEXTURE: [ID %i] Pixel data retrieved successfully", texture.id);
|
||||||
}
|
}
|
||||||
else TRACELOG(LOG_WARNING, "TEXTURE: [ID %i] Failed to retrieve pixel data", texture.id);
|
else TRACELOG(LOG_WARNING, "TEXTURE: [ID %i] Failed to retrieve pixel data", texture.id);
|
||||||
|
|||||||
Reference in New Issue
Block a user