Henri Verbeet : wined3d: Properly check if an attribute is used in drawStridedSlow().
Alexandre Julliard
julliard at winehq.org
Tue Aug 25 08:44:29 CDT 2009
Module: wine
Branch: master
Commit: c9f270a5d9acc55498b48991be7f5e5823422338
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c9f270a5d9acc55498b48991be7f5e5823422338
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Tue Aug 25 08:17:10 2009 +0200
wined3d: Properly check if an attribute is used in drawStridedSlow().
---
dlls/wined3d/drawprim.c | 39 +++++++++++++++++++++++++++------------
1 files changed, 27 insertions(+), 12 deletions(-)
diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index 643b098..2b82cca 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -113,23 +113,38 @@ static void drawStridedSlow(IWineD3DDevice *iface, const struct wined3d_context
VTRACE(("glBegin(%x)\n", glPrimType));
glBegin(glPrimType);
- element = &si->elements[WINED3D_FFP_POSITION];
- if (element->data) position = element->data + streamOffset[element->stream_idx];
+ if (si->use_map & (1 << WINED3D_FFP_POSITION))
+ {
+ element = &si->elements[WINED3D_FFP_POSITION];
+ position = element->data + streamOffset[element->stream_idx];
+ }
- element = &si->elements[WINED3D_FFP_NORMAL];
- if (element->data) normal = element->data + streamOffset[element->stream_idx];
- else glNormal3f(0, 0, 0);
+ if (si->use_map & (1 << WINED3D_FFP_NORMAL))
+ {
+ element = &si->elements[WINED3D_FFP_NORMAL];
+ normal = element->data + streamOffset[element->stream_idx];
+ }
+ else
+ {
+ glNormal3f(0, 0, 0);
+ }
- element = &si->elements[WINED3D_FFP_DIFFUSE];
- if (element->data) diffuse = element->data + streamOffset[element->stream_idx];
- else glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+ if (si->use_map & (1 << WINED3D_FFP_DIFFUSE))
+ {
+ element = &si->elements[WINED3D_FFP_DIFFUSE];
+ diffuse = element->data + streamOffset[element->stream_idx];
+ }
+ else
+ {
+ glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+ }
num_untracked_materials = context->num_untracked_materials;
if (num_untracked_materials && element->format_desc->format != WINED3DFMT_A8R8G8B8)
FIXME("Implement diffuse color tracking from %s\n", debug_d3dformat(element->format_desc->format));
- element = &si->elements[WINED3D_FFP_SPECULAR];
- if (element->data)
+ if (si->use_map & (1 << WINED3D_FFP_SPECULAR))
{
+ element = &si->elements[WINED3D_FFP_SPECULAR];
specular = element->data + streamOffset[element->stream_idx];
/* special case where the fog density is stored in the specular alpha channel */
@@ -187,9 +202,9 @@ static void drawStridedSlow(IWineD3DDevice *iface, const struct wined3d_context
continue;
}
- element = &si->elements[WINED3D_FFP_TEXCOORD0 + coordIdx];
- if (element->data)
+ if (si->use_map & (1 << (WINED3D_FFP_TEXCOORD0 + coordIdx)))
{
+ element = &si->elements[WINED3D_FFP_TEXCOORD0 + coordIdx];
texCoords[coordIdx] = element->data + streamOffset[element->stream_idx];
tex_mask |= (1 << textureNo);
}
More information about the wine-cvs
mailing list