[PATCH 4/5] wined3d: Pass a state pointer instead of a stateblock to loadTexCoords().
Henri Verbeet
hverbeet at codeweavers.com
Tue Jul 12 14:17:47 CDT 2011
---
dlls/wined3d/state.c | 33 ++++++++++++++++++---------------
1 files changed, 18 insertions(+), 15 deletions(-)
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index 50bf387..682c895 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -3265,7 +3265,7 @@ static void transform_texture(DWORD state_id, struct wined3d_stateblock *statebl
}
}
-static void unloadTexCoords(const struct wined3d_gl_info *gl_info)
+static void unload_tex_coords(const struct wined3d_gl_info *gl_info)
{
unsigned int texture_idx;
@@ -3276,23 +3276,25 @@ static void unloadTexCoords(const struct wined3d_gl_info *gl_info)
}
}
-static void loadTexCoords(const struct wined3d_gl_info *gl_info, struct wined3d_stateblock *stateblock,
- const struct wined3d_stream_info *si, GLuint *curVBO)
+static void load_tex_coords(const struct wined3d_context *context, const struct wined3d_stream_info *si,
+ GLuint *curVBO, const struct wined3d_state *state)
{
+ const struct wined3d_device *device = context->swapchain->device;
+ const struct wined3d_gl_info *gl_info = context->gl_info;
unsigned int mapped_stage = 0;
unsigned int textureNo = 0;
for (textureNo = 0; textureNo < gl_info->limits.texture_stages; ++textureNo)
{
- int coordIdx = stateblock->state.texture_states[textureNo][WINED3DTSS_TEXCOORDINDEX];
+ int coordIdx = state->texture_states[textureNo][WINED3DTSS_TEXCOORDINDEX];
- mapped_stage = stateblock->device->texUnitMap[textureNo];
+ mapped_stage = device->texUnitMap[textureNo];
if (mapped_stage == WINED3D_UNMAPPED_STAGE) continue;
if (coordIdx < MAX_TEXTURES && (si->use_map & (1 << (WINED3D_FFP_TEXCOORD0 + coordIdx))))
{
const struct wined3d_stream_info_element *e = &si->elements[WINED3D_FFP_TEXCOORD0 + coordIdx];
- const struct wined3d_stream_state *stream = &stateblock->state.streams[e->stream_idx];
+ const struct wined3d_stream_state *stream = &state->streams[e->stream_idx];
TRACE("Setting up texture %u, idx %d, coordindx %u, data {%#x:%p}.\n",
textureNo, mapped_stage, coordIdx, e->data.buffer_object, e->data.addr);
@@ -3309,7 +3311,7 @@ static void loadTexCoords(const struct wined3d_gl_info *gl_info, struct wined3d_
/* The coords to supply depend completely on the fvf / vertex shader */
glTexCoordPointer(e->format->gl_vtx_format, e->format->gl_vtx_type, e->stride,
- e->data.addr + stateblock->state.load_base_vertex_index * e->stride + stream->offset);
+ e->data.addr + state->load_base_vertex_index * e->stride + stream->offset);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
}
else
@@ -3329,15 +3331,16 @@ static void loadTexCoords(const struct wined3d_gl_info *gl_info, struct wined3d_
checkGLcall("loadTexCoords");
}
-static void tex_coordindex(DWORD state, struct wined3d_stateblock *stateblock, struct wined3d_context *context)
+static void tex_coordindex(DWORD state_id, struct wined3d_stateblock *stateblock, struct wined3d_context *context)
{
- DWORD stage = (state - STATE_TEXTURESTAGE(0, 0)) / (WINED3D_HIGHEST_TEXTURE_STATE + 1);
+ DWORD stage = (state_id - STATE_TEXTURESTAGE(0, 0)) / (WINED3D_HIGHEST_TEXTURE_STATE + 1);
DWORD mapped_stage = stateblock->device->texUnitMap[stage];
static const GLfloat s_plane[] = { 1.0f, 0.0f, 0.0f, 0.0f };
static const GLfloat t_plane[] = { 0.0f, 1.0f, 0.0f, 0.0f };
static const GLfloat r_plane[] = { 0.0f, 0.0f, 1.0f, 0.0f };
static const GLfloat q_plane[] = { 0.0f, 0.0f, 0.0f, 1.0f };
const struct wined3d_gl_info *gl_info = context->gl_info;
+ const struct wined3d_state *state = &stateblock->state;
if (mapped_stage == WINED3D_UNMAPPED_STAGE)
{
@@ -3362,7 +3365,7 @@ static void tex_coordindex(DWORD state, struct wined3d_stateblock *stateblock, s
* state. We do not (yet) support the WINED3DRENDERSTATE_WRAPx values, nor tie them up
* to the TEXCOORDINDEX value
*/
- switch (stateblock->state.texture_states[stage][WINED3DTSS_TEXCOORDINDEX] & 0xffff0000)
+ switch (state->texture_states[stage][WINED3DTSS_TEXCOORDINDEX] & 0xffff0000)
{
case WINED3DTSS_TCI_PASSTHRU:
/* Use the specified texture coordinates contained within the
@@ -3477,7 +3480,7 @@ static void tex_coordindex(DWORD state, struct wined3d_stateblock *stateblock, s
default:
FIXME("Unhandled WINED3DTSS_TEXCOORDINDEX %#x.\n",
- stateblock->state.texture_states[stage][WINED3DTSS_TEXCOORDINDEX]);
+ state->texture_states[stage][WINED3DTSS_TEXCOORDINDEX]);
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_GEN_R);
@@ -3500,8 +3503,8 @@ static void tex_coordindex(DWORD state, struct wined3d_stateblock *stateblock, s
*/
GLuint curVBO = gl_info->supported[ARB_VERTEX_BUFFER_OBJECT] ? ~0U : 0;
- unloadTexCoords(gl_info);
- loadTexCoords(gl_info, stateblock, &stateblock->device->strided_streams, &curVBO);
+ unload_tex_coords(gl_info);
+ load_tex_coords(context, &stateblock->device->strided_streams, &curVBO, state);
}
}
@@ -4033,7 +4036,7 @@ static inline void unloadVertexData(const struct wined3d_gl_info *gl_info)
{
glDisableClientState(GL_WEIGHT_ARRAY_ARB);
}
- unloadTexCoords(gl_info);
+ unload_tex_coords(gl_info);
}
static inline void unload_numbered_array(struct wined3d_context *context, int i)
@@ -4488,7 +4491,7 @@ static void loadVertexData(const struct wined3d_context *context, struct wined3d
}
/* Texture coords -------------------------------------------*/
- loadTexCoords(gl_info, stateblock, si, &curVBO);
+ load_tex_coords(context, si, &curVBO, &stateblock->state);
}
static void streamsrc(DWORD state, struct wined3d_stateblock *stateblock, struct wined3d_context *context)
--
1.7.3.4
More information about the wine-patches
mailing list