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
3f24b916
Commit
3f24b916
authored
Aug 22, 2005
by
Oliver Stieber
Committed by
Alexandre Julliard
Aug 22, 2005
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix quite a few texturing problems and cases where text isn't being
correctly displated.
parent
4c9f013f
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
43 additions
and
144 deletions
+43
-144
basetexture.c
dlls/wined3d/basetexture.c
+2
-6
device.c
dlls/wined3d/device.c
+15
-122
stateblock.c
dlls/wined3d/stateblock.c
+26
-14
wined3d_private.h
dlls/wined3d/wined3d_private.h
+0
-2
No files found.
dlls/wined3d/basetexture.c
View file @
3f24b916
...
...
@@ -283,7 +283,7 @@ HRESULT WINAPI IWineD3DBaseTextureImpl_BindTexture(IWineD3DBaseTexture *iface) {
glTexParameteri
(
textureDimensions
,
GL_TEXTURE_MAX_LEVEL
,
This
->
baseTexture
.
levels
-
1
);
checkGLcall
(
"glTexParameteri(textureDimensions, GL_TEXTURE_MAX_LEVEL, This->baseTexture.levels)"
);
}
else
{
glTexParameteri
(
textureDimensions
,
GL_TEXTURE_MIN_FILTER
,
GL_LINEAR
);
glTexParameteri
(
textureDimensions
,
GL_TEXTURE_MIN_FILTER
,
GL_LINEAR
);
}
glBindTexture
(
textureDimensions
,
This
->
baseTexture
.
textureName
);
checkGLcall
(
"glBindTexture"
);
...
...
@@ -294,11 +294,7 @@ HRESULT WINAPI IWineD3DBaseTextureImpl_BindTexture(IWineD3DBaseTexture *iface) {
TRACE
(
"Setting GL_TEXTURE_MAX_LEVEL to %d
\n
"
,
This
->
baseTexture
.
levels
-
1
);
glTexParameteri
(
textureDimensions
,
GL_TEXTURE_MAX_LEVEL
,
This
->
baseTexture
.
levels
-
1
);
checkGLcall
(
"glTexParameteri(textureDimensions, GL_TEXTURE_MAX_LEVEL, This->baseTexture.levels)"
);
}
else
{
TRACE
(
"Setting GL_TEXTURE_MAX_LEVEL to %d
\n
"
,
This
->
baseTexture
.
levels
-
1
);
glTexParameteri
(
textureDimensions
,
GL_TEXTURE_MAX_LEVEL
,
This
->
baseTexture
.
levels
-
1
);
checkGLcall
(
"glTexParameteri(textureDimensions, GL_TEXTURE_MAX_LEVEL, This->baseTexture.levels)"
);
}
}
}
else
{
/* this only happened if we've run out of openGL textures */
WARN
(
"This texture doesn't have an openGL texture assigned to it
\n
"
);
...
...
dlls/wined3d/device.c
View file @
3f24b916
...
...
@@ -3382,6 +3382,8 @@ HRESULT WINAPI IWineD3DDeviceImpl_SetSamplerState(IWineD3DDevice *iface, DWORD S
}
TRACE
(
"Setting sampler %ld %d to %ld
\n
"
,
Sampler
,
Type
,
Value
);
This
->
updateStateBlock
->
samplerState
[
Sampler
][
Type
]
=
Value
;
This
->
updateStateBlock
->
set
.
samplerState
[
Sampler
][
Type
]
=
Value
;
This
->
updateStateBlock
->
changed
.
samplerState
[
Sampler
][
Type
]
=
Value
;
/* Handle recording of state blocks */
if
(
This
->
isRecordingState
)
{
...
...
@@ -3703,131 +3705,20 @@ static void WINAPI IWineD3DDeviceImpl_ApplyTextureUnitState(IWineD3DDevice *ifac
switch
(
Type
)
{
case
WINED3DTSS_ALPHAOP
:
case
WINED3DTSS_COLOROP
:
{
if
((
Value
==
D3DTOP_DISABLE
)
&&
(
Type
==
WINED3DTSS_COLOROP
))
{
/* TODO: Disable by making this and all later levels disabled */
glDisable
(
GL_TEXTURE_1D
);
checkGLcall
(
"Disable GL_TEXTURE_1D"
);
glDisable
(
GL_TEXTURE_2D
);
checkGLcall
(
"Disable GL_TEXTURE_2D"
);
glDisable
(
GL_TEXTURE_3D
);
checkGLcall
(
"Disable GL_TEXTURE_3D"
);
break
;
/* Don't bother setting the texture operations */
}
else
{
/* Enable only the appropriate texture dimension */
if
(
Type
==
WINED3DTSS_COLOROP
)
{
if
(
This
->
stateBlock
->
textureDimensions
[
Stage
]
==
GL_TEXTURE_1D
)
{
glEnable
(
GL_TEXTURE_1D
);
checkGLcall
(
"Enable GL_TEXTURE_1D"
);
}
else
{
glDisable
(
GL_TEXTURE_1D
);
checkGLcall
(
"Disable GL_TEXTURE_1D"
);
}
if
(
This
->
stateBlock
->
textureDimensions
[
Stage
]
==
GL_TEXTURE_2D
)
{
if
(
GL_SUPPORT
(
NV_TEXTURE_SHADER
)
&&
This
->
texture_shader_active
)
{
glTexEnvi
(
GL_TEXTURE_SHADER_NV
,
GL_SHADER_OPERATION_NV
,
GL_TEXTURE_2D
);
checkGLcall
(
"Enable GL_TEXTURE_2D"
);
}
else
{
glEnable
(
GL_TEXTURE_2D
);
checkGLcall
(
"Enable GL_TEXTURE_2D"
);
}
}
else
{
glDisable
(
GL_TEXTURE_2D
);
checkGLcall
(
"Disable GL_TEXTURE_2D"
);
}
if
(
This
->
stateBlock
->
textureDimensions
[
Stage
]
==
GL_TEXTURE_3D
)
{
glEnable
(
GL_TEXTURE_3D
);
checkGLcall
(
"Enable GL_TEXTURE_3D"
);
}
else
{
glDisable
(
GL_TEXTURE_3D
);
checkGLcall
(
"Disable GL_TEXTURE_3D"
);
}
if
(
This
->
stateBlock
->
textureDimensions
[
Stage
]
==
GL_TEXTURE_CUBE_MAP_ARB
)
{
glEnable
(
GL_TEXTURE_CUBE_MAP_ARB
);
checkGLcall
(
"Enable GL_TEXTURE_CUBE_MAP"
);
}
else
{
glDisable
(
GL_TEXTURE_CUBE_MAP_ARB
);
checkGLcall
(
"Disable GL_TEXTURE_CUBE_MAP"
);
}
}
}
/* Drop through... (Except disable case) */
case
WINED3DTSS_COLORARG0
:
case
WINED3DTSS_COLORARG1
:
case
WINED3DTSS_COLORARG2
:
case
WINED3DTSS_ALPHAARG0
:
case
WINED3DTSS_ALPHAARG1
:
case
WINED3DTSS_ALPHAARG2
:
{
BOOL
isAlphaArg
=
(
Type
==
WINED3DTSS_ALPHAOP
||
Type
==
WINED3DTSS_ALPHAARG1
||
Type
==
WINED3DTSS_ALPHAARG2
||
Type
==
WINED3DTSS_ALPHAARG0
);
if
(
isAlphaArg
)
{
set_tex_op
(
iface
,
TRUE
,
Stage
,
This
->
stateBlock
->
textureState
[
Stage
][
WINED3DTSS_ALPHAOP
],
This
->
stateBlock
->
textureState
[
Stage
][
WINED3DTSS_ALPHAARG1
],
This
->
stateBlock
->
textureState
[
Stage
][
WINED3DTSS_ALPHAARG2
],
This
->
stateBlock
->
textureState
[
Stage
][
WINED3DTSS_ALPHAARG0
]);
}
else
{
set_tex_op
(
iface
,
FALSE
,
Stage
,
This
->
stateBlock
->
textureState
[
Stage
][
WINED3DTSS_COLOROP
],
This
->
stateBlock
->
textureState
[
Stage
][
WINED3DTSS_COLORARG1
],
This
->
stateBlock
->
textureState
[
Stage
][
WINED3DTSS_COLORARG2
],
This
->
stateBlock
->
textureState
[
Stage
][
WINED3DTSS_COLORARG0
]);
}
}
break
;
}
/* nothing to do as moved to drawprim for now */
break
;
case
WINED3DTSS_ADDRESSW
:
{
GLint
wrapParm
=
GL_REPEAT
;
switch
(
Value
)
{
case
D3DTADDRESS_WRAP
:
wrapParm
=
GL_REPEAT
;
break
;
case
D3DTADDRESS_CLAMP
:
wrapParm
=
GL_CLAMP_TO_EDGE
;
break
;
case
D3DTADDRESS_BORDER
:
{
if
(
GL_SUPPORT
(
ARB_TEXTURE_BORDER_CLAMP
))
{
wrapParm
=
GL_CLAMP_TO_BORDER_ARB
;
}
else
{
/* FIXME: Not right, but better */
FIXME
(
"Unrecognized or unsupported D3DTADDRESS_* value %ld, state %d
\n
"
,
Value
,
Type
);
wrapParm
=
GL_REPEAT
;
}
}
break
;
case
D3DTADDRESS_MIRROR
:
{
if
(
GL_SUPPORT
(
ARB_TEXTURE_MIRRORED_REPEAT
))
{
wrapParm
=
GL_MIRRORED_REPEAT_ARB
;
}
else
{
/* Unsupported in OpenGL pre-1.4 */
FIXME
(
"Unsupported D3DTADDRESS_MIRROR (needs GL_ARB_texture_mirrored_repeat) state %d
\n
"
,
Type
);
wrapParm
=
GL_REPEAT
;
}
}
break
;
case
D3DTADDRESS_MIRRORONCE
:
{
if
(
GL_SUPPORT
(
ATI_TEXTURE_MIRROR_ONCE
))
{
wrapParm
=
GL_MIRROR_CLAMP_TO_EDGE_ATI
;
}
else
{
FIXME
(
"Unsupported D3DTADDRESS_MIRRORONCE (needs GL_ATI_texture_mirror_once) state %d
\n
"
,
Type
);
wrapParm
=
GL_REPEAT
;
}
}
break
;
default
:
#if 0 /* I'm not sure what D3D does about ADDRESSW appearing twice */
if (Value < minLookup[WINELOOKUP_WARPPARAM] || Value > maxLookup[WINELOOKUP_WARPPARAM]) {
FIXME("Unrecognized or unsupported D3DTADDRESS_* value %ld, state %d\n", Value, Type);
wrapParm
=
GL_REPEAT
;
}
TRACE
(
"Setting WRAP_R to %d for %x
\n
"
,
wrapParm
,
This
->
stateBlock
->
textureDimensions
[
Stage
]);
glTexParameteri
(
This
->
stateBlock
->
textureDimensions
[
Stage
],
GL_TEXTURE_WRAP_R
,
wrapParm
);
checkGLcall
(
"glTexParameteri(..., GL_TEXTURE_WRAP_R, wrapParm)"
);
}
break
;
} else {
GLint wrapParm = stateLookup[WINELOOKUP_WARPPARAM][Value - minLookup[WINELOOKUP_WARPPARAM]];
TRACE("Setting WRAP_R to %d for %x\n", wrapParm, This->stateBlock->textureDimensions[Stage]);
glTexParameteri(This->stateBlock->textureDimensions[Stage], GL_TEXTURE_WRAP_R, wrapParm);
checkGLcall("glTexParameteri(..., GL_TEXTURE_WRAP_R, wrapParm)");
}
#endif
case
WINED3DTSS_TEXCOORDINDEX
:
{
/* Values 0-7 are indexes into the FVF tex coords - See comments in DrawPrimitive */
...
...
@@ -4025,6 +3916,8 @@ HRESULT WINAPI IWineD3DDeviceImpl_SetTextureStageState(IWineD3DDevice *iface, DW
return
D3DERR_INVALIDCALL
;
}
This
->
updateStateBlock
->
changed
.
textureState
[
Stage
][
Type
]
=
TRUE
;
This
->
updateStateBlock
->
set
.
textureState
[
Stage
][
Type
]
=
TRUE
;
This
->
updateStateBlock
->
textureState
[
Stage
][
Type
]
=
Value
;
return
D3D_OK
;
...
...
dlls/wined3d/stateblock.c
View file @
3f24b916
...
...
@@ -286,12 +286,14 @@ HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface){
for
(
j
=
0
;
j
<
GL_LIMITS
(
textures
);
j
++
)
{
/* TODO: move over to using memcpy */
for
(
i
=
1
;
i
<=
WINED3D_HIGHEST_TEXTURE_STATE
;
i
++
)
{
TRACE
(
"Updating texturestagestate %d,%d to %ld (was %ld)
\n
"
,
j
,
i
,
targetStateBlock
->
textureState
[
j
][
i
],
This
->
textureState
[
j
][
i
]);
This
->
textureState
[
j
][
i
]
=
targetStateBlock
->
textureState
[
j
][
i
];
if
(
This
->
set
.
textureState
[
j
][
i
])
{
TRACE
(
"Updating texturestagestate %d,%d to %ld (was %ld)
\n
"
,
j
,
i
,
targetStateBlock
->
textureState
[
j
][
i
],
This
->
textureState
[
j
][
i
]);
This
->
textureState
[
j
][
i
]
=
targetStateBlock
->
textureState
[
j
][
i
];
}
}
if
(
(
This
->
set
.
textures
[
j
]
&&
(
This
->
textures
[
j
]
!=
targetStateBlock
->
textures
[
j
]))
)
{
if
(
This
->
set
.
textures
[
j
]
)
{
TRACE
(
"Updating texture %d to %p (was %p)
\n
"
,
j
,
targetStateBlock
->
textures
[
j
],
This
->
textures
[
j
]);
This
->
textures
[
j
]
=
targetStateBlock
->
textures
[
j
];
}
...
...
@@ -302,10 +304,12 @@ HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface){
/* TODO: move over to using memcpy */
for
(
j
=
0
;
j
<
GL_LIMITS
(
samplers
);
j
++
){
for
(
i
=
1
;
i
<=
WINED3D_HIGHEST_SAMPLER_STATE
;
i
++
){
/* States are 1 based */
TRACE
(
"Updating sampler state %d,%d to %ld (was %ld)
\n
"
,
j
,
i
,
targetStateBlock
->
samplerState
[
j
][
i
],
This
->
samplerState
[
j
][
i
]);
This
->
samplerState
[
j
][
i
]
=
targetStateBlock
->
samplerState
[
j
][
i
];
if
(
This
->
set
.
samplerState
[
j
][
i
])
{
TRACE
(
"Updating sampler state %d,%d to %ld (was %ld)
\n
"
,
j
,
i
,
targetStateBlock
->
samplerState
[
j
][
i
],
This
->
samplerState
[
j
][
i
]);
This
->
samplerState
[
j
][
i
]
=
targetStateBlock
->
samplerState
[
j
][
i
];
}
}
}
}
...
...
@@ -330,7 +334,7 @@ should really perform a delta so that only the changes get updated*/
/* FIXME: Only apply applicable states not all states */
if
(
/*TODO: 'magic' statetype, replace with BOOL This->blockType == D3DSBT_RECORDED || */
This
->
blockType
==
WINED3DSBT_INIT
||
This
->
blockType
==
D3DSBT_ALL
||
This
->
blockType
==
D3DSBT_VERTEXSTATE
)
{
if
(
/*TODO: 'magic' statetype, replace with BOOL This->blockType == D3DSBT_RECORDED || */
This
->
blockType
==
WINED3DSBT_INIT
||
This
->
blockType
==
WINED3DSBT_ALL
||
This
->
blockType
==
WINE
D3DSBT_VERTEXSTATE
)
{
PLIGHTINFOEL
*
toDo
=
This
->
lights
;
...
...
@@ -373,7 +377,7 @@ should really perform a delta so that only the changes get updated*/
IWineD3DDevice_SetSoftwareVertexProcessing
(
pDevice
,
This
->
softwareVertexProcessing
);
/* Others + Render & Texture */
if
(
/*TODO: 'magic' statetype, replace with BOOL This->blockType == D3DSBT_RECORDED || */
This
->
blockType
==
D3DSBT_ALL
)
{
if
(
/*TODO: 'magic' statetype, replace with BOOL This->blockType == D3DSBT_RECORDED || */
This
->
blockType
==
WINED3DSBT_ALL
||
This
->
blockType
==
WINED3DSBT_INIT
)
{
for
(
i
=
1
;
i
<=
HIGHEST_TRANSFORMSTATE
;
i
++
)
{
if
(
This
->
set
.
transform
[
i
]
&&
This
->
changed
.
transform
[
i
])
IWineD3DDevice_SetTransform
(
pDevice
,
i
,
&
This
->
transforms
[
i
]);
...
...
@@ -423,7 +427,11 @@ should really perform a delta so that only the changes get updated*/
}
/* TODO: move over to memcpy */
for
(
i
=
1
;
i
<=
WINED3D_HIGHEST_TEXTURE_STATE
;
i
++
)
{
((
IWineD3DDeviceImpl
*
)
pDevice
)
->
stateBlock
->
textureState
[
j
][
i
]
=
This
->
textureState
[
j
][
i
];
if
(
This
->
set
.
textureState
[
j
][
i
]
&&
This
->
changed
.
textureState
[
j
][
i
])
{
/* tb_dx9_10 failes without this test */
((
IWineD3DDeviceImpl
*
)
pDevice
)
->
stateBlock
->
textureState
[
j
][
i
]
=
This
->
textureState
[
j
][
i
];
((
IWineD3DDeviceImpl
*
)
pDevice
)
->
stateBlock
->
set
.
textureState
[
j
][
i
]
=
TRUE
;
((
IWineD3DDeviceImpl
*
)
pDevice
)
->
stateBlock
->
changed
.
textureState
[
j
][
i
]
=
TRUE
;
}
}
}
...
...
@@ -431,12 +439,16 @@ should really perform a delta so that only the changes get updated*/
/* TODO: move over to memcpy */
for
(
j
=
0
;
j
<
GL_LIMITS
(
samplers
);
j
++
){
for
(
i
=
1
;
i
<=
WINED3D_HIGHEST_SAMPLER_STATE
;
i
++
){
((
IWineD3DDeviceImpl
*
)
pDevice
)
->
stateBlock
->
samplerState
[
j
][
i
]
=
This
->
samplerState
[
j
][
i
];
if
(
This
->
set
.
samplerState
[
j
][
i
]
&&
This
->
changed
.
samplerState
[
j
][
i
])
{
((
IWineD3DDeviceImpl
*
)
pDevice
)
->
stateBlock
->
samplerState
[
j
][
i
]
=
This
->
samplerState
[
j
][
i
];
((
IWineD3DDeviceImpl
*
)
pDevice
)
->
stateBlock
->
set
.
samplerState
[
j
][
i
]
=
TRUE
;
((
IWineD3DDeviceImpl
*
)
pDevice
)
->
stateBlock
->
changed
.
samplerState
[
j
][
i
]
=
TRUE
;
}
}
}
}
else
if
(
This
->
blockType
==
D3DSBT_PIXELSTATE
)
{
}
else
if
(
This
->
blockType
==
WINE
D3DSBT_PIXELSTATE
)
{
for
(
i
=
0
;
i
<
NUM_SAVEDPIXELSTATES_R
;
i
++
)
{
if
(
This
->
set
.
renderState
[
SavedPixelStates_R
[
i
]]
&&
This
->
changed
.
renderState
[
SavedPixelStates_R
[
i
]])
...
...
@@ -456,7 +468,7 @@ should really perform a delta so that only the changes get updated*/
}
}
}
else
if
(
This
->
blockType
==
D3DSBT_VERTEXSTATE
)
{
}
else
if
(
This
->
blockType
==
WINE
D3DSBT_VERTEXSTATE
)
{
for
(
i
=
0
;
i
<
NUM_SAVEDVERTEXSTATES_R
;
i
++
)
{
if
(
This
->
set
.
renderState
[
SavedVertexStates_R
[
i
]]
&&
This
->
changed
.
renderState
[
SavedVertexStates_R
[
i
]])
...
...
dlls/wined3d/wined3d_private.h
View file @
3f24b916
...
...
@@ -859,10 +859,8 @@ typedef struct SAVEDSTATES {
BOOL
transform
[
HIGHEST_TRANSFORMSTATE
+
1
];
BOOL
viewport
;
BOOL
renderState
[
WINEHIGHEST_RENDER_STATE
+
1
];
#if 0
BOOL
textureState
[
MAX_TEXTURES
][
WINED3D_HIGHEST_TEXTURE_STATE
+
1
];
BOOL
samplerState
[
MAX_SAMPLERS
][
WINED3D_HIGHEST_SAMPLER_STATE
+
1
];
#endif
BOOL
clipplane
[
MAX_CLIPPLANES
];
BOOL
vertexDecl
;
BOOL
pixelShader
;
...
...
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