Opengl 如何在Clarion中正确传递数组地址?
原型:Opengl 如何在Clarion中正确传递数组地址?,opengl,clarion,Opengl,Clarion,原型: glSelectBuffer( GLsizei , *GLuint ),PASCAL mySelectionBuffer &= NEW(STRING(30)) myBufferPointer &= ADDRESS(mySelectionBuffer) DISPOSE(mySelectionBuffer) 变量: glSelectBuffer( GLsizei , *GLuint ),PASCAL mySelectionBuffer &= NEW(
glSelectBuffer( GLsizei , *GLuint ),PASCAL
mySelectionBuffer &= NEW(STRING(30))
myBufferPointer &= ADDRESS(mySelectionBuffer)
DISPOSE(mySelectionBuffer)
变量:
glSelectBuffer( GLsizei , *GLuint ),PASCAL
mySelectionBuffer &= NEW(STRING(30))
myBufferPointer &= ADDRESS(mySelectionBuffer)
DISPOSE(mySelectionBuffer)
代码:
glSelectBuffer( GLsizei , *GLuint ),PASCAL
mySelectionBuffer &= NEW(STRING(30))
myBufferPointer &= ADDRESS(mySelectionBuffer)
DISPOSE(mySelectionBuffer)
错误:
glSelectBuffer( GLsizei , *GLuint ),PASCAL
mySelectionBuffer &= NEW(STRING(30))
myBufferPointer &= ADDRESS(mySelectionBuffer)
DISPOSE(mySelectionBuffer)
没有匹配的原型可用-C:
原型本身是否有问题,或者我传递的变量是否有问题
关于更多细节,实际的函数是glSelectBuffer(GLsizei,*GLuint),PASCAL
其中GLSizei等同于ULONG,GLuint等同于ULONG
有没有可能是等值线导致系统故障?我不这么认为,因为到目前为止还没有其他问题,调整其他功能以与Clarion兼容,但这一问题尤其令人非常棘手。函数正在寻找一个用户定义大小的数组,用作保存选择数据的缓冲区。我认为创建一个缓冲区(请参阅:myArray-ULONG,DIM(30))然后只传递变量就足够简单了,因为它应该传递数组的地址,但到目前为止,这只会导致上面列出的编译错误
非常感谢您的帮助。当一切都失败时,您可以将参数原型化为
LONG
,并将变量的地址
传递给它,例如:
原型:
glSelectBuffer( GLsizei , *GLuint ),PASCAL
mySelectionBuffer &= NEW(STRING(30))
myBufferPointer &= ADDRESS(mySelectionBuffer)
DISPOSE(mySelectionBuffer)
代码:
glSelectBuffer( GLsizei , *GLuint ),PASCAL
mySelectionBuffer &= NEW(STRING(30))
myBufferPointer &= ADDRESS(mySelectionBuffer)
DISPOSE(mySelectionBuffer)
等同于:
GLsizei EQUATE(ULONG)
GLuint EQUATE(ULONG)
mySelectionBuffer &STRING
myBufferPointer &ULONG
curSelection ULONG
![glSelectBuffer(Size of Buffer Array, Pointer to Buffer)
glSelectBuffer(30, myBufferPointer)
原型:
glSelectBuffer( GLsizei , *GLuint ),PASCAL
mySelectionBuffer &= NEW(STRING(30))
myBufferPointer &= ADDRESS(mySelectionBuffer)
DISPOSE(mySelectionBuffer)
数据:
GLsizei EQUATE(ULONG)
GLuint EQUATE(ULONG)
mySelectionBuffer &STRING
myBufferPointer &ULONG
curSelection ULONG
![glSelectBuffer(Size of Buffer Array, Pointer to Buffer)
glSelectBuffer(30, myBufferPointer)
Init:
glSelectBuffer( GLsizei , *GLuint ),PASCAL
mySelectionBuffer &= NEW(STRING(30))
myBufferPointer &= ADDRESS(mySelectionBuffer)
DISPOSE(mySelectionBuffer)
使用:
GLsizei EQUATE(ULONG)
GLuint EQUATE(ULONG)
mySelectionBuffer &STRING
myBufferPointer &ULONG
curSelection ULONG
![glSelectBuffer(Size of Buffer Array, Pointer to Buffer)
glSelectBuffer(30, myBufferPointer)
然后,要捕获数据:
...
LOOP i# = 1 TO numHits ![result of glRenderMode(GL_RENDER)]
curSelection = ADDRESS(mySelectionBuffer) + (SIZE(curSelection) * i#)
.
![Process selection data as needed]
...
关机:
glSelectBuffer( GLsizei , *GLuint ),PASCAL
mySelectionBuffer &= NEW(STRING(30))
myBufferPointer &= ADDRESS(mySelectionBuffer)
DISPOSE(mySelectionBuffer)
有些人可能会争辩说,这不是处理问题的最佳方式,但最终这是我遇到的唯一一个解决方案,它不仅可以编译,而且在将数据传递回OpenGL之后不会在OpenGL端崩溃。我宁愿避免使用内存来完成手头的任务,但似乎在处理其他API中的函数时,这是不可避免的…正确的方法只是将[]放入原型中。 例如,下面的程序编译得很好
PROGRAM
myArray ULONG, DIM(30)
myStuff ULONG
MAP
myFunction( ULONG , *ULONG[] ),PASCAL
END
CODE
myFunction(myStuff,myArray)
myFunction Procedure(a,b)
code
Clarion?我曾经尝试过这个方法,不幸的是,当使用这个方法时,OpenGL调用会崩溃,即使我能够成功编译。不过,我确实找到了一个解决方案,我将很快在这里发布。