Skip to content

Instantly share code, notes, and snippets.

@Groogy
Created July 30, 2017 16:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Groogy/454df9449f4cf27ff0e6e4edb38cbb70 to your computer and use it in GitHub Desktop.
Save Groogy/454df9449f4cf27ff0e6e4edb38cbb70 to your computer and use it in GitHub Desktop.
if LibGLFW3.init != 0
error_callback = ->(error : Int32, description : Int8*) {
puts "Error #{error}: #{String.new(description.as(UInt8*))}"
}
LibGLFW3.setErrorCallback(error_callback)
LibGLFW3.windowHint(LibGLFW3::OPENGL_PROFILE, LibGLFW3::OPENGL_CORE_PROFILE)
LibGLFW3.windowHint(LibGLFW3::OPENGL_FORWARD_COMPAT, 1)
LibGLFW3.windowHint(LibGLFW3::CONTEXT_VERSION_MAJOR, 4)
LibGLFW3.windowHint(LibGLFW3::CONTEXT_VERSION_MINOR, 2)
LibGLFW3.windowHint(LibGLFW3::OPENGL_DEBUG_CONTEXT, 1)
window = LibGLFW3.createWindow(800, 600, "Hello Crystal!", nil, nil)
if window
LibGLFW3.makeContextCurrent(window)
LibGLFW3.swapInterval(1)
points = [
0.0f32, 0.5f32, 0.0f32,
0.5f32, -0.5f32, 0.0f32,
-0.5f32, -0.5f32, 0.0f32
]
LibGL.genBuffers 1, out vbo
LibGL.bindBuffer LibGL::ARRAY_BUFFER, vbo
LibGL.bufferData LibGL::ARRAY_BUFFER, 9 * sizeof(Float32), points, LibGL::STATIC_DRAW
LibGL.genVertexArrays 1, out vao
LibGL.bindVertexArray vao
LibGL.bindBuffer LibGL::ARRAY_BUFFER, vbo
LibGL.vertexAttribPointer 0, 3, LibGL::FLOAT, LibGL::FALSE, 0, nil
vertex_shader = ["#version 420\nin vec3 vp; void main() { gl_Position = vec4(vp, 1.0); }".to_unsafe.as(Int8*)]
fragment_shader = ["#version 420\nout vec4 frag_color; void main() { frag_color = vec4(0.5, 0.0, 0.5, 1.0); }".to_unsafe.as(Int8*)]
vs_pp = vertex_shader.to_unsafe
fs_pp = fragment_shader.to_unsafe
vs = LibGL.createShader(LibGL::VERTEX_SHADER);
LibGL.shaderSource(vs, 1, vs_pp, nil);
LibGL.compileShader(vs);
fs = LibGL.createShader(LibGL::FRAGMENT_SHADER);
LibGL.shaderSource(fs, 1, fs_pp, nil);
LibGL.compileShader(fs);
LibGL.getShaderiv vs, LibGL::COMPILE_STATUS, out status1
LibGL.getShaderiv fs, LibGL::COMPILE_STATUS, out status2
pp status1, status2
shader_programme = LibGL.createProgram();
LibGL.attachShader(shader_programme, fs);
LibGL.attachShader(shader_programme, vs);
LibGL.linkProgram(shader_programme);
while (error = LibGL.getError) != LibGL::NO_ERROR
p error
end
while LibGLFW3.windowShouldClose(window) == 0
LibGLFW3.getFramebufferSize(window, out width, out height)
ratio = width.to_f / height.to_f
LibGL.viewport(0, 0, width, height);
LibGL.clear(LibGL::COLOR_BUFFER_BIT | LibGL::DEPTH_BUFFER_BIT);
LibGL.useProgram shader_programme
LibGL.bindVertexArray vao
LibGL.drawArrays LibGL::TRIANGLES, 0, 3
while (error = LibGL.getError) != LibGL::NO_ERROR
puts error
end
LibGLFW3.swapBuffers(window)
LibGLFW3.pollEvents
end
LibGLFW3.destroyWindow(window)
else
puts "Failed to create window"
end
LibGLFW3.terminate
else
puts "GLFW failed to initialize"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment