/** * Initialize this ProjectedDepthTexture with the renderer * * @param r */ public void init(final Renderer r) { // already initialized ? if (textureRenderer != null) { return; } textureRenderer = ImageUtil.createTextureRenderer(0, 0, r, true); if (isParallel) { textureRenderer.getCamera().setProjectionMode(Camera.ProjectionMode.Parallel); } // Enforce performance enhancing states on the renderer. // No textures or colors are required since we're only // interested in recording depth. // Also only need front faces when rendering the shadow maps // turn off clipping ClipState noClip = new ClipState(); noClip.setEnabled(false); textureRenderer.enforceState(noClip); // turn off texturing TextureState noTexture = new TextureState(); noTexture.setEnabled(false); textureRenderer.enforceState(noTexture); // turn off colors ColorMaskState colorDisabled = new ColorMaskState(); colorDisabled.setAll(false); textureRenderer.enforceState(colorDisabled); // cull back faces CullState cullFace = new CullState(); cullFace.setEnabled(true); cullFace.setCullFace(CullState.Face.Back); textureRenderer.enforceState(cullFace); // turn off lights LightState noLights = new LightState(); noLights.setEnabled(false); textureRenderer.enforceState(noLights); // use flat shading ShadingState flat = new ShadingState(); flat.setShadingMode(ShadingMode.Flat); textureRenderer.enforceState(flat); // disable GLSLShaderObjectsState GLSLShaderObjectsState glsl = new GLSLShaderObjectsState(); glsl.setEnabled(false); textureRenderer.enforceState(glsl); // enforce the shadow offset parameters textureRenderer.enforceState(offsetState); if (texture == null) { createTexture(); } textureRenderer.setupTexture(texture); }
/** Clean up. */ public void dispose() { if (textureRenderer != null) { try { textureRenderer.cleanup(); textureRenderer = null; } catch (Exception e) { // do nothing } } }
// Render the texture public void clear(final Renderer r) { updateProjection(); // Render only vertices, nothing else setRenderVertexOnly(true); // render textureRenderer.clear(texture, Renderer.BUFFER_COLOR_AND_DEPTH); // restore states setRenderVertexOnly(false); // set the texture coordinate matrix texture.setTextureMatrix(projectionMatrix); }
/** * Copy the texture to another * * @param tex */ public void copyToTexture(Texture tex) { textureRenderer.copyToTexture( tex, 0, 0, textureRenderer.getWidth(), textureRenderer.getHeight(), 0, 0); }