@Override protected void initialize(Application app) { this.backGroundColor = app.getViewPort().getBackgroundColor(); final Camera[] cameras = new Camera[6]; final Texture2D[] textures = new Texture2D[6]; viewports = new ViewPort[6]; framebuffers = new FrameBuffer[6]; buffers = new ByteBuffer[6]; images = new Image[6]; for (int i = 0; i < 6; i++) { cameras[i] = createOffCamera(size, position, axisX[i], axisY[i], axisZ[i]); viewports[i] = createOffViewPort("EnvView" + i, cameras[i]); framebuffers[i] = createOffScreenFrameBuffer(size, viewports[i]); textures[i] = new Texture2D(size, size, imageFormat); framebuffers[i].setColorTexture(textures[i]); } }
Texture2D msDepth = new Texture2D(width, height, numSamples, depthFormat); renderFrameBufferMS.setDepthTexture(msDepth); renderFrameBufferMS.setColorTexture(msColor); filterTexture = msColor; depthTexture = msDepth; renderFrameBuffer.setDepthBuffer(depthFormat); filterTexture = new Texture2D(width, height, fbFormat); renderFrameBuffer.setColorTexture(filterTexture);
/** * Create a framebuffer for an eye. */ public void setupFramebuffers(int eye) { // Find the chain length IntBuffer length = BufferUtils.createIntBuffer(1); ovr_GetTextureSwapChainLength(session, chains[eye], length); int chainLength = length.get(); LOGGER.fine("HMD Eye #" + eye + " texture chain length: " + chainLength); // Create the frame buffers framebuffers[eye] = new FrameBuffer[chainLength]; for (int i = 0; i < chainLength; i++) { // find the GL texture ID for this texture IntBuffer textureIdB = BufferUtils.createIntBuffer(1); OVRGL.ovr_GetTextureSwapChainBufferGL(session, chains[eye], i, textureIdB); int textureId = textureIdB.get(); // TODO less hacky way of getting our texture into JMonkeyEngine Image img = new Image(); img.setId(textureId); img.setFormat(Image.Format.RGBA8); img.setWidth(textureW); img.setHeight(textureH); Texture2D tex = new Texture2D(img); FrameBuffer buffer = new FrameBuffer(textureW, textureH, 1); buffer.setDepthBuffer(Image.Format.Depth); buffer.setColorTexture(tex); framebuffers[eye][i] = buffer; } }
scene64FB = new FrameBuffer(64, 64, 1); scene64 = new Texture2D(64, 64, lumFmt); scene64FB.setColorTexture(scene64); scene64.setMagFilter(fbMagFilter); scene64.setMinFilter(fbMinFilter); scene8FB.setColorTexture(scene8); scene8.setMagFilter(fbMagFilter); scene8.setMinFilter(fbMinFilter); scene1FB[0].setColorTexture(scene1[0]); scene1FB[1].setColorTexture(scene1[1]);
/** * init the pass called internally * @param renderer * @param width * @param height * @param textureFormat * @param depthBufferFormat * @param numSamples */ public void init(Renderer renderer, int width, int height, Format textureFormat, Format depthBufferFormat, int numSamples, boolean renderDepth) { Collection<Caps> caps = renderer.getCaps(); if (numSamples > 1 && caps.contains(Caps.FrameBufferMultisample) && caps.contains(Caps.OpenGL31)) { renderFrameBuffer = new FrameBuffer(width, height, numSamples); renderedTexture = new Texture2D(width, height, numSamples, textureFormat); renderFrameBuffer.setDepthBuffer(depthBufferFormat); if (renderDepth) { depthTexture = new Texture2D(width, height, numSamples, depthBufferFormat); renderFrameBuffer.setDepthTexture(depthTexture); } } else { renderFrameBuffer = new FrameBuffer(width, height, 1); renderedTexture = new Texture2D(width, height, textureFormat); renderFrameBuffer.setDepthBuffer(depthBufferFormat); if (renderDepth) { depthTexture = new Texture2D(width, height, depthBufferFormat); renderFrameBuffer.setDepthTexture(depthTexture); } } renderFrameBuffer.setColorTexture(renderedTexture); }
out.setColorTexture(dualEyeTex);
out.setColorTexture(dualEyeTex);
private void setupFinalFullTexture(Camera cam) { if (environment != null) { if (environment.getApplication() != null) { // create offscreen framebuffer FrameBuffer out = new FrameBuffer(cam.getWidth(), cam.getHeight(), 1); //offBuffer.setSrgb(true); //setup framebuffer's texture dualEyeTex = new Texture2D(cam.getWidth(), cam.getHeight(), Image.Format.RGBA8); dualEyeTex.setMinFilter(Texture2D.MinFilter.BilinearNoMipMaps); dualEyeTex.setMagFilter(Texture2D.MagFilter.Bilinear); logger.config("Dual eye texture " + dualEyeTex.getName() + " (" + dualEyeTex.getImage().getId() + ")"); logger.config(" Type: " + dualEyeTex.getType()); logger.config(" Size: " + dualEyeTex.getImage().getWidth() + "x" + dualEyeTex.getImage().getHeight()); logger.config(" Image depth: " + dualEyeTex.getImage().getDepth()); logger.config(" Image format: " + dualEyeTex.getImage().getFormat()); logger.config(" Image color space: " + dualEyeTex.getImage().getColorSpace()); //setup framebuffer to use texture out.setDepthBuffer(Image.Format.Depth); out.setColorTexture(dualEyeTex); ViewPort viewPort = environment.getApplication().getViewPort(); viewPort.setClearFlags(true, true, true); viewPort.setBackgroundColor(ColorRGBA.Black); viewPort.setOutputFrameBuffer(out); } else { throw new IllegalStateException("This VR environment is not attached to any application."); } } else { throw new IllegalStateException("This VR view manager is not attached to any VR environment."); } }
private ViewPort setupViewBuffers(Camera cam, String viewName) { if (environment != null) { if (environment.getApplication() != null) { // create offscreen framebuffer FrameBuffer offBufferLeft = new FrameBuffer(cam.getWidth(), cam.getHeight(), 1); //offBufferLeft.setSrgb(true); //setup framebuffer's texture Texture2D offTex = new Texture2D(cam.getWidth(), cam.getHeight(), Image.Format.RGBA8); offTex.setMinFilter(Texture2D.MinFilter.BilinearNoMipMaps); offTex.setMagFilter(Texture2D.MagFilter.Bilinear); //setup framebuffer to use texture offBufferLeft.setDepthBuffer(Image.Format.Depth); offBufferLeft.setColorTexture(offTex); ViewPort viewPort = environment.getApplication().getRenderManager().createPreView(viewName, cam); viewPort.setClearFlags(true, true, true); viewPort.setBackgroundColor(ColorRGBA.Black); Iterator<Spatial> spatialIter = environment.getApplication().getViewPort().getScenes().iterator(); while (spatialIter.hasNext()) { viewPort.attachScene(spatialIter.next()); } //set viewport to render to offscreen framebuffer viewPort.setOutputFrameBuffer(offBufferLeft); return viewPort; } else { throw new IllegalStateException("This VR environment is not attached to any application."); } } else { throw new IllegalStateException("This VR view manager is not attached to any VR environment."); } }
offBufferLeft.setColorTexture(offTex);
public void reshape(ViewPort vp, int w, int h){ if (mainSceneFB != null){ renderer.deleteFrameBuffer(mainSceneFB); } mainSceneFB = new FrameBuffer(w, h, 1); mainScene = new Texture2D(w, h, bufFormat); mainSceneFB.setDepthBuffer(Format.Depth); mainSceneFB.setColorTexture(mainScene); mainScene.setMagFilter(fbMagFilter); mainScene.setMinFilter(fbMinFilter); if (msFB != null){ renderer.deleteFrameBuffer(msFB); } tone.setTexture("Texture", mainScene); Collection<Caps> caps = renderer.getCaps(); if (numSamples > 1 && caps.contains(Caps.FrameBufferMultisample)){ msFB = new FrameBuffer(w, h, numSamples); msFB.setDepthBuffer(Format.Depth); msFB.setColorBuffer(bufFormat); vp.setOutputFrameBuffer(msFB); }else{ if (numSamples > 1) logger.warning("FBO multisampling not supported on this GPU, request ignored."); vp.setOutputFrameBuffer(mainSceneFB); } createLumShaders(); }
offBufferLeft.setColorTexture(offTex);
/** * Creates a BasicShadowRenderer * @param manager the asset manager * @param size the size of the shadow map (the map is square) */ public BasicShadowRenderer(AssetManager manager, int size) { shadowFB = new FrameBuffer(size, size, 1); shadowMap = new Texture2D(size, size, Format.Depth); shadowFB.setDepthTexture(shadowMap); shadowCam = new Camera(size, size); //DO NOT COMMENT THIS (it prevent the OSX incomplete read buffer crash) dummyTex = new Texture2D(size, size, Format.RGBA8); shadowFB.setColorTexture(dummyTex); shadowMapSize = (float)size; preshadowMat = new Material(manager, "Common/MatDefs/Shadow/PreShadow.j3md"); postshadowMat = new Material(manager, "Common/MatDefs/Shadow/BasicPostShadow.j3md"); postshadowMat.setTexture("ShadowMap", shadowMap); dispPic.setTexture(manager, shadowMap, false); for (int i = 0; i < points.length; i++) { points[i] = new Vector3f(); } }
reflectionBuffer.setColorTexture(reflectionTexture); refractionBuffer.setColorTexture(refractionTexture); refractionBuffer.setDepthTexture(depthTexture);
@Override public void simpleInitApp() { int w = settings.getWidth(); int h = settings.getHeight(); //setup framebuffer fb = new FrameBuffer(w, h, 1); Texture2D fbTex = new Texture2D(w, h, Format.RGBA8); fb.setDepthBuffer(Format.Depth); fb.setColorTexture(fbTex); // setup framebuffer's scene Sphere sphMesh = new Sphere(20, 20, 1); Material solidColor = assetManager.loadMaterial("Common/Materials/RedColor.j3m"); Geometry sphere = new Geometry("sphere", sphMesh); sphere.setMaterial(solidColor); fbNode.attachChild(sphere); //setup main scene Picture p = new Picture("Picture"); p.setPosition(0, 0); p.setWidth(w); p.setHeight(h); p.setTexture(assetManager, fbTex, false); rootNode.attachChild(p); }
offBuffer.setColorTexture(guiTexture);
shadowFB[i].setColorTexture(dummyTex); shadowMapStringCache[i] = "ShadowMap" + i; lightViewStringCache[i] = "LightViewProjectionMatrix" + i;
shadowFB[i].setColorTexture(dummyTex); shadowMapStringCache[i] = "ShadowMap" + i; lightViewStringCache[i] = "LightViewProjectionMatrix" + i;
offBuffer.setColorTexture(offTex);
tex.setMagFilter(MagFilter.Bilinear); fb.setColorTexture(tex); niftyView.setClearFlags(true, true, true); niftyView.setOutputFrameBuffer(fb);