public static void getPreNormals(
     RenderManager renderManager, Pass normalPass, ViewPort viewPort) {
   curCount++;
   // 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);
   } else {
     // lets make the prenormals
     r.setFrameBuffer(normalPass.getRenderFrameBuffer());
     renderManager.getRenderer().clearBuffers(true, true, true);
     if (renderManager.getRenderer().getCaps().contains(Caps.GLSL150)) {
       renderManager.setForcedTechnique("PreNormalPass15");
     } else {
       renderManager.setForcedTechnique("PreNormalPass");
     }
     renderManager.renderViewPortQueues(viewPort, false);
     renderManager.setForcedTechnique(null);
     // if we should cache this, do it now
     if (lastNormalPassesCount > 1) {
       cachedPreNormals = normalPass.getRenderFrameBuffer();
     }
   }
   renderManager.getRenderer().setFrameBuffer(viewPort.getOutputFrameBuffer());
 }
 @Override
 protected void postQueue(RenderQueue queue) {
   Renderer r = renderManager.getRenderer();
   r.setFrameBuffer(normalPass.getRenderFrameBuffer());
   renderManager.getRenderer().clearBuffers(true, true, true);
   renderManager.setForcedTechnique("PreNormalPass");
   renderManager.renderViewPortQueues(viewPort, false);
   renderManager.setForcedTechnique(null);
   renderManager.getRenderer().setFrameBuffer(viewPort.getOutputFrameBuffer());
 }
 @Override
 protected void initFilter(
     AssetManager manager, RenderManager renderManager, ViewPort vp, int w, int h) {
   this.renderManager = renderManager;
   this.viewPort = vp;
   normalPass = new Pass();
   normalPass.init(renderManager.getRenderer(), w, h, Format.RGBA8, Format.Depth);
   material = new Material(manager, "Common/MatDefs/Post/CartoonEdge.j3md");
   material.setFloat("EdgeWidth", edgeWidth);
   material.setFloat("EdgeIntensity", edgeIntensity);
   material.setFloat("NormalThreshold", normalThreshold);
   material.setFloat("DepthThreshold", depthThreshold);
   material.setFloat("NormalSensitivity", normalSensitivity);
   material.setFloat("DepthSensitivity", depthSensitivity);
   material.setColor("EdgeColor", edgeColor);
 }
 @Override
 protected Material getMaterial() {
   material.setTexture("NormalsTexture", normalPass.getRenderedTexture());
   return material;
 }
 @Override
 protected void cleanUpFilter(Renderer r) {
   normalPass.cleanup(r);
 }