Esempio n. 1
0
        private void ClearBuffers(NvGpuVmm vmm, GpuMethodCall methCall)
        {
            Profile.Begin(Profiles.GPU.Engine3d.ClearBuffers);

            int attachment = (methCall.Argument >> 6) & 0xf;

            GalClearBufferFlags flags = (GalClearBufferFlags)(methCall.Argument & 0x3f);

            float red   = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 0);
            float green = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 1);
            float blue  = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 2);
            float alpha = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 3);

            float depth = ReadRegisterFloat(NvGpuEngine3dReg.ClearDepth);

            int stencil = ReadRegister(NvGpuEngine3dReg.ClearStencil);

            SetFrameBuffer(vmm, attachment);

            SetZeta(vmm);

            SetRenderTargets();

            _gpu.Renderer.RenderTarget.Bind();

            _gpu.Renderer.Rasterizer.ClearBuffers(flags, attachment, red, green, blue, alpha, depth, stencil);

            _gpu.Renderer.Pipeline.ResetDepthMask();
            _gpu.Renderer.Pipeline.ResetColorMask(attachment);

            Profile.End(Profiles.GPU.Engine3d.ClearBuffers);
        }
Esempio n. 2
0
        public void ClearBuffers(int RtIndex, GalClearBufferFlags Flags)
        {
            ClearBufferMask Mask = 0;

            //OpenGL doesn't support clearing just a single color channel,
            //so we can't just clear all channels...
            if (Flags.HasFlag(GalClearBufferFlags.ColorRed) &&
                Flags.HasFlag(GalClearBufferFlags.ColorGreen) &&
                Flags.HasFlag(GalClearBufferFlags.ColorBlue) &&
                Flags.HasFlag(GalClearBufferFlags.ColorAlpha))
            {
                Mask = ClearBufferMask.ColorBufferBit;
            }

            if (Flags.HasFlag(GalClearBufferFlags.Depth))
            {
                Mask |= ClearBufferMask.DepthBufferBit;
            }

            if (Flags.HasFlag(GalClearBufferFlags.Stencil))
            {
                Mask |= ClearBufferMask.StencilBufferBit;
            }

            GL.Clear(Mask);
        }
Esempio n. 3
0
        private void ClearBuffers(NvGpuVmm Vmm, NvGpuPBEntry PBEntry)
        {
            int Arg0 = PBEntry.Arguments[0];

            int FbIndex = (Arg0 >> 6) & 0xf;

            GalClearBufferFlags Flags = (GalClearBufferFlags)(Arg0 & 0x3f);

            float Red   = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 0);
            float Green = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 1);
            float Blue  = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 2);
            float Alpha = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 3);

            float Depth = ReadRegisterFloat(NvGpuEngine3dReg.ClearDepth);

            int Stencil = ReadRegister(NvGpuEngine3dReg.ClearStencil);

            SetFrameBuffer(Vmm, FbIndex);

            SetZeta(Vmm);

            SetRenderTargets();

            Gpu.Renderer.RenderTarget.Bind();

            Gpu.Renderer.Rasterizer.ClearBuffers(
                Flags,
                FbIndex,
                Red, Green, Blue, Alpha,
                Depth,
                Stencil);
        }
Esempio n. 4
0
        public void ClearBuffers(
            GalClearBufferFlags Flags,
            int Attachment,
            float Red, float Green, float Blue, float Alpha,
            float Depth,
            int Stencil)
        {
            GL.ColorMask(
                Flags.HasFlag(GalClearBufferFlags.ColorRed),
                Flags.HasFlag(GalClearBufferFlags.ColorGreen),
                Flags.HasFlag(GalClearBufferFlags.ColorBlue),
                Flags.HasFlag(GalClearBufferFlags.ColorAlpha));

            GL.ClearBuffer(ClearBuffer.Color, Attachment, new float[] { Red, Green, Blue, Alpha });

            if (Flags.HasFlag(GalClearBufferFlags.Depth))
            {
                GL.ClearBuffer(ClearBuffer.Depth, 0, ref Depth);
            }

            if (Flags.HasFlag(GalClearBufferFlags.Stencil))
            {
                GL.ClearBuffer(ClearBuffer.Stencil, 0, ref Stencil);
            }

            GL.ColorMask(true, true, true, true);
        }
Esempio n. 5
0
        private void ClearBuffers(NvGpuVmm Vmm, GpuMethodCall MethCall)
        {
            int Attachment = (MethCall.Argument >> 6) & 0xf;

            GalClearBufferFlags Flags = (GalClearBufferFlags)(MethCall.Argument & 0x3f);

            float Red   = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 0);
            float Green = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 1);
            float Blue  = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 2);
            float Alpha = ReadRegisterFloat(NvGpuEngine3dReg.ClearNColor + 3);

            float Depth = ReadRegisterFloat(NvGpuEngine3dReg.ClearDepth);

            int Stencil = ReadRegister(NvGpuEngine3dReg.ClearStencil);

            SetFrameBuffer(Vmm, Attachment);

            SetZeta(Vmm);

            SetRenderTargets();

            Gpu.Renderer.RenderTarget.Bind();

            Gpu.Renderer.Rasterizer.ClearBuffers(Flags, Attachment, Red, Green, Blue, Alpha, Depth, Stencil);

            Gpu.Renderer.Pipeline.ResetDepthMask();
            Gpu.Renderer.Pipeline.ResetColorMask(Attachment);
        }
Esempio n. 6
0
        public void ClearBuffers(
            GalClearBufferFlags Flags,
            float Red, float Green, float Blue, float Alpha,
            float Depth,
            int Stencil)
        {
            ClearBufferMask Mask = ClearBufferMask.ColorBufferBit;

            GL.ColorMask(
                Flags.HasFlag(GalClearBufferFlags.ColorRed),
                Flags.HasFlag(GalClearBufferFlags.ColorGreen),
                Flags.HasFlag(GalClearBufferFlags.ColorBlue),
                Flags.HasFlag(GalClearBufferFlags.ColorAlpha));

            if (Flags.HasFlag(GalClearBufferFlags.Depth))
            {
                Mask |= ClearBufferMask.DepthBufferBit;
            }

            if (Flags.HasFlag(GalClearBufferFlags.Stencil))
            {
                Mask |= ClearBufferMask.StencilBufferBit;
            }

            GL.ClearColor(Red, Green, Blue, Alpha);

            GL.ClearDepth(Depth);

            GL.ClearStencil(Stencil);

            GL.Clear(Mask);

            GL.ColorMask(true, true, true, true);
        }
Esempio n. 7
0
        public void ClearBuffers(
            GalClearBufferFlags flags,
            int attachment,
            float red,
            float green,
            float blue,
            float alpha,
            float depth,
            int stencil)
        {
            GL.ColorMask(
                attachment,
                flags.HasFlag(GalClearBufferFlags.ColorRed),
                flags.HasFlag(GalClearBufferFlags.ColorGreen),
                flags.HasFlag(GalClearBufferFlags.ColorBlue),
                flags.HasFlag(GalClearBufferFlags.ColorAlpha));

            GL.ClearBuffer(ClearBuffer.Color, attachment, new float[] { red, green, blue, alpha });

            GL.ColorMask(attachment, true, true, true, true);
            GL.DepthMask(true);

            if (flags.HasFlag(GalClearBufferFlags.Depth))
            {
                GL.ClearBuffer(ClearBuffer.Depth, 0, ref depth);
            }

            if (flags.HasFlag(GalClearBufferFlags.Stencil))
            {
                GL.ClearBuffer(ClearBuffer.Stencil, 0, ref stencil);
            }
        }
Esempio n. 8
0
        private void ClearBuffers(NvGpuVmm Vmm, NvGpuPBEntry PBEntry)
        {
            int Arg0 = PBEntry.Arguments[0];

            int FbIndex = (Arg0 >> 6) & 0xf;

            GalClearBufferFlags Flags = (GalClearBufferFlags)(Arg0 & 0x3f);

            SetFrameBuffer(Vmm, FbIndex);

            Gpu.Renderer.Rasterizer.ClearBuffers(Flags);
        }
Esempio n. 9
0
        private void ClearBuffers(AMemory Memory, NsGpuPBEntry PBEntry)
        {
            int Arg0 = PBEntry.Arguments[0];

            int FbIndex = (Arg0 >> 6) & 0xf;

            int Layer = (Arg0 >> 10) & 0x3ff;

            GalClearBufferFlags Flags = (GalClearBufferFlags)(Arg0 & 0x3f);

            SetFrameBuffer(0);

            //TODO: Enable this once the frame buffer problems are fixed.
            //Gpu.Renderer.ClearBuffers(Layer, Flags);
        }
Esempio n. 10
0
        private void ClearBuffers(AMemory Memory, NsGpuPBEntry PBEntry)
        {
            if (HasDataToRender)
            {
                HasDataToRender = false;

                Gpu.Renderer.DrawFrameBuffer(0);
            }

            int Arg0 = PBEntry.Arguments[0];

            int FbIndex = (Arg0 >> 6) & 0xf;

            int Layer = (Arg0 >> 10) & 0x3ff;

            GalClearBufferFlags Flags = (GalClearBufferFlags)(Arg0 & 0x3f);

            SetFrameBuffer(0);

            Gpu.Renderer.ClearBuffers(Layer, Flags);
        }
Esempio n. 11
0
        public void ClearBuffers(
            GalClearBufferFlags Flags,
            int Attachment,
            float Red, float Green, float Blue, float Alpha,
            float Depth,
            int Stencil)
        {
            //OpenGL needs glDepthMask to be enabled to clear it
            if (!DepthWriteEnabled)
            {
                GL.DepthMask(true);
            }

            GL.ColorMask(
                Flags.HasFlag(GalClearBufferFlags.ColorRed),
                Flags.HasFlag(GalClearBufferFlags.ColorGreen),
                Flags.HasFlag(GalClearBufferFlags.ColorBlue),
                Flags.HasFlag(GalClearBufferFlags.ColorAlpha));

            GL.ClearBuffer(ClearBuffer.Color, Attachment, new float[] { Red, Green, Blue, Alpha });

            if (Flags.HasFlag(GalClearBufferFlags.Depth))
            {
                GL.ClearBuffer(ClearBuffer.Depth, 0, ref Depth);
            }

            if (Flags.HasFlag(GalClearBufferFlags.Stencil))
            {
                GL.ClearBuffer(ClearBuffer.Stencil, 0, ref Stencil);
            }

            GL.ColorMask(true, true, true, true);

            if (!DepthWriteEnabled)
            {
                GL.DepthMask(false);
            }
        }
Esempio n. 12
0
        public void ClearBuffers(GalClearBufferFlags Flags)
        {
            ClearBufferMask Mask = ClearBufferMask.ColorBufferBit;

            GL.ColorMask(
                Flags.HasFlag(GalClearBufferFlags.ColorRed),
                Flags.HasFlag(GalClearBufferFlags.ColorGreen),
                Flags.HasFlag(GalClearBufferFlags.ColorBlue),
                Flags.HasFlag(GalClearBufferFlags.ColorAlpha));

            if (Flags.HasFlag(GalClearBufferFlags.Depth))
            {
                Mask |= ClearBufferMask.DepthBufferBit;
            }

            if (Flags.HasFlag(GalClearBufferFlags.Stencil))
            {
                Mask |= ClearBufferMask.StencilBufferBit;
            }

            GL.Clear(Mask);

            GL.ColorMask(true, true, true, true);
        }
Esempio n. 13
0
 public void ClearBuffers(int RtIndex, GalClearBufferFlags Flags)
 {
     ActionsQueue.Enqueue(() => Rasterizer.ClearBuffers(RtIndex, Flags));
 }