Renderer : Fix to copy framebuffer to exclude the upper bound if the rectangle as specified in opengl specs. Thanks @rectalogic
http://jmonkeyengine.org/groups/contribution-depot-jme3/forum/topic/lwjgl-copyframebuffer-off-by-one-error-patch/#post-184138 git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9585 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
f5cd1e97c4
commit
ce124e7729
@ -1145,15 +1145,15 @@ public class LwjglRenderer implements Renderer {
|
|||||||
|
|
||||||
public void copyFrameBuffer(FrameBuffer src, FrameBuffer dst, boolean copyDepth) {
|
public void copyFrameBuffer(FrameBuffer src, FrameBuffer dst, boolean copyDepth) {
|
||||||
if (GLContext.getCapabilities().GL_EXT_framebuffer_blit) {
|
if (GLContext.getCapabilities().GL_EXT_framebuffer_blit) {
|
||||||
int srcX = 0;
|
int srcX0 = 0;
|
||||||
int srcY = 0;
|
int srcY0 = 0;
|
||||||
int srcW = 0;
|
int srcX1 = 0;
|
||||||
int srcH = 0;
|
int srcY1 = 0;
|
||||||
|
|
||||||
int dstX = 0;
|
int dstX0 = 0;
|
||||||
int dstY = 0;
|
int dstY0 = 0;
|
||||||
int dstW = 0;
|
int dstX1 = 0;
|
||||||
int dstH = 0;
|
int dstY1 = 0;
|
||||||
|
|
||||||
int prevFBO = context.boundFBO;
|
int prevFBO = context.boundFBO;
|
||||||
|
|
||||||
@ -1176,32 +1176,32 @@ public class LwjglRenderer implements Renderer {
|
|||||||
|
|
||||||
if (src == null) {
|
if (src == null) {
|
||||||
glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, 0);
|
glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, 0);
|
||||||
srcX = vpX;
|
srcX0 = vpX;
|
||||||
srcY = vpY;
|
srcY0 = vpY;
|
||||||
srcW = vpW;
|
srcX1 = vpX + vpW;
|
||||||
srcH = vpH;
|
srcY1 = vpY + vpH;
|
||||||
} else {
|
} else {
|
||||||
glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, src.getId());
|
glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, src.getId());
|
||||||
srcW = src.getWidth();
|
srcX1 = src.getWidth();
|
||||||
srcH = src.getHeight();
|
srcY1 = src.getHeight();
|
||||||
}
|
}
|
||||||
if (dst == null) {
|
if (dst == null) {
|
||||||
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 0);
|
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 0);
|
||||||
dstX = vpX;
|
dstX0 = vpX;
|
||||||
dstY = vpY;
|
dstY0 = vpY;
|
||||||
dstW = vpW - 1;
|
dstX1 = vpX + vpW;
|
||||||
dstH = vpH - 1;
|
dstY1 = vpY + vpH;
|
||||||
} else {
|
} else {
|
||||||
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, dst.getId());
|
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, dst.getId());
|
||||||
dstW = dst.getWidth() - 1;
|
dstX1 = dst.getWidth();
|
||||||
dstH = dst.getHeight() - 1;
|
dstY1 = dst.getHeight();
|
||||||
}
|
}
|
||||||
int mask = GL_COLOR_BUFFER_BIT;
|
int mask = GL_COLOR_BUFFER_BIT;
|
||||||
if (copyDepth) {
|
if (copyDepth) {
|
||||||
mask |= GL_DEPTH_BUFFER_BIT;
|
mask |= GL_DEPTH_BUFFER_BIT;
|
||||||
}
|
}
|
||||||
glBlitFramebufferEXT(0, 0, srcW, srcH,
|
glBlitFramebufferEXT(srcX0, srcY0, srcX1, srcY1,
|
||||||
0, 0, dstW, dstH, mask,
|
dstX0, dstY0, dstX1, dstY1, mask,
|
||||||
GL_NEAREST);
|
GL_NEAREST);
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user