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 是一个整数,而 GL_ 常量也是整数。

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