コード例 #1
0
ファイル: Renderer.cs プロジェクト: iaco79/HiOctaneTools
        private bool createFrameBuffers(int w, int h)
        {
            if (DefaultFrameBuffer != null)
            {
                DefaultFrameBuffer.Delete();
            }

            DefaultFrameBuffer = new DefaultFrameBuffer(w, h);
            DefaultFrameBuffer.Create();
            if (!DefaultFrameBuffer.Ready)
            {
                Log.WriteLine(Log.LOG_ERROR, "failed to create default frame buffer");
                return(false);
            }

            if (ShadowFrameBuffer == null)
            {
                ShadowFrameBuffer = new ShadowFrameBuffer(2048, 2048);
                ShadowFrameBuffer.Create();

                if (!ShadowFrameBuffer.Ready)
                {
                    Log.WriteLine(Log.LOG_ERROR, "failed to create shadow frame buffer");
                    return(false);
                }
            }
            return(true);
        }
コード例 #2
0
ファイル: Renderer.cs プロジェクト: iaco79/HiOctaneTools
        public void Render(RootNode scene, Panel overlay)
        {
            // render scene shadow to framebuffer texture (from light source to scene origin)
            if (scene.ShadowMaterial != null && scene.ShadowMaterial.Ready && ShadowFrameBuffer.Ready)
            {
                pass = RenderPass.Shadow;
                ShadowFrameBuffer.Bind();
                scene.ShadowMaterial.Bind();

                DirectionalLight light = (DirectionalLight)scene.GetLight(0);
                view             = Matrix4.LookAt(-light.Direction * 10.0f, Vector3.Zero, Vector3.UnitY);
                shadowProjection = Matrix4.CreateOrthographicOffCenter(-10, 10, -10, 10, -10, 20);

                renderNode(scene);

                scene.ShadowMaterial.Unbind();
                ShadowFrameBuffer.Unbind();
            }

            // render scene to framebuffer
            if (DefaultFrameBuffer.Ready)
            {
                //GL.Disable(EnableCap.CullFace);

                pass = RenderPass.Normal;
                DefaultFrameBuffer.Bind();

                if (camera == null)
                {
                    view = Matrix4.LookAt(new Vector3(0, 0, 10), new Vector3(0, 0, 0), Vector3.UnitY);
                }
                else
                {
                    view = Matrix4.LookAt(camera.Position, camera.LookAt, camera.Up);
                }

                renderNode(scene);

                if (overlay != null)
                {
                    GL.Disable(EnableCap.DepthTest);
                    overlay.Draw(size);
                    GL.Enable(EnableCap.DepthTest);
                }

                DefaultFrameBuffer.Unbind();
            }

            // post processing
            pass = RenderPass.Post;

            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
            GL.PushMatrix();
            GL.Ortho(0, width, 0, height, -1, 1); // Bottom-left corner pixel is 0/0

            postProcessEffect.SetSize(size);
            postProcessEffect.Render(scene.Time);

            GL.PopMatrix();
        }
コード例 #3
0
        //private ComputeShader cs;

        public RenderThread()
        {
            DefaultFB        = new DefaultFrameBuffer(EngineStatics.globalSettings.DomainFramebufferRezolution);
            PostProcessStage = new PostProcessStageRenderer();
        }