[D3D8 Patch] vertex shader + fixes - VS4
Raphaël Junqueira
fenix at club-internet.fr
Fri Jan 3 19:42:13 CST 2003
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi,
the new year version of vertex shader ;)
Changelog:
- little IDirect3DRessource8 COM fix
- fix for correctly using diffuse color
- change for future specular color management
- many new VS1.1/2.0 opcodes (in my doc it's only 2.0 opcodes but many samples need it): m*x* and frc
- fixes in opcodes code
- more human readable traces
- first draft of multi-stream vertex shader (as used in DolphinVS dx8 sdk) (who have a doc ?)
- indents
Problems:
- i can't get my glx init always working ;(((
- textures problems (simple samples works)
TODO:
- more and more d3dx8 (interfaces, compilation, mesh loading, ...)
- finish vs2.0 and begin vs3.0 support (who wants to code a HLSL compliator ?)
- merge hardware execution code prototype with the software code
- finish the D3DASM -> NVASM converter (before i have to find a GeForce card)
- try to do a D3DASM -> ATIASM converter
Happy new year,
Raphael
PS: alexandre do you want i resend the d3dx8 patches or its ok ?
(my version is really broken because of d3d9 tests)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)
iD8DBQE+Fjv1p7NA3AmQTU4RAkYZAJ90zrIp0yorGOdSWjRC0C61GTFTMwCdGosB
ciQ49uQ67w6OmA4036OI1oE=
=dhyy
-----END PGP SIGNATURE-----
-------------- next part --------------
Index: shader.c
===================================================================
RCS file: /home/wine/wine/dlls/d3d8/shader.c,v
retrieving revision 1.4
diff -u -r1.4 shader.c
--- shader.c 2 Jan 2003 19:28:09 -0000 1.4
+++ shader.c 4 Jan 2003 01:16:53 -0000
@@ -26,6 +26,6 @@
#include <math.h>
#include "d3d8_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(d3d);
@@ -137,10 +140,14 @@
void vshader_expp(D3DSHADERVECTOR* d, D3DSHADERVECTOR* s0) {
float tmp_f = floorf(s0->w);
- d->x = powf(2.0f, tmp_f);
- d->y = s0->w - tmp_f;
- d->z = powf(2.0f, s0->w);
- d->w = 1.0f;
+ DWORD tmp_d = 0;
+ tmp_f = powf(2.0f, s0->w);
+ tmp_d = *((DWORD*) &tmp_f) & 0xFFFFFF00;
+
+ d->x = powf(2.0f, tmp_f);
+ d->y = s0->w - tmp_f;
+ d->z = *((float*) &tmp_d);
+ d->w = 1.0f;
/*
DPRINTF("executing exp: s0=(%f, %f, %f, %f) => d=(%f, %f, %f, %f)\n",
@@ -245,27 +252,125 @@
}
/**
+ * Version 1.1 specific
+ */
+
+void vshader_exp(D3DSHADERVECTOR* d, D3DSHADERVECTOR* s0) {
+ d->x = d->y = d->z = d->w = powf(2.0f, s0->w);
+}
+
+void vshader_log(D3DSHADERVECTOR* d, D3DSHADERVECTOR* s0) {
+ float tmp_f = fabsf(s0->w);
+ d->x = d->y = d->z = d->w = (0.0f != tmp_f) ? logf(tmp_f) / logf(2.0f) : -HUGE;
+}
+
+void vshader_frc(D3DSHADERVECTOR* d, D3DSHADERVECTOR* s0) {
+ d->x = s0->x - floorf(s0->x);
+ d->y = s0->y - floorf(s0->y);
+ d->z = 0.0f;
+ d->w = 1.0f;
+}
+
+typedef FLOAT D3DMATRIX44[4][4];
+typedef FLOAT D3DMATRIX43[4][3];
+typedef FLOAT D3DMATRIX34[4][4];
+typedef FLOAT D3DMATRIX33[4][3];
+typedef FLOAT D3DMATRIX32[4][2];
+
+void vshader_m4x4(D3DSHADERVECTOR* d, D3DSHADERVECTOR* s0, /*D3DSHADERVECTOR* mat1*/ D3DMATRIX44 mat) {
+ /*
+ * BuGGY CODE: here only if cast not work for copy/paste
+ D3DSHADERVECTOR* mat2 = mat1 + 1;
+ D3DSHADERVECTOR* mat3 = mat1 + 2;
+ D3DSHADERVECTOR* mat4 = mat1 + 3;
+ d->x = mat1->x * s0->x + mat2->x * s0->y + mat3->x * s0->z + mat4->x * s0->w;
+ d->y = mat1->y * s0->x + mat2->y * s0->y + mat3->y * s0->z + mat4->y * s0->w;
+ d->z = mat1->z * s0->x + mat2->z * s0->y + mat3->z * s0->z + mat4->z * s0->w;
+ d->w = mat1->w * s0->x + mat2->w * s0->y + mat3->w * s0->z + mat4->w * s0->w;
+ */
+ d->x = mat[0][0] * s0->x + mat[0][1] * s0->y + mat[0][2] * s0->z + mat[0][3] * s0->w;
+ d->y = mat[1][0] * s0->x + mat[1][1] * s0->y + mat[1][2] * s0->z + mat[1][3] * s0->w;
+ d->z = mat[2][0] * s0->x + mat[2][1] * s0->y + mat[2][2] * s0->z + mat[2][3] * s0->w;
+ d->w = mat[3][0] * s0->x + mat[3][1] * s0->y + mat[3][2] * s0->z + mat[3][3] * s0->w;
+}
+
+void vshader_m4x3(D3DSHADERVECTOR* d, D3DSHADERVECTOR* s0, D3DMATRIX43 mat) {
+ FIXME("check\n");
+ d->x = mat[0][0] * s0->x + mat[0][1] * s0->y + mat[0][2] * s0->z + mat[0][3] * s0->w;
+ d->y = mat[1][0] * s0->x + mat[1][1] * s0->y + mat[1][2] * s0->z + mat[1][3] * s0->w;
+ d->z = mat[2][0] * s0->x + mat[2][1] * s0->y + mat[2][2] * s0->z + mat[2][3] * s0->w;
+ d->w = 1.0f;
+}
+
+void vshader_m3x4(D3DSHADERVECTOR* d, D3DSHADERVECTOR* s0, D3DMATRIX34 mat) {
+ FIXME("check\n");
+ d->x = mat[0][0] * s0->x + mat[0][1] * s0->y + mat[0][2] * s0->z;
+ d->y = mat[2][0] * s0->x + mat[1][1] * s0->y + mat[1][2] * s0->z;
+ d->z = mat[2][0] * s0->x + mat[2][1] * s0->y + mat[2][2] * s0->z;
+ d->w = mat[3][0] * s0->x + mat[3][1] * s0->y + mat[3][2] * s0->z;
+}
+
+void vshader_m3x3(D3DSHADERVECTOR* d, D3DSHADERVECTOR* s0, D3DMATRIX33 mat) {
+ FIXME("check\n");
+ d->x = mat[0][0] * s0->x + mat[0][1] * s0->y + mat[2][2] * s0->z;
+ d->y = mat[1][0] * s0->x + mat[1][1] * s0->y + mat[2][2] * s0->z;
+ d->z = mat[2][0] * s0->x + mat[2][1] * s0->y + mat[2][2] * s0->z;
+ d->w = 1.0f;
+}
+
+void vshader_m3x2(D3DSHADERVECTOR* d, D3DSHADERVECTOR* s0, D3DMATRIX32 mat) {
+ FIXME("check\n");
+ d->x = mat[0][0] * s0->x + mat[0][1] * s0->y + mat[0][2] * s0->z;
+ d->y = mat[1][0] * s0->x + mat[1][1] * s0->y + mat[1][2] * s0->z;
+ d->z = 0.0f;
+ d->w = 1.0f;
+}
+
+/**
+ * Version 2.0 specific
+ */
+void vshader_lrp(D3DSHADERVECTOR* d, D3DSHADERVECTOR* s0, D3DSHADERVECTOR* s1, D3DSHADERVECTOR* s2, D3DSHADERVECTOR* s3) {
+ d->x = s0->x * (s1->x - s2->x) + s2->x;
+ d->y = s0->y * (s1->y - s2->y) + s2->y;
+ d->z = s0->z * (s1->z - s2->z) + s2->z;
+ d->w = s0->w * (s1->w - s2->w) + s2->x;
+}
+
+/**
* log, exp, frc, m*x* seems to be macros ins ... to see
*/
static CONST SHADER_OPCODE vshader_ins [] = {
+ {D3DSIO_NOP, "nop", 0, vshader_nop},
{D3DSIO_MOV, "mov", 2, vshader_mov},
- {D3DSIO_MAX, "max", 3, vshader_max},
- {D3DSIO_MIN, "min", 3, vshader_min},
- {D3DSIO_SGE, "sge", 3, vshader_sge},
- {D3DSIO_SLT, "slt", 3, vshader_slt},
{D3DSIO_ADD, "add", 3, vshader_add},
{D3DSIO_SUB, "sub", 3, vshader_sub},
+ {D3DSIO_MAD, "mad", 4, vshader_mad},
{D3DSIO_MUL, "mul", 3, vshader_mul},
{D3DSIO_RCP, "rcp", 2, vshader_rcp},
- {D3DSIO_MAD, "mad", 4, vshader_mad},
+ {D3DSIO_RSQ, "rsq", 2, vshader_rsq},
{D3DSIO_DP3, "dp3", 3, vshader_dp3},
{D3DSIO_DP4, "dp4", 3, vshader_dp4},
- {D3DSIO_RSQ, "rsq", 2, vshader_rsq},
- {D3DSIO_DST, "dst", 3, vshader_dst},
+ {D3DSIO_MIN, "min", 3, vshader_min},
+ {D3DSIO_MAX, "max", 3, vshader_max},
+ {D3DSIO_SLT, "slt", 3, vshader_slt},
+ {D3DSIO_SGE, "sge", 3, vshader_sge},
{D3DSIO_LIT, "lit", 2, vshader_lit},
+ {D3DSIO_DST, "dst", 3, vshader_dst},
{D3DSIO_EXPP, "expp", 2, vshader_expp},
{D3DSIO_LOGP, "logp", 2, vshader_logp},
- {D3DSIO_NOP, "nop", 0, vshader_nop},
+
+ /** new VS1.1 not fully supported yet */
+ {D3DSIO_EXP, "exp", 2, vshader_exp},
+ {D3DSIO_LOG, "log", 2, vshader_log},
+ {D3DSIO_FRC, "frc", 2, vshader_frc},
+ {D3DSIO_M4x4, "m4x4", 3, vshader_m4x4},
+ {D3DSIO_M4x3, "m4x3", 3, vshader_m4x3},
+ {D3DSIO_M3x4, "m3x4", 3, vshader_m3x4},
+ {D3DSIO_M3x3, "m3x3", 3, vshader_m3x3},
+ {D3DSIO_M3x2, "m3x2", 3, vshader_m3x2},
+ /** new VS2.0 not fully supported yet */
+ {D3DSIO_LRP, "lrp", 5, vshader_lrp},
+
{0, NULL, 0, NULL}
};
@@ -413,6 +518,7 @@
VSHADEROUTPUTDATA8* output) {
/** Vertex Shader Temporary Registers */
D3DSHADERVECTOR R[12];
+ memset(R, 0, 12 * sizeof(D3DSHADERVECTOR));
/*D3DSHADERSCALAR A0;*/
D3DSHADERVECTOR A[1];
/** temporary Vector for modifier management */
@@ -426,7 +532,6 @@
D3DSHADERVECTOR* p_send[4];
DWORD i;
- memset(R, 0, 12 * sizeof(D3DSHADERVECTOR));
/* vshader_program_parse(vshader); */
/*
TRACE_VECTOR(vshader->data->C[0]);
@@ -453,9 +558,19 @@
curOpcode = vshader_program_get_opcode(*pToken);
++pToken;
if (NULL == curOpcode) {
+ if (*(pToken - 1) == D3DVS_VERSION(1,1)) {
+ continue ;
+ }
+ i = 0;
/* unkown current opcode ... */
while (*pToken & 0x80000000) {
- DPRINTF("unrecognized opcode: pos=%d token=%08lX\n", pToken - vshader->function, *pToken);
+ if (i == 0) {
+ DPRINTF("unrecognized opcode: pos=%d token=%08lX\n", (pToken - 1) - vshader->function, *(pToken - 1));
+ }
+ DPRINTF("unrecognized opcode param: pos=%d token=%08lX what=", pToken - vshader->function, *pToken);
+ vshader_program_dump_param(*pToken, i);
+ DPRINTF("\n");
+ ++i;
++pToken;
}
/*return FALSE;*/
@@ -561,6 +676,9 @@
case 4:
curOpcode->soft_fct(p_send[0], p_send[1], p_send[2], p_send[3]);
break;
+ case 5:
+ curOpcode->soft_fct(p_send[0], p_send[1], p_send[2], p_send[3], p_send[4]);
+ break;
default:
ERR("%s too many params: %u\n", curOpcode->name, curOpcode->num_params);
}
@@ -678,6 +796,7 @@
const DWORD* pToken = vshader->decl;
DWORD fvf = 0;
DWORD len = 0;
+ DWORD stream = 0;
DWORD token;
DWORD tokenlen;
DWORD tokentype;
@@ -686,12 +805,19 @@
while (D3DVSD_END() != *pToken) {
token = *pToken;
tokenlen = vshader_decl_parse_token(pToken);
- tokentype = ((*pToken & D3DVSD_TOKENTYPEMASK) >> D3DVSD_TOKENTYPESHIFT);
+ tokentype = ((token & D3DVSD_TOKENTYPEMASK) >> D3DVSD_TOKENTYPESHIFT);
/** FVF generation block */
- if (D3DVSD_TOKEN_STREAMDATA == tokentype && 0 == (0x10000000 & tokentype)) {
+ if (D3DVSD_TOKEN_STREAM == tokentype && 0 == (D3DVSD_STREAMTESSMASK & token)) {
+ /**
+ * how really works streams,
+ * in DolphinVS dx8 dsk sample they seems to decal reg numbers !!!
+ */
+ stream = ((token & D3DVSD_STREAMNUMBERMASK) >> D3DVSD_STREAMNUMBERSHIFT);
+
+ } else if (D3DVSD_TOKEN_STREAMDATA == tokentype && 0 == (0x10000000 & tokentype)) {
DWORD type = ((token & D3DVSD_DATATYPEMASK) >> D3DVSD_DATATYPESHIFT);
- DWORD reg = ((token & D3DVSD_VERTEXREGMASK) >> D3DVSD_VERTEXREGSHIFT);
+ DWORD reg = ((token & D3DVSD_VERTEXREGMASK) >> D3DVSD_VERTEXREGSHIFT) - stream;
switch (reg) {
case D3DVSDE_POSITION:
@@ -699,7 +825,7 @@
case D3DVSDT_FLOAT3: fvf |= D3DFVF_XYZ; break;
case D3DVSDT_FLOAT4: fvf |= D3DFVF_XYZRHW; break;
default: /** errooooorr what to do ? */
- ERR("Error in VertexShader declaration of D3DVSDE_POSITION register: unsupported type %lu\n", type);
+ ERR("Error in VertexShader declaration of D3DVSDE_POSITION register: unsupported type %s\n", VertexShaderDeclDataTypes[type]);
}
break;
@@ -710,7 +836,7 @@
case D3DVSDT_FLOAT3: fvf |= D3DFVF_XYZB3; break;
case D3DVSDT_FLOAT4: fvf |= D3DFVF_XYZB4; break;
default: /** errooooorr what to do ? */
- ERR("Error in VertexShader declaration of D3DVSDE_BLENDWEIGHT register: unsupported type %lu\n", type);
+ ERR("Error in VertexShader declaration of D3DVSDE_BLENDWEIGHT register: unsupported type %s\n", VertexShaderDeclDataTypes[type]);
}
break;
@@ -718,7 +844,7 @@
switch (type) {
case D3DVSDT_UBYTE4: fvf |= D3DFVF_LASTBETA_UBYTE4; break;
default: /** errooooorr what to do ? */
- ERR("Error in VertexShader declaration of D3DVSDE_BLENDINDINCES register: unsupported type %lu\n", type);
+ ERR("Error in VertexShader declaration of D3DVSDE_BLENDINDINCES register: unsupported type %s\n", VertexShaderDeclDataTypes[type]);
}
break;
@@ -726,7 +852,7 @@
switch (type) {
case D3DVSDT_FLOAT3: fvf |= D3DFVF_NORMAL; break;
default: /** errooooorr what to do ? */
- ERR("Error in VertexShader declaration of D3DVSDE_NORMAL register: unsupported type %lu\n", type);
+ ERR("Error in VertexShader declaration of D3DVSDE_NORMAL register: unsupported type %s\n", VertexShaderDeclDataTypes[type]);
}
break;
@@ -734,7 +860,7 @@
switch (type) {
case D3DVSDT_FLOAT1: fvf |= D3DFVF_PSIZE; break;
default: /** errooooorr what to do ? */
- ERR("Error in VertexShader declaration of D3DVSDE_PSIZE register: unsupported type %lu\n", type);
+ ERR("Error in VertexShader declaration of D3DVSDE_PSIZE register: unsupported type %s\n", VertexShaderDeclDataTypes[type]);
}
break;
@@ -742,7 +868,7 @@
switch (type) {
case D3DVSDT_D3DCOLOR: fvf |= D3DFVF_DIFFUSE; break;
default: /** errooooorr what to do ? */
- ERR("Error in VertexShader declaration of D3DVSDE_DIFFUSE register: unsupported type %lu\n", type);
+ ERR("Error in VertexShader declaration of D3DVSDE_DIFFUSE register: unsupported type %s\n", VertexShaderDeclDataTypes[type]);
}
break;
@@ -750,7 +876,7 @@
switch (type) {
case D3DVSDT_D3DCOLOR: fvf |= D3DFVF_SPECULAR; break;
default: /** errooooorr what to do ? */
- ERR("Error in VertexShader declaration of D3DVSDE_SPECULAR register: unsupported type %lu\n", type);
+ ERR("Error in VertexShader declaration of D3DVSDE_SPECULAR register: unsupported type %s\n", VertexShaderDeclDataTypes[type]);
}
break;
@@ -802,3 +928,4 @@
FIXME("(void): stub: %p\n", what);
return TRUE;
}
+
Index: resource.c
===================================================================
RCS file: /home/wine/wine/dlls/d3d8/resource.c,v
retrieving revision 1.1
diff -u -r1.1 resource.c
--- resource.c 27 Sep 2002 22:46:17 -0000 1.1
+++ resource.c 4 Jan 2003 01:16:54 -0000
@@ -34,7 +34,7 @@
ICOM_THIS(IDirect3DResource8Impl,iface);
if (IsEqualGUID(riid, &IID_IUnknown)
- || IsEqualGUID(riid, &IID_IClassFactory)) {
+ || IsEqualGUID(riid, &IID_IDirect3DResource8)) {
IDirect3DResource8Impl_AddRef(iface);
*ppobj = This;
return D3D_OK;
Index: device.c
===================================================================
RCS file: /home/wine/wine/dlls/d3d8/device.c,v
retrieving revision 1.20
diff -u -r1.20 device.c
--- device.c 3 Jan 2003 21:28:05 -0000 1.20
+++ device.c 4 Jan 2003 01:17:04 -0000
@@ -265,7 +268,7 @@
vertex arrays, we need to drop down to the slow mechanism for
certain functions */
- if (isPtSize || isDiffuse || useVertexShaderFunction==TRUE || (numBlends > 0)) {
+ if (isPtSize || isDiffuse || useVertexShaderFunction || (numBlends > 0)) {
TRACE("Using slow per-vertex code\n");
/* Enable this one to be able to debug what is going on, but it is slower
@@ -498,19 +501,22 @@
if (isDiffuse) {
/*diffuseColor = D3DCOLOR_COLORVALUE(vs_o.oD[0].x, vs_o.oD[0].y, vs_o.oD[0].z, vs_o.oD[0].w);*/
/*TRACE_VECTOR(vs_o.oD[0]);*/
- /*glColor4f(vs_o.oD[0].x, vs_o.oD[0].y, vs_o.oD[0].z, vs_o.oD[0].w); */
- glMaterialfv(GL_FRONT, GL_DIFFUSE, (float*) &vs_o.oD[0]);
- checkGLcall("glMaterialfv");
+ glColor4fv((float*) &vs_o.oD[0]);
}
+/* Requires secondary color extensions to compile... */
+#if 0
if (isSpecular) {
+ /* FIXME: check for GL_EXT_secondary_color => Waiting for news CAPS Arch */
/*specularColor = D3DCOLOR_COLORVALUE(vs_o.oD[1].x, vs_o.oD[1].y, vs_o.oD[1].z, vs_o.oD[1].w);*/
/*TRACE_VECTOR(vs_o.oD[1]);*/
- glMaterialfv(GL_FRONT, GL_SPECULAR, (float*) &vs_o.oD[1]);
- checkGLcall("glMaterialfv");
+ glSecondaryColor3fvEXT((float*) &vs_o.oD[1]);
+ checkGLcall("glSecondaryColor3fvEXT");
}
+#endif
+
/** reupdate textures coords binding using vs_o.oT[0->3] */
- for (textureNo = 0; textureNo < 4/*min(numTextures, 4)*/; ++textureNo) {
+ for (textureNo = 0; textureNo < 4; ++textureNo) {
float s, t, r, q;
if (!(This->isMultiTexture) && textureNo > 0) {
@@ -565,6 +571,7 @@
glVertex4f(x / rhw, y / rhw, z / rhw, 1.0f / rhw);
checkGLcall("glVertex4f");
}
+
} else {
/**
* FALSE == useVertexShaderFunction
@@ -619,16 +626,16 @@
if (isRHW) {
glVertexPointer(4, GL_FLOAT, skip, curPos);
checkGLcall("glVertexPointer(4, ...)");
- curPos += 4*sizeof(float);
+ curPos += 4 * sizeof(float);
} else {
glVertexPointer(3, GL_FLOAT, skip, curPos);
checkGLcall("glVertexPointer(3, ...)");
- curPos += 3*sizeof(float);
+ curPos += 3 * sizeof(float);
}
glEnableClientState(GL_VERTEX_ARRAY);
checkGLcall("glEnableClientState(GL_VERTEX_ARRAY)");
- if (numBlends>0) {
+ if (numBlends > 0) {
/* no such functionality in the fixed function GL pipeline */
/* FIXME: Wont get here as will drop to slow method */
FIXME("Cannot handle blending data here in openGl\n");
@@ -640,11 +647,11 @@
checkGLcall("glNormalPointer");
glEnableClientState(GL_NORMAL_ARRAY);
checkGLcall("glEnableClientState(GL_NORMAL_ARRAY)");
- curPos += 3*sizeof(float);
+ curPos += 3 * sizeof(float);
} else {
glDisableClientState(GL_NORMAL_ARRAY);
checkGLcall("glDisableClientState(GL_NORMAL_ARRAY)");
- glNormal3f(0, 0, 1);
+ glNormal3f(0.0f, 0.0f, 1.0f);
checkGLcall("glNormal3f(0, 0, 1)");
}
@@ -665,7 +672,7 @@
else {
glDisableClientState(GL_COLOR_ARRAY);
checkGLcall("glDisableClientState(GL_COLOR_ARRAY)");
- glColor4f(1, 1, 1, 1);
+ glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
checkGLcall("glColor4f(1, 1, 1, 1)");
}
@@ -681,7 +688,7 @@
} else {
glDisableClientState(GL_SECONDARY_COLOR_ARRAY_EXT);
checkGLcall("glDisableClientState(GL_SECONDARY_COLOR_ARRAY_EXT)");
- glSecondaryColor3fEXT(0, 0, 0);
+ glSecondaryColor3fEXT(0.0f, 0.0f, 0.0f);
checkGLcall("glSecondaryColor3fEXT(0, 0, 0)");
}
#endif
@@ -697,7 +704,7 @@
case D3DRTYPE_TEXTURE:
glTexCoordPointer(2, GL_FLOAT, skip, curPos);
checkGLcall("glTexCoordPointer(2, ...)");
- curPos += 2*sizeof(float);
+ curPos += 2 * sizeof(float);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
checkGLcall("glEnableClientState(GL_TEXTURE_COORD_ARRAY);");
break;
@@ -705,7 +712,7 @@
case D3DRTYPE_VOLUMETEXTURE:
glTexCoordPointer(3, GL_FLOAT, skip, curPos);
checkGLcall("glTexCoordPointer(3, ...)");
- curPos += 3*sizeof(float);
+ curPos += 3 * sizeof(float);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
checkGLcall("glEnableClientState(GL_TEXTURE_COORD_ARRAY);");
break;
@@ -720,7 +727,7 @@
/* Note I have seen a program actually do this, so just hide it and continue */
TRACE("Very odd - texture requested in FVF but not bound!\n");
- glMultiTexCoord4fARB(GL_TEXTURE0_ARB + textureNo, 0, 0, 0, 1);
+ glMultiTexCoord4fARB(GL_TEXTURE0_ARB + textureNo, 0.0f, 0.0f, 0.0f, 1.0f);
checkGLcall("glMultiTexCoord4f(... , 0, 0, 0, 1)");
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
checkGLcall("glDisableClientState(GL_TEXTURE_COORD_ARRAY);");
@@ -728,7 +735,6 @@
}
}
-
/* Finally do the drawing */
if (isIndexed) {
More information about the wine-patches
mailing list