Module: GLFW

Extended by:
Fiddle::Importer
Defined in:
lib/glfw.rb

Constant Summary collapse

GLFW_FUNCTIONS_MAP =

Fiddle’s default ‘extern’ stores all methods into local variable ‘@func_map’, that makes difficult to ‘include GLFW’. So I override it and replace ‘@func_map’ into ‘GLFW_FUNCTIONS_MAP’. Ref.: /lib/ruby/2.0.0/fiddle/import.rb

{}
GLFW_VERSION_MAJOR =

defines

3
GLFW_VERSION_MINOR =
0
GLFW_VERSION_REVISION =
1
GLFW_RELEASE =
0
GLFW_PRESS =
1
GLFW_REPEAT =
2
GLFW_KEY_UNKNOWN =
-1
GLFW_KEY_SPACE =
32
GLFW_KEY_APOSTROPHE =

39
GLFW_KEY_COMMA =

,

44
GLFW_KEY_MINUS =

-

45
GLFW_KEY_PERIOD =

.

46
GLFW_KEY_SLASH =

/

47
GLFW_KEY_0 =
48
GLFW_KEY_1 =
49
GLFW_KEY_2 =
50
GLFW_KEY_3 =
51
GLFW_KEY_4 =
52
GLFW_KEY_5 =
53
GLFW_KEY_6 =
54
GLFW_KEY_7 =
55
GLFW_KEY_8 =
56
GLFW_KEY_9 =
57
GLFW_KEY_SEMICOLON =

;

59
GLFW_KEY_EQUAL =

61
GLFW_KEY_A =
65
GLFW_KEY_B =
66
GLFW_KEY_C =
67
GLFW_KEY_D =
68
GLFW_KEY_E =
69
GLFW_KEY_F =
70
GLFW_KEY_G =
71
GLFW_KEY_H =
72
GLFW_KEY_I =
73
GLFW_KEY_J =
74
GLFW_KEY_K =
75
GLFW_KEY_L =
76
GLFW_KEY_M =
77
GLFW_KEY_N =
78
GLFW_KEY_O =
79
GLFW_KEY_P =
80
GLFW_KEY_Q =
81
GLFW_KEY_R =
82
GLFW_KEY_S =
83
GLFW_KEY_T =
84
GLFW_KEY_U =
85
GLFW_KEY_V =
86
GLFW_KEY_W =
87
GLFW_KEY_X =
88
GLFW_KEY_Y =
89
GLFW_KEY_Z =
90
GLFW_KEY_LEFT_BRACKET =

[

91
GLFW_KEY_BACKSLASH =

\

92
GLFW_KEY_RIGHT_BRACKET =

]

93
GLFW_KEY_GRAVE_ACCENT =

96
GLFW_KEY_WORLD_1 =

non-US #1

161
GLFW_KEY_WORLD_2 =

non-US #2

162
GLFW_KEY_ESCAPE =
256
GLFW_KEY_ENTER =
257
GLFW_KEY_TAB =
258
GLFW_KEY_BACKSPACE =
259
GLFW_KEY_INSERT =
260
GLFW_KEY_DELETE =
261
GLFW_KEY_RIGHT =
262
GLFW_KEY_LEFT =
263
GLFW_KEY_DOWN =
264
GLFW_KEY_UP =
265
GLFW_KEY_PAGE_UP =
266
GLFW_KEY_PAGE_DOWN =
267
GLFW_KEY_HOME =
268
GLFW_KEY_END =
269
GLFW_KEY_CAPS_LOCK =
280
GLFW_KEY_SCROLL_LOCK =
281
GLFW_KEY_NUM_LOCK =
282
GLFW_KEY_PRINT_SCREEN =
283
GLFW_KEY_PAUSE =
284
GLFW_KEY_F1 =
290
GLFW_KEY_F2 =
291
GLFW_KEY_F3 =
292
GLFW_KEY_F4 =
293
GLFW_KEY_F5 =
294
GLFW_KEY_F6 =
295
GLFW_KEY_F7 =
296
GLFW_KEY_F8 =
297
GLFW_KEY_F9 =
298
GLFW_KEY_F10 =
299
GLFW_KEY_F11 =
300
GLFW_KEY_F12 =
301
GLFW_KEY_F13 =
302
GLFW_KEY_F14 =
303
GLFW_KEY_F15 =
304
GLFW_KEY_F16 =
305
GLFW_KEY_F17 =
306
GLFW_KEY_F18 =
307
GLFW_KEY_F19 =
308
GLFW_KEY_F20 =
309
GLFW_KEY_F21 =
310
GLFW_KEY_F22 =
311
GLFW_KEY_F23 =
312
GLFW_KEY_F24 =
313
GLFW_KEY_F25 =
314
GLFW_KEY_KP_0 =
320
GLFW_KEY_KP_1 =
321
GLFW_KEY_KP_2 =
322
GLFW_KEY_KP_3 =
323
GLFW_KEY_KP_4 =
324
GLFW_KEY_KP_5 =
325
GLFW_KEY_KP_6 =
326
GLFW_KEY_KP_7 =
327
GLFW_KEY_KP_8 =
328
GLFW_KEY_KP_9 =
329
GLFW_KEY_KP_DECIMAL =
330
GLFW_KEY_KP_DIVIDE =
331
GLFW_KEY_KP_MULTIPLY =
332
GLFW_KEY_KP_SUBTRACT =
333
GLFW_KEY_KP_ADD =
334
GLFW_KEY_KP_ENTER =
335
GLFW_KEY_KP_EQUAL =
336
GLFW_KEY_LEFT_SHIFT =
340
GLFW_KEY_LEFT_CONTROL =
341
GLFW_KEY_LEFT_ALT =
342
GLFW_KEY_LEFT_SUPER =
343
GLFW_KEY_RIGHT_SHIFT =
344
GLFW_KEY_RIGHT_CONTROL =
345
GLFW_KEY_RIGHT_ALT =
346
GLFW_KEY_RIGHT_SUPER =
347
GLFW_KEY_MENU =
348
GLFW_KEY_LAST =
GLFW_KEY_MENU
GLFW_MOD_SHIFT =
0x0001
GLFW_MOD_CONTROL =
0x0002
GLFW_MOD_ALT =
0x0004
GLFW_MOD_SUPER =
0x0008
GLFW_MOUSE_BUTTON_1 =
0
GLFW_MOUSE_BUTTON_2 =
1
GLFW_MOUSE_BUTTON_3 =
2
GLFW_MOUSE_BUTTON_4 =
3
GLFW_MOUSE_BUTTON_5 =
4
GLFW_MOUSE_BUTTON_6 =
5
GLFW_MOUSE_BUTTON_7 =
6
GLFW_MOUSE_BUTTON_8 =
7
GLFW_MOUSE_BUTTON_LAST =
GLFW_MOUSE_BUTTON_8
GLFW_MOUSE_BUTTON_LEFT =
GLFW_MOUSE_BUTTON_1
GLFW_MOUSE_BUTTON_RIGHT =
GLFW_MOUSE_BUTTON_2
GLFW_MOUSE_BUTTON_MIDDLE =
GLFW_MOUSE_BUTTON_3
GLFW_JOYSTICK_1 =
0
GLFW_JOYSTICK_2 =
1
GLFW_JOYSTICK_3 =
2
GLFW_JOYSTICK_4 =
3
GLFW_JOYSTICK_5 =
4
GLFW_JOYSTICK_6 =
5
GLFW_JOYSTICK_7 =
6
GLFW_JOYSTICK_8 =
7
GLFW_JOYSTICK_9 =
8
GLFW_JOYSTICK_10 =
9
GLFW_JOYSTICK_11 =
10
GLFW_JOYSTICK_12 =
11
GLFW_JOYSTICK_13 =
12
GLFW_JOYSTICK_14 =
13
GLFW_JOYSTICK_15 =
14
GLFW_JOYSTICK_16 =
15
GLFW_JOYSTICK_LAST =
GLFW_JOYSTICK_16
GLFW_NOT_INITIALIZED =
0x00010001
GLFW_NO_CURRENT_CONTEXT =
0x00010002
GLFW_INVALID_ENUM =
0x00010003
GLFW_INVALID_VALUE =
0x00010004
GLFW_OUT_OF_MEMORY =
0x00010005
GLFW_API_UNAVAILABLE =
0x00010006
GLFW_VERSION_UNAVAILABLE =
0x00010007
GLFW_PLATFORM_ERROR =
0x00010008
GLFW_FORMAT_UNAVAILABLE =
0x00010009
GLFW_FOCUSED =
0x00020001
GLFW_ICONIFIED =
0x00020002
GLFW_RESIZABLE =
0x00020003
GLFW_VISIBLE =
0x00020004
GLFW_DECORATED =
0x00020005
GLFW_RED_BITS =
0x00021001
GLFW_GREEN_BITS =
0x00021002
GLFW_BLUE_BITS =
0x00021003
GLFW_ALPHA_BITS =
0x00021004
GLFW_DEPTH_BITS =
0x00021005
GLFW_STENCIL_BITS =
0x00021006
GLFW_ACCUM_RED_BITS =
0x00021007
GLFW_ACCUM_GREEN_BITS =
0x00021008
GLFW_ACCUM_BLUE_BITS =
0x00021009
GLFW_ACCUM_ALPHA_BITS =
0x0002100A
GLFW_AUX_BUFFERS =
0x0002100B
GLFW_STEREO =
0x0002100C
GLFW_SAMPLES =
0x0002100D
GLFW_SRGB_CAPABLE =
0x0002100E
GLFW_REFRESH_RATE =
0x0002100F
GLFW_CLIENT_API =
0x00022001
GLFW_CONTEXT_VERSION_MAJOR =
0x00022002
GLFW_CONTEXT_VERSION_MINOR =
0x00022003
GLFW_CONTEXT_REVISION =
0x00022004
GLFW_CONTEXT_ROBUSTNESS =
0x00022005
GLFW_OPENGL_FORWARD_COMPAT =
0x00022006
GLFW_OPENGL_DEBUG_CONTEXT =
0x00022007
GLFW_OPENGL_PROFILE =
0x00022008
GLFW_OPENGL_API =
0x00030001
GLFW_OPENGL_ES_API =
0x00030002
GLFW_NO_ROBUSTNESS =
0
GLFW_NO_RESET_NOTIFICATION =
0x00031001
GLFW_LOSE_CONTEXT_ON_RESET =
0x00031002
GLFW_OPENGL_ANY_PROFILE =
0
GLFW_OPENGL_CORE_PROFILE =
0x00032001
GLFW_OPENGL_COMPAT_PROFILE =
0x00032002
GLFW_CURSOR =
0x00033001
GLFW_STICKY_KEYS =
0x00033002
GLFW_STICKY_MOUSE_BUTTONS =
0x00033003
GLFW_CURSOR_NORMAL =
0x00034001
GLFW_CURSOR_HIDDEN =
0x00034002
GLFW_CURSOR_DISABLED =
0x00034003
GLFW_CONNECTED =
0x00040001
GLFW_DISCONNECTED =
0x00040002
GLFWvidmode =

struct

struct(["int width",
"int height",
"int redBits",
"int greenBits",
"int blueBits",
"int refreshRate"])
GLFWgammaramp =
struct(["unsigned short* red",
"unsigned short* green",
"unsigned short* blue",
"unsigned int size"])
@@glfw_cb_signature =

typedefs

{
  :GLFWglproc => "void GLFWglproc()",
  :GLFWerrorfun => "void GLFWerrorfun(int,const char*)",
  :GLFWwindowposfun => "void GLFWwindowposfun(void*,int,int)",
  :GLFWwindowsizefun => "void GLFWwindowsizefun(void*,int,int)",
  :GLFWwindowclosefun => "void GLFWwindowclosefun(void*)",
  :GLFWwindowrefreshfun => "void GLFWwindowrefreshfun(void*)",
  :GLFWwindowfocusfun => "void GLFWwindowfocusfun(void*,int)",
  :GLFWwindowiconifyfun => "void GLFWwindowiconifyfun(void*,int)",
  :GLFWframebuffersizefun => "void GLFWframebuffersizefun(void*,int,int)",
  :GLFWmousebuttonfun => "void GLFWmousebuttonfun(void*,int,int,int)",
  :GLFWcursorposfun => "void GLFWcursorposfun(void*,double,double)",
  :GLFWcursorenterfun => "void GLFWcursorenterfun(void*,int)",
  :GLFWscrollfun => "void GLFWscrollfun(void*,double,double)",
  :GLFWkeyfun => "void GLFWkeyfun(void*,int,int,int,int)",
  :GLFWcharfun => "void GLFWcharfun(void*,unsigned int)",
  :GLFWmonitorfun => "void GLFWmonitorfun(void*,int)",
}
@@glfw_import_done =
false

Class Method Summary collapse

Class Method Details

.create_callback(sym, proc = nil, &blk) ⇒ Object



289
290
291
292
293
294
295
# File 'lib/glfw.rb', line 289

def self.create_callback( sym, proc=nil, &blk )
  if block_given?
    return bind( @@glfw_cb_signature[sym], nil, &blk )
  else
    return bind( @@glfw_cb_signature[sym], nil, &proc )
  end
end

.extern(signature, *opts) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/glfw.rb', line 14

def self.extern(signature, *opts)
  symname, ctype, argtype = parse_signature(signature, @type_alias)
  opt = parse_bind_options(opts)
  f = import_function(symname, ctype, argtype, opt[:call_type])
  name = symname.gsub(/@.+/,'')
  GLFW_FUNCTIONS_MAP[name] = f
  begin
    /^(.+?):(\d+)/ =~ caller.first
    file, line = $1, $2.to_i
  rescue
    file, line = __FILE__, __LINE__+3
  end
  args_str="*args"
  module_eval(<<-EOS, file, line)
    def #{name}(*args, &block)
      GLFW_FUNCTIONS_MAP['#{name}'].call(*args,&block)
    end
  EOS
  module_function(name)
  f
end

.import_symbolsObject



329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
# File 'lib/glfw.rb', line 329

def self.import_symbols
  # function
  extern 'int glfwInit()'
  extern 'void glfwTerminate()'
  extern 'void glfwGetVersion(int*, int*, int*)'
  extern 'const char* glfwGetVersionString()'
  extern 'void* glfwSetErrorCallback(void*)'
  extern 'void** glfwGetMonitors(int*)'
  extern 'void* glfwGetPrimaryMonitor()'
  extern 'void glfwGetMonitorPos(void*, int*, int*)'
  extern 'void glfwGetMonitorPhysicalSize(void*, int*, int*)'
  extern 'const char* glfwGetMonitorName(void*)'
  extern 'void* glfwSetMonitorCallback(void*)'
  extern 'const void* glfwGetVideoModes(void*, int*)'
  extern 'const void* glfwGetVideoMode(void*)'
  extern 'void glfwSetGamma(void*, float)'
  extern 'const void* glfwGetGammaRamp(void*)'
  extern 'void glfwSetGammaRamp(void*, const void*)'
  extern 'void glfwDefaultWindowHints()'
  extern 'void glfwWindowHint(int, int)'
  extern 'void* glfwCreateWindow(int, int, const char*, void*, void*)'
  extern 'void glfwDestroyWindow(void*)'
  extern 'int glfwWindowShouldClose(void*)'
  extern 'void glfwSetWindowShouldClose(void* window, int)'
  extern 'void glfwSetWindowTitle(void*, const char*)'
  extern 'void glfwGetWindowPos(void*, int*, int*)'
  extern 'void glfwSetWindowPos(void*, int, int)'
  extern 'void glfwGetWindowSize(void*, int*, int*)'
  extern 'void glfwSetWindowSize(void*, int, int)'
  extern 'void glfwGetFramebufferSize(void*, int*, int*)'
  extern 'void glfwIconifyWindow(void*)'
  extern 'void glfwRestoreWindow(void*)'
  extern 'void glfwShowWindow(void*)'
  extern 'void glfwHideWindow(void*)'
  extern 'void* glfwGetWindowMonitor(void*)'
  extern 'int glfwGetWindowAttrib(void*, int)'
  extern 'void glfwSetWindowUserPointer(void*, void*)'
  extern 'void* glfwGetWindowUserPointer(void*)'
  extern 'void* glfwSetWindowPosCallback(void*, void*)'
  extern 'void* glfwSetWindowSizeCallback(void*, void*)'
  extern 'void* glfwSetWindowCloseCallback(void*, void*)'
  extern 'void* glfwSetWindowRefreshCallback(void*, void*)'
  extern 'void* glfwSetWindowFocusCallback(void*, void*)'
  extern 'void* glfwSetWindowIconifyCallback(void*, void*)'
  extern 'void* glfwSetFramebufferSizeCallback(void*, void*)'
  extern 'void glfwPollEvents()'
  extern 'void glfwWaitEvents()'
  extern 'int glfwGetInputMode(void*, int)'
  extern 'void glfwSetInputMode(void*, int, int)'
  extern 'int glfwGetKey(void*, int)'
  extern 'int glfwGetMouseButton(void*, int)'
  extern 'void glfwGetCursorPos(void*, void*, void*)'
  extern 'void glfwSetCursorPos(void*, double, double)'
  extern 'void* glfwSetKeyCallback(void*, void*)'
  extern 'void* glfwSetCharCallback(void*, void*)'
  extern 'void* glfwSetMouseButtonCallback(void*, void*)'
  extern 'void* glfwSetCursorPosCallback(void*, void*)'
  extern 'void* glfwSetCursorEnterCallback(void*, void*)'
  extern 'void* glfwSetScrollCallback(void*, void*)'
  extern 'int glfwJoystickPresent(int)'
  extern 'const float* glfwGetJoystickAxes(int, int*)'
  extern 'const unsigned char* glfwGetJoystickButtons(int, int*)'
  extern 'const char* glfwGetJoystickName(int)'
  extern 'void glfwSetClipboardString(void*, const char*)'
  extern 'const char* glfwGetClipboardString(void*)'
  extern 'double glfwGetTime()'
  extern 'void glfwSetTime(double)'
  extern 'void glfwMakeContextCurrent(void*)'
  extern 'void* glfwGetCurrentContext()'
  extern 'void glfwSwapBuffers(void*)'
  extern 'void glfwSwapInterval(int)'
  extern 'int glfwExtensionSupported(const char*)'
  extern 'void* glfwGetProcAddress(const char*)'

  @@glfw_import_done = true
end

.load_dll(lib = nil, path = nil) ⇒ Object

Load native library.



313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
# File 'lib/glfw.rb', line 313

def self.load_dll(lib = nil, path = nil)
  if lib == nil && path == nil
    case OpenGL.get_platform
    when :OPENGL_PLATFORM_WINDOWS
      lib, path = 'GLFW3.dll', Dir.pwd
    when :OPENGL_PLATFORM_MACOSX
      lib, path = 'libglfw.dylib', Dir.pwd
    else
      lib, path = 'libglfw.so', Dir.pwd
    end
  end

  dlload (path + '/' + lib)
  import_symbols() unless @@glfw_import_done
end