Esempio n. 1
0
        Frustum SetCameraBuffer(Camera a_camera)
        {
            lock (a_camera)
            {
                if (a_camera.Transform == null)
                {
                    return(null);
                }

                Graphics.CameraContainer camContainer = new Graphics.CameraContainer
                {
                    Transform  = a_camera.Transform.ToMatrix(),
                    Projection = a_camera.Projection
                };

                camContainer.View = camContainer.Transform.Inverted();

                Matrix4 viewProjection = camContainer.View * camContainer.Projection;
                camContainer.ViewProjection = viewProjection;

                UniformBufferObject ubo = m_graphics.CameraBufferObject;

                ubo.UpdateData(camContainer);
                ubo.UpdateBuffer();

                return(new Frustum(viewProjection));
            }
        }
Esempio n. 2
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);
        }
Esempio n. 3
0
        internal void Update()
        {
            TimeContainer timeContainer = new TimeContainer()
            {
                DeltaTime  = (float)PipelineTime.DeltaTime,
                TimePassed = (float)PipelineTime.TimePassed
            };

            m_timeBuffer.UpdateData(timeContainer);
            m_timeBuffer.UpdateBuffer();

            m_internalGraphics.Update();
        }
Esempio n. 4
0
        void BindTransform(Matrix4 a_transform, Matrix3 a_rotationMatrix)
        {
            UniformBufferObject ubo = m_graphics.TransformBufferObject;

            Graphics.TransformContainer transContainer = new Graphics.TransformContainer
            {
                Transform      = a_transform,
                RotationMatrix = a_rotationMatrix
            };

            ubo.UpdateData(transContainer);
            ubo.UpdateBuffer();

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

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