mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-22 10:49:05 +02:00
Merge pull request #16782 from unknownbrackets/gl-shader-del
GLES: Delete LinkedShaders after the program
This commit is contained in:
3 files changed
+24
-2
No files matched your search
@@ -110,6 +110,9 @@ public:
|
||||
class GLRProgram {
|
||||
public:
|
||||
~GLRProgram() {
|
||||
if (deleteCallback_) {
|
||||
deleteCallback_(deleteParam_);
|
||||
}
|
||||
if (program) {
|
||||
glDeleteProgram(program);
|
||||
}
|
||||
@@ -162,6 +165,15 @@ public:
|
||||
return loc;
|
||||
}
|
||||
|
||||
void SetDeleteCallback(void(*cb)(void *), void *p) {
|
||||
deleteCallback_ = cb;
|
||||
deleteParam_ = p;
|
||||
}
|
||||
|
||||
private:
|
||||
void(*deleteCallback_)(void *) = nullptr;
|
||||
void *deleteParam_ = nullptr;
|
||||
|
||||
std::unordered_map<std::string, UniformInfo> uniformCache_;
|
||||
};
|
||||
|
||||
|
||||
@@ -212,8 +212,17 @@ LinkedShader::LinkedShader(GLRenderManager *render, VShaderID VSID, Shader *vs,
|
||||
dirtyUniforms = DIRTY_ALL_UNIFORMS;
|
||||
}
|
||||
|
||||
LinkedShader::~LinkedShader() {
|
||||
void LinkedShader::Delete() {
|
||||
program->SetDeleteCallback([](void *thiz) {
|
||||
LinkedShader *ls = (LinkedShader *)thiz;
|
||||
delete ls;
|
||||
}, this);
|
||||
render_->DeleteProgram(program);
|
||||
program = nullptr;
|
||||
}
|
||||
|
||||
LinkedShader::~LinkedShader() {
|
||||
_assert_(program == nullptr);
|
||||
}
|
||||
|
||||
// Utility
|
||||
@@ -691,7 +700,7 @@ ShaderManagerGLES::~ShaderManagerGLES() {
|
||||
void ShaderManagerGLES::Clear() {
|
||||
DirtyLastShader();
|
||||
for (auto iter = linkedShaderCache_.begin(); iter != linkedShaderCache_.end(); ++iter) {
|
||||
delete iter->ls;
|
||||
iter->ls->Delete();
|
||||
}
|
||||
fsCache_.Iterate([&](const FShaderID &key, Shader *shader) {
|
||||
delete shader;
|
||||
|
||||
@@ -42,6 +42,7 @@ public:
|
||||
|
||||
void use(const ShaderID &VSID);
|
||||
void UpdateUniforms(const ShaderID &VSID, bool useBufferedRendering, const ShaderLanguageDesc &shaderLanguage);
|
||||
void Delete();
|
||||
|
||||
GLRenderManager *render_;
|
||||
Shader *vs_;
|
||||
|
||||
Reference in new issue
Block a user