|
|
|
@ -77,7 +77,8 @@ public class FilterPostProcessor implements SceneProcessor, Savable { |
|
|
|
|
private int originalHeight; |
|
|
|
|
private int lastFilterIndex = -1; |
|
|
|
|
private boolean cameraInit = false; |
|
|
|
|
|
|
|
|
|
private boolean clearColor= true; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Create a FilterProcessor |
|
|
|
|
* @param assetManager the assetManager |
|
|
|
@ -99,9 +100,9 @@ public class FilterPostProcessor implements SceneProcessor, Savable { |
|
|
|
|
*/ |
|
|
|
|
public void addFilter(Filter filter) { |
|
|
|
|
if (filter == null) { |
|
|
|
|
throw new IllegalArgumentException( "Filter cannot be null." ); |
|
|
|
|
throw new IllegalArgumentException("Filter cannot be null."); |
|
|
|
|
} |
|
|
|
|
filters.add(filter); |
|
|
|
|
filters.add(filter); |
|
|
|
|
|
|
|
|
|
if (isInitialized()) { |
|
|
|
|
initFilter(filter, viewPort); |
|
|
|
@ -117,7 +118,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable { |
|
|
|
|
*/ |
|
|
|
|
public void removeFilter(Filter filter) { |
|
|
|
|
if (filter == null) { |
|
|
|
|
throw new IllegalArgumentException( "Filter cannot be null." ); |
|
|
|
|
throw new IllegalArgumentException("Filter cannot be null."); |
|
|
|
|
} |
|
|
|
|
filters.remove(filter); |
|
|
|
|
filter.cleanup(renderer); |
|
|
|
@ -128,7 +129,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable { |
|
|
|
|
return filters.iterator(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void initialize(RenderManager rm, ViewPort vp) { |
|
|
|
|
public void initialize(RenderManager rm, ViewPort vp) { |
|
|
|
|
renderManager = rm; |
|
|
|
|
renderer = rm.getRenderer(); |
|
|
|
|
viewPort = vp; |
|
|
|
@ -155,7 +156,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable { |
|
|
|
|
private void initFilter(Filter filter, ViewPort vp) { |
|
|
|
|
filter.setProcessor(this); |
|
|
|
|
if (filter.isRequiresDepthTexture()) { |
|
|
|
|
if (!computeDepth && renderFrameBuffer != null) { |
|
|
|
|
if (!computeDepth && renderFrameBuffer != null) { |
|
|
|
|
depthTexture = new Texture2D(width, height, Format.Depth24); |
|
|
|
|
renderFrameBuffer.setDepthTexture(depthTexture); |
|
|
|
|
} |
|
|
|
@ -195,12 +196,12 @@ public class FilterPostProcessor implements SceneProcessor, Savable { |
|
|
|
|
fsQuad.updateGeometricState(); |
|
|
|
|
|
|
|
|
|
renderManager.setCamera(filterCam, true); |
|
|
|
|
r.setFrameBuffer(buff); |
|
|
|
|
r.clearBuffers(false, true, true); |
|
|
|
|
r.setFrameBuffer(buff); |
|
|
|
|
r.clearBuffers(clearColor, true, true); |
|
|
|
|
renderManager.renderGeometry(fsQuad); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public boolean isInitialized() { |
|
|
|
|
return viewPort != null; |
|
|
|
|
} |
|
|
|
@ -364,7 +365,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable { |
|
|
|
|
//reseting the viewport camera viewport to its initial value
|
|
|
|
|
viewPort.getCamera().resize(originalWidth, originalHeight, true); |
|
|
|
|
viewPort.getCamera().setViewPort(left, right, bottom, top); |
|
|
|
|
viewPort.setOutputFrameBuffer(outputBuffer); |
|
|
|
|
viewPort.setOutputFrameBuffer(outputBuffer); |
|
|
|
|
viewPort = null; |
|
|
|
|
for (Filter filter : filters) { |
|
|
|
|
filter.cleanup(renderer); |
|
|
|
@ -392,6 +393,16 @@ public class FilterPostProcessor implements SceneProcessor, Savable { |
|
|
|
|
height = (int) (h * (Math.abs(bottom - top))); |
|
|
|
|
width = Math.max(1, width); |
|
|
|
|
height = Math.max(1, height); |
|
|
|
|
|
|
|
|
|
//Testing original versus actual viewport dimension.
|
|
|
|
|
//If they are different we are in a multiview situation and color from other view port must not be cleared.
|
|
|
|
|
//However, not clearing the color can cause issues when AlphaToCoverage is active on the renderer.
|
|
|
|
|
if(originalWidth!=width || originalHeight!=height){ |
|
|
|
|
clearColor = false; |
|
|
|
|
}else{ |
|
|
|
|
clearColor = true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
cam.resize(width, height, false); |
|
|
|
|
cameraInit = true; |
|
|
|
|
computeDepth = false; |
|
|
|
@ -495,7 +506,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable { |
|
|
|
|
* For internal use only<br> |
|
|
|
|
* returns the depth texture of the scene |
|
|
|
|
* @return the depth texture |
|
|
|
|
*/ |
|
|
|
|
*/ |
|
|
|
|
public Texture2D getDepthTexture() { |
|
|
|
|
return depthTexture; |
|
|
|
|
} |
|
|
|
|