コード例 #1
0
        /// <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);
                }
            }
        }
コード例 #2
0
ファイル: Methods.cs プロジェクト: scorpiofoxefim/Ryujinx
        /// <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);
                }
            }
        }
コード例 #3
0
 public void SetScissorState(ScissorState state)
 {
     scissorState      = state;
     scissorStateDirty = true;
 }