我希望我的OpenCL程序的输出直接在屏幕上绘制,而不需要从GPU下载然后再次上传。我如何将数据放入内核的顶点数组中?我在C++中使用glfw3,并与nVidia的默认OpenCL库一起使用。修改来自OpenCL内核的VBO数据
0
A
回答
2
该示例可以帮助:http://enja.org/2010/08/27/adventures-in-opencl-part-2-particles-with-opengl/
关键要求是成立CL/GL共享的上下文。根据您的GL主机上,你需要不同的属性设置为CL背景:
苹果:
cl_context_properties props[] =
{
CL_CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE, (cl_context_properties)kCGLShareGroup,
0
};
的Windows:
cl_context_properties props[] =
{
CL_GL_CONTEXT_KHR, (cl_context_properties)wglGetCurrentContext(),
CL_WGL_HDC_KHR, (cl_context_properties)wglGetCurrentDC(),
CL_CONTEXT_PLATFORM, (cl_context_properties)(platforms[0])(),
0
};
其他:
cl_context_properties props[] =
{
CL_GL_CONTEXT_KHR, (cl_context_properties)glXGetCurrentContext(),
CL_GLX_DISPLAY_KHR, (cl_context_properties)glXGetCurrentDisplay(),
CL_CONTEXT_PLATFORM, (cl_context_properties)(platforms[0])(),
0
};
然后,您创建上下文并使用GL缓冲区(每次获取并释放它们):
context = cl::Context(CL_DEVICE_TYPE_GPU, props);
cl::BufferGL glbuffer(context, CL_MEM_READ_WRITE, myvbo, &err);
for (each frame){
queue.enqueueAcquireGLObjects(&glbuffer);
//use glbuffer as if it is a clbuffer
queue.enqueueReleaseGLObjects(&glbuffer);
}
相关问题
- 1. OpenCL内核参数
- 2. OpenCL自相关内核
- 3. OpenCL内核中的自定义类型
- 4. 来自内核的OpenCL稀疏矩阵访问
- 5. 多个OpenCl内核
- 6. 调试OpenCL内核
- 7. 剖析OpenCL内核
- 8. 杀死OpenCL内核
- 9. 优化opencl内核
- 10. 从另一个OpenCL内核调用OpenCL内核
- 11. OpenCL内核的优化
- 12. 的OpenCL内核+ ClMagma阵列
- 13. OpenCL内核错误-11
- 14. OpenCL内核无法编译
- 15. OpenCL内核构建错误
- 16. 等内核完成OpenCL
- 17. 并行访问OpenCL内核参数值
- 18. OpenCL:使用struct作为内核参数
- 19. 具有通用数据类型的OpenCL内核
- 20. Magento - 修改核心数据库
- 21. OpenCL Gemm内核本地内存变慢
- 22. 修改内核,WFP的HTML请求?
- 23. opencl内核中的位反转
- 24. Mac OSx上的OpenCL内核错误
- 25. opencl中的多个内核调用
- 26. openCL内核中的复杂结构
- 27. OpenCL内核中__的含义是什么?
- 28. OpenCL变量或内核成本内存中的数组?
- 29. get_user_pages_fast()来自内核线程
- 30. 如何修改内核timer_list timeout
http://enja.org/2010/08/27/adventures-in-opencl-part-2-particles-with-opengl/可能会有所帮助。我有一个可以运行的例子,我会尽量在后面找到。你基本上需要创建一个GL/CL共享上下文。之后,一切都很简单。 – DarkZeros
似乎就是这样,我需要什么。谢谢! – Addi
@DarkZeros,我建议你把你的评论作为答案,以便它可以被标记为正确的。 – Dithermaster