First thought - ensure the vertices for the pyramid and cube occupy separate non-overlapping ranges in the array. When rotating the pyramid vertices, only tell DirectX about that range of the array (use the base pointer and size of the range rather than the full array).
Will now check the DirectX APIs...
EDIT
Confirmed. The key function is...
D3DXVECTOR4 * D3DXVec4TransformArray(D3DXVECTOR4 * pOut,
UINT OutStride,
CONST D3DXVECTOR4* pV,
UINT VStride,
CONST D3DXMATRIX* pM,
UINT n
);
In C++, a subrange of an array is in many ways an array in its own right, or more to the point, it s mostly just a block of memory with no indication within itself of where its bounds are. So you just pass in a different pV
and a different n
to indicate the subrange you want to apply the transform to, and as far as the function is concerned, that is the whole array. You ll probably need to copy the untransformed part separately - a job for memcpy, I expect.
The stride values are normally just the size of a vector plus any alignment padding, but it s possible to "lie" about this too, and transform e.g. every third vector in the array.