swpipe: Manage viewport, resize on change.

* Untested until rendering works
This commit is contained in:
Alexander von Gluck IV 2012-12-02 00:22:42 +00:00
parent c9bb94092f
commit 64e07c0f38

View File

@ -48,27 +48,29 @@ extern "C" {
#define ERROR(x...) printf("GalliumContext: " x)
#if 0
static void
hgl_viewport(struct gl_context* glctx, GLint x, GLint y,
hgl_viewport(struct gl_context* glContext, GLint x, GLint y,
GLsizei width, GLsizei height)
{
TRACE("%s(glctx: %p, x: %d, y: %d, width: %d, height: %d\n",
__FUNCTION__, glctx, x, y, width, height);
struct hgl_context *context = (struct hgl_context*)glctx->DriverCtx;
TRACE("%s(glContext: %p, x: %d, y: %d, width: %d, height: %d\n", __func__,
glContext, x, y, width, height);
struct hgl_context *context = (struct hgl_context*)glContext->DriverCtx;
int32 w, h;
get_bitmap_size(context->bitmap, &w, &h);
int32 bitmapWidth;
int32 bitmapHeight;
#if 0
// TODO: mesa_resize_framebuffer? Need to investigate where this went
if (context->draw)
st_resize_framebuffer(context->draw->stfb, w, h);
if (context->read)
st_resize_framebuffer(context->read->stfb, w, h);
#endif
get_bitmap_size(context->bitmap, &bitmapWidth, &bitmapHeight);
if (width != bitmapWidth || height != bitmapHeight) {
struct gl_framebuffer *draw = glContext->WinSysDrawBuffer;
struct gl_framebuffer *read = glContext->WinSysReadBuffer;
if (draw)
_mesa_resize_framebuffer(glContext, draw, bitmapWidth, bitmapHeight);
if (read)
_mesa_resize_framebuffer(glContext, read, bitmapWidth, bitmapHeight);
}
}
#endif
static void
@ -347,9 +349,11 @@ GalliumContext::CreateContext(Bitmap *bitmap)
assert(!context->st->st_manager_private);
context->st->st_manager_private = (void*)context;
// TODO!
//context->st->ctx->DriverCtx = context;
//context->st->ctx->Driver.Viewport = hgl_viewport;
struct st_context *stContext = (struct st_context*)context->st;
stContext->ctx->DriverCtx = context;
stContext->ctx->Driver.Viewport = hgl_viewport;
// TODO: Closely review this next context logic...
context_id contextNext = -1;
@ -469,7 +473,6 @@ GalliumContext::SwapBuffers(context_id contextID)
context->st->flush(context->st, ST_FLUSH_FRONT, NULL);
// I'm not 100% sold on this... but Gallium does it quite often.
struct st_context *stContext = (struct st_context*)context->st;
unsigned nColorBuffers = stContext->state.framebuffer.nr_cbufs;