/// <summary> /// Updates host scissor test state based on current GPU state. /// </summary> /// <param name="state">Current GPU state</param> private void UpdateScissorState(GpuState state) { for (int index = 0; index < Constants.TotalViewports; index++) { ScissorState scissor = state.Get <ScissorState>(MethodOffset.ScissorState, index); bool enable = scissor.Enable && (scissor.X1 != 0 || scissor.Y1 != 0 || scissor.X2 != 0xffff || scissor.Y2 != 0xffff); _context.Renderer.Pipeline.SetScissorEnable(index, enable); if (enable) { int x = scissor.X1; int y = scissor.Y1; int width = scissor.X2 - x; int height = scissor.Y2 - y; float scale = TextureManager.RenderTargetScale; if (scale != 1f) { x = (int)(x * scale); y = (int)(y * scale); width = (int)Math.Ceiling(width * scale); height = (int)Math.Ceiling(height * scale); } _context.Renderer.Pipeline.SetScissor(index, x, y, width, height); } } }
/// <summary> /// Updates host scissor test state based on current GPU state. /// </summary> /// <param name="state">Current GPU state</param> private void UpdateScissorState(GpuState state) { for (int index = 0; index < Constants.TotalViewports; index++) { ScissorState scissor = state.Get <ScissorState>(MethodOffset.ScissorState, index); bool enable = scissor.Enable && (scissor.X1 != 0 || scissor.Y1 != 0 || scissor.X2 != 0xffff || scissor.Y2 != 0xffff); _context.Renderer.Pipeline.SetScissorEnable(index, enable); if (enable) { _context.Renderer.Pipeline.SetScissor(index, scissor.X1, scissor.Y1, scissor.X2 - scissor.X1, scissor.Y2 - scissor.Y1); } } }
public void SetScissorState(ScissorState state) { scissorState = state; scissorStateDirty = true; }