Created
August 20, 2013 14:22
-
-
Save vaiorabbit/6282036 to your computer and use it in GitHub Desktop.
Fiddle を使って OpenGL の DLL (libGL.dylib) から関数をいくつかインポート
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # -*- 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