只能在片段着色器中创建纹理吗?

时间:2019-03-02 12:14:13

标签: c++ opengl glsl textures shader

我有一个2遍渲染管道-延迟阴影-用于点云渲染。 (GLSL 4.30和c ++ 17)

着色器管道:

Pointloud.vertex-> Pointcloud.fragment-> FullscreenQuad.vertex-> Deferred.fragment

我想要实现的是从 Pointloud.vertex-> Pointcloud.fragment 状态收集一些数据,并将其作为纹理发送到Deferred.fragment着色器。

类似的数据 Vertex_ID,Frag-Coord.z和纹理坐标(在Pointloud.vertex部分中可用)

基本上,我想在Pointcloud.fragment着色器中创建2个纹理,在给定的纹理坐标位置上存储dept信息,在另一个纹理中将顶点ID存储在相同的坐标上。

是否可以在着色器中本地创建并写入纹理?重要的是要解决此问题而不影响c ++。

1 个答案:

答案 0 :(得分:2)

着色器无法分配纹理和缓冲区等资源。他们可以使用资源,但不能随意创建它们。您必须在应用程序中创建任何此类资源。如果您没有能力修改应用程序的代码,则无需执行任何操作。