Store GrGLSLFragmentProcessor arrays in std::vector
Bug: b/180759848
Bug: skia:11358
Change-Id: I5fd5eac4ac5bd70ea2c86c353152e5d1f0bc4c4d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/373777
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.cpp b/src/gpu/glsl/GrGLSLProgramBuilder.cpp
index 91e691d..ccbb093 100644
--- a/src/gpu/glsl/GrGLSLProgramBuilder.cpp
+++ b/src/gpu/glsl/GrGLSLProgramBuilder.cpp
@@ -37,6 +37,8 @@
, fXferProcessor(nullptr)
, fNumFragmentSamplers(0) {}
+GrGLSLProgramBuilder::~GrGLSLProgramBuilder() = default;
+
void GrGLSLProgramBuilder::addFeature(GrShaderFlags shaders,
uint32_t featureBit,
const char* extensionName) {
@@ -132,13 +134,17 @@
void GrGLSLProgramBuilder::emitAndInstallFragProcs(SkString* color, SkString* coverage) {
int transformedCoordVarsIdx = 0;
int fpCount = this->pipeline().numFragmentProcessors();
- fFragmentProcessors = std::make_unique<std::unique_ptr<GrGLSLFragmentProcessor>[]>(fpCount);
+ SkASSERT(fFPImpls.empty());
+ fFPImpls.reserve(fpCount);
for (int i = 0; i < fpCount; ++i) {
SkString* inOut = this->pipeline().isColorFragmentProcessor(i) ? color : coverage;
SkString output;
const GrFragmentProcessor& fp = this->pipeline().getFragmentProcessor(i);
- fFragmentProcessors[i] = fp.makeProgramImpl();
- output = this->emitFragProc(fp, *fFragmentProcessors[i], transformedCoordVarsIdx, *inOut,
+ fFPImpls.push_back(fp.makeProgramImpl());
+ output = this->emitFragProc(fp,
+ *fFPImpls.back(),
+ transformedCoordVarsIdx,
+ *inOut,
output);
for (const auto& subFP : GrFragmentProcessor::FPRange(fp)) {
transformedCoordVarsIdx += subFP.numVaryingCoordsUsed();