Fix Texture.GetData under GLES.
This commit is contained in:
@@ -133,16 +133,31 @@ namespace OpenRA.Platforms.Default
|
||||
OpenGL.glFramebufferTexture2D(OpenGL.GL_FRAMEBUFFER, OpenGL.GL_COLOR_ATTACHMENT0, OpenGL.GL_TEXTURE_2D, texture, 0);
|
||||
OpenGL.CheckGLError();
|
||||
|
||||
var canReadBGRA = OpenGL.Features.HasFlag(OpenGL.GLFeatures.ESReadFormatBGRA);
|
||||
|
||||
unsafe
|
||||
{
|
||||
fixed (byte* ptr = &data[0])
|
||||
{
|
||||
var intPtr = new IntPtr((void*)ptr);
|
||||
OpenGL.glReadPixels(0, 0, Size.Width, Size.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, intPtr);
|
||||
var intPtr = new IntPtr(ptr);
|
||||
|
||||
var format = canReadBGRA ? OpenGL.GL_BGRA : OpenGL.GL_RGBA;
|
||||
OpenGL.glReadPixels(0, 0, Size.Width, Size.Height, format, OpenGL.GL_UNSIGNED_BYTE, intPtr);
|
||||
OpenGL.CheckGLError();
|
||||
}
|
||||
}
|
||||
|
||||
// Convert RGBA to BGRA
|
||||
if (!canReadBGRA)
|
||||
{
|
||||
for (var i = 0; i < 4 * Size.Width * Size.Height; i += 4)
|
||||
{
|
||||
var temp = data[i];
|
||||
data[i] = data[i + 2];
|
||||
data[i + 2] = temp;
|
||||
}
|
||||
}
|
||||
|
||||
OpenGL.glBindFramebuffer(OpenGL.GL_FRAMEBUFFER, (uint)lastFramebuffer);
|
||||
OpenGL.glDeleteFramebuffers(1, ref framebuffer);
|
||||
OpenGL.CheckGLError();
|
||||
|
||||
Reference in New Issue
Block a user