Я хочу, чтобы выход моей программы OpenCL рисовался непосредственно на экране, без загрузки с графического процессора, а затем снова загружался. Как я могу поместить данные в мой массив вершин из ядра? Я использую glfw3 и glew вместе с библиотекой OpenCL по умолчанию nVidia в C++.Измените данные VBO из ядра OpenCL
0
A
ответ
2
Этот пример может помочь: http://enja.org/2010/08/27/adventures-in-opencl-part-2-particles-with-opengl/
Основным требованием является, чтобы настроить общий контекст CL/GL. В зависимости от вашего GL-хоста, вам необходимо установить различные свойства в контексте CL:
Apple:
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 не обновляет OpenGL VBO
- 2. Оптимизация компилятора ядра OpenCL
- 3. Синтаксис определения ядра OpenCL
- 4. Как обновить данные общего буфера OpenCL-OpenGL в ядре OpenCL?
- 5. OpenCL Недопустимое имя ядра
- 6. OpenCL Ядра аргументы неоднозначность
- 7. Оптимизация ядра opencl
- 8. Ошибка компиляции ядра OpenCL
- 9. OpenCL ядра + ClMagma массивы
- 10. Код ядра OpenCl
- 11. Killing OpenCL ядра
- 12. аргументы ядра OpenCL
- 13. Сбой ядра opencl
- 14. OpenCL: Код ядра?
- 15. Чтение ядра OpenCL из отдельного файла
- 16. segfault из плохого ядра OpenCL 2.0
- 17. Доступ к разреженной матрице OpenCL из ядра
- 18. openCL без внешнего файла ядра
- 19. Чтение внешнего ядра в OpenCL
- 20. Измерение пропускной способности ядра OpenCL
- 21. Данные обновления OpenGL VBO
- 22. Вложенные функции ядра для opencl
- 23. множественные вызовы ядра в opencl
- 24. Проблема в функции OpenCL ядра
- 25. Совместное использование данных OpenCL ядра
- 26. Непоследовательные результаты OpenCL от ядра
- 27. opencl длительное время выполнения ядра
- 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