[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