我正在使用JavaCL在Java中开发一个简单的光线跟踪器。我的内核中有一个常数,但是(可以)在每次调用时更改它,即射线的起源。
我想像在C ++中一样做,将向量“ float3”作为内核参数传递。但是我从JavaCL中收到了InvalidArgSize异常。
我的第一次尝试是使用数组:
private float[] mPosition = new float[]{0,0,-150};
...
mKernel.setArg(2, mPosition);
然后一个指针:
mKernel.setArg(2, Pointer.pointerToFloats(mPosition));
我当然可以使用缓冲区,但是当float3类型存在时为什么要创建3 float缓冲区...
有我的内核头文件:
__kernel void test(__write_only image2d_t image, long time, float3 origin)
还有日志:
Exception in thread "AWT-EventQueue-0" com.jogamp.opengl.GLException: Caught InvalidArgSize: InvalidArgSize (kernel name = test, num args = 3, arg index = 2, source = <<<...>>> ) on thread AWT-EventQueue-0
at com.jogamp.opengl.GLException.newGLException(GLException.java:76)
at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1327)
at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147)
at com.jogamp.opengl.awt.GLJPanel$OffscreenBackend.doPaintComponent(GLJPanel.java:2095)
at com.jogamp.opengl.awt.GLJPanel.paintComponent(GLJPanel.java:569)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1074)
...
在尝试引入这个float3 arg之前,我所有的代码都在工作。
在此先感谢您的帮助!