3

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 をインストールしました。

4

0 に答える 0