Module: wine Branch: master Commit: 0ee57cf142f59d48cc411df9f319a68e965b2a83 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0ee57cf142f59d48cc411df9f3...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Wed Sep 24 15:56:47 2008 +0200
wined3d: Set the texture name at surface creation.
This prevents the target from changing during the first PreLoad() call on a surface, which would be inconvenient when attaching a surface to a FBO for example.
---
dlls/wined3d/cubetexture.c | 14 +------------- dlls/wined3d/device.c | 10 ++++++++++ dlls/wined3d/texture.c | 5 +---- 3 files changed, 12 insertions(+), 17 deletions(-)
diff --git a/dlls/wined3d/cubetexture.c b/dlls/wined3d/cubetexture.c index d670106..786a40c 100644 --- a/dlls/wined3d/cubetexture.c +++ b/dlls/wined3d/cubetexture.c @@ -27,15 +27,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d_texture); #define GLINFO_LOCATION This->resource.wineD3DDevice->adapter->gl_info
-static const GLenum cube_targets[6] = { - GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, - GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB, - GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB, - GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB, - GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB, - GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB -}; - /* ******************************************* IWineD3DCubeTexture IUnknown parts follow ******************************************* */ @@ -156,8 +147,7 @@ static void WINAPI IWineD3DCubeTextureImpl_PreLoad(IWineD3DCubeTexture *iface) { for (i = 0; i < This->baseTexture.levels; i++) { for (j = WINED3DCUBEMAP_FACE_POSITIVE_X; j <= WINED3DCUBEMAP_FACE_NEGATIVE_Z ; j++) { IWineD3DSurface_AddDirtyRect(This->surfaces[j][i], NULL); - surface_set_texture_name(This->surfaces[j][i], This->baseTexture.textureName); - surface_set_texture_target(This->surfaces[j][i], cube_targets[j]); + surface_force_reload(This->surfaces[j][i]); IWineD3DSurface_LoadTexture(This->surfaces[j][i], srgb_mode); } } @@ -183,7 +173,6 @@ static void WINAPI IWineD3DCubeTextureImpl_UnLoad(IWineD3DCubeTexture *iface) { for (j = WINED3DCUBEMAP_FACE_POSITIVE_X; j <= WINED3DCUBEMAP_FACE_NEGATIVE_Z ; j++) { IWineD3DSurface_UnLoad(This->surfaces[j][i]); surface_set_texture_name(This->surfaces[j][i], 0); - surface_set_texture_target(This->surfaces[j][i], IWineD3DTexture_GetTextureDimensions(iface)); } }
@@ -248,7 +237,6 @@ static HRESULT WINAPI IWineD3DCubeTextureImpl_BindTexture(IWineD3DCubeTexture *i for (i = 0; i < This->baseTexture.levels; ++i) { for (j = WINED3DCUBEMAP_FACE_POSITIVE_X; j <= WINED3DCUBEMAP_FACE_NEGATIVE_Z; ++j) { surface_set_texture_name(This->surfaces[j][i], This->baseTexture.textureName); - surface_set_texture_target(This->surfaces[j][i], cube_targets[j]); } } } diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 08ef2e1..1a99b31 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -887,6 +887,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateTexture(IWineD3DDevice *iface, U
IWineD3DSurface_SetContainer(object->surfaces[i], (IWineD3DBase *)object); TRACE("Created surface level %d @ %p\n", i, object->surfaces[i]); + surface_set_texture_target(object->surfaces[i], object->target); /* calculate the next mipmap level */ tmpW = max(1, tmpW >> 1); tmpH = max(1, tmpH >> 1); @@ -1132,6 +1133,14 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateCubeTexture(IWineD3DDevice *iface
/* Create the 6 faces */ for (j = 0; j < 6; j++) { + static const GLenum cube_targets[6] = { + GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, + GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB, + GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB, + GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB + };
hr=D3DCB_CreateSurface(This->parent, parent, tmpW, tmpW, Format, Usage, Pool, i /* Level */, j, &object->surfaces[j][i],pSharedHandle); @@ -1156,6 +1165,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateCubeTexture(IWineD3DDevice *iface } IWineD3DSurface_SetContainer(object->surfaces[j][i], (IWineD3DBase *)object); TRACE("Created surface level %d @ %p,\n", i, object->surfaces[j][i]); + surface_set_texture_target(object->surfaces[j][i], cube_targets[j]); } tmpW = max(1, tmpW >> 1); } diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c index 8390060..2c3f5d5 100644 --- a/dlls/wined3d/texture.c +++ b/dlls/wined3d/texture.c @@ -138,8 +138,7 @@ static void WINAPI IWineD3DTextureImpl_PreLoad(IWineD3DTexture *iface) {
for (i = 0; i < This->baseTexture.levels; i++) { IWineD3DSurface_AddDirtyRect(This->surfaces[i], NULL); - surface_set_texture_name(This->surfaces[i], This->baseTexture.textureName); - surface_set_texture_target(This->surfaces[i], IWineD3DTexture_GetTextureDimensions(iface)); + surface_force_reload(This->surfaces[i]); IWineD3DSurface_LoadTexture(This->surfaces[i], srgb_mode); } } else { @@ -164,7 +163,6 @@ static void WINAPI IWineD3DTextureImpl_UnLoad(IWineD3DTexture *iface) { for (i = 0; i < This->baseTexture.levels; i++) { IWineD3DSurface_UnLoad(This->surfaces[i]); surface_set_texture_name(This->surfaces[i], 0); - surface_set_texture_target(This->surfaces[i], IWineD3DTexture_GetTextureDimensions(iface)); }
IWineD3DBaseTextureImpl_UnLoad((IWineD3DBaseTexture *) iface); @@ -226,7 +224,6 @@ static HRESULT WINAPI IWineD3DTextureImpl_BindTexture(IWineD3DTexture *iface) { UINT i; for (i = 0; i < This->baseTexture.levels; ++i) { surface_set_texture_name(This->surfaces[i], This->baseTexture.textureName); - surface_set_texture_target(This->surfaces[i], IWineD3DTexture_GetTextureDimensions(iface)); } /* Conditinal non power of two textures use a different clamping default. If we're using the GL_WINE_normalized_texrect * partial driver emulation, we're dealing with a GL_TEXTURE_2D texture which has the address mode set to repeat - something