私はマトリックス製品関数に取り組んでおり、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 がこれらのオブジェクトを破棄するのを防ぐ正しい方法がよくわかりません。もちろん、一時配列を反復処理して通常の配列に値を設定することもできますが、それは非効率的です。これを処理するより良い方法はありますか?