wined3d: Explicitly pass the wined3d context to context_apply_draw_buffer().

This commit is contained in:
Henri Verbeet 2009-07-23 10:54:35 +02:00 committed by Alexandre Julliard
parent 9253bbcb05
commit 85e2c05e4f
1 changed files with 12 additions and 9 deletions

View File

@ -1734,16 +1734,19 @@ retry:
} }
/* Context activation is done by the caller. */ /* Context activation is done by the caller. */
static void apply_draw_buffer(IWineD3DDeviceImpl *This, IWineD3DSurface *target, BOOL blit) static void context_apply_draw_buffer(struct WineD3DContext *context, BOOL blit)
{ {
const struct wined3d_gl_info *gl_info = This->activeContext->gl_info; const struct wined3d_gl_info *gl_info = context->gl_info;
IWineD3DSurface *rt = context->current_rt;
IWineD3DSwapChain *swapchain; IWineD3DSwapChain *swapchain;
IWineD3DDeviceImpl *device;
if (SUCCEEDED(IWineD3DSurface_GetContainer(target, &IID_IWineD3DSwapChain, (void **)&swapchain))) device = ((IWineD3DSurfaceImpl *)rt)->resource.wineD3DDevice;
if (SUCCEEDED(IWineD3DSurface_GetContainer(rt, &IID_IWineD3DSwapChain, (void **)&swapchain)))
{ {
IWineD3DSwapChain_Release((IUnknown *)swapchain); IWineD3DSwapChain_Release((IUnknown *)swapchain);
ENTER_GL(); ENTER_GL();
glDrawBuffer(surface_get_gl_buffer(target, swapchain)); glDrawBuffer(surface_get_gl_buffer(rt, swapchain));
checkGLcall("glDrawBuffers()"); checkGLcall("glDrawBuffers()");
LEAVE_GL(); LEAVE_GL();
} }
@ -1756,12 +1759,12 @@ static void apply_draw_buffer(IWineD3DDeviceImpl *This, IWineD3DSurface *target,
{ {
if (GL_SUPPORT(ARB_DRAW_BUFFERS)) if (GL_SUPPORT(ARB_DRAW_BUFFERS))
{ {
GL_EXTCALL(glDrawBuffersARB(GL_LIMITS(buffers), This->draw_buffers)); GL_EXTCALL(glDrawBuffersARB(GL_LIMITS(buffers), device->draw_buffers));
checkGLcall("glDrawBuffers()"); checkGLcall("glDrawBuffers()");
} }
else else
{ {
glDrawBuffer(This->draw_buffers[0]); glDrawBuffer(device->draw_buffers[0]);
checkGLcall("glDrawBuffer()"); checkGLcall("glDrawBuffer()");
} }
} else { } else {
@ -1771,7 +1774,7 @@ static void apply_draw_buffer(IWineD3DDeviceImpl *This, IWineD3DSurface *target,
} }
else else
{ {
glDrawBuffer(This->offscreenBuffer); glDrawBuffer(device->offscreenBuffer);
checkGLcall("glDrawBuffer()"); checkGLcall("glDrawBuffer()");
} }
LEAVE_GL(); LEAVE_GL();
@ -1836,7 +1839,7 @@ void ActivateContext(IWineD3DDeviceImpl *This, IWineD3DSurface *target, ContextU
LEAVE_GL(); LEAVE_GL();
} }
if (context->draw_buffer_dirty) { if (context->draw_buffer_dirty) {
apply_draw_buffer(This, target, FALSE); context_apply_draw_buffer(context, FALSE);
context->draw_buffer_dirty = FALSE; context->draw_buffer_dirty = FALSE;
} }
break; break;
@ -1858,7 +1861,7 @@ void ActivateContext(IWineD3DDeviceImpl *This, IWineD3DSurface *target, ContextU
context->draw_buffer_dirty = TRUE; context->draw_buffer_dirty = TRUE;
} }
if (context->draw_buffer_dirty) { if (context->draw_buffer_dirty) {
apply_draw_buffer(This, target, TRUE); context_apply_draw_buffer(context, TRUE);
if (wined3d_settings.offscreen_rendering_mode != ORM_FBO) { if (wined3d_settings.offscreen_rendering_mode != ORM_FBO) {
context->draw_buffer_dirty = FALSE; context->draw_buffer_dirty = FALSE;
} }