[PATCH 4/5] d3dx9_36: Implemented ID3DXConstantTable_SetMatrix and ID3DXConstantTable_SetMatrixArray

Michael Stefaniuc mstefani at redhat.com
Fri Jan 21 03:15:49 CST 2011


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 Bruni<matteo.mystral at gmail.com>  wrote:
>> 2011/1/20 Travis Athougies<iammisc at 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




More information about the wine-devel mailing list