summaryrefslogtreecommitdiff
path: root/drivers/gles2
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2019-01-26 10:39:03 -0300
committerJuan Linietsky <reduzio@gmail.com>2019-01-26 10:47:04 -0300
commit18c3ed245ae990c61f68edddab627c5719c433c7 (patch)
tree3acdeea4ec049ba80d58405689294dfa3a16e9ab /drivers/gles2
parent1365bed8ed3e108d13f3f9eb46d86de365a073d3 (diff)
Further fixes to avoid memory corruption, closes #25336
Diffstat (limited to 'drivers/gles2')
-rw-r--r--drivers/gles2/rasterizer_storage_gles2.cpp2
-rw-r--r--drivers/gles2/shader_gles2.cpp11
2 files changed, 4 insertions, 9 deletions
diff --git a/drivers/gles2/rasterizer_storage_gles2.cpp b/drivers/gles2/rasterizer_storage_gles2.cpp
index f0deff4791..38fcff3ab2 100644
--- a/drivers/gles2/rasterizer_storage_gles2.cpp
+++ b/drivers/gles2/rasterizer_storage_gles2.cpp
@@ -4631,7 +4631,7 @@ bool RasterizerStorageGLES2::free(RID p_rid) {
Shader *shader = shader_owner.get(p_rid);
- if (shader->shader) {
+ if (shader->shader && shader->custom_code_id) {
shader->shader->free_custom_shader(shader->custom_code_id);
}
diff --git a/drivers/gles2/shader_gles2.cpp b/drivers/gles2/shader_gles2.cpp
index 3bf5baec14..5e259a01f0 100644
--- a/drivers/gles2/shader_gles2.cpp
+++ b/drivers/gles2/shader_gles2.cpp
@@ -229,7 +229,6 @@ ShaderGLES2::Version *ShaderGLES2::get_current_version() {
glDeleteShader(v.vert_id);
glDeleteShader(v.frag_id);
glDeleteProgram(v.id);
- memdelete_arr(v.uniform_location);
v.id = 0;
}
}
@@ -329,7 +328,6 @@ ShaderGLES2::Version *ShaderGLES2::get_current_version() {
if (iloglen < 0) {
glDeleteShader(v.vert_id);
glDeleteProgram(v.id);
- memdelete_arr(v.uniform_location);
v.id = 0;
ERR_PRINT("No OpenGL vertex shader compiler log. What the frick?");
@@ -351,7 +349,6 @@ ShaderGLES2::Version *ShaderGLES2::get_current_version() {
Memory::free_static(ilogmem);
glDeleteShader(v.vert_id);
glDeleteProgram(v.id);
- memdelete_arr(v.uniform_location);
v.id = 0;
}
@@ -406,7 +403,6 @@ ShaderGLES2::Version *ShaderGLES2::get_current_version() {
glDeleteShader(v.frag_id);
glDeleteShader(v.vert_id);
glDeleteProgram(v.id);
- memdelete_arr(v.uniform_location);
v.id = 0;
ERR_PRINT("No OpenGL fragment shader compiler log. What the frick?");
@@ -429,7 +425,6 @@ ShaderGLES2::Version *ShaderGLES2::get_current_version() {
glDeleteShader(v.frag_id);
glDeleteShader(v.vert_id);
glDeleteProgram(v.id);
- memdelete_arr(v.uniform_location);
v.id = 0;
}
@@ -457,7 +452,6 @@ ShaderGLES2::Version *ShaderGLES2::get_current_version() {
glDeleteShader(v.frag_id);
glDeleteShader(v.vert_id);
glDeleteProgram(v.id);
- memdelete_arr(v.uniform_location);
v.id = 0;
ERR_PRINT("No OpenGL program link log. What the frick?");
@@ -482,7 +476,6 @@ ShaderGLES2::Version *ShaderGLES2::get_current_version() {
glDeleteShader(v.frag_id);
glDeleteShader(v.vert_id);
glDeleteProgram(v.id);
- memdelete_arr(v.uniform_location);
v.id = 0;
ERR_FAIL_V(NULL);
@@ -696,8 +689,10 @@ void ShaderGLES2::set_custom_shader(uint32_t p_code_id) {
void ShaderGLES2::free_custom_shader(uint32_t p_code_id) {
ERR_FAIL_COND(!custom_code_map.has(p_code_id));
- if (conditional_version.code_version == p_code_id)
+ if (conditional_version.code_version == p_code_id) {
conditional_version.code_version = 0; //do not keep using a version that is going away
+ unbind();
+ }
VersionKey key;
key.code_version = p_code_id;