c++ - 是否可以仅在片段着色器中创建纹理?

标签 c++ opengl glsl textures shader

我有一个 2 pass 渲染管道——延迟着色——用于点云渲染。 (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 个纹理,在给定的纹理坐标位置上存储部门信息,在另一个纹理中存储相同坐标上的顶点 ID。

是否可以在着色器中本地创建和写入纹理?重要的是在不受 C++ 影响的情况下解决这个问题。

最佳答案

着色器无法分配纹理和缓冲区等资源。他们可以使用资源,但不能从无到有地创造它们。您必须在应用程序中创建任何此类资源。如果您没有能力修改应用程序的代码,那么就没有什么可做的。

关于c++ - 是否可以仅在片段着色器中创建纹理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54958404/

相关文章:

c++ - 如何获得表格的大小

c++ - OpenSceneGraph 未加载 openflight 插件

java - OpenGL (LWJGL) - 获取纹理的像素颜色

opengl - 基于物理的渲染: role of ambient light in BRDF

c++ - 找不到 GLSL 着色器统一位置

C++,将日期视为数字

c++ - 如何在 C++ 中动态添加/删除 QML 属性?

c++ - 使用 bool 值设置位集的最佳方法

java - LWJGL代码产生黑屏

c++ - 制作shader将vertexArray作为canvas而不是window