Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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-winehq
Commits
5bac33d3
Commit
5bac33d3
authored
Jan 04, 2010
by
Henri Verbeet
Committed by
Alexandre Julliard
Jan 05, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Remove a few redundant context dereferences.
parent
367cca6a
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
62 additions
and
50 deletions
+62
-50
state.c
dlls/wined3d/state.c
+62
-50
No files found.
dlls/wined3d/state.c
View file @
5bac33d3
...
...
@@ -540,6 +540,7 @@ static void state_alpha(DWORD state, IWineD3DStateBlockImpl *stateblock, struct
static
void
state_clipping
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
DWORD
enable
=
0xFFFFFFFF
;
DWORD
disable
=
0x00000000
;
...
...
@@ -570,7 +571,7 @@ static void state_clipping(DWORD state, IWineD3DStateBlockImpl *stateblock, stru
if
(
stateblock
->
renderState
[
WINED3DRS_CLIPPING
])
{
enable
=
stateblock
->
renderState
[
WINED3DRS_CLIPPLANEENABLE
];
disable
=
~
stateblock
->
renderState
[
WINED3DRS_CLIPPLANEENABLE
];
if
(
context
->
gl_info
->
supported
[
ARB_DEPTH_CLAMP
])
if
(
gl_info
->
supported
[
ARB_DEPTH_CLAMP
])
{
glDisable
(
GL_DEPTH_CLAMP
);
checkGLcall
(
"glDisable(GL_DEPTH_CLAMP)"
);
...
...
@@ -578,7 +579,7 @@ static void state_clipping(DWORD state, IWineD3DStateBlockImpl *stateblock, stru
}
else
{
disable
=
0xffffffff
;
enable
=
0x00
;
if
(
context
->
gl_info
->
supported
[
ARB_DEPTH_CLAMP
])
if
(
gl_info
->
supported
[
ARB_DEPTH_CLAMP
])
{
glEnable
(
GL_DEPTH_CLAMP
);
checkGLcall
(
"glEnable(GL_DEPTH_CLAMP)"
);
...
...
@@ -711,7 +712,7 @@ static void state_specularenable(DWORD state, IWineD3DStateBlockImpl *stateblock
}
checkGLcall
(
"glMaterialf(GL_SHININESS)"
);
if
(
context
->
gl_info
->
supported
[
EXT_SECONDARY_COLOR
])
if
(
gl_info
->
supported
[
EXT_SECONDARY_COLOR
])
{
glEnable
(
GL_COLOR_SUM_EXT
);
}
...
...
@@ -721,7 +722,7 @@ static void state_specularenable(DWORD state, IWineD3DStateBlockImpl *stateblock
}
checkGLcall
(
"glEnable(GL_COLOR_SUM)"
);
if
(
context
->
gl_info
->
supported
[
NV_REGISTER_COMBINERS
])
if
(
gl_info
->
supported
[
NV_REGISTER_COMBINERS
])
{
GL_EXTCALL
(
glFinalCombinerInputNV
(
GL_VARIABLE_B_NV
,
GL_SPARE0_PLUS_SECONDARY_COLOR_NV
,
GL_UNSIGNED_IDENTITY_NV
,
GL_RGB
));
checkGLcall
(
"glFinalCombinerInputNV()"
);
...
...
@@ -734,7 +735,7 @@ static void state_specularenable(DWORD state, IWineD3DStateBlockImpl *stateblock
checkGLcall
(
"glMaterialfv"
);
/* for the case of disabled lighting: */
if
(
context
->
gl_info
->
supported
[
EXT_SECONDARY_COLOR
])
if
(
gl_info
->
supported
[
EXT_SECONDARY_COLOR
])
{
glDisable
(
GL_COLOR_SUM_EXT
);
}
...
...
@@ -744,7 +745,7 @@ static void state_specularenable(DWORD state, IWineD3DStateBlockImpl *stateblock
}
checkGLcall
(
"glDisable(GL_COLOR_SUM)"
);
if
(
context
->
gl_info
->
supported
[
NV_REGISTER_COMBINERS
])
if
(
gl_info
->
supported
[
NV_REGISTER_COMBINERS
])
{
GL_EXTCALL
(
glFinalCombinerInputNV
(
GL_VARIABLE_B_NV
,
GL_SPARE0_NV
,
GL_UNSIGNED_IDENTITY_NV
,
GL_RGB
));
checkGLcall
(
"glFinalCombinerInputNV()"
);
...
...
@@ -811,6 +812,7 @@ static void renderstate_stencil_twosided(struct wined3d_context *context, GLint
static
void
state_stencil
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
DWORD
onesided_enable
=
FALSE
;
DWORD
twosided_enable
=
FALSE
;
GLint
func
=
GL_ALWAYS
;
...
...
@@ -858,7 +860,7 @@ static void state_stencil(DWORD state, IWineD3DStateBlockImpl *stateblock, struc
glEnable
(
GL_STENCIL_TEST
);
checkGLcall
(
"glEnable GL_STENCIL_TEST"
);
if
(
context
->
gl_info
->
supported
[
EXT_STENCIL_TWO_SIDE
])
if
(
gl_info
->
supported
[
EXT_STENCIL_TWO_SIDE
])
{
/* Apply back first, then front. This function calls glActiveStencilFaceEXT,
* which has an effect on the code below too. If we apply the front face
...
...
@@ -871,7 +873,7 @@ static void state_stencil(DWORD state, IWineD3DStateBlockImpl *stateblock, struc
renderstate_stencil_twosided
(
context
,
GL_FRONT
,
func
,
ref
,
mask
,
stencilFail
,
depthFail
,
stencilPass
);
}
else
if
(
context
->
gl_info
->
supported
[
ATI_SEPARATE_STENCIL
])
else
if
(
gl_info
->
supported
[
ATI_SEPARATE_STENCIL
])
{
GL_EXTCALL
(
glStencilFuncSeparateATI
(
func
,
func_ccw
,
ref
,
mask
));
checkGLcall
(
"glStencilFuncSeparateATI(...)"
);
...
...
@@ -885,7 +887,7 @@ static void state_stencil(DWORD state, IWineD3DStateBlockImpl *stateblock, struc
}
else
if
(
onesided_enable
)
{
if
(
context
->
gl_info
->
supported
[
EXT_STENCIL_TWO_SIDE
])
if
(
gl_info
->
supported
[
EXT_STENCIL_TWO_SIDE
])
{
glDisable
(
GL_STENCIL_TEST_TWO_SIDE_EXT
);
checkGLcall
(
"glDisable(GL_STENCIL_TEST_TWO_SIDE_EXT)"
);
...
...
@@ -1495,12 +1497,12 @@ static void state_pscale(DWORD state, IWineD3DStateBlockImpl *stateblock, struct
att
[
2
]
=
C
.
f
/
scaleFactor
;
}
if
(
context
->
gl_info
->
supported
[
ARB_POINT_PARAMETERS
])
if
(
gl_info
->
supported
[
ARB_POINT_PARAMETERS
])
{
GL_EXTCALL
(
glPointParameterfvARB
)(
GL_POINT_DISTANCE_ATTENUATION_ARB
,
att
);
checkGLcall
(
"glPointParameterfvARB(GL_DISTANCE_ATTENUATION_ARB, ...)"
);
}
else
if
(
context
->
gl_info
->
supported
[
EXT_POINT_PARAMETERS
])
else
if
(
gl_info
->
supported
[
EXT_POINT_PARAMETERS
])
{
GL_EXTCALL
(
glPointParameterfvEXT
)(
GL_DISTANCE_ATTENUATION_EXT
,
att
);
checkGLcall
(
"glPointParameterfvEXT(GL_DISTANCE_ATTENUATION_EXT, ...)"
);
...
...
@@ -1945,6 +1947,7 @@ static void get_src_and_opr(DWORD arg, BOOL is_alpha, GLenum* source, GLenum* op
static
void
set_tex_op
(
const
struct
wined3d_context
*
context
,
IWineD3DDevice
*
iface
,
BOOL
isAlpha
,
int
Stage
,
WINED3DTEXTUREOP
op
,
DWORD
arg1
,
DWORD
arg2
,
DWORD
arg3
)
{
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
GLenum
src1
,
src2
,
src3
;
GLenum
opr1
,
opr2
,
opr3
;
GLenum
comb_target
;
...
...
@@ -2011,7 +2014,7 @@ static void set_tex_op(const struct wined3d_context *context, IWineD3DDevice *if
Handled
=
TRUE
;
/* Assume will be handled */
/* Other texture operations require special extensions: */
if
(
context
->
gl_info
->
supported
[
NV_TEXTURE_ENV_COMBINE4
])
if
(
gl_info
->
supported
[
NV_TEXTURE_ENV_COMBINE4
])
{
if
(
isAlpha
)
{
opr
=
GL_SRC_ALPHA
;
...
...
@@ -2597,7 +2600,7 @@ static void set_tex_op(const struct wined3d_context *context, IWineD3DDevice *if
checkGLcall
(
"GL_TEXTURE_ENV, scal_target, 2"
);
break
;
case
WINED3DTOP_SUBTRACT
:
if
(
context
->
gl_info
->
supported
[
ARB_TEXTURE_ENV_COMBINE
])
if
(
gl_info
->
supported
[
ARB_TEXTURE_ENV_COMBINE
])
{
glTexEnvi
(
GL_TEXTURE_ENV
,
comb_target
,
GL_SUBTRACT
);
checkGLcall
(
"GL_TEXTURE_ENV, comb_target, useext(GL_SUBTRACT)"
);
...
...
@@ -2689,12 +2692,12 @@ static void set_tex_op(const struct wined3d_context *context, IWineD3DDevice *if
checkGLcall
(
"GL_TEXTURE_ENV, scal_target, 1"
);
break
;
case
WINED3DTOP_DOTPRODUCT3
:
if
(
context
->
gl_info
->
supported
[
ARB_TEXTURE_ENV_DOT3
])
if
(
gl_info
->
supported
[
ARB_TEXTURE_ENV_DOT3
])
{
glTexEnvi
(
GL_TEXTURE_ENV
,
comb_target
,
GL_DOT3_RGBA_ARB
);
checkGLcall
(
"GL_TEXTURE_ENV, comb_target, GL_DOT3_RGBA_ARB"
);
}
else
if
(
context
->
gl_info
->
supported
[
EXT_TEXTURE_ENV_DOT3
])
else
if
(
gl_info
->
supported
[
EXT_TEXTURE_ENV_DOT3
])
{
glTexEnvi
(
GL_TEXTURE_ENV
,
comb_target
,
GL_DOT3_RGBA_EXT
);
checkGLcall
(
"GL_TEXTURE_ENV, comb_target, GL_DOT3_RGBA_EXT"
);
...
...
@@ -2731,7 +2734,7 @@ static void set_tex_op(const struct wined3d_context *context, IWineD3DDevice *if
checkGLcall
(
"GL_TEXTURE_ENV, scal_target, 1"
);
break
;
case
WINED3DTOP_ADDSMOOTH
:
if
(
context
->
gl_info
->
supported
[
ATI_TEXTURE_ENV_COMBINE3
])
if
(
gl_info
->
supported
[
ATI_TEXTURE_ENV_COMBINE3
])
{
glTexEnvi
(
GL_TEXTURE_ENV
,
comb_target
,
GL_MODULATE_ADD_ATI
);
checkGLcall
(
"GL_TEXTURE_ENV, comb_target, GL_MODULATE_ADD_ATI"
);
...
...
@@ -2759,7 +2762,7 @@ static void set_tex_op(const struct wined3d_context *context, IWineD3DDevice *if
Handled
=
FALSE
;
break
;
case
WINED3DTOP_BLENDTEXTUREALPHAPM
:
if
(
context
->
gl_info
->
supported
[
ATI_TEXTURE_ENV_COMBINE3
])
if
(
gl_info
->
supported
[
ATI_TEXTURE_ENV_COMBINE3
])
{
glTexEnvi
(
GL_TEXTURE_ENV
,
comb_target
,
GL_MODULATE_ADD_ATI
);
checkGLcall
(
"GL_TEXTURE_ENV, comb_target, GL_MODULATE_ADD_ATI"
);
...
...
@@ -2781,7 +2784,7 @@ static void set_tex_op(const struct wined3d_context *context, IWineD3DDevice *if
Handled
=
FALSE
;
break
;
case
WINED3DTOP_MODULATEALPHA_ADDCOLOR
:
if
(
context
->
gl_info
->
supported
[
ATI_TEXTURE_ENV_COMBINE3
])
if
(
gl_info
->
supported
[
ATI_TEXTURE_ENV_COMBINE3
])
{
glTexEnvi
(
GL_TEXTURE_ENV
,
comb_target
,
GL_MODULATE_ADD_ATI
);
checkGLcall
(
"GL_TEXTURE_ENV, comb_target, GL_MODULATE_ADD_ATI"
);
...
...
@@ -2809,7 +2812,7 @@ static void set_tex_op(const struct wined3d_context *context, IWineD3DDevice *if
Handled
=
FALSE
;
break
;
case
WINED3DTOP_MODULATECOLOR_ADDALPHA
:
if
(
context
->
gl_info
->
supported
[
ATI_TEXTURE_ENV_COMBINE3
])
if
(
gl_info
->
supported
[
ATI_TEXTURE_ENV_COMBINE3
])
{
glTexEnvi
(
GL_TEXTURE_ENV
,
comb_target
,
GL_MODULATE_ADD_ATI
);
checkGLcall
(
"GL_TEXTURE_ENV, comb_target, GL_MODULATE_ADD_ATI"
);
...
...
@@ -2837,7 +2840,7 @@ static void set_tex_op(const struct wined3d_context *context, IWineD3DDevice *if
Handled
=
FALSE
;
break
;
case
WINED3DTOP_MODULATEINVALPHA_ADDCOLOR
:
if
(
context
->
gl_info
->
supported
[
ATI_TEXTURE_ENV_COMBINE3
])
if
(
gl_info
->
supported
[
ATI_TEXTURE_ENV_COMBINE3
])
{
glTexEnvi
(
GL_TEXTURE_ENV
,
comb_target
,
GL_MODULATE_ADD_ATI
);
checkGLcall
(
"GL_TEXTURE_ENV, comb_target, GL_MODULATE_ADD_ATI"
);
...
...
@@ -2865,7 +2868,7 @@ static void set_tex_op(const struct wined3d_context *context, IWineD3DDevice *if
Handled
=
FALSE
;
break
;
case
WINED3DTOP_MODULATEINVCOLOR_ADDALPHA
:
if
(
context
->
gl_info
->
supported
[
ATI_TEXTURE_ENV_COMBINE3
])
if
(
gl_info
->
supported
[
ATI_TEXTURE_ENV_COMBINE3
])
{
glTexEnvi
(
GL_TEXTURE_ENV
,
comb_target
,
GL_MODULATE_ADD_ATI
);
checkGLcall
(
"GL_TEXTURE_ENV, comb_target, GL_MODULATE_ADD_ATI"
);
...
...
@@ -2899,7 +2902,7 @@ static void set_tex_op(const struct wined3d_context *context, IWineD3DDevice *if
Handled
=
FALSE
;
break
;
case
WINED3DTOP_MULTIPLYADD
:
if
(
context
->
gl_info
->
supported
[
ATI_TEXTURE_ENV_COMBINE3
])
if
(
gl_info
->
supported
[
ATI_TEXTURE_ENV_COMBINE3
])
{
glTexEnvi
(
GL_TEXTURE_ENV
,
comb_target
,
GL_MODULATE_ADD_ATI
);
checkGLcall
(
"GL_TEXTURE_ENV, comb_target, GL_MODULATE_ADD_ATI"
);
...
...
@@ -2922,7 +2925,7 @@ static void set_tex_op(const struct wined3d_context *context, IWineD3DDevice *if
break
;
case
WINED3DTOP_BUMPENVMAPLUMINANCE
:
case
WINED3DTOP_BUMPENVMAP
:
if
(
context
->
gl_info
->
supported
[
NV_TEXTURE_SHADER2
])
if
(
gl_info
->
supported
[
NV_TEXTURE_SHADER2
])
{
/* Technically texture shader support without register combiners is possible, but not expected to occur
* on real world cards, so for now a fixme should be enough
...
...
@@ -2935,7 +2938,7 @@ static void set_tex_op(const struct wined3d_context *context, IWineD3DDevice *if
if
(
Handled
)
{
BOOL
combineOK
=
TRUE
;
if
(
context
->
gl_info
->
supported
[
NV_TEXTURE_ENV_COMBINE4
])
if
(
gl_info
->
supported
[
NV_TEXTURE_ENV_COMBINE4
])
{
DWORD
op2
;
...
...
@@ -3015,12 +3018,12 @@ static void tex_colorop(DWORD state, IWineD3DStateBlockImpl *stateblock, struct
checkGLcall
(
"glDisable(GL_TEXTURE_2D)"
);
glDisable
(
GL_TEXTURE_3D
);
checkGLcall
(
"glDisable(GL_TEXTURE_3D)"
);
if
(
context
->
gl_info
->
supported
[
ARB_TEXTURE_CUBE_MAP
])
if
(
gl_info
->
supported
[
ARB_TEXTURE_CUBE_MAP
])
{
glDisable
(
GL_TEXTURE_CUBE_MAP_ARB
);
checkGLcall
(
"glDisable(GL_TEXTURE_CUBE_MAP_ARB)"
);
}
if
(
context
->
gl_info
->
supported
[
ARB_TEXTURE_RECTANGLE
])
if
(
gl_info
->
supported
[
ARB_TEXTURE_RECTANGLE
])
{
glDisable
(
GL_TEXTURE_RECTANGLE_ARB
);
checkGLcall
(
"glDisable(GL_TEXTURE_RECTANGLE_ARB)"
);
...
...
@@ -3049,13 +3052,14 @@ void tex_alphaop(DWORD state, IWineD3DStateBlockImpl *stateblock, struct wined3d
DWORD
stage
=
(
state
-
STATE_TEXTURESTAGE
(
0
,
0
))
/
(
WINED3D_HIGHEST_TEXTURE_STATE
+
1
);
BOOL
tex_used
=
stateblock
->
device
->
fixed_function_usage_map
&
(
1
<<
stage
);
DWORD
mapped_stage
=
stateblock
->
device
->
texUnitMap
[
stage
];
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
DWORD
op
,
arg1
,
arg2
,
arg0
;
TRACE
(
"Setting alpha op for stage %d
\n
"
,
stage
);
/* Do not care for enabled / disabled stages, just assign the settings. colorop disables / enables required stuff */
if
(
mapped_stage
!=
WINED3D_UNMAPPED_STAGE
)
{
if
(
tex_used
&&
mapped_stage
>=
context
->
gl_info
->
limits
.
textures
)
if
(
tex_used
&&
mapped_stage
>=
gl_info
->
limits
.
textures
)
{
FIXME
(
"Attempt to enable unsupported stage!
\n
"
);
return
;
...
...
@@ -3134,7 +3138,7 @@ void tex_alphaop(DWORD state, IWineD3DStateBlockImpl *stateblock, struct wined3d
* this if block here, and the other code(color keying, texture unit selection) are the same
*/
TRACE
(
"Setting alpha op for stage %d
\n
"
,
stage
);
if
(
context
->
gl_info
->
supported
[
NV_REGISTER_COMBINERS
])
if
(
gl_info
->
supported
[
NV_REGISTER_COMBINERS
])
{
set_tex_op_nvrc
((
IWineD3DDevice
*
)
stateblock
->
device
,
TRUE
,
stage
,
op
,
arg1
,
arg2
,
arg0
,
mapped_stage
,
stateblock
->
textureState
[
stage
][
WINED3DTSS_RESULTARG
]);
...
...
@@ -3203,11 +3207,12 @@ static void unloadTexCoords(const struct wined3d_context *context)
static
void
loadTexCoords
(
const
struct
wined3d_context
*
context
,
IWineD3DStateBlockImpl
*
stateblock
,
const
struct
wined3d_stream_info
*
si
,
GLuint
*
curVBO
)
{
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
const
UINT
*
offset
=
stateblock
->
streamOffset
;
unsigned
int
mapped_stage
=
0
;
unsigned
int
textureNo
=
0
;
for
(
textureNo
=
0
;
textureNo
<
context
->
gl_info
->
limits
.
texture_stages
;
++
textureNo
)
for
(
textureNo
=
0
;
textureNo
<
gl_info
->
limits
.
texture_stages
;
++
textureNo
)
{
int
coordIdx
=
stateblock
->
textureState
[
textureNo
][
WINED3DTSS_TEXCOORDINDEX
];
...
...
@@ -3239,10 +3244,10 @@ static void loadTexCoords(const struct wined3d_context *context, IWineD3DStateBl
GL_EXTCALL
(
glMultiTexCoord4fARB
(
GL_TEXTURE0_ARB
+
mapped_stage
,
0
,
0
,
0
,
1
));
}
}
if
(
context
->
gl_info
->
supported
[
NV_REGISTER_COMBINERS
])
if
(
gl_info
->
supported
[
NV_REGISTER_COMBINERS
])
{
/* The number of the mapped stages increases monotonically, so it's fine to use the last used one. */
for
(
textureNo
=
mapped_stage
+
1
;
textureNo
<
context
->
gl_info
->
limits
.
textures
;
++
textureNo
)
for
(
textureNo
=
mapped_stage
+
1
;
textureNo
<
gl_info
->
limits
.
textures
;
++
textureNo
)
{
GL_EXTCALL
(
glMultiTexCoord4fARB
(
GL_TEXTURE0_ARB
+
textureNo
,
0
,
0
,
0
,
1
));
}
...
...
@@ -3259,6 +3264,7 @@ static void tex_coordindex(DWORD state, IWineD3DStateBlockImpl *stateblock, stru
static
const
GLfloat
t_plane
[]
=
{
0
.
0
f
,
1
.
0
f
,
0
.
0
f
,
0
.
0
f
};
static
const
GLfloat
r_plane
[]
=
{
0
.
0
f
,
0
.
0
f
,
1
.
0
f
,
0
.
0
f
};
static
const
GLfloat
q_plane
[]
=
{
0
.
0
f
,
0
.
0
f
,
0
.
0
f
,
1
.
0
f
};
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
if
(
mapped_stage
==
WINED3D_UNMAPPED_STAGE
)
{
...
...
@@ -3266,7 +3272,7 @@ static void tex_coordindex(DWORD state, IWineD3DStateBlockImpl *stateblock, stru
return
;
}
if
(
mapped_stage
>=
context
->
gl_info
->
limits
.
fragment_samplers
)
if
(
mapped_stage
>=
gl_info
->
limits
.
fragment_samplers
)
{
WARN
(
"stage %u not mapped to a valid texture unit (%u)
\n
"
,
stage
,
mapped_stage
);
return
;
...
...
@@ -3325,7 +3331,7 @@ static void tex_coordindex(DWORD state, IWineD3DStateBlockImpl *stateblock, stru
case
WINED3DTSS_TCI_CAMERASPACENORMAL
:
/* Note that NV_TEXGEN_REFLECTION support is implied when
* ARB_TEXTURE_CUBE_MAP is supported */
if
(
!
context
->
gl_info
->
supported
[
NV_TEXGEN_REFLECTION
])
if
(
!
gl_info
->
supported
[
NV_TEXGEN_REFLECTION
])
{
FIXME
(
"WINED3DTSS_TCI_CAMERASPACENORMAL not supported.
\n
"
);
break
;
...
...
@@ -3356,7 +3362,7 @@ static void tex_coordindex(DWORD state, IWineD3DStateBlockImpl *stateblock, stru
case
WINED3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR
:
/* Note that NV_TEXGEN_REFLECTION support is implied when
* ARB_TEXTURE_CUBE_MAP is supported */
if
(
!
context
->
gl_info
->
supported
[
NV_TEXGEN_REFLECTION
])
if
(
!
gl_info
->
supported
[
NV_TEXGEN_REFLECTION
])
{
FIXME
(
"WINED3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR not supported.
\n
"
);
break
;
...
...
@@ -3419,7 +3425,7 @@ static void tex_coordindex(DWORD state, IWineD3DStateBlockImpl *stateblock, stru
* and do all the things linked to it
* TODO: Tidy that up to reload only the arrays of the changed unit
*/
GLuint
curVBO
=
context
->
gl_info
->
supported
[
ARB_VERTEX_BUFFER_OBJECT
]
?
~
0U
:
0
;
GLuint
curVBO
=
gl_info
->
supported
[
ARB_VERTEX_BUFFER_OBJECT
]
?
~
0U
:
0
;
unloadTexCoords
(
context
);
loadTexCoords
(
context
,
stateblock
,
&
stateblock
->
device
->
strided_streams
,
&
curVBO
);
...
...
@@ -3522,7 +3528,7 @@ static void sampler(DWORD state, IWineD3DStateBlockImpl *stateblock, struct wine
basetexture_apply_state_changes
(
stateblock
->
textures
[
sampler
],
stateblock
->
textureState
[
sampler
],
stateblock
->
samplerState
[
sampler
],
gl_info
);
if
(
context
->
gl_info
->
supported
[
EXT_TEXTURE_LOD_BIAS
])
if
(
gl_info
->
supported
[
EXT_TEXTURE_LOD_BIAS
])
{
tmpvalue
.
d
=
stateblock
->
samplerState
[
sampler
][
WINED3DSAMP_MIPMAPLODBIAS
];
glTexEnvf
(
GL_TEXTURE_FILTER_CONTROL_EXT
,
...
...
@@ -3807,6 +3813,7 @@ static void state_vertexblend(DWORD state, IWineD3DStateBlockImpl *stateblock, s
static
void
transform_view
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
const
struct
wined3d_light_info
*
light
=
NULL
;
unsigned
int
k
;
...
...
@@ -3833,7 +3840,7 @@ static void transform_view(DWORD state, IWineD3DStateBlockImpl *stateblock, stru
}
/* Reset Clipping Planes */
for
(
k
=
0
;
k
<
context
->
gl_info
->
limits
.
clipplanes
;
++
k
)
for
(
k
=
0
;
k
<
gl_info
->
limits
.
clipplanes
;
++
k
)
{
if
(
!
isStateDirty
(
context
,
STATE_CLIPPLANE
(
k
)))
{
clipplane
(
STATE_CLIPPLANE
(
k
),
stateblock
,
context
);
...
...
@@ -3857,7 +3864,7 @@ static void transform_view(DWORD state, IWineD3DStateBlockImpl *stateblock, stru
/* Avoid looping over a number of matrices if the app never used the functionality */
if
(
stateblock
->
device
->
vertexBlendUsed
)
{
for
(
k
=
1
;
k
<
context
->
gl_info
->
limits
.
blends
;
++
k
)
for
(
k
=
1
;
k
<
gl_info
->
limits
.
blends
;
++
k
)
{
if
(
!
isStateDirty
(
context
,
STATE_TRANSFORM
(
WINED3DTS_WORLDMATRIX
(
k
))))
{
transform_worldex
(
STATE_TRANSFORM
(
WINED3DTS_WORLDMATRIX
(
k
)),
stateblock
,
context
);
...
...
@@ -4011,14 +4018,16 @@ static void transform_projection(DWORD state, IWineD3DStateBlockImpl *stateblock
*/
static
inline
void
unloadVertexData
(
const
struct
wined3d_context
*
context
)
{
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
glDisableClientState
(
GL_VERTEX_ARRAY
);
glDisableClientState
(
GL_NORMAL_ARRAY
);
glDisableClientState
(
GL_COLOR_ARRAY
);
if
(
context
->
gl_info
->
supported
[
EXT_SECONDARY_COLOR
])
if
(
gl_info
->
supported
[
EXT_SECONDARY_COLOR
])
{
glDisableClientState
(
GL_SECONDARY_COLOR_ARRAY_EXT
);
}
if
(
context
->
gl_info
->
supported
[
ARB_VERTEX_BLEND
])
if
(
gl_info
->
supported
[
ARB_VERTEX_BLEND
])
{
glDisableClientState
(
GL_WEIGHT_ARRAY_ARB
);
}
...
...
@@ -4055,7 +4064,8 @@ static inline void unloadNumberedArrays(IWineD3DStateBlockImpl *stateblock, stru
static
inline
void
loadNumberedArrays
(
IWineD3DStateBlockImpl
*
stateblock
,
const
struct
wined3d_stream_info
*
stream_info
,
struct
wined3d_context
*
context
)
{
GLuint
curVBO
=
context
->
gl_info
->
supported
[
ARB_VERTEX_BUFFER_OBJECT
]
?
~
0U
:
0
;
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
GLuint
curVBO
=
gl_info
->
supported
[
ARB_VERTEX_BUFFER_OBJECT
]
?
~
0U
:
0
;
int
i
;
const
UINT
*
offset
=
stateblock
->
streamOffset
;
struct
wined3d_buffer
*
vb
;
...
...
@@ -4157,7 +4167,7 @@ static inline void loadNumberedArrays(IWineD3DStateBlockImpl *stateblock,
GL_EXTCALL
(
glVertexAttrib4NubvARB
(
i
,
ptr
));
break
;
case
WINED3DFMT_B8G8R8A8_UNORM
:
if
(
context
->
gl_info
->
supported
[
EXT_VERTEX_ARRAY_BGRA
])
if
(
gl_info
->
supported
[
EXT_VERTEX_ARRAY_BGRA
])
{
const
DWORD
*
src
=
(
const
DWORD
*
)
ptr
;
DWORD
c
=
*
src
&
0xff00ff00
;
...
...
@@ -4230,8 +4240,9 @@ static inline void loadNumberedArrays(IWineD3DStateBlockImpl *stateblock,
static
void
loadVertexData
(
const
struct
wined3d_context
*
context
,
IWineD3DStateBlockImpl
*
stateblock
,
const
struct
wined3d_stream_info
*
si
)
{
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
const
UINT
*
offset
=
stateblock
->
streamOffset
;
GLuint
curVBO
=
context
->
gl_info
->
supported
[
ARB_VERTEX_BUFFER_OBJECT
]
?
~
0U
:
0
;
GLuint
curVBO
=
gl_info
->
supported
[
ARB_VERTEX_BUFFER_OBJECT
]
?
~
0U
:
0
;
const
struct
wined3d_stream_info_element
*
e
;
TRACE
(
"Using fast vertex array code
\n
"
);
...
...
@@ -4245,7 +4256,7 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB
{
e
=
&
si
->
elements
[
WINED3D_FFP_BLENDWEIGHT
];
if
(
context
->
gl_info
->
supported
[
ARB_VERTEX_BLEND
])
if
(
gl_info
->
supported
[
ARB_VERTEX_BLEND
])
{
TRACE
(
"Blend %d %p %d
\n
"
,
e
->
format_desc
->
component_count
,
e
->
data
+
stateblock
->
loadBaseVertexIndex
*
e
->
stride
,
e
->
stride
+
offset
[
e
->
stream_idx
]);
...
...
@@ -4290,7 +4301,7 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB
}
else
{
if
(
context
->
gl_info
->
supported
[
ARB_VERTEX_BLEND
])
if
(
gl_info
->
supported
[
ARB_VERTEX_BLEND
])
{
static
const
GLbyte
one
=
1
;
GL_EXTCALL
(
glWeightbvARB
(
1
,
&
one
));
...
...
@@ -4402,7 +4413,7 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB
VTRACE
((
"glSecondaryColorPointer(4, GL_UNSIGNED_BYTE, %d, %p)
\n
"
,
e
->
stride
,
e
->
data
));
e
=
&
si
->
elements
[
WINED3D_FFP_SPECULAR
];
if
(
context
->
gl_info
->
supported
[
EXT_SECONDARY_COLOR
])
if
(
gl_info
->
supported
[
EXT_SECONDARY_COLOR
])
{
GLenum
type
=
e
->
format_desc
->
gl_vtx_type
;
GLint
format
=
e
->
format_desc
->
gl_vtx_format
;
...
...
@@ -4414,7 +4425,7 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB
curVBO
=
e
->
buffer_object
;
}
if
(
format
!=
4
||
(
context
->
gl_info
->
quirks
&
WINED3D_QUIRK_ALLOWS_SPECULAR_ALPHA
))
if
(
format
!=
4
||
(
gl_info
->
quirks
&
WINED3D_QUIRK_ALLOWS_SPECULAR_ALPHA
))
{
/* Usually specular colors only allow 3 components, since they have no alpha. In D3D, the specular alpha
* contains the fog coordinate, which is passed to GL with GL_EXT_fog_coord. However, the fixed function
...
...
@@ -4453,7 +4464,7 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB
}
else
{
if
(
context
->
gl_info
->
supported
[
EXT_SECONDARY_COLOR
])
if
(
gl_info
->
supported
[
EXT_SECONDARY_COLOR
])
{
GL_EXTCALL
(
glSecondaryColor3fEXT
)(
0
,
0
,
0
);
checkGLcall
(
"glSecondaryColor3fEXT(0, 0, 0)"
);
...
...
@@ -4491,6 +4502,7 @@ static inline void drawPrimitiveTraceDataLocations(const struct wined3d_stream_i
static
void
streamsrc
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
IWineD3DDeviceImpl
*
device
=
stateblock
->
device
;
BOOL
fixup
=
FALSE
;
struct
wined3d_stream_info
*
dataLocations
=
&
device
->
strided_streams
;
...
...
@@ -4503,7 +4515,7 @@ static void streamsrc(DWORD state, IWineD3DStateBlockImpl *stateblock, struct wi
if
(
device
->
up_strided
)
{
/* Note: this is a ddraw fixed-function code path */
TRACE
(
"================ Strided Input ===================
\n
"
);
device_stream_info_from_strided
(
context
->
gl_info
,
device
->
up_strided
,
dataLocations
);
device_stream_info_from_strided
(
gl_info
,
device
->
up_strided
,
dataLocations
);
if
(
TRACE_ON
(
d3d
))
{
drawPrimitiveTraceDataLocations
(
dataLocations
);
...
...
@@ -4532,7 +4544,7 @@ static void streamsrc(DWORD state, IWineD3DStateBlockImpl *stateblock, struct wi
else
{
WORD
slow_mask
=
(
1
<<
WINED3D_FFP_PSIZE
);
slow_mask
|=
-!
context
->
gl_info
->
supported
[
EXT_VERTEX_ARRAY_BGRA
]
slow_mask
|=
-!
gl_info
->
supported
[
EXT_VERTEX_ARRAY_BGRA
]
&
((
1
<<
WINED3D_FFP_DIFFUSE
)
|
(
1
<<
WINED3D_FFP_SPECULAR
));
if
(
fixup
||
(
!
dataLocations
->
position_transformed
...
...
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