partialBufferCopy = true;
}
+ bool sameBounds = (srcX0 == dstX0 && srcY0 == dstY0 && srcX1 == dstX1 && srcY1 == dstY1);
bool blitRenderTarget = false;
bool blitDepth = false;
bool blitStencil = false;
return error(GL_INVALID_OPERATION);
}
- if(partialBufferCopy && readBufferSamples > 1)
+ if(partialBufferCopy && readBufferSamples > 1 && !sameBounds)
{
return error(GL_INVALID_OPERATION);
}
{
if(readFramebuffer->getDepthbuffer() && drawFramebuffer->getDepthbuffer())
{
- if(readFramebuffer->getDepthbufferType() != drawFramebuffer->getDepthbufferType())
+ GLenum readDepthBufferType = readFramebuffer->getDepthbufferType();
+ GLenum drawDepthBufferType = drawFramebuffer->getDepthbufferType();
+ if((readDepthBufferType != drawDepthBufferType) &&
+ !(Framebuffer::IsRenderbuffer(readDepthBufferType) && Framebuffer::IsRenderbuffer(drawDepthBufferType)))
{
return error(GL_INVALID_OPERATION);
}
{
if(readFramebuffer->getStencilbuffer() && drawFramebuffer->getStencilbuffer())
{
- if(readFramebuffer->getStencilbufferType() != drawFramebuffer->getStencilbufferType())
+ GLenum readStencilBufferType = readFramebuffer->getStencilbufferType();
+ GLenum drawStencilBufferType = drawFramebuffer->getStencilbufferType();
+ if((readStencilBufferType != drawStencilBufferType) &&
+ !(Framebuffer::IsRenderbuffer(readStencilBufferType) && Framebuffer::IsRenderbuffer(drawStencilBufferType)))
{
return error(GL_INVALID_OPERATION);
}
// INVALID_OPERATION error is generated.
if((drawDSBuffer && drawDSBuffer->getSamples() > 1) ||
((readDSBuffer && readDSBuffer->getSamples() > 1) &&
- ((srcX0 != dstX0 || srcY0 != dstY0 || srcX1 != dstX1 || srcY1 != dstY1) ||
- (drawDSBuffer->getFormat() != readDSBuffer->getFormat()))))
+ (!sameBounds || (drawDSBuffer->getFormat() != readDSBuffer->getFormat()))))
{
return error(GL_INVALID_OPERATION);
}