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); }
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); }
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); }
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); }
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); }
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); }
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); } }
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); }
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); }
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); }
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); } }
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); }
public void ClearBuffers(int RtIndex, GalClearBufferFlags Flags) { ActionsQueue.Enqueue(() => Rasterizer.ClearBuffers(RtIndex, Flags)); }