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调用会崩溃,即使我能够成功编译。不过,我确实找到了一个解决方案,我将很快在这里发布。