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); }