pharo から NBOpenGL ラッパーを介して OpenGL 関数を呼び出そうとしています。この OpenGL 関数をラップする smalltalk メソッド
void glGetShaderiv ( GLuint shader , GLenum pname , long* params )
署名があります
getShaderiv_shader:pname:params
したがって、 params: パラメータは明らかに長いポインタでなければなりません。それが私が作成しようとした理由です
NativeBoost allocate:
しかし実際には、getShaderiv_shader を呼び出すと取得し続けます
Error during FFI call : nil
いつも。
私は何を間違っていますか??
そのパラメーターは、出力パラメーターでもあるはずです。
メソッドの完全なコードをここに添付します。
aShader は int であり、GL_ 定数も int です。
report:aShader
| len status statusPtr lenPtr logPtr |
len := GL_INFO_LOG_LENGTH.
status:= GL_COMPILE_STATUS.
statusPtr := NativeBoost allocate: (NBExternalType sizeOf: 'long').
statusPtr nbUInt64AtOffset: 0 put: 0.
gl getShaderiv_shader: aShader pname: status name params: statusPtr.
(statusPtr value == GL_FALSE) ifTrue: [
lenPtr := NativeBoost allocate: (NBExternalType sizeOf: 'int').
gl getShaderiv_shader: aShader pname: len params: lenPtr.
logPtr := NativeBoost allocate: (NBExternalType sizeOf: 'char') * (lenPtr+1).
gl getShaderInfoLog_shader: aShader bufSize:lenPtr length: 0 infoLog: logPtr.
].
Transcript show: logPtr.
statusPtr free.
lenPtr free.
logPtr free.
Windows 7、64 ビットで Pharo 3.0 を使用しています。また、smalltalkhub から 2.0 構成で NBOpenGL をインストールしました。