Loading libs/hwui/FloatColor.h +9 −0 Original line number Diff line number Diff line Loading @@ -18,10 +18,19 @@ #include "utils/Macros.h" #include <stdint.h> namespace android { namespace uirenderer { struct FloatColor { void set(uint32_t color) { a = ((color >> 24) & 0xff) / 255.0f; r = a * ((color >> 16) & 0xff) / 255.0f; g = a * ((color >> 8) & 0xff) / 255.0f; b = a * ((color ) & 0xff) / 255.0f; } float r; float g; float b; Loading libs/hwui/Glop.h +5 −5 Original line number Diff line number Diff line Loading @@ -19,7 +19,9 @@ #include "FloatColor.h" #include "Matrix.h" #include "Program.h" #include "Rect.h" #include "SkiaShader.h" #include "utils/Macros.h" #include <GLES2/gl2.h> Loading @@ -31,6 +33,7 @@ namespace uirenderer { class Program; class RoundRectClipState; class Texture; /* * Enumerates optional vertex attributes Loading Loading @@ -89,11 +92,6 @@ struct Glop { bool colorEnabled; FloatColor color; /* TODO union shader { //... }; TODO */ ProgramDescription::ColorFilterMode filterMode; union Filter { struct Matrix { Loading @@ -102,6 +100,8 @@ struct Glop { } matrix; FloatColor color; } filter; SkiaShaderData skiaShaderData; } fill; struct Transform { Loading libs/hwui/GlopBuilder.cpp +8 −7 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ namespace uirenderer { LOG_ALWAYS_FATAL_IF((mStageFlags & (requiredFlags)) != (requiredFlags), \ "not prepared for current stage") static void setUnitQuadTextureCoords(Rect uvs, TextureVertex* quadVertex) {; static void setUnitQuadTextureCoords(Rect uvs, TextureVertex* quadVertex) { TextureVertex::setUV(quadVertex++, uvs.left, uvs.top); TextureVertex::setUV(quadVertex++, uvs.right, uvs.top); TextureVertex::setUV(quadVertex++, uvs.left, uvs.bottom); Loading @@ -49,6 +49,7 @@ static void setUnitQuadTextureCoords(Rect uvs, TextureVertex* quadVertex) {; GlopBuilder::GlopBuilder(RenderState& renderState, Caches& caches, Glop* outGlop) : mRenderState(renderState) , mCaches(caches) , mShader(nullptr) , mOutGlop(outGlop) { mStageFlags = kInitialStage; } Loading Loading @@ -192,12 +193,7 @@ void GlopBuilder::setFill(int color, float alphaScale, SkXfermode::Mode mode, } } } if (shader) { SkiaShader::describe(&mCaches, mDescription, mCaches.extensions(), *shader); // TODO: store shader data LOG_ALWAYS_FATAL("shaders not yet supported"); } mShader = shader; // shader resolved in ::build() if (colorFilter) { SkColor color; Loading Loading @@ -394,6 +390,11 @@ GlopBuilder& GlopBuilder::setRoundRectClipState(const RoundRectClipState* roundR void GlopBuilder::build() { REQUIRE_STAGES(kAllStages); // serialize shader info into ShaderData GLuint textureUnit = mOutGlop->fill.texture ? 1 : 0; SkiaShader::store(mCaches, mShader, mOutGlop->transform.modelView, &textureUnit, &mDescription, &(mOutGlop->fill.skiaShaderData)); mOutGlop->fill.program = mCaches.programCache.get(mDescription); mOutGlop->transform.canvas.mapRect(mOutGlop->bounds); Loading libs/hwui/GlopBuilder.h +3 −1 Original line number Diff line number Diff line Loading @@ -21,16 +21,17 @@ #include "utils/Macros.h" class SkPaint; class SkShader; namespace android { namespace uirenderer { class Caches; struct Glop; class Matrix4; class RenderState; class Texture; class VertexBuffer; struct Glop; class GlopBuilder { PREVENT_COPY_AND_ASSIGN(GlopBuilder); Loading Loading @@ -74,6 +75,7 @@ private: ProgramDescription mDescription; RenderState& mRenderState; Caches& mCaches; const SkShader* mShader; Glop* mOutGlop; }; Loading libs/hwui/OpenGLRenderer.cpp +7 −21 Original line number Diff line number Diff line Loading @@ -62,20 +62,6 @@ namespace android { namespace uirenderer { /////////////////////////////////////////////////////////////////////////////// // Globals /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// // Functions /////////////////////////////////////////////////////////////////////////////// template<typename T> static inline T min(T a, T b) { return a < b ? a : b; } /////////////////////////////////////////////////////////////////////////////// // Constructors/destructor /////////////////////////////////////////////////////////////////////////////// Loading Loading @@ -1199,7 +1185,7 @@ void OpenGLRenderer::dirtyLayerUnchecked(Rect& bounds, Region* region) { void OpenGLRenderer::issueIndexedQuadDraw(Vertex* mesh, GLsizei quadsCount) { GLsizei elementsCount = quadsCount * 6; while (elementsCount > 0) { GLsizei drawCount = min(elementsCount, (GLsizei) kMaxNumberOfQuads * 6); GLsizei drawCount = MathUtils::min(elementsCount, (GLsizei) kMaxNumberOfQuads * 6); setupDrawIndexedVertices(&mesh[0].x); glDrawElements(GL_TRIANGLES, drawCount, GL_UNSIGNED_SHORT, nullptr); Loading Loading @@ -1970,7 +1956,7 @@ void OpenGLRenderer::drawRenderNode(RenderNode* renderNode, Rect& dirty, int32_t } void OpenGLRenderer::drawAlphaBitmap(Texture* texture, const SkPaint* paint) { if (USE_GLOPS && (!paint || !paint->getShader())) { if (USE_GLOPS) { Glop glop; GlopBuilder aBuilder(mRenderState, mCaches, &glop); aBuilder.setMeshTexturedUnitQuad(texture->uvMapper, true) Loading Loading @@ -2358,7 +2344,7 @@ void OpenGLRenderer::drawVertexBuffer(float translateX, float translateY, return; } if (USE_GLOPS && !paint->getShader()) { if (USE_GLOPS) { Glop glop; GlopBuilder aBuilder(mRenderState, mCaches, &glop); bool fudgeOffset = displayFlags & kVertexBuffer_Offset; Loading Loading @@ -3052,7 +3038,7 @@ void OpenGLRenderer::drawLayer(Layer* layer, float x, float y) { GLsizei elementsCount = layer->meshElementCount; while (elementsCount > 0) { GLsizei drawCount = min(elementsCount, (GLsizei) kMaxNumberOfQuads * 6); GLsizei drawCount = MathUtils::min(elementsCount, (GLsizei) kMaxNumberOfQuads * 6); setupDrawMeshIndices(&mesh[0].x, &mesh[0].u); DRAW_DOUBLE_STENCIL_IF(!layer->hasDrawnSinceUpdate, Loading Loading @@ -3113,7 +3099,7 @@ void OpenGLRenderer::drawPathTexture(PathTexture* texture, return; } if (USE_GLOPS && !paint->getShader()) { if (USE_GLOPS) { Glop glop; GlopBuilder aBuilder(mRenderState, mCaches, &glop); aBuilder.setMeshTexturedUnitQuad(nullptr, true) Loading Loading @@ -3274,7 +3260,7 @@ void OpenGLRenderer::drawColorRects(const float* rects, int count, const SkPaint return; } if (USE_GLOPS && !paint->getShader()) { if (USE_GLOPS) { const Matrix4& transform = ignoreTransform ? Matrix4::identity() : *currentTransform(); Glop glop; GlopBuilder aBuilder(mRenderState, mCaches, &glop); Loading Loading @@ -3320,7 +3306,7 @@ void OpenGLRenderer::drawColorRects(const float* rects, int count, const SkPaint void OpenGLRenderer::drawColorRect(float left, float top, float right, float bottom, const SkPaint* paint, bool ignoreTransform) { if (USE_GLOPS && !paint->getShader()) { if (USE_GLOPS) { const Matrix4& transform = ignoreTransform ? Matrix4::identity() : *currentTransform(); Glop glop; GlopBuilder aBuilder(mRenderState, mCaches, &glop); Loading Loading
libs/hwui/FloatColor.h +9 −0 Original line number Diff line number Diff line Loading @@ -18,10 +18,19 @@ #include "utils/Macros.h" #include <stdint.h> namespace android { namespace uirenderer { struct FloatColor { void set(uint32_t color) { a = ((color >> 24) & 0xff) / 255.0f; r = a * ((color >> 16) & 0xff) / 255.0f; g = a * ((color >> 8) & 0xff) / 255.0f; b = a * ((color ) & 0xff) / 255.0f; } float r; float g; float b; Loading
libs/hwui/Glop.h +5 −5 Original line number Diff line number Diff line Loading @@ -19,7 +19,9 @@ #include "FloatColor.h" #include "Matrix.h" #include "Program.h" #include "Rect.h" #include "SkiaShader.h" #include "utils/Macros.h" #include <GLES2/gl2.h> Loading @@ -31,6 +33,7 @@ namespace uirenderer { class Program; class RoundRectClipState; class Texture; /* * Enumerates optional vertex attributes Loading Loading @@ -89,11 +92,6 @@ struct Glop { bool colorEnabled; FloatColor color; /* TODO union shader { //... }; TODO */ ProgramDescription::ColorFilterMode filterMode; union Filter { struct Matrix { Loading @@ -102,6 +100,8 @@ struct Glop { } matrix; FloatColor color; } filter; SkiaShaderData skiaShaderData; } fill; struct Transform { Loading
libs/hwui/GlopBuilder.cpp +8 −7 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ namespace uirenderer { LOG_ALWAYS_FATAL_IF((mStageFlags & (requiredFlags)) != (requiredFlags), \ "not prepared for current stage") static void setUnitQuadTextureCoords(Rect uvs, TextureVertex* quadVertex) {; static void setUnitQuadTextureCoords(Rect uvs, TextureVertex* quadVertex) { TextureVertex::setUV(quadVertex++, uvs.left, uvs.top); TextureVertex::setUV(quadVertex++, uvs.right, uvs.top); TextureVertex::setUV(quadVertex++, uvs.left, uvs.bottom); Loading @@ -49,6 +49,7 @@ static void setUnitQuadTextureCoords(Rect uvs, TextureVertex* quadVertex) {; GlopBuilder::GlopBuilder(RenderState& renderState, Caches& caches, Glop* outGlop) : mRenderState(renderState) , mCaches(caches) , mShader(nullptr) , mOutGlop(outGlop) { mStageFlags = kInitialStage; } Loading Loading @@ -192,12 +193,7 @@ void GlopBuilder::setFill(int color, float alphaScale, SkXfermode::Mode mode, } } } if (shader) { SkiaShader::describe(&mCaches, mDescription, mCaches.extensions(), *shader); // TODO: store shader data LOG_ALWAYS_FATAL("shaders not yet supported"); } mShader = shader; // shader resolved in ::build() if (colorFilter) { SkColor color; Loading Loading @@ -394,6 +390,11 @@ GlopBuilder& GlopBuilder::setRoundRectClipState(const RoundRectClipState* roundR void GlopBuilder::build() { REQUIRE_STAGES(kAllStages); // serialize shader info into ShaderData GLuint textureUnit = mOutGlop->fill.texture ? 1 : 0; SkiaShader::store(mCaches, mShader, mOutGlop->transform.modelView, &textureUnit, &mDescription, &(mOutGlop->fill.skiaShaderData)); mOutGlop->fill.program = mCaches.programCache.get(mDescription); mOutGlop->transform.canvas.mapRect(mOutGlop->bounds); Loading
libs/hwui/GlopBuilder.h +3 −1 Original line number Diff line number Diff line Loading @@ -21,16 +21,17 @@ #include "utils/Macros.h" class SkPaint; class SkShader; namespace android { namespace uirenderer { class Caches; struct Glop; class Matrix4; class RenderState; class Texture; class VertexBuffer; struct Glop; class GlopBuilder { PREVENT_COPY_AND_ASSIGN(GlopBuilder); Loading Loading @@ -74,6 +75,7 @@ private: ProgramDescription mDescription; RenderState& mRenderState; Caches& mCaches; const SkShader* mShader; Glop* mOutGlop; }; Loading
libs/hwui/OpenGLRenderer.cpp +7 −21 Original line number Diff line number Diff line Loading @@ -62,20 +62,6 @@ namespace android { namespace uirenderer { /////////////////////////////////////////////////////////////////////////////// // Globals /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// // Functions /////////////////////////////////////////////////////////////////////////////// template<typename T> static inline T min(T a, T b) { return a < b ? a : b; } /////////////////////////////////////////////////////////////////////////////// // Constructors/destructor /////////////////////////////////////////////////////////////////////////////// Loading Loading @@ -1199,7 +1185,7 @@ void OpenGLRenderer::dirtyLayerUnchecked(Rect& bounds, Region* region) { void OpenGLRenderer::issueIndexedQuadDraw(Vertex* mesh, GLsizei quadsCount) { GLsizei elementsCount = quadsCount * 6; while (elementsCount > 0) { GLsizei drawCount = min(elementsCount, (GLsizei) kMaxNumberOfQuads * 6); GLsizei drawCount = MathUtils::min(elementsCount, (GLsizei) kMaxNumberOfQuads * 6); setupDrawIndexedVertices(&mesh[0].x); glDrawElements(GL_TRIANGLES, drawCount, GL_UNSIGNED_SHORT, nullptr); Loading Loading @@ -1970,7 +1956,7 @@ void OpenGLRenderer::drawRenderNode(RenderNode* renderNode, Rect& dirty, int32_t } void OpenGLRenderer::drawAlphaBitmap(Texture* texture, const SkPaint* paint) { if (USE_GLOPS && (!paint || !paint->getShader())) { if (USE_GLOPS) { Glop glop; GlopBuilder aBuilder(mRenderState, mCaches, &glop); aBuilder.setMeshTexturedUnitQuad(texture->uvMapper, true) Loading Loading @@ -2358,7 +2344,7 @@ void OpenGLRenderer::drawVertexBuffer(float translateX, float translateY, return; } if (USE_GLOPS && !paint->getShader()) { if (USE_GLOPS) { Glop glop; GlopBuilder aBuilder(mRenderState, mCaches, &glop); bool fudgeOffset = displayFlags & kVertexBuffer_Offset; Loading Loading @@ -3052,7 +3038,7 @@ void OpenGLRenderer::drawLayer(Layer* layer, float x, float y) { GLsizei elementsCount = layer->meshElementCount; while (elementsCount > 0) { GLsizei drawCount = min(elementsCount, (GLsizei) kMaxNumberOfQuads * 6); GLsizei drawCount = MathUtils::min(elementsCount, (GLsizei) kMaxNumberOfQuads * 6); setupDrawMeshIndices(&mesh[0].x, &mesh[0].u); DRAW_DOUBLE_STENCIL_IF(!layer->hasDrawnSinceUpdate, Loading Loading @@ -3113,7 +3099,7 @@ void OpenGLRenderer::drawPathTexture(PathTexture* texture, return; } if (USE_GLOPS && !paint->getShader()) { if (USE_GLOPS) { Glop glop; GlopBuilder aBuilder(mRenderState, mCaches, &glop); aBuilder.setMeshTexturedUnitQuad(nullptr, true) Loading Loading @@ -3274,7 +3260,7 @@ void OpenGLRenderer::drawColorRects(const float* rects, int count, const SkPaint return; } if (USE_GLOPS && !paint->getShader()) { if (USE_GLOPS) { const Matrix4& transform = ignoreTransform ? Matrix4::identity() : *currentTransform(); Glop glop; GlopBuilder aBuilder(mRenderState, mCaches, &glop); Loading Loading @@ -3320,7 +3306,7 @@ void OpenGLRenderer::drawColorRects(const float* rects, int count, const SkPaint void OpenGLRenderer::drawColorRect(float left, float top, float right, float bottom, const SkPaint* paint, bool ignoreTransform) { if (USE_GLOPS && !paint->getShader()) { if (USE_GLOPS) { const Matrix4& transform = ignoreTransform ? Matrix4::identity() : *currentTransform(); Glop glop; GlopBuilder aBuilder(mRenderState, mCaches, &glop); Loading