Loading libs/hwui/Mesh.h +19 −6 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <GrDirectContext.h> #include <SkMesh.h> #include <include/gpu/ganesh/SkMeshGanesh.h> #include <jni.h> #include <log/log.h> Loading Loading @@ -143,14 +144,26 @@ public: } if (mIsDirty || genId != mGenerationId) { auto vb = SkMesh::MakeVertexBuffer( context, reinterpret_cast<const void*>(mVertexBufferData.data()), auto vertexData = reinterpret_cast<const void*>(mVertexBufferData.data()); #ifdef __ANDROID__ auto vb = SkMeshes::MakeVertexBuffer(context, vertexData, mVertexBufferData.size()); #else auto vb = SkMeshes::MakeVertexBuffer(vertexData, mVertexBufferData.size()); #endif auto meshMode = SkMesh::Mode(mMode); if (!mIndexBufferData.empty()) { auto ib = SkMesh::MakeIndexBuffer( context, reinterpret_cast<const void*>(mIndexBufferData.data()), auto indexData = reinterpret_cast<const void*>(mIndexBufferData.data()); #ifdef __ANDROID__ auto ib = SkMeshes::MakeIndexBuffer(context, indexData, mIndexBufferData.size()); #else auto ib = SkMeshes::MakeIndexBuffer(indexData, mIndexBufferData.size()); #endif mMesh = SkMesh::MakeIndexed(mMeshSpec, meshMode, vb, mVertexCount, mVertexOffset, ib, mIndexCount, mIndexOffset, mBuilder->fUniforms, mBounds) Loading libs/hwui/RecordingCanvas.cpp +8 −2 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ #include "SkImageFilter.h" #include "SkImageInfo.h" #include "SkLatticeIter.h" #include "SkMesh.h" #include "SkPaint.h" #include "SkPicture.h" #include "SkRRect.h" Loading @@ -49,6 +50,7 @@ #include "effects/GainmapRenderer.h" #include "include/gpu/GpuTypes.h" // from Skia #include "include/gpu/GrDirectContext.h" #include "include/gpu/ganesh/SkMeshGanesh.h" #include "pipeline/skia/AnimatedDrawables.h" #include "pipeline/skia/FunctorDrawable.h" #ifdef __ANDROID__ Loading Loading @@ -527,12 +529,13 @@ struct DrawSkMesh final : Op { mutable bool isGpuBased; mutable GrDirectContext::DirectContextID contextId; void draw(SkCanvas* c, const SkMatrix&) const { #ifdef __ANDROID__ GrDirectContext* directContext = c->recordingContext()->asDirectContext(); GrDirectContext::DirectContextID id = directContext->directContextID(); if (!isGpuBased || contextId != id) { sk_sp<SkMesh::VertexBuffer> vb = SkMesh::CopyVertexBuffer(directContext, cpuMesh.refVertexBuffer()); SkMeshes::CopyVertexBuffer(directContext, cpuMesh.refVertexBuffer()); if (!cpuMesh.indexBuffer()) { gpuMesh = SkMesh::Make(cpuMesh.refSpec(), cpuMesh.mode(), vb, cpuMesh.vertexCount(), cpuMesh.vertexOffset(), cpuMesh.refUniforms(), Loading @@ -540,7 +543,7 @@ struct DrawSkMesh final : Op { .mesh; } else { sk_sp<SkMesh::IndexBuffer> ib = SkMesh::CopyIndexBuffer(directContext, cpuMesh.refIndexBuffer()); SkMeshes::CopyIndexBuffer(directContext, cpuMesh.refIndexBuffer()); gpuMesh = SkMesh::MakeIndexed(cpuMesh.refSpec(), cpuMesh.mode(), vb, cpuMesh.vertexCount(), cpuMesh.vertexOffset(), ib, cpuMesh.indexCount(), cpuMesh.indexOffset(), Loading @@ -553,6 +556,9 @@ struct DrawSkMesh final : Op { } c->drawMesh(gpuMesh, blender, paint); #else c->drawMesh(cpuMesh, blender, paint); #endif } }; Loading Loading
libs/hwui/Mesh.h +19 −6 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <GrDirectContext.h> #include <SkMesh.h> #include <include/gpu/ganesh/SkMeshGanesh.h> #include <jni.h> #include <log/log.h> Loading Loading @@ -143,14 +144,26 @@ public: } if (mIsDirty || genId != mGenerationId) { auto vb = SkMesh::MakeVertexBuffer( context, reinterpret_cast<const void*>(mVertexBufferData.data()), auto vertexData = reinterpret_cast<const void*>(mVertexBufferData.data()); #ifdef __ANDROID__ auto vb = SkMeshes::MakeVertexBuffer(context, vertexData, mVertexBufferData.size()); #else auto vb = SkMeshes::MakeVertexBuffer(vertexData, mVertexBufferData.size()); #endif auto meshMode = SkMesh::Mode(mMode); if (!mIndexBufferData.empty()) { auto ib = SkMesh::MakeIndexBuffer( context, reinterpret_cast<const void*>(mIndexBufferData.data()), auto indexData = reinterpret_cast<const void*>(mIndexBufferData.data()); #ifdef __ANDROID__ auto ib = SkMeshes::MakeIndexBuffer(context, indexData, mIndexBufferData.size()); #else auto ib = SkMeshes::MakeIndexBuffer(indexData, mIndexBufferData.size()); #endif mMesh = SkMesh::MakeIndexed(mMeshSpec, meshMode, vb, mVertexCount, mVertexOffset, ib, mIndexCount, mIndexOffset, mBuilder->fUniforms, mBounds) Loading
libs/hwui/RecordingCanvas.cpp +8 −2 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ #include "SkImageFilter.h" #include "SkImageInfo.h" #include "SkLatticeIter.h" #include "SkMesh.h" #include "SkPaint.h" #include "SkPicture.h" #include "SkRRect.h" Loading @@ -49,6 +50,7 @@ #include "effects/GainmapRenderer.h" #include "include/gpu/GpuTypes.h" // from Skia #include "include/gpu/GrDirectContext.h" #include "include/gpu/ganesh/SkMeshGanesh.h" #include "pipeline/skia/AnimatedDrawables.h" #include "pipeline/skia/FunctorDrawable.h" #ifdef __ANDROID__ Loading Loading @@ -527,12 +529,13 @@ struct DrawSkMesh final : Op { mutable bool isGpuBased; mutable GrDirectContext::DirectContextID contextId; void draw(SkCanvas* c, const SkMatrix&) const { #ifdef __ANDROID__ GrDirectContext* directContext = c->recordingContext()->asDirectContext(); GrDirectContext::DirectContextID id = directContext->directContextID(); if (!isGpuBased || contextId != id) { sk_sp<SkMesh::VertexBuffer> vb = SkMesh::CopyVertexBuffer(directContext, cpuMesh.refVertexBuffer()); SkMeshes::CopyVertexBuffer(directContext, cpuMesh.refVertexBuffer()); if (!cpuMesh.indexBuffer()) { gpuMesh = SkMesh::Make(cpuMesh.refSpec(), cpuMesh.mode(), vb, cpuMesh.vertexCount(), cpuMesh.vertexOffset(), cpuMesh.refUniforms(), Loading @@ -540,7 +543,7 @@ struct DrawSkMesh final : Op { .mesh; } else { sk_sp<SkMesh::IndexBuffer> ib = SkMesh::CopyIndexBuffer(directContext, cpuMesh.refIndexBuffer()); SkMeshes::CopyIndexBuffer(directContext, cpuMesh.refIndexBuffer()); gpuMesh = SkMesh::MakeIndexed(cpuMesh.refSpec(), cpuMesh.mode(), vb, cpuMesh.vertexCount(), cpuMesh.vertexOffset(), ib, cpuMesh.indexCount(), cpuMesh.indexOffset(), Loading @@ -553,6 +556,9 @@ struct DrawSkMesh final : Op { } c->drawMesh(gpuMesh, blender, paint); #else c->drawMesh(cpuMesh, blender, paint); #endif } }; Loading