Commit c611012d authored by Ivan Gyurdiev's avatar Ivan Gyurdiev Committed by Alexandre Julliard

wined3d: Make WINED3D_ATR macros more flexible.

Make them operate on a type, as opposed to a semantic name.
parent c202bfe4
...@@ -812,9 +812,9 @@ void loadNumberedArrays( ...@@ -812,9 +812,9 @@ void loadNumberedArrays(
curVBO = sd->u.s._arrayName.VBO; \ curVBO = sd->u.s._arrayName.VBO; \
} \ } \
GL_EXTCALL(glVertexAttribPointerARB(idx, \ GL_EXTCALL(glVertexAttribPointerARB(idx, \
WINED3D_ATR_SIZE(_arrayName), \ WINED3D_ATR_SIZE(sd->u.s._arrayName.dwType), \
WINED3D_ATR_GLTYPE(_arrayName), \ WINED3D_ATR_GLTYPE(sd->u.s._arrayName.dwType), \
WINED3D_ATR_NORMALIZED(_arrayName), \ WINED3D_ATR_NORMALIZED(sd->u.s._arrayName.dwType), \
sd->u.s._arrayName.dwStride, \ sd->u.s._arrayName.dwStride, \
sd->u.s._arrayName.lpData)); \ sd->u.s._arrayName.lpData)); \
GL_EXTCALL(glEnableVertexAttribArrayARB(idx)); \ GL_EXTCALL(glEnableVertexAttribArrayARB(idx)); \
...@@ -831,12 +831,13 @@ void loadNumberedArrays( ...@@ -831,12 +831,13 @@ void loadNumberedArrays(
curVBO = sd->u.s.position2.VBO; \ curVBO = sd->u.s.position2.VBO; \
} \ } \
GL_EXTCALL(glVertexAttribPointerARB(idx, \ GL_EXTCALL(glVertexAttribPointerARB(idx, \
WINED3D_ATR_SIZE(position2), \ WINED3D_ATR_SIZE(sd->u.s.position2.dwType), \
WINED3D_ATR_GLTYPE(position2), \ WINED3D_ATR_GLTYPE(sd->u.s.position2.dwType), \
WINED3D_ATR_NORMALIZED(position2), \ WINED3D_ATR_NORMALIZED(sd->u.s.position2.dwType), \
sd->u.s.position2.dwStride, \ sd->u.s.position2.dwStride, \
((char *)sd->u.s.position2.lpData) + \ ((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)); \ GL_EXTCALL(glEnableVertexAttribArrayARB(idx)); \
} }
...@@ -913,7 +914,8 @@ static void loadVertexData(IWineD3DDevice *iface, WineDirect3DVertexStridedData ...@@ -913,7 +914,8 @@ static void loadVertexData(IWineD3DDevice *iface, WineDirect3DVertexStridedData
checkGLcall("glEnableClientState(GL_WEIGHT_ARRAY_ARB)"); checkGLcall("glEnableClientState(GL_WEIGHT_ARRAY_ARB)");
#endif #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");*/ /* FIXME("TODO\n");*/
/* Note dwType == float3 or float4 == 2 or 3 */ /* Note dwType == float3 or float4 == 2 or 3 */
...@@ -921,12 +923,12 @@ static void loadVertexData(IWineD3DDevice *iface, WineDirect3DVertexStridedData ...@@ -921,12 +923,12 @@ static void loadVertexData(IWineD3DDevice *iface, WineDirect3DVertexStridedData
/* with this on, the normals appear to be being modified, /* with this on, the normals appear to be being modified,
but the vertices aren't being translated as they should be but the vertices aren't being translated as they should be
Maybe the world matrix aren't being setup properly? */ 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 #endif
VTRACE(("glWeightPointerARB(%d, GL_FLOAT, %ld, %p)\n", 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.dwStride,
sd->u.s.blendWeights.lpData)); sd->u.s.blendWeights.lpData));
...@@ -936,9 +938,11 @@ static void loadVertexData(IWineD3DDevice *iface, WineDirect3DVertexStridedData ...@@ -936,9 +938,11 @@ static void loadVertexData(IWineD3DDevice *iface, WineDirect3DVertexStridedData
curVBO = sd->u.s.blendWeights.VBO; curVBO = sd->u.s.blendWeights.VBO;
} }
GL_EXTCALL(glWeightPointerARB)(WINED3D_ATR_SIZE(blendWeights), WINED3D_ATR_GLTYPE(blendWeights), GL_EXTCALL(glWeightPointerARB)(
sd->u.s.blendWeights.dwStride, WINED3D_ATR_SIZE(sd->u.s.blendWeights.dwType),
sd->u.s.blendWeights.lpData); WINED3D_ATR_GLTYPE(sd->u.s.blendWeights.dwType),
sd->u.s.blendWeights.dwStride,
sd->u.s.blendWeights.lpData);
checkGLcall("glWeightPointerARB"); checkGLcall("glWeightPointerARB");
...@@ -950,15 +954,15 @@ static void loadVertexData(IWineD3DDevice *iface, WineDirect3DVertexStridedData ...@@ -950,15 +954,15 @@ static void loadVertexData(IWineD3DDevice *iface, WineDirect3DVertexStridedData
} }
} }
} else if (GL_SUPPORT(EXT_VERTEX_WEIGHTING)) { } else if (GL_SUPPORT(EXT_VERTEX_WEIGHTING)) {
/* FIXME("TODO\n");*/ /* FIXME("TODO\n");*/
#if 0 #if 0
GL_EXTCALL(glVertexWeightPointerEXT)(WINED3D_ATR_SIZE(blendWeights), WINED3D_ATR_GLTYPE(blendWeights), GL_EXTCALL(glVertexWeightPointerEXT)(
sd->u.s.blendWeights.dwStride, WINED3D_ATR_SIZE(sd->u.s.blendWeights.dwType),
sd->u.s.blendWeights.lpData); WINED3D_ATR_GLTYPE(sd->u.s.blendWeights.dwType),
sd->u.s.blendWeights.dwStride,
sd->u.s.blendWeights.lpData);
checkGLcall("glVertexWeightPointerEXT(numBlends, ...)"); checkGLcall("glVertexWeightPointerEXT(numBlends, ...)");
glEnableClientState(GL_VERTEX_WEIGHT_ARRAY_EXT); glEnableClientState(GL_VERTEX_WEIGHT_ARRAY_EXT);
checkGLcall("glEnableClientState(GL_VERTEX_WEIGHT_ARRAY_EXT)"); checkGLcall("glEnableClientState(GL_VERTEX_WEIGHT_ARRAY_EXT)");
...@@ -987,9 +991,10 @@ static void loadVertexData(IWineD3DDevice *iface, WineDirect3DVertexStridedData ...@@ -987,9 +991,10 @@ static void loadVertexData(IWineD3DDevice *iface, WineDirect3DVertexStridedData
/* TODO: fog*/ /* TODO: fog*/
if (GL_SUPPORT(EXT_FOG_COORD) { if (GL_SUPPORT(EXT_FOG_COORD) {
glEnableClientState(GL_FOG_COORDINATE_EXT); glEnableClientState(GL_FOG_COORDINATE_EXT);
(GL_EXTCALL)(FogCoordPointerEXT)(WINED3D_ATR_GLTYPE(fog), (GL_EXTCALL)(FogCoordPointerEXT)(
sd->u.s.fog.dwStride, WINED3D_ATR_GLTYPE(sd->u.s.fog.dwType),
sd->u.s.fog.lpData); sd->u.s.fog.dwStride,
sd->u.s.fog.lpData);
} else { } else {
/* don't bother falling back to 'slow' as we don't support software FOG yet. */ /* don't bother falling back to 'slow' as we don't support software FOG yet. */
/* FIXME: fixme once */ /* FIXME: fixme once */
...@@ -1010,17 +1015,19 @@ static void loadVertexData(IWineD3DDevice *iface, WineDirect3DVertexStridedData ...@@ -1010,17 +1015,19 @@ static void loadVertexData(IWineD3DDevice *iface, WineDirect3DVertexStridedData
if (GL_SUPPORT(EXT_COORDINATE_FRAME) { if (GL_SUPPORT(EXT_COORDINATE_FRAME) {
if (sd->u.s.tangent.lpData || sd->u.s.tangent.VBO) { if (sd->u.s.tangent.lpData || sd->u.s.tangent.VBO) {
glEnable(GL_TANGENT_ARRAY_EXT); glEnable(GL_TANGENT_ARRAY_EXT);
(GL_EXTCALL)(TangentPointerEXT)(WINED3D_ATR_GLTYPE(tangent), (GL_EXTCALL)(TangentPointerEXT)(
sd->u.s.tangent.dwStride, WINED3D_ATR_GLTYPE(sd->u.s.tangent.dwType),
sd->u.s.tangent.lpData); sd->u.s.tangent.dwStride,
sd->u.s.tangent.lpData);
} else { } else {
glDisable(GL_TANGENT_ARRAY_EXT); glDisable(GL_TANGENT_ARRAY_EXT);
} }
if (sd->u.s.binormal.lpData || sd->u.s.binormal.VBO) { if (sd->u.s.binormal.lpData || sd->u.s.binormal.VBO) {
glEnable(GL_BINORMAL_ARRAY_EXT); glEnable(GL_BINORMAL_ARRAY_EXT);
(GL_EXTCALL)(BinormalPointerEXT)(WINED3D_ATR_GLTYPE(binormal), (GL_EXTCALL)(BinormalPointerEXT)(
sd->u.s.binormal.dwStride, WINED3D_ATR_GLTYPE(sd->u.s.binormal.dwType),
sd->u.s.binormal.lpData); sd->u.s.binormal.dwStride,
sd->u.s.binormal.lpData);
} else{ } else{
glDisable(GL_BINORMAL_ARRAY_EXT); glDisable(GL_BINORMAL_ARRAY_EXT);
} }
...@@ -1071,11 +1078,14 @@ static void loadVertexData(IWineD3DDevice *iface, WineDirect3DVertexStridedData ...@@ -1071,11 +1078,14 @@ static void loadVertexData(IWineD3DDevice *iface, WineDirect3DVertexStridedData
This only applies to user pointer sources, in VBOs the vertices are fixed up This only applies to user pointer sources, in VBOs the vertices are fixed up
*/ */
if(sd->u.s.position.VBO == 0) { if(sd->u.s.position.VBO == 0) {
glVertexPointer(3 /* min(WINED3D_ATR_SIZE(position),3) */, WINED3D_ATR_GLTYPE(position), glVertexPointer(3 /* min(WINED3D_ATR_SIZE(sd->u.s.position.dwType),3) */,
sd->u.s.position.dwStride, sd->u.s.position.lpData); WINED3D_ATR_GLTYPE(sd->u.s.position.dwType),
sd->u.s.position.dwStride, sd->u.s.position.lpData);
} else { } else {
glVertexPointer(WINED3D_ATR_SIZE(position), WINED3D_ATR_GLTYPE(position), glVertexPointer(
sd->u.s.position.dwStride, sd->u.s.position.lpData); 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(...)"); checkGLcall("glVertexPointer(...)");
glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_VERTEX_ARRAY);
...@@ -1097,9 +1107,10 @@ static void loadVertexData(IWineD3DDevice *iface, WineDirect3DVertexStridedData ...@@ -1097,9 +1107,10 @@ static void loadVertexData(IWineD3DDevice *iface, WineDirect3DVertexStridedData
checkGLcall("glBindBufferARB"); checkGLcall("glBindBufferARB");
curVBO = sd->u.s.normal.VBO; curVBO = sd->u.s.normal.VBO;
} }
glNormalPointer(WINED3D_ATR_GLTYPE(normal), glNormalPointer(
sd->u.s.normal.dwStride, WINED3D_ATR_GLTYPE(sd->u.s.normal.dwType),
sd->u.s.normal.lpData); sd->u.s.normal.dwStride,
sd->u.s.normal.lpData);
checkGLcall("glNormalPointer(...)"); checkGLcall("glNormalPointer(...)");
glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_NORMAL_ARRAY);
checkGLcall("glEnableClientState(GL_NORMAL_ARRAY)"); checkGLcall("glEnableClientState(GL_NORMAL_ARRAY)");
...@@ -1220,7 +1231,11 @@ static void loadVertexData(IWineD3DDevice *iface, WineDirect3DVertexStridedData ...@@ -1220,7 +1231,11 @@ static void loadVertexData(IWineD3DDevice *iface, WineDirect3DVertexStridedData
curVBO = sd->u.s.texCoords[coordIdx].VBO; curVBO = sd->u.s.texCoords[coordIdx].VBO;
} }
/* The coords to supply depend completely on the fvf / vertex shader */ /* 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); glEnableClientState(GL_TEXTURE_COORD_ARRAY);
} }
} else if (!GL_SUPPORT(NV_REGISTER_COMBINERS)) { } else if (!GL_SUPPORT(NV_REGISTER_COMBINERS)) {
......
...@@ -111,11 +111,11 @@ static WINED3DGLTYPE const glTypeLookup[D3DDECLTYPE_UNUSED] = { ...@@ -111,11 +111,11 @@ static WINED3DGLTYPE const glTypeLookup[D3DDECLTYPE_UNUSED] = {
{D3DDECLTYPE_FLOAT16_2, 2, GL_FLOAT , GL_FALSE ,sizeof(short int)}, {D3DDECLTYPE_FLOAT16_2, 2, GL_FLOAT , GL_FALSE ,sizeof(short int)},
{D3DDECLTYPE_FLOAT16_4, 4, 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_TYPE(type) glTypeLookup[type].d3dType
#define WINED3D_ATR_SIZE(_attribute) glTypeLookup[sd->u.s._attribute.dwType].size #define WINED3D_ATR_SIZE(type) glTypeLookup[type].size
#define WINED3D_ATR_GLTYPE(_attribute) glTypeLookup[sd->u.s._attribute.dwType].glType #define WINED3D_ATR_GLTYPE(type) glTypeLookup[type].glType
#define WINED3D_ATR_NORMALIZED(_attribute) glTypeLookup[sd->u.s._attribute.dwType].normalized #define WINED3D_ATR_NORMALIZED(type) glTypeLookup[type].normalized
#define WINED3D_ATR_TYPESIZE(_attribute) glTypeLookup[sd->u.s._attribute.dwType].typesize #define WINED3D_ATR_TYPESIZE(type) glTypeLookup[type].typesize
/** /**
* Settings * Settings
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment