我正在研究矩阵产品功能,我是 C 的新手。这就是我想出的......
static float *currentMatrix;
...
glMultMatrixf(const float *m){
int i;
int i2=0;
int i3=0;
float result[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
printf("starting \n");
for(i=0; i < (MATRIX_HEIGHT); i++){
float dotProduct = 0.0f;
for(i2=0; i2 < (MATRIX_WIDTH); i2++){
float dotProduct = 0.0f;
for(i3=0;i3 < (MATRIX_WIDTH); i3++){
dotProduct+=currentMatrix[i3+i*4]*m[i3*4+i2];
}
result[i2+i*4]=dotProduct;
}
}
currentMatrix = &result[0];
printf("Finished \n");
}
当然,由于结果的范围,这会失败。
这确实有效...
static float *currentMatrix;
float result[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
...
glMultMatrixf(const float *m){
int i;
int i2=0;
int i3=0;
printf("starting \n");
for(i=0; i < (MATRIX_HEIGHT); i++){
float dotProduct = 0.0f;
for(i2=0; i2 < (MATRIX_WIDTH); i2++){
float dotProduct = 0.0f;
for(i3=0;i3 < (MATRIX_WIDTH); i3++){
dotProduct+=currentMatrix[i3+i*4]*m[i3*4+i2];
}
result[i2+i*4]=dotProduct;
}
}
currentMatrix = &result[0];
printf("Finished \n");
}
但这似乎不对,因为如果多个线程同时调用该函数,这似乎会导致问题(请记住我是 C 新手)。
所以我真的不知道防止 GC 销毁这些对象的正确方法。我当然可以遍历临时数组并在常规数组中设置值,但这似乎效率低下。有没有更好的方法来处理这个?