ruby-sfml-example/example.rb

97 lines
1.9 KiB
Ruby
Executable File

#!/usr/bin/env ruby
require 'sfml/all'
require 'opengl'
class Example
include SFML
TITLE = "Josh's Ruby SFML/OpenGL Example"
def initialize
@fullscreen = false
@window = Window.new
create_window
end
def load_shaders
v_id = glCreateShader(GL_VERTEX_SHADER)
glShaderSource(v_id, <<-EOS)
attribute vec2 pos;
varying vec4 pos_i;
void main()
{
pos_i = vec4(pos, 0, 1);
gl_Position = pos_i;
}
EOS
glCompileShader(v_id)
unless glGetShaderiv(v_id, GL_COMPILE_STATUS)
raise glGetShaderInfoLog(v_id)
end
f_id = glCreateShader(GL_FRAGMENT_SHADER)
glShaderSource(f_id, <<-EOS)
varying vec4 pos_i;
void main()
{
gl_FragColor = pos_i;
}
EOS
glCompileShader(f_id)
unless glGetShaderiv(f_id, GL_COMPILE_STATUS)
raise glGetShaderInfoLog(f_id)
end
p_id = glCreateProgram()
glAttachShader(p_id, v_id)
glAttachShader(p_id, f_id)
glLinkProgram(p_id)
unless glGetProgramiv(p_id, GL_LINK_STATUS)
raise glGetProgramInfoLog(p_id)
end
glUseProgram(p_id)
end
def create_window
if @fullscreen
@window.create(VideoMode.get_desktop_mode, TITLE, Style::Fullscreen)
else
@window.create([1200, 900], TITLE)
end
glClearColor(1, 0.5, 0, 0)
load_shaders
end
def run
while @window.open?
@window.each_event do |event|
case event.type
when Event::Closed
@window.close
when Event::KeyPressed
case event.key.code
when Keyboard::Escape
@window.close
when Keyboard::F
@fullscreen = !@fullscreen
create_window
end
when Event::Resized # Resize event : adjust viewport
glViewport(0, 0, event.size.width, event.size.height)
end
end
glClear(GL_COLOR_BUFFER_BIT)
@window.display
end
end
end
Example.new.run