まぐらぼ

日々の雑記を書いています。

rlDrawElement()の仕様がGLと異なる気がする。

rlDrawElement()の挙動がGLと異なる気がする。
DrawcallのGPUコマンドは通常キューイングされる。しかしながら、GPU-busyのとき同期処理となるため、情報はすべて揃えておく必要がある。

rlDrawElement()後にSRT式の行列をセットしても有効になっている。RL_Primitiveを切り替えるまで有効ということか?

あとglUseProgram()の位置もなんか気持ち悪いんだよね。

Cornell Box - sample

/* Setup Red Face */
{
RLfloat rotate [16], scale [16], translate [16];


rlBindPrimitive(RL_PRIMITIVE, redFacePrimitive);

... 略...

rlBindBuffer(RL_ELEMENT_ARRAY_BUFFER, quadBuffers[0]);

rlDrawElements(RL_TRIANGLE_STRIP, numIndicesQuad, RL_UNSIGNED_INT, 0);

rlUseProgram(diffuseProgram);
rlUniformt(rlGetUniformLocation(diffuseProgram, "lightTexture"), lightTexture);
rlUniformpv(rlGetUniformLocation(diffuseProgram, "lightPrimitives"), lengthof(lightIDs), lightIDs);
rlUniform3f(rlGetUniformLocation(diffuseProgram, "diffuseColour"), 1.0, 0.0, 0.0);

  // SRT
  MATRIX_CREATEIDENTITY(matrix);
  MATRIX_SCALE(scale, 2.0f, 2.0f, 2.0f); 
  MATRIX_MULTIPLY_BY(matrix, scale);
  MATRIX_ROTATEZ(rotate, -kPI / 2.0f);
  MATRIX_MULTIPLY_BY(matrix, rotate);
  MATRIX_TRANSLATE(translate, -1.0f, 0.0f, 0.0f); 
  MATRIX_MULTIPLY_BY(matrix, translate);
  rlPrimitiveParameterMatrixf(RL_PRIMITIVE, RL_PRIMITIVE_TRANSFORM_MATRIX, matrix);

  //! ★ ここが適切な位置ではなかろうか。
 //rlDrawElements(RL_TRIANGLE_STRIP, numIndicesQuad, RL_UNSIGNED_INT, 0);
}