Framebuffer now uses mip level and texture layer for binding textures.
TRAC #23470
Signed-off-by: Jamie Madill
Signed-off-by: Shannon Woods
Author: Geoff Lang
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index 47d23bf..a0bc39d 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -4114,17 +4114,17 @@
return gl::error(GL_INVALID_VALUE);
}
- framebuffer->setColorbuffer(colorAttachment, GL_RENDERBUFFER, renderbuffer);
+ framebuffer->setColorbuffer(colorAttachment, GL_RENDERBUFFER, renderbuffer, 0, 0);
}
else
{
switch (attachment)
{
case GL_DEPTH_ATTACHMENT:
- framebuffer->setDepthbuffer(GL_RENDERBUFFER, renderbuffer);
+ framebuffer->setDepthbuffer(GL_RENDERBUFFER, renderbuffer, 0, 0);
break;
case GL_STENCIL_ATTACHMENT:
- framebuffer->setStencilbuffer(GL_RENDERBUFFER, renderbuffer);
+ framebuffer->setStencilbuffer(GL_RENDERBUFFER, renderbuffer, 0, 0);
break;
default:
return gl::error(GL_INVALID_ENUM);
@@ -4266,15 +4266,15 @@
return gl::error(GL_INVALID_VALUE);
}
- framebuffer->setColorbuffer(colorAttachment, textarget, texture);
+ framebuffer->setColorbuffer(colorAttachment, textarget, texture, level, 0);
}
else
{
switch (attachment)
{
- case GL_DEPTH_ATTACHMENT: framebuffer->setDepthbuffer(textarget, texture); break;
- case GL_STENCIL_ATTACHMENT: framebuffer->setStencilbuffer(textarget, texture); break;
- case GL_DEPTH_STENCIL_ATTACHMENT: framebuffer->setDepthStencilBuffer(textarget, texture); break;
+ case GL_DEPTH_ATTACHMENT: framebuffer->setDepthbuffer(textarget, texture, level, 0); break;
+ case GL_STENCIL_ATTACHMENT: framebuffer->setStencilbuffer(textarget, texture, level, 0); break;
+ case GL_DEPTH_STENCIL_ATTACHMENT: framebuffer->setDepthStencilBuffer(textarget, texture, level, 0); break;
}
}
}
@@ -5047,6 +5047,8 @@
GLenum attachmentType;
GLuint attachmentHandle;
+ GLuint attachmentLevel;
+ GLuint attachmentLayer;
if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT)
{
@@ -5059,6 +5061,8 @@
attachmentType = framebuffer->getColorbufferType(colorAttachment);
attachmentHandle = framebuffer->getColorbufferHandle(colorAttachment);
+ attachmentLevel = framebuffer->getColorbufferMipLevel(colorAttachment);
+ attachmentLayer = framebuffer->getColorbufferLayer(colorAttachment);
}
else
{
@@ -5067,10 +5071,14 @@
case GL_DEPTH_ATTACHMENT:
attachmentType = framebuffer->getDepthbufferType();
attachmentHandle = framebuffer->getDepthbufferHandle();
+ attachmentLevel = framebuffer->getDepthbufferMipLevel();
+ attachmentLayer = framebuffer->getDepthbufferLayer();
break;
case GL_STENCIL_ATTACHMENT:
attachmentType = framebuffer->getStencilbufferType();
attachmentHandle = framebuffer->getStencilbufferHandle();
+ attachmentLevel = framebuffer->getStencilbufferMipLevel();
+ attachmentLayer = framebuffer->getStencilbufferLayer();
break;
case GL_DEPTH_STENCIL_ATTACHMENT:
if (context->getClientVersion() < 3)
@@ -5083,6 +5091,8 @@
}
attachmentType = framebuffer->getDepthStencilbufferType();
attachmentHandle = framebuffer->getDepthStencilbufferHandle();
+ attachmentLevel = framebuffer->getDepthStencilbufferMipLevel();
+ attachmentLayer = framebuffer->getDepthStencilbufferLayer();
default: return gl::error(GL_INVALID_ENUM);
}
}
@@ -5120,7 +5130,7 @@
case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:
if (attachmentObjectType == GL_TEXTURE)
{
- *params = 0; // FramebufferTexture2D will not allow level to be set to anything else in GL ES 2.0
+ *params = attachmentLevel;
}
else
{
@@ -5144,6 +5154,20 @@
return gl::error(GL_INVALID_ENUM);
}
break;
+ case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:
+ if (context->getClientVersion() < 3)
+ {
+ return gl::error(GL_INVALID_ENUM);
+ }
+ if (attachmentObjectType == GL_TEXTURE)
+ {
+ *params = attachmentLayer;
+ }
+ else
+ {
+ return gl::error(GL_INVALID_ENUM);
+ }
+ break;
default:
return gl::error(GL_INVALID_ENUM);
}