mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 02:38:04 +02:00
scissor depends on glScissor() and framebuffer size
This commit is contained in:
parent
3bf0fd6090
commit
9267341bd0
1 changed files with 28 additions and 9 deletions
|
|
@ -36,28 +36,47 @@
|
|||
#include "st_atom.h"
|
||||
|
||||
|
||||
/* scissor state
|
||||
/**
|
||||
* Scissor depends on the scissor box, and the framebuffer dimensions.
|
||||
*/
|
||||
static void update_scissor( struct st_context *st )
|
||||
static void
|
||||
update_scissor( struct st_context *st )
|
||||
{
|
||||
struct softpipe_scissor_rect scissor;
|
||||
const struct gl_framebuffer *fb = st->ctx->DrawBuffer;
|
||||
|
||||
scissor.minx = 0;
|
||||
scissor.miny = 0;
|
||||
scissor.maxx = fb->Width;
|
||||
scissor.maxy = fb->Height;
|
||||
|
||||
if (st->ctx->Scissor.Enabled) {
|
||||
if (st->ctx->Scissor.X > scissor.minx)
|
||||
scissor.minx = st->ctx->Scissor.X;
|
||||
if (st->ctx->Scissor.Y > scissor.miny)
|
||||
scissor.miny = st->ctx->Scissor.Y;
|
||||
|
||||
if (st->ctx->Scissor.X + st->ctx->Scissor.Width < scissor.maxx)
|
||||
scissor.maxx = st->ctx->Scissor.X + st->ctx->Scissor.Width;
|
||||
if (st->ctx->Scissor.Y + st->ctx->Scissor.Height < scissor.maxy)
|
||||
scissor.maxy = st->ctx->Scissor.Y + st->ctx->Scissor.Height;
|
||||
|
||||
/* check for null space */
|
||||
if (scissor.minx >= scissor.maxx || scissor.miny >= scissor.maxy)
|
||||
scissor.minx = scissor.miny = scissor.maxx = scissor.maxy = 0;
|
||||
}
|
||||
|
||||
scissor.minx = st->ctx->Scissor.X;
|
||||
scissor.miny = st->ctx->Scissor.Y;
|
||||
scissor.maxx = st->ctx->Scissor.X + st->ctx->Scissor.Width;
|
||||
scissor.maxy = st->ctx->Scissor.Y + st->ctx->Scissor.Height;
|
||||
|
||||
if (memcmp(&scissor, &st->state.scissor, sizeof(scissor)) != 0) {
|
||||
/* state has changed */
|
||||
st->state.scissor = scissor; /* struct copy */
|
||||
st->softpipe->set_scissor_rect(st->softpipe, &scissor); /* set new state */
|
||||
st->softpipe->set_scissor_rect(st->softpipe, &scissor); /* activate */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const struct st_tracked_state st_update_scissor = {
|
||||
.dirty = {
|
||||
.mesa = (_NEW_SCISSOR),
|
||||
.mesa = (_NEW_SCISSOR | _NEW_BUFFERS),
|
||||
.st = 0,
|
||||
},
|
||||
.update = update_scissor
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue