Go to the source code of this file.
Functions | |
static void | update_scissor (struct st_context *st) |
Scissor depends on the scissor box, and the framebuffer dimensions. | |
Variables | |
struct st_tracked_state | st_update_scissor |
static void update_scissor | ( | struct st_context * | st | ) | [static] |
Scissor depends on the scissor box, and the framebuffer dimensions.
Definition at line 43 of file st_atom_scissor.c.
References st_context::ctx, pipe_scissor_state::maxx, pipe_scissor_state::maxy, pipe_scissor_state::minx, pipe_scissor_state::miny, st_context::pipe, st_context::scissor, pipe_context::set_scissor_state, and st_context::state.
00044 { 00045 struct pipe_scissor_state scissor; 00046 const struct gl_framebuffer *fb = st->ctx->DrawBuffer; 00047 GLint miny, maxy; 00048 00049 scissor.minx = 0; 00050 scissor.miny = 0; 00051 scissor.maxx = fb->Width; 00052 scissor.maxy = fb->Height; 00053 00054 if (st->ctx->Scissor.Enabled) { 00055 if ((GLuint)st->ctx->Scissor.X > scissor.minx) 00056 scissor.minx = st->ctx->Scissor.X; 00057 if ((GLuint)st->ctx->Scissor.Y > scissor.miny) 00058 scissor.miny = st->ctx->Scissor.Y; 00059 00060 if ((GLuint)st->ctx->Scissor.X + st->ctx->Scissor.Width < scissor.maxx) 00061 scissor.maxx = st->ctx->Scissor.X + st->ctx->Scissor.Width; 00062 if ((GLuint)st->ctx->Scissor.Y + st->ctx->Scissor.Height < scissor.maxy) 00063 scissor.maxy = st->ctx->Scissor.Y + st->ctx->Scissor.Height; 00064 00065 /* check for null space */ 00066 if (scissor.minx >= scissor.maxx || scissor.miny >= scissor.maxy) 00067 scissor.minx = scissor.miny = scissor.maxx = scissor.maxy = 0; 00068 } 00069 00070 /* Now invert Y. Pipe drivers use the convention Y=0=top for surfaces 00071 */ 00072 miny = fb->Height - scissor.maxy; 00073 maxy = fb->Height - scissor.miny; 00074 scissor.miny = miny; 00075 scissor.maxy = maxy; 00076 00077 if (memcmp(&scissor, &st->state.scissor, sizeof(scissor)) != 0) { 00078 /* state has changed */ 00079 st->state.scissor = scissor; /* struct copy */ 00080 st->pipe->set_scissor_state(st->pipe, &scissor); /* activate */ 00081 } 00082 }
Initial value:
{ "st_update_scissor", { (_NEW_SCISSOR | _NEW_BUFFERS), 0, }, update_scissor }
Definition at line 85 of file st_atom_scissor.c.