最近,我已将CUDA-raytracer应用程序从Linux(Qt 5.11.1 G ++)移植到Windows(Qt 5.11.1 MSVC2017)。 CUDA-raytracer写入OpenGL ES的像素解压缩缓冲区,QQuickFramebufferObject::Renderer
将其渲染为仅在单个“全屏”三角形(此处为(3, -1), (-1, 3), (-1, -1)
)上的纹理。
我很好奇,当我构建项目时几乎没有任何更改,并且它开始在Windows上立即工作(CUDA统一内存访问功能除外)。 cudaGLGetDevices(&deviceCount, &dev, 1, cudaGLDeviceListAll);
返回正确的值。
现在我认为,并不是Windows上的每个环境在所有情况下都相同。 Somtimes ANGLE可以使用DirectX 9、11甚至12(甚至vk)作为其后端,以将OpenGL ES函数调用转换为它。如果肯定cudaGraphicsGLRegisterBuffer
无法正常工作(直到没有一些微妙的NV和DX互操作扩展名)。
如何以编程方式检查在ANGLE的支持下当前用于实现OpenGL ES的后端?