Skip to content

Instantly share code, notes, and snippets.

@vaiorabbit
Created February 14, 2014 12:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vaiorabbit/9000121 to your computer and use it in GitHub Desktop.
Save vaiorabbit/9000121 to your computer and use it in GitHub Desktop.
opengl-bindings : glDebugMessageCallback のコールバック関数としてrubyのブロックを渡す例。Fiddle::Closure::BlockCaller を使うと手短に書けました。
require 'fiddle'
=begin
# https://www.opengl.org/sdk/docs/man4/html/glDebugMessageCallback.xhtml
typedef void (APIENTRY *DEBUGPROC)(GLenum source,
GLenum type,
GLuint id,
GLenum severity,
GLsizei length,
const GLchar *message,
void *userParam);
=end
cb_args = [-Fiddle::TYPE_INT, -Fiddle::TYPE_INT, -Fiddle::TYPE_INT, -Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP]
cb_retval = Fiddle::TYPE_VOID
$debug_log_callback = Fiddle::Closure::BlockCaller.new( cb_retval, cb_args, Fiddle::Function::STDCALL ) { |source, type, id, severity, length, message, userParam|
p source, type, id, severity, length, message.to_s, userParam
}
#
# ...
#
glfwInit()
glfwWindowHint( GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE )
window = glfwCreateWindow( 640, 480, "OpenGL Debug Context Test", nil, nil )
#
# ...
#
# for OpenGL 4.3
glDebugMessageCallback( $debug_log_callback, nil )
glEnable( GL_DEBUG_OUTPUT_SYNCHRONOUS )
# for OpenGL 3
=begin
if OpenGL.check_extension( 'GL_ARB_debug_output' )
OpenGL.setup_extension( 'GL_ARB_debug_output' )
glDebugMessageCallbackARB( $debug_log_callback, nil )
glEnable( GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB )
end
=end
# for OpenGL ES
=begin
if OpenGL.check_extension('GL_KHR_debug')
OpenGL.setup_extension('GL_KHR_debug')
glDebugMessageCallback( $debug_log_callback, nil )
glEnable( GL_DEBUG_OUTPUT_SYNCHRONOUS )
end
=end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment