public CubemapBufferSets(Scene parent, FramebufferCreator mFramebufferCreator, int size) { this.Scene = parent; Parent = parent; Vector2 vecSize = new Vector2(size, size); float fovy = (float)Math.PI / 2; for (int i = 0; i < 6; i++) { outFrameBuffers[i] = mFramebufferCreator.createFrameBuffer(size, size, PixelInternalFormat.Rgba8, true); outTextures[i] = outFrameBuffers[i].ColorTexture; FrameBufferSets[i] = new FramebufferSet(mFramebufferCreator, vecSize, outFrameBuffers[i]); cubeView[i] = new ViewInfo(this); cubeView[i].PointingDirection = viewDirections[i]; cubeView[i].upVec = upDirections[i]; cubeView[i].aspect = 1f; cubeView[i].fovy = fovy; cubeView[i].updateProjectionMatrix(); } }
public CubemapBufferSets(Scene parent, FramebufferCreator mFramebufferCreator, int size) { this.Scene = parent; Parent = parent; Vector2 vecSize = new Vector2(size,size); float fovy = (float)Math.PI/2; for (int i = 0; i < 6; i++) { outFrameBuffers[i] = mFramebufferCreator.createFrameBuffer(size, size, PixelInternalFormat.Rgba8, true); outTextures[i] = outFrameBuffers[i].ColorTexture; FrameBufferSets[i] = new FramebufferSet(mFramebufferCreator, vecSize, outFrameBuffers[i]); cubeView[i] = new ViewInfo(this); cubeView[i].PointingDirection = viewDirections[i]; cubeView[i].upVec = upDirections[i]; cubeView[i].aspect = 1f; cubeView[i].fovy = fovy; cubeView[i].updateProjectionMatrix(); } }
private void createFramebufferSet(FramebufferCreator mFramebufferCreator, Framebuffer outputFb, RenderOptions mOptions) { Vector2 size = mOptions.size; Vector2 size2 = size * mOptions.quality; Vector2 size3 = size2 * 0.3f; //sceeneFramebuffer = mFramebufferCreator.createFrameBuffer((int)size.X, (int)size.Y); sceeneBackdropFb = mFramebufferCreator.createFrameBuffer((int)size.X, (int)size.Y, PixelInternalFormat.Rgba8, false); lightFramebuffer = mFramebufferCreator.createFrameBuffer((int)size.X, (int)size.Y, PixelInternalFormat.Rgba8, false); lightFramebuffer.clearColor = new Color4(0f, 0f, 0f, 0f); lightBlurFramebuffer = mFramebufferCreator.createFrameBuffer((int)size.X, (int)size.Y, PixelInternalFormat.Rgba8, false); reflectionFramebuffer = mFramebufferCreator.createFrameBuffer((int)size.X, (int)size.Y, PixelInternalFormat.Rgba8, false); sceeneFramebuffer = mFramebufferCreator.createFrameBuffer((int)size.X, (int)size.Y, PixelInternalFormat.Rgba8, false); sceeneFramebuffer.clearColor = new Color4(0f, 0f, 0f, 0f); selectionFb = mFramebufferCreator.createFrameBuffer((int)size.X, (int)size.Y, PixelInternalFormat.Rgba8, false); //screenNormalFb = mFramebufferCreator.createFrameBuffer((int)size2.X, (int)size2.Y, PixelInternalFormat.Rgba16f, false); //screenNormalFb.clearColor = new Color4(0f, 0f, 0f, 100f); //lightFramebuffer = mFramebufferCreator.createFrameBuffer((int)size.X, (int)size.Y, PixelInternalFormat.Rgba16f, false); if (mOptions.depthOfField) { // depth of field buffers dofPreFramebuffer = mFramebufferCreator.createFrameBuffer((int)size2.X, (int)size2.Y, PixelInternalFormat.Rgba8, false); dofFramebuffer = mFramebufferCreator.createFrameBuffer((int)size2.X, (int)size2.Y, PixelInternalFormat.Rgba8, false); } dofFramebuffer2 = mFramebufferCreator.createFrameBuffer((int)size2.X, (int)size2.Y, PixelInternalFormat.Rgba8, true); aoBlurFramebuffer2 = mFramebufferCreator.createFrameBuffer((int)size2.X, (int)size2.Y, PixelInternalFormat.Rgba8, true); aoBlurFramebuffer2.clearColor = new Color4(0f, 0f, 0f, 0.5f); if (mOptions.ssAmbientOccluison) { aoPreFramebuffer = mFramebufferCreator.createFrameBuffer((int)size2.X, (int)size2.Y, PixelInternalFormat.Rgba16, false); aoFramebuffer = mFramebufferCreator.createFrameBuffer((int)size2.X, (int)size2.Y, PixelInternalFormat.Rgba8, false); aoBlurFramebuffer = mFramebufferCreator.createFrameBuffer((int)size2.X, (int)size2.Y, PixelInternalFormat.Rgba8, false); } else { // if ao is set of make the buffer grey //aoBlurFramebuffer2.enable(); } selectionblurFb = mFramebufferCreator.createFrameBuffer((int)size3.X, (int)size3.Y, PixelInternalFormat.Rgba8, false); selectionblurFb2 = mFramebufferCreator.createFrameBuffer((int)size3.X, (int)size3.Y, PixelInternalFormat.Rgba8, true); bloomFramebuffer = mFramebufferCreator.createFrameBuffer((int)size3.X, (int)size3.Y, PixelInternalFormat.Rgba8, false); bloomFramebuffer2 = mFramebufferCreator.createFrameBuffer((int)size3.X, (int)size3.Y, PixelInternalFormat.Rgba8, false); renderOptions = mOptions; this.outputFb = outputFb; }
protected override void OnUpdateFrame(FrameEventArgs e) { if (state == GameState.Playing || state == GameState.Menu) { // calculate mouse movement //gameInput.calcDelta(); // calculate frame Times frameTime += (float)e.Time; lastFrameDuration = (float)e.Time; // exit game? bool ESC = Keyboard[Key.Escape]; if (ESC && !prevESC) { if (state == GameState.Menu) { exitGame(); } if (state == GameState.Playing) { enterMenu(); } } prevESC = ESC; bool F5 = Keyboard[Key.F5]; if (F5 && !prevF5) { if (state == GameState.Playing) { textureLoader.GrabScreenshot(); } } prevF5 = F5; // call scene tree to update mScene.update(); } else if (state == GameState.Started) { //search for related files FileSeeker mFileSeeker = new FileSeeker(this); //create framebufferset for waterreflections waterFramebuffer = framebufferCreator.createFrameBuffer("waterFramebuffer", (int)(virtual_size.X * 0.5), (int)(virtual_size.Y * 0.5)); RenderOptions mOptionsWater = Settings.Instance.video.CreateRenderOptions(VideoSettings.Target.water); waterFramebufferSet = new FramebufferSet(framebufferCreator, waterFramebuffer, mOptionsWater); //crate shadow framebuffer shadowFramebuffer = framebufferCreator.createFrameBuffer(mScene.ShadowRes, mScene.ShadowRes, PixelInternalFormat.Rgba16f, false); //create main framebufferset RenderOptions mOptions = Settings.Instance.video.CreateRenderOptions(VideoSettings.Target.main); mainFramebufferSet = new FramebufferSet(framebufferCreator, framebufferCreator.defaultFb, mOptions); state = GameState.InitLoading; } else if (state == GameState.InitLoading) { //loading rutine - loads one object each time its called float percentageA = 0; float percentageB = 0; float percentageC = 0; float percentageD = 0; float percentageE = 0; percentageA = meshLoader.loadSingleMeshes(); if (percentageA == 1) { percentageB = shaderLoader.loadSingleShaders(); } if (percentageB == 1) { percentageC = textureLoader.loadSingleTextures(); } if (percentageC == 1) { percentageD = materialLoader.loadSingleMaterials(); } if (percentageD == 1) { percentageE = templateLoader.loadSingleTemplates(); } loadingPercentage = (percentageA + percentageB + percentageC + percentageD + percentageE) / 5f; //loadingPercentage = (float)Math.Sqrt(loadingPercentage); if (loadingPercentage == 1) { //cache results if (Settings.Instance.game.generateCache) { meshLoader.writeCacheFile(); shaderLoader.writeCacheFile(); //textureLoader.writeCacheFile(); materialLoader.writeCacheFile(); templateLoader.writeCacheFile(); } //create cubemap buffers mCubemapBufferSets = new CubemapBufferSets(mScene, framebufferCreator, 128); mScene.envTextures = mCubemapBufferSets.outTextures; // create viewInfo for reflection waterViewInfo = new ViewInfo(); waterViewInfo.aspect = (float)Width / (float)Height; waterViewInfo.updateProjectionMatrix(); //set noise texture mScene.setTextureId(Material.WorldTexture.noise, textureLoader.getTextureId("noise_pixel.png")); //set shaders for postprocessing /* now managed * mScene.ssaoPreShader = shaderLoader.getShader("ssMaker.xsp"); * mScene.ssaoShader = shaderLoader.getShader("ssao.xsp"); * mScene.ssaoBlrShader = shaderLoader.getShader("ao_blur.xsp"); * mScene.ssaoBlrShaderA = shaderLoader.getShader("ao_blur_a.xsp"); * mScene.bloomCurveShader = shaderLoader.getShader("bloom_curve.xsp"); * mScene.bloomShader = shaderLoader.getShader("bloom_shader.xsp"); * mScene.dofpreShader = shaderLoader.getShader("dof_preshader.xsp"); * mScene.dofShader = shaderLoader.getShader("dof_shader.xsp"); * mScene.compositeShader = shaderLoader.getShader("composite.xsp"); * mScene.ssaoBlendShader = shaderLoader.getShader("ssao_blend.xsp"); * mScene.copycatShader = shaderLoader.getShader("backdrop.xsp"); * mScene.wipingShader = shaderLoader.getShader("sMapWipe.xsp"); * mScene.reflectionShader = shaderLoader.getShader("defReflections.xsp"); * mScene.lightBlurShader = shaderLoader.getShader("lightBlur.xsp"); */ // managed setup of shaders mScene.setupShaders(); // spawn the player player = new Player(mScene, new Vector3(0, 3, 10), new Vector3(0, 0, -1), gameInput); mScene.init(); mScene.sunLight.Parent = player; // load objects saved in database mScene.loadObjects(); state = GameState.Playing; } } }
private void createFramebufferSet(FramebufferCreator mFramebufferCreator, Framebuffer outputFb, RenderOptions mOptions) { Vector2 size = mOptions.size; Vector2 size2 = size * mOptions.quality; Vector2 size3 = size2 * 0.3f; //sceeneFramebuffer = mFramebufferCreator.createFrameBuffer((int)size.X, (int)size.Y); sceeneFramebufferTrans = mFramebufferCreator.createFrameBuffer((int)size.X, (int)size.Y, PixelInternalFormat.Rgba8, false); if (mOptions.postProcessing) { sceeneFramebuffer = mFramebufferCreator.createFrameBuffer((int)size.X, (int)size.Y, PixelInternalFormat.Rgba16f, false); sceeneFramebuffer.clearColor = new Color4(0f, 0f, 0f, 100f); selectionFb = mFramebufferCreator.createFrameBuffer((int)size.X, (int)size.Y, PixelInternalFormat.Rgba8, false); //screenNormalFb = mFramebufferCreator.createFrameBuffer((int)size2.X, (int)size2.Y, PixelInternalFormat.Rgba16f, false); //screenNormalFb.clearColor = new Color4(0f, 0f, 0f, 100f); //lightFramebuffer = mFramebufferCreator.createFrameBuffer((int)size.X, (int)size.Y, PixelInternalFormat.Rgba16f, false); if (mOptions.depthOfField) { // depth of field buffers dofPreFramebuffer = mFramebufferCreator.createFrameBuffer((int)size2.X, (int)size2.Y, PixelInternalFormat.Rgba8, false); dofFramebuffer = mFramebufferCreator.createFrameBuffer((int)size2.X, (int)size2.Y, PixelInternalFormat.Rgba8, false); } dofFramebuffer2 = mFramebufferCreator.createFrameBuffer((int)size2.X, (int)size2.Y, PixelInternalFormat.Rgba8, true); aoBlurFramebuffer2 = mFramebufferCreator.createFrameBuffer((int)size2.X, (int)size2.Y, PixelInternalFormat.Rgba8, true); aoBlurFramebuffer2.clearColor = new Color4(0f, 0f, 0f, 0.5f); if (mOptions.ssAmbientOccluison) { aoFramebuffer = mFramebufferCreator.createFrameBuffer((int)size2.X, (int)size2.Y, PixelInternalFormat.Rgba8, false); aoBlurFramebuffer = mFramebufferCreator.createFrameBuffer((int)size2.X, (int)size2.Y, PixelInternalFormat.Rgba8, false); } else { // if ao is set of make the buffer grey //aoBlurFramebuffer2.enable(); } selectionblurFb = mFramebufferCreator.createFrameBuffer((int)size3.X, (int)size3.Y, PixelInternalFormat.Rgba8, false); selectionblurFb2 = mFramebufferCreator.createFrameBuffer((int)size3.X, (int)size3.Y, PixelInternalFormat.Rgba8, true); bloomFramebuffer = mFramebufferCreator.createFrameBuffer((int)size3.X, (int)size3.Y, PixelInternalFormat.Rgba8, false); bloomFramebuffer2 = mFramebufferCreator.createFrameBuffer((int)size3.X, (int)size3.Y, PixelInternalFormat.Rgba8, false); } renderOptions = mOptions; this.outputFb = outputFb; }