diff --git a/engine/src/flutter/impeller/entity/entity_renderer.mm b/engine/src/flutter/impeller/entity/entity_renderer.mm index aa4c60bbe1b..bd23b9fa3df 100644 --- a/engine/src/flutter/impeller/entity/entity_renderer.mm +++ b/engine/src/flutter/impeller/entity/entity_renderer.mm @@ -41,15 +41,13 @@ bool EntityRenderer::OnRender(RenderPass& pass) { shader::BoxVertexInfo::UniformBuffer uniforms; uniforms.color = Color::Blue(); - uniforms.mvp = Matrix::MakeOrthographic({800, 600}); + uniforms.mvp = + Matrix::MakeOrthographic({800, 600}).Scale({200.0, 200.0, 1.0}); VertexBufferBuilder vertex_builder; vertex_builder.AddVertices({ - {-0.5, 0.5, 1.0}, // - {0.5, 0.5, 1.0}, // - {0.5, -0.5, 1.0}, // - {0.5, -0.5, 1.0}, // - {-0.5, -0.5, 1.0}, // - {-0.5, 0.5, 1.0}, // + {0, 0.5, 0.0}, // + {0.5, -0.5, 0.0}, // + {-0.5, -0.5, 0.0}, // }); Command cmd; diff --git a/engine/src/flutter/impeller/geometry/matrix.cc b/engine/src/flutter/impeller/geometry/matrix.cc index b783df7955c..fd24147d849 100644 --- a/engine/src/flutter/impeller/geometry/matrix.cc +++ b/engine/src/flutter/impeller/geometry/matrix.cc @@ -95,20 +95,19 @@ Matrix Matrix::MakeOrthographic(Scalar left, Scalar rsl = right - left; Scalar tab = top + bottom; Scalar tsb = top - bottom; - Scalar fan = farZ + nearZ; + // Scalar fan = farZ + nearZ; Scalar fsn = farZ - nearZ; // clang-format off - return Matrix(2.0 / rsl, 0.0, 0.0, 0.0, - 0.0, 2.0 / tsb, 0.0, 0.0, - 0.0, 0.0, -2.0 / fsn, 0.0, - -ral / rsl, -tab / tsb, -fan / fsn, 1.0); + return Matrix(2.0 / rsl, 0.0, 0.0, 0.0, + 0.0, 2.0 / tsb, 0.0, 0.0, + 0.0, 0.0, -1.0 / fsn, 0.0, + -ral / rsl, -tab / tsb, -nearZ / fsn, 1.0); // clang-format on } Matrix Matrix::MakeOrthographic(const Size& size) { - return Matrix::MakeOrthographic(0, size.width, size.height, 0, -INT_MAX, - INT_MAX); + return Matrix::MakeOrthographic(0, size.width, size.height, 0, 0.0, 1.0); } Matrix Matrix::MakePerspective(Scalar fov, @@ -210,15 +209,6 @@ Matrix Matrix::Invert() const { tmp.m[12] * det, tmp.m[13] * det, tmp.m[14] * det, tmp.m[15] * det}; } -Matrix Matrix::Transpose() const { - return { - m[0], m[4], m[8], m[12], // - m[1], m[5], m[9], m[13], // - m[2], m[6], m[10], m[14], // - m[3], m[7], m[11], m[15], // - }; -} - Scalar Matrix::GetDeterminant() const { auto a00 = e[0][0]; auto a01 = e[0][1]; diff --git a/engine/src/flutter/impeller/geometry/matrix.h b/engine/src/flutter/impeller/geometry/matrix.h index 9156b211a6a..62dadf76b90 100644 --- a/engine/src/flutter/impeller/geometry/matrix.h +++ b/engine/src/flutter/impeller/geometry/matrix.h @@ -16,6 +16,18 @@ namespace impeller { +//------------------------------------------------------------------------------ +/// @brief A 4x4 matrix using column-major storage. +/// +/// Utility methods that need to make assumptions about normalized +/// device coordinates use the following convention: +/// * Left-handed coordinate system. Positive rotation is +/// clockwise about axis of rotation. +/// * Lower left corner is -1.0, -1.0. +/// * Upper left corner is 1.0, 1.0. +/// * Visible z-space is from 0.0 to 1.0. +/// * NOTE: This is not the same as OpenGL conventions! +/// * Center is at (0.0, 0.0, 0.5). struct Matrix { union { Scalar m[16]; @@ -226,7 +238,14 @@ struct Matrix { // clang-format on } - Matrix Transpose() const; + constexpr Matrix Transpose() const { + return { + m[0], m[4], m[8], m[12], // + m[1], m[5], m[9], m[13], // + m[2], m[6], m[10], m[14], // + m[3], m[7], m[11], m[15], // + }; + } Matrix Invert() const; diff --git a/engine/src/flutter/impeller/primitives/box.vert b/engine/src/flutter/impeller/primitives/box.vert index fef762838f7..c5bd284b526 100644 --- a/engine/src/flutter/impeller/primitives/box.vert +++ b/engine/src/flutter/impeller/primitives/box.vert @@ -11,6 +11,6 @@ in vec3 vertexPosition; out vec3 color; void main() { - gl_Position = vec4(vertexPosition, 1.0); + gl_Position = uniforms.mvp * vec4(vertexPosition, 1.0); color = uniforms.color; }