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; } }
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 }
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); }