mirror of
https://github.com/cyberarm/i-mic-fps.git
synced 2025-12-15 15:42:35 +00:00
68 lines
1.7 KiB
Ruby
68 lines
1.7 KiB
Ruby
class IMICFPS
|
|
class Commands
|
|
class ReloadShaderCommand < Command
|
|
def group
|
|
:reload_shader
|
|
end
|
|
|
|
def command
|
|
:reload_shader
|
|
end
|
|
|
|
def handle(arguments, console)
|
|
if arguments.size > 2
|
|
console.stdin("to many arguments for #{Style.highlight("#{command}")}, got #{Style.error(arguments.size)} expected #{Style.notice(1)}.")
|
|
return
|
|
end
|
|
|
|
shader = nil
|
|
stdout = $stdout
|
|
$stdout = StringIO.new
|
|
|
|
case arguments.size
|
|
when 0
|
|
console.stdin( usage )
|
|
return
|
|
when 1
|
|
name = arguments.first
|
|
Shader.delete(name)
|
|
|
|
shader = Shader.new(
|
|
name: name,
|
|
includes_dir: "shaders/include",
|
|
vertex: "shaders/vertex/#{name}.glsl",
|
|
fragment: "shaders/fragment/#{name}.glsl"
|
|
)
|
|
when 2
|
|
vertex = arguments.first
|
|
fragment = arguments.last
|
|
Shader.remove(vertex)
|
|
|
|
shader = Shader.new(
|
|
name: vertex,
|
|
includes_dir: "shaders/include",
|
|
vertex: "shaders/vertex/#{vertex}.glsl",
|
|
fragment: "shaders/fragment/#{fragment}.glsl"
|
|
)
|
|
end
|
|
|
|
string = $stdout.string
|
|
|
|
if shader.compiled?
|
|
console.stdin("#{Style.notice("Successfully reloaded shader")}: #{shader.name}")
|
|
else
|
|
console.stdin("#{Style.error("Failed to reload #{shader.name}")}")
|
|
console.stdin(string)
|
|
end
|
|
ensure
|
|
$stdout = stdout
|
|
puts string if string
|
|
end
|
|
|
|
def usage
|
|
"#{Style.highlight(command)} #{Style.notice("vertex_name [fragment_name]")}"
|
|
end
|
|
end
|
|
end
|
|
end
|