Loading services/surfaceflinger/Layer.cpp +20 −21 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ Layer::Layer(SurfaceFlinger* flinger, const sp<Client>& client, mFrameLatencyNeeded(false), mFiltering(false), mNeedsFiltering(false), mMesh(Mesh::TRIANGLE_FAN, 4, 2, 2), mSecure(false), mProtectedByApp(false), mHasSurface(false), Loading Loading @@ -494,9 +495,8 @@ void Layer::onDraw(const sp<const DisplayDevice>& hw, const Region& clip) const void Layer::clearWithOpenGL(const sp<const DisplayDevice>& hw, const Region& clip, float red, float green, float blue, float alpha) const { Mesh mesh(Mesh::TRIANGLE_FAN, 4, 2); computeGeometry(hw, mesh); mFlinger->getRenderEngine().fillWithColor(mesh, red, green, blue, alpha); computeGeometry(hw, mMesh); mFlinger->getRenderEngine().fillWithColor(mMesh, red, green, blue, alpha); } void Layer::clearWithOpenGL( Loading @@ -509,8 +509,7 @@ void Layer::drawWithOpenGL( const uint32_t fbHeight = hw->getHeight(); const State& s(getDrawingState()); Mesh mesh(Mesh::TRIANGLE_FAN, 4, 2, 2); computeGeometry(hw, mesh); computeGeometry(hw, mMesh); /* * NOTE: the way we compute the texture coordinates here produces Loading @@ -535,20 +534,19 @@ void Layer::drawWithOpenGL( // TODO: we probably want to generate the texture coords with the mesh // here we assume that we only have 4 vertices size_t stride = mesh.getStride(); float* base = mesh.getTexCoords(); base[stride*0 + 0] = left; base[stride*0 + 1] = 1.0f - top; base[stride*1 + 0] = left; base[stride*1 + 1] = 1.0f - bottom; base[stride*2 + 0] = right; base[stride*2 + 1] = 1.0f - bottom; base[stride*3 + 0] = right; base[stride*3 + 1] = 1.0f - top; Mesh::VertexArray texCoords(mMesh.getTexCoordArray()); texCoords[0].s = left; texCoords[0].t = 1.0f - top; texCoords[1].s = left; texCoords[1].t = 1.0f - bottom; texCoords[2].s = right; texCoords[2].t = 1.0f - bottom; texCoords[3].s = right; texCoords[3].t = 1.0f - top; RenderEngine& engine(mFlinger->getRenderEngine()); engine.setupLayerBlending(mPremultipliedAlpha, isOpaque(), s.alpha); engine.drawMesh(mesh); engine.drawMesh(mMesh); engine.disableBlending(); } Loading Loading @@ -596,12 +594,13 @@ void Layer::computeGeometry(const sp<const DisplayDevice>& hw, Mesh& mesh) const // subtract the transparent region and snap to the bounds win = reduce(win, s.activeTransparentRegion); tr.transform(mesh[0], win.left, win.top); tr.transform(mesh[1], win.left, win.bottom); tr.transform(mesh[2], win.right, win.bottom); tr.transform(mesh[3], win.right, win.top); Mesh::VertexArray position(mesh.getPositionArray()); tr.transform(position[0], win.left, win.top); tr.transform(position[1], win.left, win.bottom); tr.transform(position[2], win.right, win.bottom); tr.transform(position[3], win.right, win.top); for (size_t i=0 ; i<4 ; i++) { mesh[i][1] = hw_h - mesh[i][1]; position[i].y = hw_h - position[i].y; } } Loading services/surfaceflinger/Layer.h +2 −0 Original line number Diff line number Diff line Loading @@ -357,6 +357,8 @@ private: bool mFiltering; // Whether filtering is needed b/c of the drawingstate bool mNeedsFiltering; // The mesh used to draw the layer in GLES composition mode mutable Mesh mMesh; // page-flip thread (currently main thread) bool mSecure; // no screenshots Loading services/surfaceflinger/RenderEngine/GLES11RenderEngine.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -192,7 +192,7 @@ void GLES11RenderEngine::fillWithColor(const Mesh& mesh, float r, float g, float glVertexPointer(mesh.getVertexSize(), GL_FLOAT, mesh.getByteStride(), mesh.getVertices()); mesh.getPositions()); glDrawArrays(mesh.getPrimitive(), 0, mesh.getVertexCount()); } Loading @@ -209,7 +209,7 @@ void GLES11RenderEngine::drawMesh(const Mesh& mesh) { glVertexPointer(mesh.getVertexSize(), GL_FLOAT, mesh.getByteStride(), mesh.getVertices()); mesh.getPositions()); glDrawArrays(mesh.getPrimitive(), 0, mesh.getVertexCount()); Loading services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -168,7 +168,7 @@ void GLES20RenderEngine::fillWithColor(const Mesh& mesh, float r, float g, float mesh.getVertexSize(), GL_FLOAT, GL_FALSE, mesh.getByteStride(), mesh.getVertices()); mesh.getPositions()); glDrawArrays(mesh.getPrimitive(), 0, mesh.getVertexCount()); } Loading @@ -190,7 +190,7 @@ void GLES20RenderEngine::drawMesh(const Mesh& mesh) { mesh.getVertexSize(), GL_FLOAT, GL_FALSE, mesh.getByteStride(), mesh.getVertices()); mesh.getPositions()); glDrawArrays(mesh.getPrimitive(), 0, mesh.getVertexCount()); Loading services/surfaceflinger/RenderEngine/Mesh.cpp +2 −10 Original line number Diff line number Diff line Loading @@ -30,23 +30,15 @@ Mesh::~Mesh() { delete [] mVertices; } float const* Mesh::operator[](size_t index) const { return &mVertices[index * mStride]; } float* Mesh::operator[](size_t index) { return &mVertices[index * mStride]; } Mesh::Primitive Mesh::getPrimitive() const { return mPrimitive; } float const* Mesh::getVertices() const { float const* Mesh::getPositions() const { return mVertices; } float* Mesh::getVertices() { float* Mesh::getPositions() { return mVertices; } Loading Loading
services/surfaceflinger/Layer.cpp +20 −21 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ Layer::Layer(SurfaceFlinger* flinger, const sp<Client>& client, mFrameLatencyNeeded(false), mFiltering(false), mNeedsFiltering(false), mMesh(Mesh::TRIANGLE_FAN, 4, 2, 2), mSecure(false), mProtectedByApp(false), mHasSurface(false), Loading Loading @@ -494,9 +495,8 @@ void Layer::onDraw(const sp<const DisplayDevice>& hw, const Region& clip) const void Layer::clearWithOpenGL(const sp<const DisplayDevice>& hw, const Region& clip, float red, float green, float blue, float alpha) const { Mesh mesh(Mesh::TRIANGLE_FAN, 4, 2); computeGeometry(hw, mesh); mFlinger->getRenderEngine().fillWithColor(mesh, red, green, blue, alpha); computeGeometry(hw, mMesh); mFlinger->getRenderEngine().fillWithColor(mMesh, red, green, blue, alpha); } void Layer::clearWithOpenGL( Loading @@ -509,8 +509,7 @@ void Layer::drawWithOpenGL( const uint32_t fbHeight = hw->getHeight(); const State& s(getDrawingState()); Mesh mesh(Mesh::TRIANGLE_FAN, 4, 2, 2); computeGeometry(hw, mesh); computeGeometry(hw, mMesh); /* * NOTE: the way we compute the texture coordinates here produces Loading @@ -535,20 +534,19 @@ void Layer::drawWithOpenGL( // TODO: we probably want to generate the texture coords with the mesh // here we assume that we only have 4 vertices size_t stride = mesh.getStride(); float* base = mesh.getTexCoords(); base[stride*0 + 0] = left; base[stride*0 + 1] = 1.0f - top; base[stride*1 + 0] = left; base[stride*1 + 1] = 1.0f - bottom; base[stride*2 + 0] = right; base[stride*2 + 1] = 1.0f - bottom; base[stride*3 + 0] = right; base[stride*3 + 1] = 1.0f - top; Mesh::VertexArray texCoords(mMesh.getTexCoordArray()); texCoords[0].s = left; texCoords[0].t = 1.0f - top; texCoords[1].s = left; texCoords[1].t = 1.0f - bottom; texCoords[2].s = right; texCoords[2].t = 1.0f - bottom; texCoords[3].s = right; texCoords[3].t = 1.0f - top; RenderEngine& engine(mFlinger->getRenderEngine()); engine.setupLayerBlending(mPremultipliedAlpha, isOpaque(), s.alpha); engine.drawMesh(mesh); engine.drawMesh(mMesh); engine.disableBlending(); } Loading Loading @@ -596,12 +594,13 @@ void Layer::computeGeometry(const sp<const DisplayDevice>& hw, Mesh& mesh) const // subtract the transparent region and snap to the bounds win = reduce(win, s.activeTransparentRegion); tr.transform(mesh[0], win.left, win.top); tr.transform(mesh[1], win.left, win.bottom); tr.transform(mesh[2], win.right, win.bottom); tr.transform(mesh[3], win.right, win.top); Mesh::VertexArray position(mesh.getPositionArray()); tr.transform(position[0], win.left, win.top); tr.transform(position[1], win.left, win.bottom); tr.transform(position[2], win.right, win.bottom); tr.transform(position[3], win.right, win.top); for (size_t i=0 ; i<4 ; i++) { mesh[i][1] = hw_h - mesh[i][1]; position[i].y = hw_h - position[i].y; } } Loading
services/surfaceflinger/Layer.h +2 −0 Original line number Diff line number Diff line Loading @@ -357,6 +357,8 @@ private: bool mFiltering; // Whether filtering is needed b/c of the drawingstate bool mNeedsFiltering; // The mesh used to draw the layer in GLES composition mode mutable Mesh mMesh; // page-flip thread (currently main thread) bool mSecure; // no screenshots Loading
services/surfaceflinger/RenderEngine/GLES11RenderEngine.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -192,7 +192,7 @@ void GLES11RenderEngine::fillWithColor(const Mesh& mesh, float r, float g, float glVertexPointer(mesh.getVertexSize(), GL_FLOAT, mesh.getByteStride(), mesh.getVertices()); mesh.getPositions()); glDrawArrays(mesh.getPrimitive(), 0, mesh.getVertexCount()); } Loading @@ -209,7 +209,7 @@ void GLES11RenderEngine::drawMesh(const Mesh& mesh) { glVertexPointer(mesh.getVertexSize(), GL_FLOAT, mesh.getByteStride(), mesh.getVertices()); mesh.getPositions()); glDrawArrays(mesh.getPrimitive(), 0, mesh.getVertexCount()); Loading
services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -168,7 +168,7 @@ void GLES20RenderEngine::fillWithColor(const Mesh& mesh, float r, float g, float mesh.getVertexSize(), GL_FLOAT, GL_FALSE, mesh.getByteStride(), mesh.getVertices()); mesh.getPositions()); glDrawArrays(mesh.getPrimitive(), 0, mesh.getVertexCount()); } Loading @@ -190,7 +190,7 @@ void GLES20RenderEngine::drawMesh(const Mesh& mesh) { mesh.getVertexSize(), GL_FLOAT, GL_FALSE, mesh.getByteStride(), mesh.getVertices()); mesh.getPositions()); glDrawArrays(mesh.getPrimitive(), 0, mesh.getVertexCount()); Loading
services/surfaceflinger/RenderEngine/Mesh.cpp +2 −10 Original line number Diff line number Diff line Loading @@ -30,23 +30,15 @@ Mesh::~Mesh() { delete [] mVertices; } float const* Mesh::operator[](size_t index) const { return &mVertices[index * mStride]; } float* Mesh::operator[](size_t index) { return &mVertices[index * mStride]; } Mesh::Primitive Mesh::getPrimitive() const { return mPrimitive; } float const* Mesh::getVertices() const { float const* Mesh::getPositions() const { return mVertices; } float* Mesh::getVertices() { float* Mesh::getPositions() { return mVertices; } Loading