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