OpenGL bindings written in Crystal.
LibGL offers Crystal bindings for modern, shader-based OpenGL. These bindings are relatively "raw" - with a few notable exceptions, names of functions, constants, and types remain unchanged.
Add this to your application's shard.yml
:
dependencies:
lib_gl:
github: calebuharrison/LibGL
branch: master
Install your dependencies:
shards install
Using CrystGLFW for context creation:
require "lib_gl"
require "crystglfw"
include CrystGLFW
CrystGLFW.run do
# Request a specific version of OpenGL in core profile mode with forward compatibility.
hints = {
:context_version_major => 3,
:context_version_minor => 3,
:opengl_forward_compat => true,
:opengl_profile => :opengl_core_profile
}
# Create a new window.
window = Window.new(title: "LibGL Rocks!", hints: hints)
# Make the window the current OpenGL context.
window.make_context_current
until window.should_close?
CrystGLFW.poll_events
# Use the timer to generate color values.
time_value = CrystGLFW.time
red_value = Math.sin(time_value).abs
green_value = Math.cos(time_value).abs
blue_value = Math.tan(time_value).abs
# Clear the window with the generated color.
LibGL.clear_color(red_value, green_value, blue_value, 1.0)
LibGL.clear(LibGL::COLOR_BUFFER_BIT)
window.swap_buffers
end
window.destroy
end
LibGL differs from the standard OpenGL API in only a few, simple ways. Each of these differences only exists to make the API fit the style guide of the Crystal language.
Method names in LibGL do not have the "gl" prefix that is present in the C API. Additionally, underscores are used to separate words rather than camel case. LibGL methods are all called as class methods of the LibGL lib:
shader_program = LibGL.create_program
LibGL.link_program(shader_program)
LibGL.use_program(shader_program)
Prefixes have also been removed from constants, which are accessed directly from the lib:
LibGL::COLOR_BUFFER_BIT
LibGL::STATIC_DRAW
LibGL::ARRAY_BUFFER
LibGL::TRUE
- Fork it ( https://github.com/calebuharrison/LibGL/fork )
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request
- calebuharrison Caleb Uriah Harrison - creator, maintainer