On 01/21/2011 06:56 AM, Travis Athougies wrote:
Uh no. If I were to do that, matrix->m[1] would be the second row, not the second matrix. I'm trying to get at the second matrix. To illustrate this, suppose the matrix were at 0x8000 (not going to happen, but just pretend). matrix->m[1] would be at 0x8010, since floats are 4 bytes. However, the next matrix is actually at 0x8040 (since sizeof(float) * 16 [the number of elements in the matrix] = 64).
So you want a pointer to the first element of the "i"th matrix, right? &matrix[i]._11 No cast, no explicit pointer arithmetic.
On Thu, Jan 20, 2011 at 7:27 AM, Matteo Brunimatteo.mystral@gmail.com wrote:
2011/1/20 Travis Athougiesiammisc@gmail.com:
/* D3DXMATRIX is a union, one of whose elements is an array, so it can be cast to a float pointer */
if (is_vertex_shader(This->desc.Version))
IDirect3DDevice9_SetVertexShaderConstantF(device, desc.RegisterIndex + i, (float *)(matrix + i),
desc.RegisterCount);
else
IDirect3DDevice9_SetPixelShaderConstantF(device, desc.RegisterIndex + i, (float *)(matrix + i),
desc.RegisterCount);
Can't you just pass matrix->m[i] as parameter, instead of that cast?
bye michael