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

Travis Athougies iammisc at gmail.com
Fri Jan 21 17:22:00 CST 2011


matrix + i will advance by the size of 1 D3DXMATRIX, since matrix is a
pointer to a D3DXMATRIX. Michael is right, I thought the code was
clearer with the pointer arithmetic, but I now see more people are
familiar with the array indexing style.

Travis.

On Fri, Jan 21, 2011 at 8:47 AM, Matteo Bruni <matteo.mystral at gmail.com> wrote:
> 2011/1/21 Michael Stefaniuc <mstefani at redhat.com>:
>> On 01/21/2011 06:56 AM, Travis Athougies wrote:
>>> 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?
>>>>
>>>
>>> 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.
>>
>
> Oh, right, I misread that (and Michael's suggestion is good). But then
> I would expect the register index to be incremented by
> desc.RegisterCount at each iteration. RegisterCount is supposedly 4,
> but what if it is not? This calls for some SetMatrixArray tests.
>



-- 
Travis Athougies




More information about the wine-devel mailing list