|
|
@ -1021,8 +1021,9 @@ void DrawMeshInstanced(Mesh mesh, Material material, Matrix *transforms, int ins |
|
|
|
// NOTE: At this point the modelview matrix just contains the view matrix (camera) |
|
|
|
// That's because BeginMode3D() sets it and there is no model-drawing function |
|
|
|
// that modifies it, all use rlPushMatrix() and rlPopMatrix() |
|
|
|
Matrix matModel = MatrixIdentity(); |
|
|
|
Matrix matView = rlGetMatrixModelview(); |
|
|
|
Matrix matModelView = matView; |
|
|
|
Matrix matModelView = MatrixIdentity(); |
|
|
|
Matrix matProjection = rlGetMatrixProjection(); |
|
|
|
|
|
|
|
// Upload view and projection matrices (if locations available) |
|
|
@ -1066,15 +1067,17 @@ void DrawMeshInstanced(Mesh mesh, Material material, Matrix *transforms, int ins |
|
|
|
// Model transformation matrix is send to shader uniform location: SHADER_LOC_MATRIX_MODEL |
|
|
|
if (material.shader.locs[SHADER_LOC_MATRIX_MODEL] != -1) rlSetUniformMatrix(material.shader.locs[SHADER_LOC_MATRIX_MODEL], transforms[0]); |
|
|
|
|
|
|
|
// Accumulate several transformations: |
|
|
|
// l">matView: rlgl internal modelview matrix (actually, just view matrix) |
|
|
|
// Accumulate several ">model transformations: |
|
|
|
// ">transforms[0]: model transformation provided (includes DrawModel() params combined with model.transform) |
|
|
|
// rlGetMatrixTransform(): rlgl internal transform matrix due to push/pop matrix stack |
|
|
|
// transform: function parameter transformation |
|
|
|
matModelView = MatrixMultiply(transforms[0], MatrixMultiply(rlGetMatrixTransform(), matView)); |
|
|
|
matModel = MatrixMultiply(transforms[0], rlGetMatrixTransform()); |
|
|
|
|
|
|
|
// Get model-view matrix |
|
|
|
matModelView = MatrixMultiply(matModel, matView); |
|
|
|
} |
|
|
|
|
|
|
|
// Upload model normal matrix (if locations available) |
|
|
|
if (material.shader.locs[SHADER_LOC_MATRIX_NORMAL] != -1) rlSetUniformMatrix(material.shader.locs[SHADER_LOC_MATRIX_NORMAL], MatrixTranspose(MatrixInvert(matModelView))); |
|
|
|
if (material.shader.locs[SHADER_LOC_MATRIX_NORMAL] != -1) rlSetUniformMatrix(material.shader.locs[SHADER_LOC_MATRIX_NORMAL], MatrixTranspose(MatrixInvert(matModel))); |
|
|
|
//----------------------------------------------------- |
|
|
|
|
|
|
|
// Bind active texture maps (if available) |
|
|
@ -1161,17 +1164,17 @@ void DrawMeshInstanced(Mesh mesh, Material material, Matrix *transforms, int ins |
|
|
|
for (int eye = 0; eye < eyesCount; eye++) |
|
|
|
{ |
|
|
|
// Calculate model-view-projection matrix (MVP) |
|
|
|
Matrix matMVP = MatrixIdentity(); |
|
|
|
if (eyesCount == 1) matMVP = MatrixMultiply(matModelView, matProjection); |
|
|
|
Matrix matModelViewProjection = MatrixIdentity(); |
|
|
|
if (eyesCount == 1) matModelViewProjection = MatrixMultiply(matModelView, matProjection); |
|
|
|
else |
|
|
|
{ |
|
|
|
// Setup current eye viewport (half screen width) |
|
|
|
rlViewport(eye*rlGetFramebufferWidth()/2, 0, rlGetFramebufferWidth()/2, rlGetFramebufferHeight()); |
|
|
|
matMVP = MatrixMultiply(MatrixMultiply(matModelView, rlGetMatrixViewOffsetStereo(eye)), rlGetMatrixProjectionStereo(eye)); |
|
|
|
matModelViewProjection = MatrixMultiply(MatrixMultiply(matModelView, rlGetMatrixViewOffsetStereo(eye)), rlGetMatrixProjectionStereo(eye)); |
|
|
|
} |
|
|
|
|
|
|
|
// Send combined model-view-projection matrix to shader |
|
|
|
rlSetUniformMatrix(material.shader.locs[SHADER_LOC_MATRIX_MVP], matMVP); |
|
|
|
rlSetUniformMatrix(material.shader.locs[SHADER_LOC_MATRIX_MVP], matModelViewProjection); |
|
|
|
|
|
|
|
if (instancing) // Draw mesh instanced |
|
|
|
{ |
|
|
|