У меня есть матричный класс 4x4, который содержит значения как 2d float array: float mat [4] [4]; и я перегрузил оператор []Работает ли 2d-массив в glUniformMatrix4fv, C++?
inline float *Matrix4::operator[](int row) { return mat[row]; }
и у меня есть равномерное mat4 в моем шейдере (равномерное mat4 костей [64];), который я будет загружать свои данные на. И я держу кости как указатель Matrix4 (Matrix4 * finalBones), который является матричным массивом, содержащим элементы numJoints. и это то, что я использую, чтобы загрузить данные:
glUniformMatrix4fv(shader.getLocation("Bones"),numJoints,false,finalBones[0][0]);
Я абсолютно уверен в том, что произойдет, поэтому я должен спросить, что если это будет работать или мне нужно, чтобы извлечь все в 16 * numJoints размера плавающие массивы, которые кажутся дорогими для каждого тика.
редактировать это то, что я сделал, который, кажется, действительно дорого для каждой операции вытяжки
void MD5Loader::uploadToGPU()
{
float* finalmat=new float[16*numJoints];
for (int i=0; i < numJoints; i++)
for (int j=0; j < 4; j++)
for(int k=0; k < 4; k++)
finalmat[16*i + j*4 + k] = finalBones[i][j][k];
glUniformMatrix4fv(shader.getLocation("Bones"),numJoints,false,finalmat);
delete[] finalmat;
}
Я отредактировал сообщение, дорого ли это делать? – deniz
@deniz: Прежде всего, это новый вопрос. Если у вас есть новый вопрос, вы должны задать новый вопрос. Во-вторых, вы должны использовать 'std :: vector', а не массив. Третье и самое главное ... * почему ты это сделал? Я просто сказал вам, как дать матрицы OpenGL, которые являются основными. Наконец, прекратите передавать значения C++ 'true' и' false' для 'GLboolean'' GL_TRUE' и 'GL_FALSE'. –
Умм, мой класс matrix4 имеет конструкторы, но он имеет только мату [4] [4] в качестве переменной. все остальное - перегрузка оператора и основные матричные функции. Я не уверен, что это POD в C++ 03 – deniz