wined3d: Track when the FBO is dirty. (try 3)

Henri Verbeet hverbeet at gmail.com
Fri Apr 8 08:50:36 CDT 2011


On 7 April 2011 18:51, Adam Martinson <amartinson at codeweavers.com> wrote:
> -            context_apply_fbo_state(context, GL_FRAMEBUFFER, context->blit_targets, depth_stencil, SFLAG_INTEXTURE);
> +
> +            if (rt_count == device->adapter->gl_info.limits.buffers &&
> +                rts == device->render_targets &&
> +                depth_stencil == device->depth_stencil)
> +            {
> +                if (context->device_fbo != NULL)
> +                {
> +                    context_apply_device_fbo(context);
> +                }
> +                else
> +                {
> +                    context_apply_fbo_state(context, GL_FRAMEBUFFER, context->blit_targets, depth_stencil, SFLAG_INTEXTURE);
> +                    context->device_fbo = context->current_fbo;
> +                }
> +            }
> +            else
> +            {
> +                context_apply_fbo_state(context, GL_FRAMEBUFFER, context->blit_targets, depth_stencil, SFLAG_INTEXTURE);
> +            }
That's not very pretty.

> @@ -6709,6 +6721,7 @@ void device_resource_released(struct IWineD3DDeviceImpl *device, struct wined3d_
>                      {
>                          ERR("Surface %p is still in use as render target %u.\n", surface, i);
>                          device->render_targets[i] = NULL;
> +                        fbo_dirty = TRUE;
>                      }
>                  }
>
> @@ -6716,7 +6729,10 @@ void device_resource_released(struct IWineD3DDeviceImpl *device, struct wined3d_
>                  {
>                      ERR("Surface %p is still in use as depth/stencil buffer.\n", surface);
>                      device->depth_stencil = NULL;
> +                    fbo_dirty = TRUE;
That code should never execute, hence the ERR.



More information about the wine-devel mailing list