Factory method for creating GrGLProgram
Review URL: http://codereview.appspot.com/6407049/
git-svn-id: http://skia.googlecode.com/svn/trunk@4646 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/gl/GrGpuGL_program.cpp b/src/gpu/gl/GrGpuGL_program.cpp
index 7f982e7..56a893d 100644
--- a/src/gpu/gl/GrGpuGL_program.cpp
+++ b/src/gpu/gl/GrGpuGL_program.cpp
@@ -20,13 +20,12 @@
, fGL(gl) {
}
-GrGpuGL::ProgramCache::~ProgramCache() {
- for (int i = 0; i < fCount; ++i) {
- GrGpuGL::DeleteProgram(fGL.interface(), fEntries[i].fProgram);
- }
-}
-
void GrGpuGL::ProgramCache::abandon() {
+ for (int i = 0; i < fCount; ++i) {
+ GrAssert(NULL != fEntries[i].fProgram.get());
+ fEntries[i].fProgram->abandon();
+ fEntries[i].fProgram.reset(NULL);
+ }
fCount = 0;
}
@@ -36,8 +35,8 @@
Entry* entry = fHashCache.find(newEntry.fKey);
if (NULL == entry) {
- newEntry.fProgram.reset(SkNEW(GrGLProgram));
- if (!newEntry.fProgram->genProgram(fGL, desc, stages)) {
+ newEntry.fProgram.reset(GrGLProgram::Create(fGL, desc, stages));
+ if (NULL == newEntry.fProgram.get()) {
return NULL;
}
if (fCount < kMaxEntries) {
@@ -52,7 +51,6 @@
}
}
fHashCache.remove(entry->fKey, entry);
- GrGpuGL::DeleteProgram(fGL.interface(), entry->fProgram);
}
*entry = newEntry;
fHashCache.insert(entry->fKey, entry);
@@ -69,19 +67,6 @@
return entry->fProgram;
}
-void GrGpuGL::DeleteProgram(const GrGLInterface* gl, GrGLProgram* program) {
- GR_GL_CALL(gl, DeleteShader(program->fVShaderID));
- if (program->fGShaderID) {
- GR_GL_CALL(gl, DeleteShader(program->fGShaderID));
- }
- GR_GL_CALL(gl, DeleteShader(program->fFShaderID));
- GR_GL_CALL(gl, DeleteProgram(program->fProgramID));
- GR_DEBUGCODE(program->fVShaderID = 0);
- GR_DEBUGCODE(program->fGShaderID = 0);
- GR_DEBUGCODE(program->fFShaderID = 0);
- GR_DEBUGCODE(program->fProgramID = 0);
-}
-
////////////////////////////////////////////////////////////////////////////////
void GrGpuGL::abandonResources(){