示例#1
0
        public void Init()
        {
            Pipeline pipeline = m_graphics.Pipeline;

            m_gizmoRenderer = new GizmoRenderer(pipeline);

            ModelVertexInfo[] vertexLayout = ModelVertexInfo.GetVertexInfo <Vertex>();
            int vertexSize = Marshal.SizeOf <Vertex>();

            m_defferedShader = new Program
                               (
                new PixelShader(Shaders.DEFFERED_PIXEL, pipeline),
                new VertexShader(Shaders.QUAD_VERTEX, pipeline),
                vertexLayout,
                vertexSize,
                false,
                e_CullingMode.Back,
                pipeline
                               );

            m_defferedShader.VertexShader.Dispose();
            m_defferedShader.PixelShader.Dispose();

            const int buffCount = 3;

            m_renderTarget            = new MultiRenderTexture(buffCount, 1920, 1080, pipeline);
            m_transparentRenderTarget = new MultiRenderTexture(buffCount, 1920, 1080, pipeline);

            m_drawBuffers = new DrawBuffersEnum[buffCount];
            for (int i = 0; i < buffCount; ++i)
            {
                m_drawBuffers[i] = DrawBuffersEnum.ColorAttachment0 + i;
            }
        }
示例#2
0
        void MergePass(MultiRenderTexture a_renderTexture)
        {
            int progHandle = ((OpenTKProgram)m_defferedShader.InternalObject).Handle;

            GL.UseProgram(progHandle);

            GL.ActiveTexture(TextureUnit.Texture0);
            GL.BindTexture(TextureTarget.Texture2D, ((OpenTKTexture)a_renderTexture.RenderTextures[0].InternalObject).Handle);
            GL.Uniform1(1, 0);

            // I do not need the vertex data however I apparently need data bound so just have an empty object
            OpenTKPipeline pipeline = (OpenTKPipeline)m_graphics.Pipeline.InternalPipeline;

            GL.BindVertexArray(pipeline.StaticVAO);

#if DEBUG_INFO
            Pipeline.GLError("Graphics: Merge Binding: ");
#endif

            GL.DrawArrays(PrimitiveType.TriangleStrip, 0, 4);

#if DEBUG_INFO
            Pipeline.GLError("Graphics: Merging Deffered: ");
#endif
        }
示例#3
0
        void LightingPass(MultiRenderTexture a_renderTexture)
        {
            GL.Disable(EnableCap.DepthTest);
            // GL.Disable(EnableCap.Blend);

            GL.Enable(EnableCap.Blend);
            // GL.BlendFunc(BlendingFactor.One, BlendingFactor.One);

            foreach (Light light in Light.LightList)
            {
                if (light.Draw)
                {
                    UniformBufferObject ubo = m_graphics.LightBufferObject;

                    Material material = light.BindLightDrawing();
                    ubo.UpdateData(light.GetLightData());

                    BindCamera();
                    BindTransform(light.Transform.ToMatrix(), light.Transform.RotationMatrix);

                    BindableContainer cont = BindMaterial(material);

                    GL.ActiveTexture(TextureUnit.Texture0 + cont.Textures);
                    GL.BindTexture(TextureTarget.Texture2D, ((OpenTKTexture)a_renderTexture.RenderTextures[0].InternalObject).Handle);
                    GL.Uniform1(0, cont.Textures++);

                    GL.ActiveTexture(TextureUnit.Texture0 + cont.Textures);
                    GL.BindTexture(TextureTarget.Texture2D, ((OpenTKTexture)a_renderTexture.RenderTextures[1].InternalObject).Handle);
                    GL.Uniform1(1, cont.Textures++);

                    GL.ActiveTexture(TextureUnit.Texture0 + cont.Textures);
                    GL.BindTexture(TextureTarget.Texture2D, ((OpenTKTexture)a_renderTexture.RenderTextures[2].InternalObject).Handle);
                    GL.Uniform1(2, cont.Textures++);

                    GL.ActiveTexture(TextureUnit.Texture0 + cont.Textures);
                    GL.BindTexture(TextureTarget.Texture2D, ((OpenTKTexture)m_renderTarget.DepthBuffer.InternalObject).Handle);
                    GL.Uniform1(3, cont.Textures++);

                    ubo.UpdateBuffer();

                    GL.BindBufferBase(BufferRangeTarget.UniformBuffer, Material.LightUBOIndex, ((OpenTKUniformBufferObject)ubo.InternalObject).Handle);

                    light.BindShadowMap(cont);

                    GL.DrawArrays(PrimitiveType.TriangleStrip, 0, 4);

#if DEBUG_INFO
                    Pipeline.GLError("Graphics: Lighting: ");
#endif
                }
            }

            GL.Disable(EnableCap.Blend);

            GL.Enable(EnableCap.DepthTest);
        }