如何使用javacl将向量类型传递给内核

时间:2019-06-22 19:27:56

标签: java opencl

我正在使用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之前,我所有的代码都在工作。

在此先感谢您的帮助!

0 个答案:

没有答案