Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
d72520b5
Commit
d72520b5
authored
Jan 04, 2011
by
Henri Verbeet
Committed by
Alexandre Julliard
Jan 05, 2011
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Remove IWineD3DBaseTexture::BindTexture() from the public interface.
parent
f9a1e881
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
155 additions
and
133 deletions
+155
-133
basetexture.c
dlls/wined3d/basetexture.c
+4
-3
cubetexture.c
dlls/wined3d/cubetexture.c
+40
-35
device.c
dlls/wined3d/device.c
+2
-2
state.c
dlls/wined3d/state.c
+1
-1
surface.c
dlls/wined3d/surface.c
+5
-3
texture.c
dlls/wined3d/texture.c
+70
-65
volume.c
dlls/wined3d/volume.c
+2
-1
volumetexture.c
dlls/wined3d/volumetexture.c
+21
-16
wined3d_private.h
dlls/wined3d/wined3d_private.h
+10
-4
wined3d.idl
include/wine/wined3d.idl
+0
-3
No files found.
dlls/wined3d/basetexture.c
View file @
d72520b5
...
...
@@ -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
usag
e
,
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
*
devic
e
,
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
)
...
...
dlls/wined3d/cubetexture.c
View file @
d72520b5
...
...
@@ -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
;
}
dlls/wined3d/device.c
View file @
d72520b5
...
...
@@ -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. */
...
...
dlls/wined3d/state.c
View file @
d72520b5
...
...
@@ -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
);
...
...
dlls/wined3d/surface.c
View file @
d72520b5
...
...
@@ -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
{
...
...
dlls/wined3d/texture.c
View file @
d72520b5
...
...
@@ -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
;
}
dlls/wined3d/volume.c
View file @
d72520b5
...
...
@@ -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
)
...
...
dlls/wined3d/volumetexture.c
View file @
d72520b5
...
...
@@ -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
;
}
dlls/wined3d/wined3d_private.h
View file @
d72520b5
...
...
@@ -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
usag
e
,
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
*
devic
e
,
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
;
...
...
include/wine/wined3d.idl
View file @
d72520b5
...
...
@@ -2525,9 +2525,6 @@ interface IWineD3DBaseTexture : IWineD3DResource
)
;
void
GenerateMipSubLevels
(
)
;
HRESULT
BindTexture
(
[
in
]
BOOL
srgb
)
;
BOOL
IsCondNP2
(
)
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment