我希望我的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. Android內核修改
- 10. 來自內核的OpenCL稀疏矩陣訪問
- 11. 多個OpenCl內核
- 12. 殺死OpenCL內核
- 13. 剖析OpenCL內核
- 14. 優化opencl內核
- 15. opencl - 內核限制
- 16. OpenCL內核問題
- 17. 調試OpenCL內核
- 18. 從另一個OpenCL內核調用OpenCL內核
- 19. 內核中的Opencl循環
- 20. 的OpenCL內核+ ClMagma陣列
- 21. OpenCL內核的優化
- 22. opencl遍歷內核中的數組
- 23. 修改Android內核交換
- 24. 更改OpenCL內核中數組的大小
- 25. 僅修改VBO緩衝區數據的特定元素類型?
- 26. OpenCL,多工作組/內核?
- 27. OpenCL內核錯誤-11
- 28. 構建opencl內核失敗
- 29. OpenCL:防止內核緩存
- 30. OpenCL內核構建錯誤
http://enja.org/2010/08/27/adventures-in-opencl-part-2-particles-with-opengl/可能會有所幫助。我有一個可以運行的例子,我會盡量在後面找到。你基本上需要創建一個GL/CL共享上下文。之後,一切都很簡單。 – DarkZeros
似乎就是這樣,我需要什麼。謝謝! – Addi
@DarkZeros,我建議你把你的評論作爲答案,以便它可以被標記爲正確的。 – Dithermaster