(解决了)
安装其中之一时出现问题:
{OpenTK,JIT(C#),错误的依赖关系,错误的 DLL,GPU 驱动程序,我}
现在同样的事情在 Java+jocl+lwjgl 中没有问题。
在一个简单的 opencl-opengl 互操作程序中,内核使用 GL 缓冲区(顶点、颜色、..)和 CL 缓冲区(以毫秒为单位的时间和过滤数据)来改变网格的顶点。当共享上下文只有一个内核时,它可以工作。
问题:当我使用两个 cl-kernel 而不是一个时,为什么不能再添加 GL-buffers?第二个内核是从单独的字符串(C99 代码)构建为单独的程序
OpenCL 的缓冲区是在 C++ 代码中创建的:
//raises System.AccessViolationException at C# if there are more than 1 kernel
glBuf1=cl::BufferGL(ctx,CL_MEM_READ_WRITE,glBufName,0); // exception is exactly here
//no error even with multiple kernels
buf1=cl::Buffer(ctx,CL_MEM_READ_WRITE,sizeof(cl_float) * 1);//single time variable
buf2=cl::Buffer(ctx,CL_MEM_READ_WRITE,sizeof(cl_float) * bufferN*3);// some filter data
buf3=cl::Buffer(ctx,CL_MEM_READ_WRITE,sizeof(cl_float) * bufferN*3);// some filter data
OpenGL 的缓冲区是用 C# 代码创建的:
GL.GenBuffers(1,&name); // and name is passed to opencl wrapper as glBufName.
是否有类似 “每个内核必须在单独的上下文中,并且如果上下文要在 opengl 和 opencl 之间共享,每个上下文必须具有与其他上下文不同的缓冲区”这样的规则?
编辑: 64 位目标 buid,windows7-64 位,OpenTK 作为 opengl 部分,来自 Khronos 站点的 opencl 1.2 C++ 包装器作为 opencl 部分。
编辑:用于纯 open-cl 计算的多个内核可以正常工作。当包含 GL 缓冲区时,它会出错。对于我的 windows7-64 位 + HD7870 WHQL 13.4 + opentk + opencl 1.2 c++ 包装器,只有单个 opencl 内核和 opengl 可以配合。