【发布时间】:2011-05-12 06:53:35
【问题描述】:
我有一个使用着色器的 OpenGL 程序(OpenGL 3.3 版,GLSL 1.5 版)。我听说着色器实际上在 CPU 上运行,除非您明确告诉它在 GPU 上运行。 (当然,我使用着色器的全部原因是通过在 GPU 而不是 CPU 中进行计算来加速渲染,所以这不是我想要的行为。)这是真的吗?如果是这样,如何让着色器在 GPU 上运行?
【问题讨论】:
我有一个使用着色器的 OpenGL 程序(OpenGL 3.3 版,GLSL 1.5 版)。我听说着色器实际上在 CPU 上运行,除非您明确告诉它在 GPU 上运行。 (当然,我使用着色器的全部原因是通过在 GPU 而不是 CPU 中进行计算来加速渲染,所以这不是我想要的行为。)这是真的吗?如果是这样,如何让着色器在 GPU 上运行?
【问题讨论】:
我不确定您是从哪里听说的,但假设您从图形供应商那里获得了中规中矩的驱动程序,您的着色器将在 GPU 上运行,而您除了加载和使用它们之外什么都不做。
【讨论】:
GL_LINE_SMOOTH 是一个经典示例)。
我很确定驱动程序总是试图在 GPU 而不是 CPU 上运行每个着色器。但并非所有现代视频卡都支持完整的着色器操作功能集。例如,据我所知,OpenGL 4.0 扩展 GL_ARB_gpu_shader_fp64 可以在部分支持中使用。所以驱动程序必须在 CPU 上模拟一些软件模式下的操作。关于扩展,您可以通过调用glGetString 使用GL_EXTENSIONS 参数来检查您的卡。
【讨论】: