surfaceflinger: use Vulkan coordinate system
In Vulkan coordinate system, (0, 0) always maps to memory address 0.
In GL coordinate system, (0, 0) maps to the bottom-left corner. The
two agree when doing offscreen rendering. But when rendering to a
window, GL maps (0, 0) to memory address (winHeight-1)*rowStride,
because that is where the bottom-left pixel is.
Let's pick the simpler one for RenderEngine in preparation for
multiple backends. As a result, we don't need yswap when rendering
to offscreen buffers (it is hidden behind the RenderEngine API). It
also makes no sense to flip Y coordinate for both vertex postions
and the viewing volume.
Test: chrome, youtube, camera, screen rotation, screenshots, recents
Change-Id: I6d6317bac3de6f208700a67e518011362c600ced
diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp
index 6cfee3f..4da71cc 100644
--- a/services/surfaceflinger/BufferLayer.cpp
+++ b/services/surfaceflinger/BufferLayer.cpp
@@ -609,6 +609,7 @@
// TODO: we probably want to generate the texture coords with the mesh
// here we assume that we only have 4 vertices
renderengine::Mesh::VertexArray<vec2> texCoords(getBE().mMesh.getTexCoordArray<vec2>());
+ // flip texcoords vertically because BufferLayerConsumer expects them to be in GL convention
texCoords[0] = vec2(left, 1.0f - top);
texCoords[1] = vec2(left, 1.0f - bottom);
texCoords[2] = vec2(right, 1.0f - bottom);