Commit 4863daf0 authored by H. Verbeet's avatar H. Verbeet Committed by Alexandre Julliard

wined3d: Bind the surface texture in LoadLocation().

parent 6cab4c80
...@@ -47,16 +47,14 @@ static void surface_bind_and_dirtify(IWineD3DSurfaceImpl *This) { ...@@ -47,16 +47,14 @@ static void surface_bind_and_dirtify(IWineD3DSurfaceImpl *This) {
IWineD3DSurface_BindTexture((IWineD3DSurface *)This); IWineD3DSurface_BindTexture((IWineD3DSurface *)This);
} }
/* This call just downloads data, the caller is responsible for activating the
* right context and binding the correct texture. */
static void surface_download_data(IWineD3DSurfaceImpl *This) { static void surface_download_data(IWineD3DSurfaceImpl *This) {
IWineD3DDeviceImpl *myDevice = This->resource.wineD3DDevice;
if (0 == This->glDescription.textureName) { if (0 == This->glDescription.textureName) {
ERR("Surface does not have a texture, but SFLAG_INTEXTURE is set\n"); ERR("Surface does not have a texture, but SFLAG_INTEXTURE is set\n");
return; return;
} }
ActivateContext(myDevice, myDevice->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD);
if(This->Flags & SFLAG_CONVERTED) { if(This->Flags & SFLAG_CONVERTED) {
FIXME("Read back converted textures unsupported, format=%s\n", debug_d3dformat(This->resource.format)); FIXME("Read back converted textures unsupported, format=%s\n", debug_d3dformat(This->resource.format));
return; return;
...@@ -64,8 +62,6 @@ static void surface_download_data(IWineD3DSurfaceImpl *This) { ...@@ -64,8 +62,6 @@ static void surface_download_data(IWineD3DSurfaceImpl *This) {
ENTER_GL(); ENTER_GL();
surface_bind_and_dirtify(This);
if (This->resource.format == WINED3DFMT_DXT1 || if (This->resource.format == WINED3DFMT_DXT1 ||
This->resource.format == WINED3DFMT_DXT2 || This->resource.format == WINED3DFMT_DXT3 || This->resource.format == WINED3DFMT_DXT2 || This->resource.format == WINED3DFMT_DXT3 ||
This->resource.format == WINED3DFMT_DXT4 || This->resource.format == WINED3DFMT_DXT5) { This->resource.format == WINED3DFMT_DXT4 || This->resource.format == WINED3DFMT_DXT5) {
...@@ -194,6 +190,8 @@ static void surface_download_data(IWineD3DSurfaceImpl *This) { ...@@ -194,6 +190,8 @@ static void surface_download_data(IWineD3DSurfaceImpl *This) {
This->Flags |= SFLAG_INSYSMEM; This->Flags |= SFLAG_INSYSMEM;
} }
/* This call just uploads data, the caller is responsible for activating the
* right context and binding the correct texture. */
static void surface_upload_data(IWineD3DSurfaceImpl *This, GLenum internal, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *data) { static void surface_upload_data(IWineD3DSurfaceImpl *This, GLenum internal, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *data) {
if (This->resource.format == WINED3DFMT_DXT1 || if (This->resource.format == WINED3DFMT_DXT1 ||
This->resource.format == WINED3DFMT_DXT2 || This->resource.format == WINED3DFMT_DXT3 || This->resource.format == WINED3DFMT_DXT2 || This->resource.format == WINED3DFMT_DXT3 ||
...@@ -250,6 +248,8 @@ static void surface_upload_data(IWineD3DSurfaceImpl *This, GLenum internal, GLsi ...@@ -250,6 +248,8 @@ static void surface_upload_data(IWineD3DSurfaceImpl *This, GLenum internal, GLsi
} }
} }
/* This call just allocates the texture, the caller is responsible for
* activating the right context and binding the correct texture. */
static void surface_allocate_surface(IWineD3DSurfaceImpl *This, GLenum internal, GLsizei width, GLsizei height, GLenum format, GLenum type) { static void surface_allocate_surface(IWineD3DSurfaceImpl *This, GLenum internal, GLsizei width, GLsizei height, GLenum format, GLenum type) {
BOOL enable_client_storage = FALSE; BOOL enable_client_storage = FALSE;
BYTE *mem = NULL; BYTE *mem = NULL;
...@@ -3792,6 +3792,9 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_LoadLocation(IWineD3DSurface *iface, D ...@@ -3792,6 +3792,9 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_LoadLocation(IWineD3DSurface *iface, D
/* Download the surface to system memory */ /* Download the surface to system memory */
if(This->Flags & SFLAG_INTEXTURE) { if(This->Flags & SFLAG_INTEXTURE) {
ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD);
surface_bind_and_dirtify(This);
surface_download_data(This); surface_download_data(This);
} else { } else {
read_from_framebuffer(This, rect, read_from_framebuffer(This, rect,
...@@ -3807,6 +3810,9 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_LoadLocation(IWineD3DSurface *iface, D ...@@ -3807,6 +3810,9 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_LoadLocation(IWineD3DSurface *iface, D
} else /* if(flag == SFLAG_INTEXTURE) */ { } else /* if(flag == SFLAG_INTEXTURE) */ {
d3dfmt_get_conv(This, TRUE /* We need color keying */, TRUE /* We will use textures */, &format, &internal, &type, &convert, &bpp, This->srgb); d3dfmt_get_conv(This, TRUE /* We need color keying */, TRUE /* We will use textures */, &format, &internal, &type, &convert, &bpp, This->srgb);
ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD);
surface_bind_and_dirtify(This);
if (This->Flags & SFLAG_INDRAWABLE) { if (This->Flags & SFLAG_INDRAWABLE) {
GLint prevRead; GLint prevRead;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment