Added Shader.delete, shaders now clean up after themselves

This commit is contained in:
2020-03-24 10:33:44 -05:00
parent 8cedb40283
commit 0017c841dd

View File

@@ -13,6 +13,21 @@ module CyberarmEngine
@@shaders[name] = instance @@shaders[name] = instance
end end
# removes {Shader} from cache and cleans up
#
# @param name [String]
def self.delete(name)
shader = @@shaders.dig(name)
if shader
@@shaders.delete(name)
if shader.compiled?
glDeleteProgram(shader.program)
end
end
end
## ##
# runs _block_ using {Shader} with _name_ # runs _block_ using {Shader} with _name_
# #
@@ -118,12 +133,15 @@ module CyberarmEngine
compile_shader(type: :fragment) compile_shader(type: :fragment)
link_shaders link_shaders
@data[:shaders].each { |key, id| glDeleteShader(id) }
# Only add shader if it successfully compiles # Only add shader if it successfully compiles
if @compiled if @compiled
puts "compiled!" puts "compiled!"
puts "Compiled shader: #{@name}" puts "Compiled shader: #{@name}"
Shader.add(@name, self) Shader.add(@name, self)
else else
glDeleteProgram(@program)
warn "FAILED to compile shader: #{@name}", "" warn "FAILED to compile shader: #{@name}", ""
end end
end end