Example #1
0
        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();
            }
        }
Example #3
0
        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;
        }
Example #4
0
        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;
        }