aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkBitmapProcShader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/SkBitmapProcShader.cpp')
-rw-r--r--src/core/SkBitmapProcShader.cpp26
1 files changed, 10 insertions, 16 deletions
diff --git a/src/core/SkBitmapProcShader.cpp b/src/core/SkBitmapProcShader.cpp
index 11deac4aed..8c648b6051 100644
--- a/src/core/SkBitmapProcShader.cpp
+++ b/src/core/SkBitmapProcShader.cpp
@@ -6,6 +6,8 @@
*/
#include "SkBitmapProcShader.h"
+
+#include "SkArenaAlloc.h"
#include "SkBitmapProcState.h"
#include "SkBitmapProvider.h"
#include "SkXfermodePriv.h"
@@ -33,10 +35,6 @@ public:
}
}
- ~BitmapProcInfoContext() override {
- fInfo->~SkBitmapProcInfo();
- }
-
uint32_t getFlags() const override { return fFlags; }
private:
@@ -201,10 +199,10 @@ size_t SkBitmapProcLegacyShader::ContextSize(const ContextRec& rec, const SkImag
return s;
}
-SkShader::Context* SkBitmapProcLegacyShader::MakeContext(const SkShader& shader,
- TileMode tmx, TileMode tmy,
- const SkBitmapProvider& provider,
- const ContextRec& rec, void* storage) {
+SkShader::Context* SkBitmapProcLegacyShader::MakeContext(
+ const SkShader& shader, TileMode tmx, TileMode tmy,
+ const SkBitmapProvider& provider, const ContextRec& rec, SkArenaAlloc* alloc)
+{
SkMatrix totalInverse;
// Do this first, so we know the matrix can be inverted.
if (!shader.computeTotalInverse(rec, &totalInverse)) {
@@ -215,21 +213,17 @@ SkShader::Context* SkBitmapProcLegacyShader::MakeContext(const SkShader& shader,
bool useLinearPipeline = choose_linear_pipeline(rec, provider.info());
if (useLinearPipeline) {
- void* infoStorage = (char*)storage + sizeof(LinearPipelineContext);
- SkBitmapProcInfo* info = new (infoStorage) SkBitmapProcInfo(provider, tmx, tmy);
+ SkBitmapProcInfo* info = alloc->make<SkBitmapProcInfo>(provider, tmx, tmy);
if (!info->init(totalInverse, *rec.fPaint)) {
- info->~SkBitmapProcInfo();
return nullptr;
}
- return new (storage) LinearPipelineContext(shader, rec, info);
+ return alloc->make<LinearPipelineContext>(shader, rec, info);
} else {
- void* stateStorage = (char*)storage + sizeof(BitmapProcShaderContext);
- SkBitmapProcState* state = new (stateStorage) SkBitmapProcState(provider, tmx, tmy);
+ SkBitmapProcState* state = alloc->make<SkBitmapProcState>(provider, tmx, tmy);
if (!state->setup(totalInverse, *rec.fPaint)) {
- state->~SkBitmapProcState();
return nullptr;
}
- return new (storage) BitmapProcShaderContext(shader, rec, state);
+ return alloc->make<BitmapProcShaderContext>(shader, rec, state);
}
}