Skip to content

Instantly share code, notes, and snippets.

@vaiorabbit
Created August 20, 2013 14:22
Show Gist options
  • Select an option

  • Save vaiorabbit/6282036 to your computer and use it in GitHub Desktop.

Select an option

Save vaiorabbit/6282036 to your computer and use it in GitHub Desktop.
Fiddle を使って OpenGL の DLL (libGL.dylib) から関数をいくつかインポート
# -*- coding: utf-8 -*-
require 'fiddle'
module GL
GL_COLOR_BUFFER_BIT = 0x00004000
GL_PROJECTION = 0x1701
GL_MODELVIEW = 0x1700
GL_TRIANGLES = 0x0004
GL_FUNCTIONS_MAP = {}
@@gl_dll = nil
def self.load_dll(lib = 'libGL.dylib', path = '/System/Library/Frameworks/OpenGL.framework/Libraries')
@@gl_dll = Fiddle.dlopen( path + '/' + lib )
# void glViewport (GLint x, GLint y, GLsizei width, GLsizei height)
GL_FUNCTIONS_MAP[:glViewport] = Fiddle::Function.new( @@gl_dll["glViewport"],
[Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT],
Fiddle::TYPE_VOID )
# void glClear (GLbitfield mask)
GL_FUNCTIONS_MAP[:glClear] = Fiddle::Function.new( @@gl_dll["glClear"],
[Fiddle::TYPE_INT],
Fiddle::TYPE_VOID )
# void glMatrixMode (GLenum mode)
GL_FUNCTIONS_MAP[:glMatrixMode] = Fiddle::Function.new( @@gl_dll["glMatrixMode"],
[Fiddle::TYPE_INT],
Fiddle::TYPE_VOID )
# void glLoadIdentity (void)
GL_FUNCTIONS_MAP[:glLoadIdentity] = Fiddle::Function.new( @@gl_dll["glLoadIdentity"],
[],
Fiddle::TYPE_VOID )
# void glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
GL_FUNCTIONS_MAP[:glOrtho] = Fiddle::Function.new( @@gl_dll["glOrtho"],
[Fiddle::TYPE_DOUBLE, Fiddle::TYPE_DOUBLE, Fiddle::TYPE_DOUBLE, Fiddle::TYPE_DOUBLE, Fiddle::TYPE_DOUBLE, Fiddle::TYPE_DOUBLE],
Fiddle::TYPE_VOID )
# void glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
GL_FUNCTIONS_MAP[:glRotatef] = Fiddle::Function.new( @@gl_dll["glRotatef"],
[Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT],
Fiddle::TYPE_VOID )
# void glBegin (GLenum mode)
GL_FUNCTIONS_MAP[:glBegin] = Fiddle::Function.new( @@gl_dll["glBegin"],
[Fiddle::TYPE_INT],
Fiddle::TYPE_VOID )
# void glColor3f (GLfloat red, GLfloat green, GLfloat blue)
GL_FUNCTIONS_MAP[:glColor3f] = Fiddle::Function.new( @@gl_dll["glColor3f"],
[Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT],
Fiddle::TYPE_VOID )
# void glVertex3f (GLfloat x, GLfloat y, GLfloat z)
GL_FUNCTIONS_MAP[:glVertex3f] = Fiddle::Function.new( @@gl_dll["glVertex3f"],
[Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT],
Fiddle::TYPE_VOID )
# void glEnd (void)
GL_FUNCTIONS_MAP[:glEnd] = Fiddle::Function.new( @@gl_dll["glEnd"],
[],
Fiddle::TYPE_VOID )
end
def self.glViewport(x, y, width, height)
GL_FUNCTIONS_MAP[:glViewport].call(x, y, width, height)
end
def self.glClear(mask)
GL_FUNCTIONS_MAP[:glClear].call(mask)
end
def self.glMatrixMode(mode)
GL_FUNCTIONS_MAP[:glMatrixMode].call(mode)
end
def self.glLoadIdentity()
GL_FUNCTIONS_MAP[:glLoadIdentity].call()
end
def self.glOrtho(left, right, bottom, top, zNear, zFar)
GL_FUNCTIONS_MAP[:glOrtho].call(left, right, bottom, top, zNear, zFar)
end
def self.glRotatef(angle, x, y, z)
GL_FUNCTIONS_MAP[:glRotatef].call(angle, x, y, z)
end
def self.glBegin(mode)
GL_FUNCTIONS_MAP[:glBegin].call(mode)
end
def self.glColor3f(red, green, blue)
GL_FUNCTIONS_MAP[:glColor3f].call(red, green, blue)
end
def self.glVertex3f(x, y, z)
GL_FUNCTIONS_MAP[:glVertex3f].call(x, y, z)
end
def self.glEnd()
GL_FUNCTIONS_MAP[:glEnd].call()
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment