summaryrefslogtreecommitdiff
path: root/src/mesa/state_tracker/st_context.c
diff options
context:
space:
mode:
authorBrian <brian.paul@tungstengraphics.com>2007-12-19 13:45:00 -0700
committerBrian <brian.paul@tungstengraphics.com>2007-12-19 13:45:00 -0700
commitc664302c3e34a29b4bbb02fd3789dd3f7d92849c (patch)
treeb691a49e42d79be672a6f699962327eb6fcba837 /src/mesa/state_tracker/st_context.c
parent1575763a6f57d1f13c707b709f188b0617c8955a (diff)
Fix problem with initial viewport/scissor size.
If an app never called glViewport, the viewport size was always 0 by 0 pixels. Now pass initial size to st_create_framebuffer() and initialize the viewport and scissor bounds in st_make_current(). This could also be fixed by ensuring the gl_framebuffers passed to _mesa_make_current() were initialized to the right size. But that involves allocating the renderbuffers/pipe_surfaces earlier and that runs into some other issues ATM. Also remove obsolete createRenderbuffers param to st_create_framebuffer().
Diffstat (limited to 'src/mesa/state_tracker/st_context.c')
-rw-r--r--src/mesa/state_tracker/st_context.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c
index 524e06fb00..1d26da474e 100644
--- a/src/mesa/state_tracker/st_context.c
+++ b/src/mesa/state_tracker/st_context.c
@@ -28,6 +28,8 @@
#include "main/imports.h"
#include "main/context.h"
#include "main/extensions.h"
+#include "main/matrix.h"
+#include "main/buffers.h"
#include "vbo/vbo.h"
#include "shader/shader_api.h"
#include "st_public.h"
@@ -163,7 +165,19 @@ void st_make_current(struct st_context *st,
struct st_framebuffer *read)
{
if (st) {
+ GLboolean firstTime = st->ctx->FirstTimeCurrent;
_mesa_make_current(st->ctx, &draw->Base, &read->Base);
+ /* Need to initialize viewport here since draw->Base->Width/Height
+ * will still be zero at this point.
+ * This could be improved, but would require rather extensive work
+ * elsewhere (allocate rb surface storage sooner)
+ */
+ if (firstTime) {
+ GLuint w = draw->InitWidth, h = draw->InitHeight;
+ _mesa_set_viewport(st->ctx, 0, 0, w, h);
+ _mesa_set_scissor(st->ctx, 0, 0, w, h);
+
+ }
}
else {
_mesa_make_current(NULL, NULL, NULL);