[PATCH 3/4] wined3d: Pass an IWineD3DBaseTextureImpl pointer to basetexture_set_autogen_filter_type().
Henri Verbeet
hverbeet at codeweavers.com
Sun Jan 2 05:26:37 CST 2011
---
dlls/wined3d/basetexture.c | 88 ++++++++++++++++++++-------------------
dlls/wined3d/cubetexture.c | 6 ++-
dlls/wined3d/texture.c | 6 ++-
dlls/wined3d/volumetexture.c | 6 ++-
dlls/wined3d/wined3d_private.h | 2 +-
5 files changed, 58 insertions(+), 50 deletions(-)
diff --git a/dlls/wined3d/basetexture.c b/dlls/wined3d/basetexture.c
index 15a58fd..d1c27e8 100644
--- a/dlls/wined3d/basetexture.c
+++ b/dlls/wined3d/basetexture.c
@@ -170,50 +170,52 @@ DWORD basetexture_get_level_count(IWineD3DBaseTextureImpl *texture)
return texture->baseTexture.level_count;
}
-HRESULT basetexture_set_autogen_filter_type(IWineD3DBaseTexture *iface, WINED3DTEXTUREFILTERTYPE FilterType)
+HRESULT basetexture_set_autogen_filter_type(IWineD3DBaseTextureImpl *texture, WINED3DTEXTUREFILTERTYPE filter_type)
{
- IWineD3DBaseTextureImpl *This = (IWineD3DBaseTextureImpl *)iface;
- IWineD3DDeviceImpl *device = This->resource.device;
- GLenum textureDimensions = This->baseTexture.target;
-
- if (!(This->resource.usage & WINED3DUSAGE_AUTOGENMIPMAP)) {
- TRACE("(%p) : returning invalid call\n", This);
- return WINED3DERR_INVALIDCALL;
- }
- if(This->baseTexture.filterType != FilterType) {
- /* What about multithreading? Do we want all the context overhead just to set this value?
- * Or should we delay the applying until the texture is used for drawing? For now, apply
- * immediately.
- */
- struct wined3d_context *context = context_acquire(device, NULL);
-
- ENTER_GL();
- glBindTexture(textureDimensions, This->baseTexture.texture_rgb.name);
- checkGLcall("glBindTexture");
- switch(FilterType) {
- case WINED3DTEXF_NONE:
- case WINED3DTEXF_POINT:
- glTexParameteri(textureDimensions, GL_GENERATE_MIPMAP_HINT_SGIS, GL_FASTEST);
- checkGLcall("glTexParameteri(textureDimensions, GL_GENERATE_MIPMAP_HINT_SGIS, GL_FASTEST)");
-
- break;
- case WINED3DTEXF_LINEAR:
- glTexParameteri(textureDimensions, GL_GENERATE_MIPMAP_HINT_SGIS, GL_NICEST);
- checkGLcall("glTexParameteri(textureDimensions, GL_GENERATE_MIPMAP_HINT_SGIS, GL_NICEST)");
-
- break;
- default:
- WARN("Unexpected filter type %d, setting to GL_NICEST\n", FilterType);
- glTexParameteri(textureDimensions, GL_GENERATE_MIPMAP_HINT_SGIS, GL_NICEST);
- checkGLcall("glTexParameteri(textureDimensions, GL_GENERATE_MIPMAP_HINT_SGIS, GL_NICEST)");
- }
- LEAVE_GL();
-
- context_release(context);
- }
- This->baseTexture.filterType = FilterType;
- TRACE("(%p) :\n", This);
- return WINED3D_OK;
+ TRACE("texture %p, filter_type %s.\n", texture, debug_d3dtexturefiltertype(filter_type));
+
+ if (!(texture->resource.usage & WINED3DUSAGE_AUTOGENMIPMAP))
+ {
+ WARN("Texture doesn't have AUTOGENMIPMAP usage.\n");
+ return WINED3DERR_INVALIDCALL;
+ }
+
+ if (texture->baseTexture.filterType != filter_type)
+ {
+ GLenum target = texture->baseTexture.target;
+ struct wined3d_context *context;
+
+ context = context_acquire(texture->resource.device, NULL);
+
+ ENTER_GL();
+ glBindTexture(target, texture->baseTexture.texture_rgb.name);
+ checkGLcall("glBindTexture");
+ switch (filter_type)
+ {
+ case WINED3DTEXF_NONE:
+ case WINED3DTEXF_POINT:
+ glTexParameteri(target, GL_GENERATE_MIPMAP_HINT_SGIS, GL_FASTEST);
+ checkGLcall("glTexParameteri(target, GL_GENERATE_MIPMAP_HINT_SGIS, GL_FASTEST)");
+ break;
+
+ case WINED3DTEXF_LINEAR:
+ glTexParameteri(target, GL_GENERATE_MIPMAP_HINT_SGIS, GL_NICEST);
+ checkGLcall("glTexParameteri(target, GL_GENERATE_MIPMAP_HINT_SGIS, GL_NICEST)");
+ break;
+
+ default:
+ WARN("Unexpected filter type %#x, setting to GL_NICEST.\n", filter_type);
+ glTexParameteri(target, GL_GENERATE_MIPMAP_HINT_SGIS, GL_NICEST);
+ checkGLcall("glTexParameteri(target, GL_GENERATE_MIPMAP_HINT_SGIS, GL_NICEST)");
+ break;
+ }
+ LEAVE_GL();
+
+ context_release(context);
+ }
+ texture->baseTexture.filterType = filter_type;
+
+ return WINED3D_OK;
}
WINED3DTEXTUREFILTERTYPE basetexture_get_autogen_filter_type(IWineD3DBaseTexture *iface)
diff --git a/dlls/wined3d/cubetexture.c b/dlls/wined3d/cubetexture.c
index ffd0da6..8dc2579 100644
--- a/dlls/wined3d/cubetexture.c
+++ b/dlls/wined3d/cubetexture.c
@@ -259,8 +259,10 @@ static DWORD WINAPI IWineD3DCubeTextureImpl_GetLevelCount(IWineD3DCubeTexture *i
return basetexture_get_level_count((IWineD3DBaseTextureImpl *)iface);
}
-static HRESULT WINAPI IWineD3DCubeTextureImpl_SetAutoGenFilterType(IWineD3DCubeTexture *iface, WINED3DTEXTUREFILTERTYPE FilterType) {
- return basetexture_set_autogen_filter_type((IWineD3DBaseTexture *)iface, FilterType);
+static HRESULT WINAPI IWineD3DCubeTextureImpl_SetAutoGenFilterType(IWineD3DCubeTexture *iface,
+ WINED3DTEXTUREFILTERTYPE FilterType)
+{
+ return basetexture_set_autogen_filter_type((IWineD3DBaseTextureImpl *)iface, FilterType);
}
static WINED3DTEXTUREFILTERTYPE WINAPI IWineD3DCubeTextureImpl_GetAutoGenFilterType(IWineD3DCubeTexture *iface) {
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 6acd737..63cf182 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -250,8 +250,10 @@ static DWORD WINAPI IWineD3DTextureImpl_GetLevelCount(IWineD3DTexture *iface)
return basetexture_get_level_count((IWineD3DBaseTextureImpl *)iface);
}
-static HRESULT WINAPI IWineD3DTextureImpl_SetAutoGenFilterType(IWineD3DTexture *iface, WINED3DTEXTUREFILTERTYPE FilterType) {
- return basetexture_set_autogen_filter_type((IWineD3DBaseTexture *)iface, FilterType);
+static HRESULT WINAPI IWineD3DTextureImpl_SetAutoGenFilterType(IWineD3DTexture *iface,
+ WINED3DTEXTUREFILTERTYPE FilterType)
+{
+ return basetexture_set_autogen_filter_type((IWineD3DBaseTextureImpl *)iface, FilterType);
}
static WINED3DTEXTUREFILTERTYPE WINAPI IWineD3DTextureImpl_GetAutoGenFilterType(IWineD3DTexture *iface) {
diff --git a/dlls/wined3d/volumetexture.c b/dlls/wined3d/volumetexture.c
index 7606e99..a69049d 100644
--- a/dlls/wined3d/volumetexture.c
+++ b/dlls/wined3d/volumetexture.c
@@ -214,8 +214,10 @@ static DWORD WINAPI IWineD3DVolumeTextureImpl_GetLevelCount(IWineD3DVolumeTextur
return basetexture_get_level_count((IWineD3DBaseTextureImpl *)iface);
}
-static HRESULT WINAPI IWineD3DVolumeTextureImpl_SetAutoGenFilterType(IWineD3DVolumeTexture *iface, WINED3DTEXTUREFILTERTYPE FilterType) {
- return basetexture_set_autogen_filter_type((IWineD3DBaseTexture *)iface, FilterType);
+static HRESULT WINAPI IWineD3DVolumeTextureImpl_SetAutoGenFilterType(IWineD3DVolumeTexture *iface,
+ WINED3DTEXTUREFILTERTYPE FilterType)
+{
+ return basetexture_set_autogen_filter_type((IWineD3DBaseTextureImpl *)iface, FilterType);
}
static WINED3DTEXTUREFILTERTYPE WINAPI IWineD3DVolumeTextureImpl_GetAutoGenFilterType(IWineD3DVolumeTexture *iface) {
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index af542d4..d8647e8 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1924,7 +1924,7 @@ HRESULT basetexture_init(IWineD3DBaseTextureImpl *texture, UINT layer_count, UIN
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(IWineD3DBaseTexture *iface,
+HRESULT basetexture_set_autogen_filter_type(IWineD3DBaseTextureImpl *texture,
WINED3DTEXTUREFILTERTYPE filter_type) DECLSPEC_HIDDEN;
BOOL basetexture_set_dirty(IWineD3DBaseTextureImpl *texture, BOOL dirty) DECLSPEC_HIDDEN;
DWORD basetexture_set_lod(IWineD3DBaseTextureImpl *texture, DWORD lod) DECLSPEC_HIDDEN;
--
1.7.2.2
More information about the wine-patches
mailing list