Class: Rugl::Backends::OpenGLBindingsGL

Inherits:
PrefixedModuleAdapter show all
Defined in:
lib/rugl/backends/opengl_bindings.rb

Constant Summary collapse

RESOURCE_METHODS =
{
  GenBuffers: :glGenBuffers,
  DeleteBuffers: :glDeleteBuffers,
  GenTextures: :glGenTextures,
  DeleteTextures: :glDeleteTextures,
  GenRenderbuffers: :glGenRenderbuffers,
  DeleteRenderbuffers: :glDeleteRenderbuffers,
  GenFramebuffers: :glGenFramebuffers,
  DeleteFramebuffers: :glDeleteFramebuffers,
  GenVertexArrays: :glGenVertexArrays,
  DeleteVertexArrays: :glDeleteVertexArrays
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from PrefixedModuleAdapter

#const_defined?, #const_get, #method_missing, #respond_to_missing?

Constructor Details

#initialize(target) ⇒ OpenGLBindingsGL

Returns a new instance of OpenGLBindingsGL.



115
116
117
# File 'lib/rugl/backends/opengl_bindings.rb', line 115

def initialize(target)
  super(target: target, method_prefix: "gl", constant_prefix: "GL")
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Rugl::Backends::PrefixedModuleAdapter

Class Method Details

.loadObject



109
110
111
112
113
# File 'lib/rugl/backends/opengl_bindings.rb', line 109

def self.load
  require "opengl"
  OpenGL.extend(OpenGL)
  new(OpenGL)
end

Instance Method Details

#GetIntegerv(pname, storage) ⇒ Object



131
132
133
134
135
# File 'lib/rugl/backends/opengl_bindings.rb', line 131

def GetIntegerv(pname, storage)
  fill_integer_storage(storage) do |buffer|
    target.glGetIntegerv(pname, buffer)
  end
end

#GetProgramInfoLog(program_id) ⇒ Object



155
156
157
158
159
# File 'lib/rugl/backends/opengl_bindings.rb', line 155

def GetProgramInfoLog(program_id)
  read_info_log(log_length_for_program(program_id)) do |buffer_size, length_buffer, log_buffer|
    target.glGetProgramInfoLog(program_id, buffer_size, length_buffer, log_buffer)
  end
end

#GetProgramiv(program_id, pname, storage) ⇒ Object



143
144
145
146
147
# File 'lib/rugl/backends/opengl_bindings.rb', line 143

def GetProgramiv(program_id, pname, storage)
  fill_integer_storage(storage) do |buffer|
    target.glGetProgramiv(program_id, pname, buffer)
  end
end

#GetShaderInfoLog(shader_id) ⇒ Object



149
150
151
152
153
# File 'lib/rugl/backends/opengl_bindings.rb', line 149

def GetShaderInfoLog(shader_id)
  read_info_log(log_length_for_shader(shader_id)) do |buffer_size, length_buffer, log_buffer|
    target.glGetShaderInfoLog(shader_id, buffer_size, length_buffer, log_buffer)
  end
end

#GetShaderiv(shader_id, pname, storage) ⇒ Object



137
138
139
140
141
# File 'lib/rugl/backends/opengl_bindings.rb', line 137

def GetShaderiv(shader_id, pname, storage)
  fill_integer_storage(storage) do |buffer|
    target.glGetShaderiv(shader_id, pname, buffer)
  end
end

#load_lib(*args) ⇒ Object



119
120
121
# File 'lib/rugl/backends/opengl_bindings.rb', line 119

def load_lib(*args)
  target.load_lib(*args)
end

#ShaderSource(shader_id, source) ⇒ Object



123
124
125
126
127
128
129
# File 'lib/rugl/backends/opengl_bindings.rb', line 123

def ShaderSource(shader_id, source)
  source_buffer = source.to_s
  source_buffer = "#{source_buffer}\0" unless source_buffer.end_with?("\0")
  source_pointer = Fiddle::Pointer[source_buffer]

  target.glShaderSource(shader_id, 1, [source_pointer.to_i].pack("J"), nil)
end