wined3d: Simply pass an IWineD3DSurfaceImpl pointer to context_attach_depth_stencil_fbo().

This commit is contained in:
Henri Verbeet 2010-04-15 19:21:26 +02:00 committed by Alexandre Julliard
parent 95130a7d5e
commit 24c93d48aa
3 changed files with 14 additions and 15 deletions

View File

@ -182,51 +182,50 @@ static void context_apply_attachment_filter_states(IWineD3DSurfaceImpl *surface)
/* GL locking is done by the caller */ /* GL locking is done by the caller */
void context_attach_depth_stencil_fbo(struct wined3d_context *context, void context_attach_depth_stencil_fbo(struct wined3d_context *context,
GLenum fbo_target, IWineD3DSurface *depth_stencil, BOOL use_render_buffer) GLenum fbo_target, IWineD3DSurfaceImpl *depth_stencil, BOOL use_render_buffer)
{ {
IWineD3DSurfaceImpl *depth_stencil_impl = (IWineD3DSurfaceImpl *)depth_stencil;
const struct wined3d_gl_info *gl_info = context->gl_info; const struct wined3d_gl_info *gl_info = context->gl_info;
TRACE("Attach depth stencil %p\n", depth_stencil); TRACE("Attach depth stencil %p\n", depth_stencil);
if (depth_stencil) if (depth_stencil)
{ {
DWORD format_flags = depth_stencil_impl->resource.format_desc->Flags; DWORD format_flags = depth_stencil->resource.format_desc->Flags;
if (use_render_buffer && depth_stencil_impl->current_renderbuffer) if (use_render_buffer && depth_stencil->current_renderbuffer)
{ {
if (format_flags & WINED3DFMT_FLAG_DEPTH) if (format_flags & WINED3DFMT_FLAG_DEPTH)
{ {
gl_info->fbo_ops.glFramebufferRenderbuffer(fbo_target, GL_DEPTH_ATTACHMENT, gl_info->fbo_ops.glFramebufferRenderbuffer(fbo_target, GL_DEPTH_ATTACHMENT,
GL_RENDERBUFFER, depth_stencil_impl->current_renderbuffer->id); GL_RENDERBUFFER, depth_stencil->current_renderbuffer->id);
checkGLcall("glFramebufferRenderbuffer()"); checkGLcall("glFramebufferRenderbuffer()");
} }
if (format_flags & WINED3DFMT_FLAG_STENCIL) if (format_flags & WINED3DFMT_FLAG_STENCIL)
{ {
gl_info->fbo_ops.glFramebufferRenderbuffer(fbo_target, GL_STENCIL_ATTACHMENT, gl_info->fbo_ops.glFramebufferRenderbuffer(fbo_target, GL_STENCIL_ATTACHMENT,
GL_RENDERBUFFER, depth_stencil_impl->current_renderbuffer->id); GL_RENDERBUFFER, depth_stencil->current_renderbuffer->id);
checkGLcall("glFramebufferRenderbuffer()"); checkGLcall("glFramebufferRenderbuffer()");
} }
} }
else else
{ {
surface_prepare_texture(depth_stencil_impl, gl_info, FALSE); surface_prepare_texture(depth_stencil, gl_info, FALSE);
context_apply_attachment_filter_states(depth_stencil_impl); context_apply_attachment_filter_states(depth_stencil);
if (format_flags & WINED3DFMT_FLAG_DEPTH) if (format_flags & WINED3DFMT_FLAG_DEPTH)
{ {
gl_info->fbo_ops.glFramebufferTexture2D(fbo_target, GL_DEPTH_ATTACHMENT, gl_info->fbo_ops.glFramebufferTexture2D(fbo_target, GL_DEPTH_ATTACHMENT,
depth_stencil_impl->texture_target, depth_stencil_impl->texture_name, depth_stencil->texture_target, depth_stencil->texture_name,
depth_stencil_impl->texture_level); depth_stencil->texture_level);
checkGLcall("glFramebufferTexture2D()"); checkGLcall("glFramebufferTexture2D()");
} }
if (format_flags & WINED3DFMT_FLAG_STENCIL) if (format_flags & WINED3DFMT_FLAG_STENCIL)
{ {
gl_info->fbo_ops.glFramebufferTexture2D(fbo_target, GL_STENCIL_ATTACHMENT, gl_info->fbo_ops.glFramebufferTexture2D(fbo_target, GL_STENCIL_ATTACHMENT,
depth_stencil_impl->texture_target, depth_stencil_impl->texture_name, depth_stencil->texture_target, depth_stencil->texture_name,
depth_stencil_impl->texture_level); depth_stencil->texture_level);
checkGLcall("glFramebufferTexture2D()"); checkGLcall("glFramebufferTexture2D()");
} }
} }
@ -426,7 +425,7 @@ static void context_apply_fbo_entry(struct wined3d_context *context, struct fbo_
surface_set_compatible_renderbuffer(device->stencilBufferTarget, w, h); surface_set_compatible_renderbuffer(device->stencilBufferTarget, w, h);
} }
context_attach_depth_stencil_fbo(context, GL_FRAMEBUFFER, device->stencilBufferTarget, TRUE); context_attach_depth_stencil_fbo(context, GL_FRAMEBUFFER, (IWineD3DSurfaceImpl *)device->stencilBufferTarget, TRUE);
entry->attached = TRUE; entry->attached = TRUE;
} }

View File

@ -4140,7 +4140,7 @@ void surface_load_ds_location(IWineD3DSurface *iface, struct wined3d_context *co
gl_info->fbo_ops.glFramebufferRenderbuffer(GL_FRAMEBUFFER, gl_info->fbo_ops.glFramebufferRenderbuffer(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, device->depth_blt_rb); GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, device->depth_blt_rb);
checkGLcall("glFramebufferRenderbufferEXT"); checkGLcall("glFramebufferRenderbufferEXT");
context_attach_depth_stencil_fbo(context, GL_FRAMEBUFFER, iface, FALSE); context_attach_depth_stencil_fbo(context, GL_FRAMEBUFFER, This, FALSE);
/* Do the actual blit */ /* Do the actual blit */
surface_depth_blt(This, gl_info, device->depth_blt_texture, surface_depth_blt(This, gl_info, device->depth_blt_texture,

View File

@ -1214,7 +1214,7 @@ void context_resource_released(IWineD3DDevice *iface,
IWineD3DResource *resource, WINED3DRESOURCETYPE type) DECLSPEC_HIDDEN; IWineD3DResource *resource, WINED3DRESOURCETYPE type) DECLSPEC_HIDDEN;
void context_bind_fbo(struct wined3d_context *context, GLenum target, GLuint *fbo) DECLSPEC_HIDDEN; void context_bind_fbo(struct wined3d_context *context, GLenum target, GLuint *fbo) DECLSPEC_HIDDEN;
void context_attach_depth_stencil_fbo(struct wined3d_context *context, void context_attach_depth_stencil_fbo(struct wined3d_context *context,
GLenum fbo_target, IWineD3DSurface *depth_stencil, BOOL use_render_buffer) DECLSPEC_HIDDEN; GLenum fbo_target, IWineD3DSurfaceImpl *depth_stencil, BOOL use_render_buffer) DECLSPEC_HIDDEN;
void context_attach_surface_fbo(const struct wined3d_context *context, void context_attach_surface_fbo(const struct wined3d_context *context,
GLenum fbo_target, DWORD idx, IWineD3DSurfaceImpl *surface) DECLSPEC_HIDDEN; GLenum fbo_target, DWORD idx, IWineD3DSurfaceImpl *surface) DECLSPEC_HIDDEN;
struct wined3d_context *context_create(IWineD3DSwapChainImpl *swapchain, IWineD3DSurfaceImpl *target, struct wined3d_context *context_create(IWineD3DSwapChainImpl *swapchain, IWineD3DSurfaceImpl *target,