wined3d: Remove IWineD3DBaseTexture::BindTexture() from the public interface.

This commit is contained in:
Henri Verbeet 2011-01-04 17:42:03 +01:00 committed by Alexandre Julliard
parent f9a1e8813e
commit d72520b5cc
10 changed files with 155 additions and 133 deletions

View File

@ -27,9 +27,9 @@
WINE_DEFAULT_DEBUG_CHANNEL(d3d_texture);
HRESULT basetexture_init(IWineD3DBaseTextureImpl *texture, UINT layer_count, UINT level_count,
WINED3DRESOURCETYPE resource_type, IWineD3DDeviceImpl *device, DWORD usage,
const struct wined3d_format *format, WINED3DPOOL pool, void *parent,
HRESULT basetexture_init(IWineD3DBaseTextureImpl *texture, const struct wined3d_texture_ops *texture_ops,
UINT layer_count, UINT level_count, WINED3DRESOURCETYPE resource_type, IWineD3DDeviceImpl *device,
DWORD usage, const struct wined3d_format *format, WINED3DPOOL pool, void *parent,
const struct wined3d_parent_ops *parent_ops)
{
HRESULT hr;
@ -42,6 +42,7 @@ HRESULT basetexture_init(IWineD3DBaseTextureImpl *texture, UINT layer_count, UIN
return hr;
}
texture->baseTexture.texture_ops = texture_ops;
texture->baseTexture.sub_resources = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
level_count * layer_count * sizeof(*texture->baseTexture.sub_resources));
if (!texture->baseTexture.sub_resources)

View File

@ -27,8 +27,36 @@
WINE_DEFAULT_DEBUG_CHANNEL(d3d_texture);
/* Context activation is done by the caller. */
static HRESULT cubetexture_bind(IWineD3DBaseTextureImpl *texture, BOOL srgb)
{
BOOL set_gl_texture_desc;
HRESULT hr;
TRACE("texture %p, srgb %#x.\n", texture, srgb);
hr = basetexture_bind(texture, srgb, &set_gl_texture_desc);
if (set_gl_texture_desc && SUCCEEDED(hr))
{
UINT sub_count = texture->baseTexture.level_count * texture->baseTexture.layer_count;
UINT i;
for (i = 0; i < sub_count; ++i)
{
IWineD3DSurfaceImpl *surface = (IWineD3DSurfaceImpl *)texture->baseTexture.sub_resources[i];
if (texture->baseTexture.is_srgb)
surface_set_texture_name(surface, texture->baseTexture.texture_srgb.name, TRUE);
else
surface_set_texture_name(surface, texture->baseTexture.texture_rgb.name, FALSE);
}
}
return hr;
}
/* Do not call while under the GL lock. */
static void cubetexture_internal_preload(IWineD3DBaseTextureImpl *texture, enum WINED3DSRGB srgb)
static void cubetexture_preload(IWineD3DBaseTextureImpl *texture, enum WINED3DSRGB srgb)
{
UINT sub_count = texture->baseTexture.level_count * texture->baseTexture.layer_count;
IWineD3DDeviceImpl *device = texture->resource.device;
@ -46,7 +74,7 @@ static void cubetexture_internal_preload(IWineD3DBaseTextureImpl *texture, enum
break;
case SRGB_BOTH:
cubetexture_internal_preload(texture, SRGB_RGB);
cubetexture_preload(texture, SRGB_RGB);
/* Fallthrough */
case SRGB_SRGB:
@ -108,6 +136,12 @@ static void cubetexture_internal_preload(IWineD3DBaseTextureImpl *texture, enum
if (context) context_release(context);
}
static const struct wined3d_texture_ops cubetexture_ops =
{
cubetexture_bind,
cubetexture_preload,
};
static void cubetexture_cleanup(IWineD3DCubeTextureImpl *This)
{
UINT sub_count = This->baseTexture.level_count * This->baseTexture.layer_count;
@ -203,7 +237,7 @@ static DWORD WINAPI IWineD3DCubeTextureImpl_GetPriority(IWineD3DCubeTexture *ifa
/* Do not call while under the GL lock. */
static void WINAPI IWineD3DCubeTextureImpl_PreLoad(IWineD3DCubeTexture *iface)
{
cubetexture_internal_preload((IWineD3DBaseTextureImpl *)iface, SRGB_ANY);
cubetexture_preload((IWineD3DBaseTextureImpl *)iface, SRGB_ANY);
}
/* Do not call while under the GL lock. */
@ -274,34 +308,6 @@ static void WINAPI IWineD3DCubeTextureImpl_GenerateMipSubLevels(IWineD3DCubeText
basetexture_generate_mipmaps((IWineD3DBaseTextureImpl *)iface);
}
/* Context activation is done by the caller. */
static HRESULT WINAPI IWineD3DCubeTextureImpl_BindTexture(IWineD3DCubeTexture *iface, BOOL srgb) {
IWineD3DCubeTextureImpl *This = (IWineD3DCubeTextureImpl *)iface;
BOOL set_gl_texture_desc;
HRESULT hr;
TRACE("(%p) : relay to BaseTexture\n", This);
hr = basetexture_bind((IWineD3DBaseTextureImpl *)iface, srgb, &set_gl_texture_desc);
if (set_gl_texture_desc && SUCCEEDED(hr))
{
UINT sub_count = This->baseTexture.level_count * This->baseTexture.layer_count;
UINT i;
for (i = 0; i < sub_count; ++i)
{
IWineD3DSurfaceImpl *surface = (IWineD3DSurfaceImpl *)This->baseTexture.sub_resources[i];
if (This->baseTexture.is_srgb)
surface_set_texture_name(surface, This->baseTexture.texture_srgb.name, TRUE);
else
surface_set_texture_name(surface, This->baseTexture.texture_rgb.name, FALSE);
}
}
return hr;
}
static BOOL WINAPI IWineD3DCubeTextureImpl_IsCondNP2(IWineD3DCubeTexture *iface)
{
TRACE("iface %p.\n", iface);
@ -433,7 +439,6 @@ static const IWineD3DCubeTextureVtbl IWineD3DCubeTexture_Vtbl =
IWineD3DCubeTextureImpl_SetAutoGenFilterType,
IWineD3DCubeTextureImpl_GetAutoGenFilterType,
IWineD3DCubeTextureImpl_GenerateMipSubLevels,
IWineD3DCubeTextureImpl_BindTexture,
IWineD3DCubeTextureImpl_IsCondNP2,
/* IWineD3DCubeTexture */
IWineD3DCubeTextureImpl_GetLevelDesc,
@ -493,8 +498,9 @@ HRESULT cubetexture_init(IWineD3DCubeTextureImpl *texture, UINT edge_length, UIN
texture->lpVtbl = &IWineD3DCubeTexture_Vtbl;
hr = basetexture_init((IWineD3DBaseTextureImpl *)texture, 6, levels,
WINED3DRTYPE_CUBETEXTURE, device, usage, format, pool, parent, parent_ops);
hr = basetexture_init((IWineD3DBaseTextureImpl *)texture, &cubetexture_ops,
6, levels, WINED3DRTYPE_CUBETEXTURE, device, usage, format, pool,
parent, parent_ops);
if (FAILED(hr))
{
WARN("Failed to initialize basetexture, returning %#x\n", hr);
@ -559,7 +565,6 @@ HRESULT cubetexture_init(IWineD3DCubeTextureImpl *texture, UINT edge_length, UIN
}
tmp_w = max(1, tmp_w >> 1);
}
texture->baseTexture.internal_preload = cubetexture_internal_preload;
return WINED3D_OK;
}

View File

@ -460,7 +460,7 @@ static void device_preload_texture(const struct wined3d_state *state, unsigned i
if (!(texture = state->textures[idx])) return;
srgb = state->sampler_states[idx][WINED3DSAMP_SRGBTEXTURE] ? SRGB_SRGB : SRGB_RGB;
texture->baseTexture.internal_preload(texture, srgb);
texture->baseTexture.texture_ops->texture_preload(texture, srgb);
}
void device_preload_textures(IWineD3DDeviceImpl *device)
@ -5062,7 +5062,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_UpdateTexture(IWineD3DDevice *iface,
}
/* Make sure that the destination texture is loaded. */
((IWineD3DBaseTextureImpl *)dst_texture)->baseTexture.internal_preload(
((IWineD3DBaseTextureImpl *)dst_texture)->baseTexture.texture_ops->texture_preload(
(IWineD3DBaseTextureImpl *)dst_texture, SRGB_RGB);
/* Update every surface level of the texture. */

View File

@ -3646,7 +3646,7 @@ static void sampler(DWORD state_id, IWineD3DStateBlockImpl *stateblock, struct w
IWineD3DBaseTextureImpl *texture = state->textures[sampler];
BOOL srgb = state->sampler_states[sampler][WINED3DSAMP_SRGBTEXTURE];
IWineD3DBaseTexture_BindTexture((IWineD3DBaseTexture *)texture, srgb);
texture->baseTexture.texture_ops->texture_bind(texture, srgb);
basetexture_apply_state_changes(texture,
state->sampler_states[sampler], gl_info);

View File

@ -1072,7 +1072,7 @@ void surface_internal_preload(IWineD3DSurfaceImpl *surface, enum WINED3DSRGB srg
IWineD3DBaseTextureImpl *texture = surface->container.u.texture;
TRACE("Passing to container (%p).\n", texture);
texture->baseTexture.internal_preload(texture, srgb);
texture->baseTexture.texture_ops->texture_preload(texture, srgb);
}
else
{
@ -2503,8 +2503,10 @@ static void WINAPI IWineD3DSurfaceImpl_BindTexture(IWineD3DSurface *iface, BOOL
if (This->container.type == WINED3D_CONTAINER_TEXTURE)
{
TRACE("Passing to container.\n");
IWineD3DBaseTexture_BindTexture((IWineD3DBaseTexture *)This->container.u.texture, srgb);
IWineD3DBaseTextureImpl *texture = This->container.u.texture;
TRACE("Passing to container (%p).\n", texture);
texture->baseTexture.texture_ops->texture_bind(texture, srgb);
}
else
{

View File

@ -27,8 +27,66 @@
WINE_DEFAULT_DEBUG_CHANNEL(d3d_texture);
/* Context activation is done by the caller. */
static HRESULT texture_bind(IWineD3DBaseTextureImpl *texture, BOOL srgb)
{
BOOL set_gl_texture_desc;
HRESULT hr;
TRACE("texture %p, srgb %#x.\n", texture, srgb);
hr = basetexture_bind(texture, srgb, &set_gl_texture_desc);
if (set_gl_texture_desc && SUCCEEDED(hr))
{
UINT i;
struct gl_texture *gl_tex;
if (texture->baseTexture.is_srgb)
gl_tex = &texture->baseTexture.texture_srgb;
else
gl_tex = &texture->baseTexture.texture_rgb;
for (i = 0; i < texture->baseTexture.level_count; ++i)
{
IWineD3DSurfaceImpl *surface = (IWineD3DSurfaceImpl *)texture->baseTexture.sub_resources[i];
surface_set_texture_name(surface, gl_tex->name, texture->baseTexture.is_srgb);
}
/* 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 that prevents us
* from hitting the accelerated codepath. Thus manually set the GL
* state. The same applies to filtering. Even if the texture has only
* one mip level, the default LINEAR_MIPMAP_LINEAR filter causes a SW
* fallback on macos. */
if (IWineD3DBaseTexture_IsCondNP2((IWineD3DBaseTexture *)texture))
{
GLenum target = texture->baseTexture.target;
ENTER_GL();
glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
checkGLcall("glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)");
glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
checkGLcall("glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)");
glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
checkGLcall("glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST)");
glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
checkGLcall("glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST)");
LEAVE_GL();
gl_tex->states[WINED3DTEXSTA_ADDRESSU] = WINED3DTADDRESS_CLAMP;
gl_tex->states[WINED3DTEXSTA_ADDRESSV] = WINED3DTADDRESS_CLAMP;
gl_tex->states[WINED3DTEXSTA_MAGFILTER] = WINED3DTEXF_POINT;
gl_tex->states[WINED3DTEXSTA_MINFILTER] = WINED3DTEXF_POINT;
gl_tex->states[WINED3DTEXSTA_MIPFILTER] = WINED3DTEXF_NONE;
}
}
return hr;
}
/* Do not call while under the GL lock. */
static void texture_internal_preload(IWineD3DBaseTextureImpl *texture, enum WINED3DSRGB srgb)
static void texture_preload(IWineD3DBaseTextureImpl *texture, enum WINED3DSRGB srgb)
{
IWineD3DDeviceImpl *device = texture->resource.device;
struct wined3d_context *context = NULL;
@ -45,7 +103,7 @@ static void texture_internal_preload(IWineD3DBaseTextureImpl *texture, enum WINE
break;
case SRGB_BOTH:
texture_internal_preload(texture, SRGB_RGB);
texture_preload(texture, SRGB_RGB);
/* Fallthrough */
case SRGB_SRGB:
@ -102,6 +160,12 @@ static void texture_internal_preload(IWineD3DBaseTextureImpl *texture, enum WINE
*dirty = FALSE;
}
static const struct wined3d_texture_ops texture_ops =
{
texture_bind,
texture_preload,
};
static void texture_cleanup(IWineD3DTextureImpl *This)
{
unsigned int i;
@ -198,7 +262,7 @@ static DWORD WINAPI IWineD3DTextureImpl_GetPriority(IWineD3DTexture *iface) {
/* Do not call while under the GL lock. */
static void WINAPI IWineD3DTextureImpl_PreLoad(IWineD3DTexture *iface)
{
texture_internal_preload((IWineD3DBaseTextureImpl *)iface, SRGB_ANY);
texture_preload((IWineD3DBaseTextureImpl *)iface, SRGB_ANY);
}
/* Do not call while under the GL lock. */
@ -265,64 +329,6 @@ static void WINAPI IWineD3DTextureImpl_GenerateMipSubLevels(IWineD3DTexture *ifa
basetexture_generate_mipmaps((IWineD3DBaseTextureImpl *)iface);
}
/* Context activation is done by the caller. */
static HRESULT WINAPI IWineD3DTextureImpl_BindTexture(IWineD3DTexture *iface, BOOL srgb) {
IWineD3DTextureImpl *This = (IWineD3DTextureImpl *)iface;
BOOL set_gl_texture_desc;
HRESULT hr;
TRACE("(%p) : relay to BaseTexture\n", This);
hr = basetexture_bind((IWineD3DBaseTextureImpl *)iface, srgb, &set_gl_texture_desc);
if (set_gl_texture_desc && SUCCEEDED(hr)) {
UINT i;
struct gl_texture *gl_tex;
if(This->baseTexture.is_srgb) {
gl_tex = &This->baseTexture.texture_srgb;
} else {
gl_tex = &This->baseTexture.texture_rgb;
}
for (i = 0; i < This->baseTexture.level_count; ++i)
{
IWineD3DSurfaceImpl *surface = (IWineD3DSurfaceImpl *)This->baseTexture.sub_resources[i];
surface_set_texture_name(surface, gl_tex->name, This->baseTexture.is_srgb);
}
/* 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 that prevents us
* from hitting the accelerated codepath. Thus manually set the GL
* state. The same applies to filtering. Even if the texture has only
* one mip level, the default LINEAR_MIPMAP_LINEAR filter causes a SW
* fallback on macos. */
if (IWineD3DBaseTexture_IsCondNP2(iface))
{
GLenum target = This->baseTexture.target;
ENTER_GL();
glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
checkGLcall("glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)");
glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
checkGLcall("glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)");
glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
checkGLcall("glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST)");
glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
checkGLcall("glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST)");
LEAVE_GL();
gl_tex->states[WINED3DTEXSTA_ADDRESSU] = WINED3DTADDRESS_CLAMP;
gl_tex->states[WINED3DTEXSTA_ADDRESSV] = WINED3DTADDRESS_CLAMP;
gl_tex->states[WINED3DTEXSTA_MAGFILTER] = WINED3DTEXF_POINT;
gl_tex->states[WINED3DTEXSTA_MINFILTER] = WINED3DTEXF_POINT;
gl_tex->states[WINED3DTEXSTA_MIPFILTER] = WINED3DTEXF_NONE;
}
}
return hr;
}
static BOOL WINAPI IWineD3DTextureImpl_IsCondNP2(IWineD3DTexture *iface) {
IWineD3DTextureImpl *This = (IWineD3DTextureImpl *)iface;
TRACE("(%p)\n", This);
@ -448,7 +454,6 @@ static const IWineD3DTextureVtbl IWineD3DTexture_Vtbl =
IWineD3DTextureImpl_SetAutoGenFilterType,
IWineD3DTextureImpl_GetAutoGenFilterType,
IWineD3DTextureImpl_GenerateMipSubLevels,
IWineD3DTextureImpl_BindTexture,
IWineD3DTextureImpl_IsCondNP2,
/* IWineD3DTexture */
IWineD3DTextureImpl_GetLevelDesc,
@ -526,8 +531,9 @@ HRESULT texture_init(IWineD3DTextureImpl *texture, UINT width, UINT height, UINT
texture->lpVtbl = &IWineD3DTexture_Vtbl;
hr = basetexture_init((IWineD3DBaseTextureImpl *)texture, 1, levels,
WINED3DRTYPE_TEXTURE, device, usage, format, pool, parent, parent_ops);
hr = basetexture_init((IWineD3DBaseTextureImpl *)texture, &texture_ops,
1, levels, WINED3DRTYPE_TEXTURE, device, usage, format, pool,
parent, parent_ops);
if (FAILED(hr))
{
WARN("Failed to initialize basetexture, returning %#x.\n", hr);
@ -616,7 +622,6 @@ HRESULT texture_init(IWineD3DTextureImpl *texture, UINT width, UINT height, UINT
tmp_w = max(1, tmp_w >> 1);
tmp_h = max(1, tmp_h >> 1);
}
texture->baseTexture.internal_preload = texture_internal_preload;
return WINED3D_OK;
}

View File

@ -30,6 +30,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d_surface);
static void volume_bind_and_dirtify(IWineD3DVolume *iface) {
IWineD3DVolumeImpl *This = (IWineD3DVolumeImpl *)iface;
const struct wined3d_gl_info *gl_info = &This->resource.device->adapter->gl_info;
IWineD3DBaseTextureImpl *container = (IWineD3DBaseTextureImpl *)This->container;
DWORD active_sampler;
/* We don't need a specific texture unit, but after binding the texture the current unit is dirty.
@ -59,7 +60,7 @@ static void volume_bind_and_dirtify(IWineD3DVolume *iface) {
IWineD3DDeviceImpl_MarkStateDirty(This->resource.device, STATE_SAMPLER(active_sampler));
}
IWineD3DVolumeTexture_BindTexture((IWineD3DVolumeTexture *)This->container, FALSE);
container->baseTexture.texture_ops->texture_bind(container, FALSE);
}
void volume_add_dirty_box(IWineD3DVolume *iface, const WINED3DBOX *dirty_box)

View File

@ -26,8 +26,18 @@
WINE_DEFAULT_DEBUG_CHANNEL(d3d_texture);
/* Context activation is done by the caller. */
static HRESULT volumetexture_bind(IWineD3DBaseTextureImpl *texture, BOOL srgb)
{
BOOL dummy;
TRACE("texture %p, srgb %#x.\n", texture, srgb);
return basetexture_bind(texture, srgb, &dummy);
}
/* Do not call while under the GL lock. */
static void volumetexture_internal_preload(IWineD3DBaseTextureImpl *texture, enum WINED3DSRGB srgb)
static void volumetexture_preload(IWineD3DBaseTextureImpl *texture, enum WINED3DSRGB srgb)
{
IWineD3DDeviceImpl *device = texture->resource.device;
const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
@ -76,6 +86,12 @@ static void volumetexture_internal_preload(IWineD3DBaseTextureImpl *texture, enu
texture->baseTexture.texture_rgb.dirty = FALSE;
}
const struct wined3d_texture_ops volumetexture_ops =
{
volumetexture_bind,
volumetexture_preload,
};
static void volumetexture_cleanup(IWineD3DVolumeTextureImpl *This)
{
unsigned int i;
@ -165,7 +181,7 @@ static DWORD WINAPI IWineD3DVolumeTextureImpl_GetPriority(IWineD3DVolumeTexture
static void WINAPI IWineD3DVolumeTextureImpl_PreLoad(IWineD3DVolumeTexture *iface)
{
volumetexture_internal_preload((IWineD3DBaseTextureImpl *)iface, SRGB_ANY);
volumetexture_preload((IWineD3DBaseTextureImpl *)iface, SRGB_ANY);
}
/* Do not call while under the GL lock. */
@ -229,16 +245,6 @@ static void WINAPI IWineD3DVolumeTextureImpl_GenerateMipSubLevels(IWineD3DVolume
basetexture_generate_mipmaps((IWineD3DBaseTextureImpl *)iface);
}
/* Context activation is done by the caller. */
static HRESULT WINAPI IWineD3DVolumeTextureImpl_BindTexture(IWineD3DVolumeTexture *iface, BOOL srgb)
{
BOOL dummy;
TRACE("iface %p, srgb %#x.\n", iface, srgb);
return basetexture_bind((IWineD3DBaseTextureImpl *)iface, srgb, &dummy);
}
static BOOL WINAPI IWineD3DVolumeTextureImpl_IsCondNP2(IWineD3DVolumeTexture *iface)
{
TRACE("iface %p.\n", iface);
@ -365,7 +371,6 @@ static const IWineD3DVolumeTextureVtbl IWineD3DVolumeTexture_Vtbl =
IWineD3DVolumeTextureImpl_GetAutoGenFilterType,
IWineD3DVolumeTextureImpl_GenerateMipSubLevels,
/* not in d3d */
IWineD3DVolumeTextureImpl_BindTexture,
IWineD3DVolumeTextureImpl_IsCondNP2,
/* volume texture */
IWineD3DVolumeTextureImpl_GetLevelDesc,
@ -424,8 +429,9 @@ HRESULT volumetexture_init(IWineD3DVolumeTextureImpl *texture, UINT width, UINT
texture->lpVtbl = &IWineD3DVolumeTexture_Vtbl;
hr = basetexture_init((IWineD3DBaseTextureImpl *)texture, 1, levels,
WINED3DRTYPE_VOLUMETEXTURE, device, usage, format, pool, parent, parent_ops);
hr = basetexture_init((IWineD3DBaseTextureImpl *)texture, &volumetexture_ops,
1, levels, WINED3DRTYPE_VOLUMETEXTURE, device, usage, format, pool,
parent, parent_ops);
if (FAILED(hr))
{
WARN("Failed to initialize basetexture, returning %#x.\n", hr);
@ -467,7 +473,6 @@ HRESULT volumetexture_init(IWineD3DVolumeTextureImpl *texture, UINT width, UINT
tmp_h = max(1, tmp_h >> 1);
tmp_d = max(1, tmp_d >> 1);
}
texture->baseTexture.internal_preload = volumetexture_internal_preload;
return WINED3D_OK;
}

View File

@ -1879,11 +1879,18 @@ struct gl_texture
GLuint name;
};
struct wined3d_texture_ops
{
HRESULT (*texture_bind)(struct IWineD3DBaseTextureImpl *texture, BOOL srgb);
void (*texture_preload)(struct IWineD3DBaseTextureImpl *texture, enum WINED3DSRGB srgb);
};
/*****************************************************************************
* IWineD3DBaseTexture implementation structure (extends IWineD3DResourceImpl)
*/
typedef struct IWineD3DBaseTextureClass
{
const struct wined3d_texture_ops *texture_ops;
struct gl_texture texture_rgb, texture_srgb;
IWineD3DResourceImpl **sub_resources;
UINT layer_count;
@ -1898,7 +1905,6 @@ typedef struct IWineD3DBaseTextureClass
const struct min_lookup *minMipLookup;
const GLenum *magLookup;
GLenum target;
void (*internal_preload)(struct IWineD3DBaseTextureImpl *texture, enum WINED3DSRGB srgb);
} IWineD3DBaseTextureClass;
typedef struct IWineD3DBaseTextureImpl
@ -1921,9 +1927,9 @@ DWORD basetexture_get_level_count(IWineD3DBaseTextureImpl *texture) DECLSPEC_HID
DWORD basetexture_get_lod(IWineD3DBaseTextureImpl *texture) DECLSPEC_HIDDEN;
IWineD3DResourceImpl *basetexture_get_sub_resource(IWineD3DBaseTextureImpl *texture,
UINT sub_resource_idx) DECLSPEC_HIDDEN;
HRESULT basetexture_init(IWineD3DBaseTextureImpl *texture, UINT layer_count, UINT level_count,
WINED3DRESOURCETYPE resource_type, IWineD3DDeviceImpl *device, DWORD usage,
const struct wined3d_format *format, WINED3DPOOL pool, void *parent,
HRESULT basetexture_init(IWineD3DBaseTextureImpl *texture, const struct wined3d_texture_ops *texture_ops,
UINT layer_count, UINT level_count, WINED3DRESOURCETYPE resource_type, IWineD3DDeviceImpl *device,
DWORD usage, const struct wined3d_format *format, WINED3DPOOL pool, void *parent,
const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
HRESULT basetexture_set_autogen_filter_type(IWineD3DBaseTextureImpl *texture,
WINED3DTEXTUREFILTERTYPE filter_type) DECLSPEC_HIDDEN;

View File

@ -2525,9 +2525,6 @@ interface IWineD3DBaseTexture : IWineD3DResource
);
void GenerateMipSubLevels(
);
HRESULT BindTexture(
[in] BOOL srgb
);
BOOL IsCondNP2(
);
}