小编sen*_*ruc的帖子

glBindTexture(),glBegin()中的OpenGL/OpenCL互操作性能

我正在开发一个多GPU设置的OS X应用程序(Mac Pro 2013后期),它使用OpenCL(在辅助GPU上)生成纹理,然后使用OpenGL(在主GPU上)将其绘制到屏幕上.由于调用glBindTexture()和glBegin(),应用程序受CPU限制,两者都基本上花费了他们所有的时间:

_platform_memmove$VARIANT$Ivybridge
Run Code Online (Sandbox Code Playgroud)

这是视频驱动程序的一部分:

AMDRadeonX4000GLDriver
Run Code Online (Sandbox Code Playgroud)

设置:创建OpenGL纹理(glPixelBuffer),然后创建OpenCL对应物(clPixelBuffer).

cl_int clerror = 0;
GLuint glPixelBuffer = 0;
cl_mem clPixelBuffer = 0;

glGenTextures(1, &glPixelBuffer);
glBindTexture(GL_TEXTURE_2D, glPixelBuffer);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2048, 2048, 0, GL_RGBA, GL_FLOAT, NULL);
glBindTexture(GL_TEXTURE_2D, 0);

clPixelBuffer = clCreateFromGLTexture(_clShareGroupContext, CL_MEM_WRITE_ONLY, GL_TEXTURE_2D, 0, glPixelBuffer, &clerror);
Run Code Online (Sandbox Code Playgroud)

绘图代码:将OpenGL纹理映射到视口.整个NSOpenGLView就是这一个纹理.

glClear(GL_COLOR_BUFFER_BIT);

glBindTexture(GL_TEXTURE_2D, _glPixelBuffer);  // <- spends cpu time here,
glBegin(GL_QUADS);                             // <- and here
glTexCoord2f(0., 0.); glVertex3f(-1.f,  1.f, 0.f);
glTexCoord2f(0., hr); glVertex3f(-1.f, -1.f, 0.f);
glTexCoord2f(wr, hr); …
Run Code Online (Sandbox Code Playgroud)

opengl macos opencl nsopenglview

5
推荐指数
1
解决办法
435
查看次数

标签 统计

macos ×1

nsopenglview ×1

opencl ×1

opengl ×1