Just thought I'd post this up. DBP is missing the
Set Effect Constant Vector Element and object effect locking commands. You need this to set values for arrays in your shaders.
After some Googling I found a 2 year old post from Mista Wilson which showed where to find the object effect data. So now I can finally set arrays, rather than passing in a stupid number of vectors for my 8 positional lights.
Thought I'd post up my function to help people out who may also be passing in excess variables because they can't pass in arrays. It'll need modifying if you are using arrays different from 8xVector4.
void GenF::SetObjectEffectVector4Array8(int dbObj,char* strConstantName,float fltValues[]){
D3DXVECTOR4 vectorArray[8];
sObject* dbObjectPointer = dbGetObject(dbObj);
dbObjectPointer->ppMeshList[0]->pVertexShaderEffect->m_pEffect->GetVectorArray(strConstantName, vectorArray, 8);
int arrPos = 0;
for(int i=0; i < 8; i++){
vectorArray[i].x = fltValues[arrPos++];
vectorArray[i].y = fltValues[arrPos++];
vectorArray[i].z = fltValues[arrPos++];
vectorArray[i].w = fltValues[arrPos++];
}
dbObjectPointer->ppMeshList[0]->pVertexShaderEffect->m_pEffect->SetVectorArray(strConstantName, vectorArray, 8);
}