diff --git a/jme3-core/src/main/java/com/jme3/post/FilterPostProcessor.java b/jme3-core/src/main/java/com/jme3/post/FilterPostProcessor.java index 644f1a5562..dc7ab7a8f4 100644 --- a/jme3-core/src/main/java/com/jme3/post/FilterPostProcessor.java +++ b/jme3-core/src/main/java/com/jme3/post/FilterPostProcessor.java @@ -331,7 +331,7 @@ public void postFrame(FrameBuffer out) { FrameBuffer sceneBuffer = renderFrameBuffer; if (renderFrameBufferMS != null && !renderer.getCaps().contains(Caps.OpenGL32)) { - renderer.copyFrameBuffer(renderFrameBufferMS, renderFrameBuffer, true); + renderer.copyFrameBuffer(renderFrameBufferMS, renderFrameBuffer, true, true); } else if (renderFrameBufferMS != null) { sceneBuffer = renderFrameBufferMS; } diff --git a/jme3-core/src/main/java/com/jme3/post/HDRRenderer.java b/jme3-core/src/main/java/com/jme3/post/HDRRenderer.java index bd10f8f4e3..b161010245 100644 --- a/jme3-core/src/main/java/com/jme3/post/HDRRenderer.java +++ b/jme3-core/src/main/java/com/jme3/post/HDRRenderer.java @@ -364,7 +364,7 @@ public void postFrame(FrameBuffer out) { // renderManager.renderViewPortRaw(viewPort); // render back to non-multisampled FB - renderer.copyFrameBuffer(msFB, mainSceneFB, true); + renderer.copyFrameBuffer(msFB, mainSceneFB, true, true); }else{ // renderer.setFrameBuffer(mainSceneFB); // renderer.clearBuffers(true,true,false); diff --git a/jme3-core/src/main/java/com/jme3/renderer/Renderer.java b/jme3-core/src/main/java/com/jme3/renderer/Renderer.java index ee11088789..0d53c15871 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/Renderer.java +++ b/jme3-core/src/main/java/com/jme3/renderer/Renderer.java @@ -184,11 +184,21 @@ public interface Renderer { */ public void deleteShaderSource(ShaderSource source); + + /** * Copies contents from src to dst, scaling if necessary. * set copyDepth to false to only copy the color buffers. + * @deprecated Use {@link Renderer#copyFrameBuffer(com.jme3.texture.FrameBuffer, com.jme3.texture.FrameBuffer, boolean, boolean)}. */ - public void copyFrameBuffer(FrameBuffer src, FrameBuffer dst, boolean copyDepth); + @Deprecated public void copyFrameBuffer(FrameBuffer src, FrameBuffer dst, boolean copyDepth); + + + /** + * Copies contents from src to dst, scaling if necessary. + */ + public void copyFrameBuffer(FrameBuffer src, FrameBuffer dst, boolean copyColor, boolean copyDepth); + /** * Sets the framebuffer that will be drawn to. diff --git a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java index 6f9d93f36e..fee6b9541b 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java +++ b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java @@ -1635,11 +1635,16 @@ public void deleteShader(Shader shader) { |* Framebuffers *| \*********************************************************************/ public void copyFrameBuffer(FrameBuffer src, FrameBuffer dst) { - copyFrameBuffer(src, dst, true); + copyFrameBuffer(src, dst, true, true); } @Override public void copyFrameBuffer(FrameBuffer src, FrameBuffer dst, boolean copyDepth) { + copyFrameBuffer(src, dst, true, copyDepth); + } + + @Override + public void copyFrameBuffer(FrameBuffer src, FrameBuffer dst, boolean copyColor,boolean copyDepth) { if (caps.contains(Caps.FrameBufferBlit)) { int srcX0 = 0; int srcY0 = 0; @@ -1692,7 +1697,13 @@ public void copyFrameBuffer(FrameBuffer src, FrameBuffer dst, boolean copyDepth) dstX1 = dst.getWidth(); dstY1 = dst.getHeight(); } - int mask = GL.GL_COLOR_BUFFER_BIT; + + int mask = 0; + + if(copyColor){ + mask|=GL.GL_COLOR_BUFFER_BIT; + } + if (copyDepth) { mask |= GL.GL_DEPTH_BUFFER_BIT; } diff --git a/jme3-core/src/main/java/com/jme3/system/NullRenderer.java b/jme3-core/src/main/java/com/jme3/system/NullRenderer.java index 156b2aabbe..12281a00a5 100644 --- a/jme3-core/src/main/java/com/jme3/system/NullRenderer.java +++ b/jme3-core/src/main/java/com/jme3/system/NullRenderer.java @@ -143,6 +143,11 @@ public void copyFrameBuffer(FrameBuffer src, FrameBuffer dst) { @Override public void copyFrameBuffer(FrameBuffer src, FrameBuffer dst, boolean copyDepth) { } + + @Override + public void copyFrameBuffer(FrameBuffer src, FrameBuffer dst, boolean copyColor, boolean copyDepth) { + } + @Override public void setMainFrameBufferOverride(FrameBuffer fb) { diff --git a/jme3-core/src/main/java/com/jme3/texture/FrameBuffer.java b/jme3-core/src/main/java/com/jme3/texture/FrameBuffer.java index 3bd74a016a..1dea741f42 100644 --- a/jme3-core/src/main/java/com/jme3/texture/FrameBuffer.java +++ b/jme3-core/src/main/java/com/jme3/texture/FrameBuffer.java @@ -56,7 +56,7 @@ * depth testing (which requires a depth buffer). * Buffers can be copied to other framebuffers * including the main screen, by using - * {@link Renderer#copyFrameBuffer(com.jme3.texture.FrameBuffer, com.jme3.texture.FrameBuffer, boolean)}. + * {@link Renderer#copyFrameBuffer(com.jme3.texture.FrameBuffer, com.jme3.texture.FrameBuffer, boolean, boolean)}. * The content of a {@link RenderBuffer} can be retrieved by using * {@link Renderer#readFrameBuffer(com.jme3.texture.FrameBuffer, java.nio.ByteBuffer) }. *

diff --git a/jme3-effects/src/main/java/com/jme3/post/filters/TranslucentBucketFilter.java b/jme3-effects/src/main/java/com/jme3/post/filters/TranslucentBucketFilter.java index 743c0abea9..ecb1060d56 100644 --- a/jme3-effects/src/main/java/com/jme3/post/filters/TranslucentBucketFilter.java +++ b/jme3-effects/src/main/java/com/jme3/post/filters/TranslucentBucketFilter.java @@ -124,7 +124,7 @@ protected boolean isRequiresDepthTexture() { protected void postFrame(RenderManager renderManager, ViewPort viewPort, FrameBuffer prevFilterBuffer, FrameBuffer sceneBuffer) { renderManager.setCamera(viewPort.getCamera(), false); if (prevFilterBuffer != sceneBuffer) { - renderManager.getRenderer().copyFrameBuffer(prevFilterBuffer, sceneBuffer, false); + renderManager.getRenderer().copyFrameBuffer(prevFilterBuffer, sceneBuffer, true, false); } renderManager.getRenderer().setFrameBuffer(sceneBuffer); viewPort.getQueue().renderQueue(RenderQueue.Bucket.Translucent, renderManager, viewPort.getCamera()); diff --git a/jme3-vr/src/main/java/com/jme3/post/PreNormalCaching.java b/jme3-vr/src/main/java/com/jme3/post/PreNormalCaching.java index 83159f134b..93ca8ab520 100644 --- a/jme3-vr/src/main/java/com/jme3/post/PreNormalCaching.java +++ b/jme3-vr/src/main/java/com/jme3/post/PreNormalCaching.java @@ -33,7 +33,7 @@ public static void getPreNormals(RenderManager renderManager, Pass normalPass, V // do we already have a valid cache to set the framebuffer to? Renderer r = renderManager.getRenderer(); if( cachedPreNormals != null ) { - r.copyFrameBuffer(cachedPreNormals, normalPass.getRenderFrameBuffer(), false); + r.copyFrameBuffer(cachedPreNormals, normalPass.getRenderFrameBuffer(),true, false); } else { // lets make the prenormals r.setFrameBuffer(normalPass.getRenderFrameBuffer());