Я нахожу это раздражающим, но есть ли лучший способ извлечь параметр структуры из шейдера Cg?
В примере 11_two_light_with_structs (OpenGL) в шейдере есть структура материала:
CG шейдер:
// From page 128
struct Material {
float3 Ke;
float3 Ka;
float3 Kd;
float3 Ks;
float shininess;
};
Затем в коде они делают это:
код C:
myCgVertexParam_material_Ke = cgGetNamedParameter( myCgVertexProgram, "material.Ke" );
myCgVertexParam_material_Ka = cgGetNamedParameter( myCgVertexProgram, "material.Ka");
myCgVertexParam_material_Kd = cgGetNamedParameter( myCgVertexProgram, "material.Kd");
myCgVertexParam_material_Ks = cgGetNamedParameter( myCgVertexProgram, "material.Ks");
Кажется скучным, не могли бы вы просто сделать
myCgVertexParam_materialALL = cgGetNamedParameter( myCgVertexProgram, "material" ) ;
Тогда что-то вроде:
cgSetParameterValuefr( myCgVertexParam_materialALL, 13, brassMat ) ;//! no.
Здесь я пытаюсь обработать структуру как массив, но последняя команда не работает, хотя с ошибкой «Параметр не числового типа».