首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用着色器并获得输出颜色。

问调用着色器并获得输出颜色。
EN

Stack Overflow用户
提问于 2013-07-30 17:40:49
回答 2查看 161关注 0票数 0

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

为了说明问题,我想写一些我想写的梦代码:

代码语言:javascript
复制
// 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进行计算。这个是可能的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-30 18:25:11

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

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

简而言之,您永远无法查询着色器的结果,因为它具有高度并行的流水线特性。您总是要等待管道完成,将所有输入数据推送到每个阶段,然后再读取最后的图像。您可以使用转换反馈缩短进程一点点,并得到一个顶点着色器的输出,但这可能不是你想要的。

现在,您可以完全跳过使用Direct3D或OpenGL,直接以更直接的方式与GPU上的流处理器进行接口。我建议您研究一下OpenCL或CUDA,而不是以从未真正被使用过的方式使用图形管道。

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

票数 2
EN

Stack Overflow用户

发布于 2013-07-30 18:25:01

OpenGL 4.3给你计算着色器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17953757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档