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.
This commit is contained in:
parent
eaf2474003
commit
0ee57cf142
|
@ -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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue