[WINED3D 5] Make WINED3D_ATR macros more flexible.

Ivan Gyurdiev ivg231 at gmail.com
Fri Jul 7 01:25:14 CDT 2006


Make them operate on a type, as opposed to a semantic name.
[because in a future patch shaders will be made to use a dynamic 
position in the array for a particular semantic]

-------------- next part --------------
>From 2849ded4cd139e94176565e7c7cbe2156715a161 Mon Sep 17 00:00:00 2001
From: root <root at shark.bluenet>
Date: Wed, 5 Jul 2006 19:15:19 -0600
Subject: [PATCH] Make WINED3D_ATR macros more flexible.

Make them operate on a type, as opposed to a semantic name.
[because in a future patch shaders will be made to use a dynamic position in the array for a particular semantic]
---
 dlls/wined3d/drawprim.c        |   85 ++++++++++++++++++++++++----------------
 dlls/wined3d/wined3d_private.h |   10 ++---
 2 files changed, 55 insertions(+), 40 deletions(-)

diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index 99bf366..662260e 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -681,9 +681,9 @@ #define LOAD_NUMBERED_ARRAY(_arrayName, 
             curVBO = sd->u.s._arrayName.VBO; \
         } \
         GL_EXTCALL(glVertexAttribPointerARB(idx, \
-                        WINED3D_ATR_SIZE(_arrayName), \
-                        WINED3D_ATR_GLTYPE(_arrayName), \
-                        WINED3D_ATR_NORMALIZED(_arrayName), \
+                        WINED3D_ATR_SIZE(sd->u.s._arrayName.dwType), \
+                        WINED3D_ATR_GLTYPE(sd->u.s._arrayName.dwType), \
+                        WINED3D_ATR_NORMALIZED(sd->u.s._arrayName.dwType), \
                         sd->u.s._arrayName.dwStride, \
                         sd->u.s._arrayName.lpData)); \
         GL_EXTCALL(glEnableVertexAttribArrayARB(idx)); \
@@ -700,12 +700,13 @@ #define LOAD_NUMBERED_POSITION_ARRAY(_lo
             curVBO = sd->u.s.position2.VBO; \
         } \
         GL_EXTCALL(glVertexAttribPointerARB(idx, \
-                        WINED3D_ATR_SIZE(position2), \
-                        WINED3D_ATR_GLTYPE(position2), \
-                        WINED3D_ATR_NORMALIZED(position2), \
+                        WINED3D_ATR_SIZE(sd->u.s.position2.dwType), \
+                        WINED3D_ATR_GLTYPE(sd->u.s.position2.dwType), \
+                        WINED3D_ATR_NORMALIZED(sd->u.s.position2.dwType), \
                         sd->u.s.position2.dwStride, \
                         ((char *)sd->u.s.position2.lpData) + \
-                        WINED3D_ATR_SIZE(position2) * WINED3D_ATR_TYPESIZE(position2) * _lookupNumber)); \
+                           WINED3D_ATR_SIZE(sd->u.s.position2.dwType) * \
+                           WINED3D_ATR_TYPESIZE(sd->u.s.position2.dwType) * _lookupNumber)); \
         GL_EXTCALL(glEnableVertexAttribArrayARB(idx)); \
     }
 
@@ -782,7 +783,8 @@ #if 1
             checkGLcall("glEnableClientState(GL_WEIGHT_ARRAY_ARB)");
 #endif
 
-            TRACE("Blend %d %p %ld\n", WINED3D_ATR_SIZE(blendWeights), sd->u.s.blendWeights.lpData, sd->u.s.blendWeights.dwStride);
+            TRACE("Blend %d %p %ld\n", WINED3D_ATR_SIZE(sd->u.s.blendWeights.dwType),
+                sd->u.s.blendWeights.lpData, sd->u.s.blendWeights.dwStride);
             /* FIXME("TODO\n");*/
             /* Note dwType == float3 or float4 == 2 or 3 */
 
@@ -790,12 +792,12 @@ #if 0
             /* with this on, the normals appear to be being modified,
                but the vertices aren't being translated as they should be
                Maybe the world matrix aren't being setup properly? */
-            glVertexBlendARB(WINED3D_ATR_SIZE(blendWeights) + 1);
+            glVertexBlendARB(WINED3D_ATR_SIZE(sd->u.s.blendWeights.dwType) + 1);
 #endif
 
 
             VTRACE(("glWeightPointerARB(%d, GL_FLOAT, %ld, %p)\n",
-                WINED3D_ATR_SIZE(blendWeights) ,
+                WINED3D_ATR_SIZE(sd->u.s.blendWeights.dwType) ,
                 sd->u.s.blendWeights.dwStride,
                 sd->u.s.blendWeights.lpData));
 
@@ -805,9 +807,11 @@ #endif
                 curVBO = sd->u.s.blendWeights.VBO;
             }
 
-            GL_EXTCALL(glWeightPointerARB)(WINED3D_ATR_SIZE(blendWeights), WINED3D_ATR_GLTYPE(blendWeights),
-                            sd->u.s.blendWeights.dwStride,
-                            sd->u.s.blendWeights.lpData);
+            GL_EXTCALL(glWeightPointerARB)(
+                WINED3D_ATR_SIZE(sd->u.s.blendWeights.dwType),
+                WINED3D_ATR_GLTYPE(sd->u.s.blendWeights.dwType),
+                sd->u.s.blendWeights.dwStride,
+                sd->u.s.blendWeights.lpData);
 
             checkGLcall("glWeightPointerARB");
 
@@ -819,15 +823,15 @@ #endif
                 }
             }
 
-
-
         } else if (GL_SUPPORT(EXT_VERTEX_WEIGHTING)) {
             /* FIXME("TODO\n");*/
 #if 0
 
-            GL_EXTCALL(glVertexWeightPointerEXT)(WINED3D_ATR_SIZE(blendWeights), WINED3D_ATR_GLTYPE(blendWeights),
-                                                sd->u.s.blendWeights.dwStride,
-                                                sd->u.s.blendWeights.lpData);
+            GL_EXTCALL(glVertexWeightPointerEXT)(
+                WINED3D_ATR_SIZE(sd->u.s.blendWeights.dwType),
+                WINED3D_ATR_GLTYPE(sd->u.s.blendWeights.dwType),
+                sd->u.s.blendWeights.dwStride,
+                sd->u.s.blendWeights.lpData);
             checkGLcall("glVertexWeightPointerEXT(numBlends, ...)");
             glEnableClientState(GL_VERTEX_WEIGHT_ARRAY_EXT);
             checkGLcall("glEnableClientState(GL_VERTEX_WEIGHT_ARRAY_EXT)");
@@ -856,9 +860,10 @@ #if 0 /* FOG  --------------------------
         /* TODO: fog*/
     if (GL_SUPPORT(EXT_FOG_COORD) {
              glEnableClientState(GL_FOG_COORDINATE_EXT);
-            (GL_EXTCALL)(FogCoordPointerEXT)(WINED3D_ATR_GLTYPE(fog),
-                        sd->u.s.fog.dwStride,
-                        sd->u.s.fog.lpData);
+            (GL_EXTCALL)(FogCoordPointerEXT)(
+                WINED3D_ATR_GLTYPE(sd->u.s.fog.dwType),
+                sd->u.s.fog.dwStride,
+                sd->u.s.fog.lpData);
         } else {
             /* don't bother falling back to 'slow' as we don't support software FOG yet. */
             /* FIXME: fixme once */
@@ -879,17 +884,19 @@ #if 0 /* tangents  ---------------------
         if (GL_SUPPORT(EXT_COORDINATE_FRAME) {
             if (sd->u.s.tangent.lpData || sd->u.s.tangent.VBO) {
                 glEnable(GL_TANGENT_ARRAY_EXT);
-                (GL_EXTCALL)(TangentPointerEXT)(WINED3D_ATR_GLTYPE(tangent),
-                            sd->u.s.tangent.dwStride,
-                            sd->u.s.tangent.lpData);
+                (GL_EXTCALL)(TangentPointerEXT)(
+                    WINED3D_ATR_GLTYPE(sd->u.s.tangent.dwType),
+                    sd->u.s.tangent.dwStride,
+                    sd->u.s.tangent.lpData);
             } else {
                     glDisable(GL_TANGENT_ARRAY_EXT);
             }
             if (sd->u.s.binormal.lpData || sd->u.s.binormal.VBO) {
                     glEnable(GL_BINORMAL_ARRAY_EXT);
-                    (GL_EXTCALL)(BinormalPointerEXT)(WINED3D_ATR_GLTYPE(binormal),
-                                                sd->u.s.binormal.dwStride,
-                                                sd->u.s.binormal.lpData);
+                    (GL_EXTCALL)(BinormalPointerEXT)(
+                        WINED3D_ATR_GLTYPE(sd->u.s.binormal.dwType),
+                        sd->u.s.binormal.dwStride,
+                        sd->u.s.binormal.lpData);
             } else{
                     glDisable(GL_BINORMAL_ARRAY_EXT);
             }
@@ -940,11 +947,14 @@ #endif
            This only applies to user pointer sources, in VBOs the vertices are fixed up
          */
         if(sd->u.s.position.VBO == 0) {
-            glVertexPointer(3 /* min(WINED3D_ATR_SIZE(position),3) */, WINED3D_ATR_GLTYPE(position),
-                            sd->u.s.position.dwStride, sd->u.s.position.lpData);
+            glVertexPointer(3 /* min(WINED3D_ATR_SIZE(sd->u.s.position.dwType),3) */,
+                WINED3D_ATR_GLTYPE(sd->u.s.position.dwType),
+                sd->u.s.position.dwStride, sd->u.s.position.lpData);
         } else {
-            glVertexPointer(WINED3D_ATR_SIZE(position), WINED3D_ATR_GLTYPE(position),
-                            sd->u.s.position.dwStride, sd->u.s.position.lpData);
+            glVertexPointer(
+                WINED3D_ATR_SIZE(sd->u.s.position.dwType),
+                WINED3D_ATR_GLTYPE(sd->u.s.position.dwType),
+                sd->u.s.position.dwStride, sd->u.s.position.lpData);
         }
         checkGLcall("glVertexPointer(...)");
         glEnableClientState(GL_VERTEX_ARRAY);
@@ -966,9 +976,10 @@ #endif
             checkGLcall("glBindBufferARB");
             curVBO = sd->u.s.normal.VBO;
         }
-        glNormalPointer(WINED3D_ATR_GLTYPE(normal),
-                        sd->u.s.normal.dwStride,
-                        sd->u.s.normal.lpData);
+        glNormalPointer(
+            WINED3D_ATR_GLTYPE(sd->u.s.normal.dwType),
+            sd->u.s.normal.dwStride,
+            sd->u.s.normal.lpData);
         checkGLcall("glNormalPointer(...)");
         glEnableClientState(GL_NORMAL_ARRAY);
         checkGLcall("glEnableClientState(GL_NORMAL_ARRAY)");
@@ -1089,7 +1100,11 @@ #endif
                     curVBO = sd->u.s.texCoords[coordIdx].VBO;
                 }
                 /* The coords to supply depend completely on the fvf / vertex shader */
-                glTexCoordPointer(WINED3D_ATR_SIZE(texCoords[coordIdx]), WINED3D_ATR_GLTYPE(texCoords[coordIdx]), sd->u.s.texCoords[coordIdx].dwStride, sd->u.s.texCoords[coordIdx].lpData);
+                glTexCoordPointer(
+                    WINED3D_ATR_SIZE(sd->u.s.texCoords[coordIdx].dwType),
+                    WINED3D_ATR_GLTYPE(sd->u.s.texCoords[coordIdx].dwType),
+                    sd->u.s.texCoords[coordIdx].dwStride,
+                    sd->u.s.texCoords[coordIdx].lpData);
                 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
             }
         } else if (!GL_SUPPORT(NV_REGISTER_COMBINERS)) {
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index ad872d9..f29c7a1 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -111,11 +111,11 @@ WINED3DGLTYPE static const glTypeLookup[
                                   {D3DDECLTYPE_FLOAT16_2, 2, GL_FLOAT           , GL_FALSE ,sizeof(short int)},
                                   {D3DDECLTYPE_FLOAT16_4, 4, GL_FLOAT           , GL_FALSE ,sizeof(short int)}};
 
-#define WINED3D_ATR_TYPE(_attribute)          glTypeLookup[sd->u.s._attribute.dwType].d3dType
-#define WINED3D_ATR_SIZE(_attribute)          glTypeLookup[sd->u.s._attribute.dwType].size
-#define WINED3D_ATR_GLTYPE(_attribute)        glTypeLookup[sd->u.s._attribute.dwType].glType
-#define WINED3D_ATR_NORMALIZED(_attribute)    glTypeLookup[sd->u.s._attribute.dwType].normalized
-#define WINED3D_ATR_TYPESIZE(_attribute)      glTypeLookup[sd->u.s._attribute.dwType].typesize
+#define WINED3D_ATR_TYPE(type)          glTypeLookup[type].d3dType
+#define WINED3D_ATR_SIZE(type)          glTypeLookup[type].size
+#define WINED3D_ATR_GLTYPE(type)        glTypeLookup[type].glType
+#define WINED3D_ATR_NORMALIZED(type)    glTypeLookup[type].normalized
+#define WINED3D_ATR_TYPESIZE(type)      glTypeLookup[type].typesize
 
 /**
  * Settings 
-- 
1.4.0



More information about the wine-patches mailing list