gpt4 book ai didi

c - GL 调用着色器并获取输出颜色

转载 作者:太空宇宙 更新时间:2023-11-04 06:33:25 25 4
gpt4 key购买 nike

我不熟悉 OpenGL,但如果可能的话,我可能想深入研究它。基本上,我想用 GL 着色语言编写一个着色器并查询此着色器以获得一些输出值。我浏览了一些在线文章,据我所见,着色器似乎直接由 OpenGL 执行并映射到几何体。

为了清楚起见,我想写一些梦想中的代码:

// Load the GL shader `shader`
// ...

// GLShaderOutput and glQueryShader are imaginary names

GLShaderOutput out = glQueryShader(shader, /* input parameters */);

// Obtain the received data

Color color;
glGetOutputParameter(out, "gl_FragColor", &color);

着色器的实现或使用着色器计算数据的确切代码可能是任意的。我只想使用 GLSL 执行计算。这可能吗?

最佳答案

这根本不是着色器的工作方式。他们从渲染管道的一个阶段获取数据,对其进行处理并输出在下一阶段开始工作所需的数据。所以通常情况下,你会有顶点数据输入(顶点着色器),它会被转换成一个合适的 vector 空间,然后从它构造基元(即三角形)(几何着色器,曲面 segmentation 着色器),然后一组像素是栅格化,它们的颜色将在像素着色器中计算。然后像素着色器的输出将与其他像素混合以生成最终图像。着色器的全部意义在于使渲染管线更加灵活,但从根本上讲,它们的设计目的仍然是通过执行着色器的多个阶段来输出图像。

确实存在允许您使用传统渲染管线在 GPU 上进行通用 GPU 计算的黑客。这些 hack 通常涉及绘制 2x2 纹理和在像素着色器中执行所有计算。然后,您将读回您在像素着色器中写入的纹理的颜色缓冲区。

简而言之,由于事物的高度并行流水线特性,您永远无法查询着色器的结果。您总是必须等待管道完成将所有输入数据推送到每个阶段,然后再读回最终图像。您可以使用变换反馈来稍微缩短过程,并获得顶点着色器的输出,但这可能也不是您想要的。

现在,您可以完全跳过使用 Direct3D 或 OpenGL,以更直接的方式直接与 GPU 上的流处理器交互。我建议您不要以从未真正打算使用的方式使用图形管道,而是查看 OpenCLCUDA

或者,计算着色器(绕过传统渲染管道)在 OpenGL 和 Direct3D 的最新实现中公开(需要 DX11 类硬件,目前驱动程序支持非常有限)。

关于c - GL 调用着色器并获取输出颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17953757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com