27 lines
883 B
Crystal
27 lines
883 B
Crystal
module Funfriend::GL
|
|
extend self
|
|
|
|
def buffer_data_array(target : Enum, data : Array, usage_hint : Buffer::UsageHint)
|
|
data_size = data.reduce(0) {|memo, i| memo + sizeof(typeof(i))}
|
|
LibGL.buffer_data(target, data_size, Pointer(Void).new(0), usage_hint)
|
|
|
|
offset = 0
|
|
data.each do |byte|
|
|
size = sizeof(typeof(byte))
|
|
LibGL.buffer_sub_data(target, offset, size, pointerof(byte))
|
|
offset += size
|
|
end
|
|
end
|
|
|
|
def shader(fragment_filename : String, vertex_filename : String) : Program
|
|
vertex_shader_source = FileStorage.get(vertex_filename).gets_to_end
|
|
fragment_shader_source = FileStorage.get(fragment_filename).gets_to_end
|
|
|
|
vertex_shader = VertexShader.create(vertex_shader_source)
|
|
fragment_shader = FragmentShader.create(fragment_shader_source)
|
|
|
|
shaders = {vertex_shader, fragment_shader}
|
|
Program.create(shaders)
|
|
end
|
|
end
|