【问题标题】:Is it possible to create a texture only in Fragment shader?是否可以仅在片段着色器中创建纹理?
【发布时间】:2019-07-24 07:11:08
【问题描述】:

我有一个 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 个纹理,在给定的纹理坐标位置存储部门信息,并在另一个纹理中存储相同坐标上的顶点 ID。

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

【问题讨论】:

  • “重要的是在不影响 c++ 的情况下解决这个问题。” 请您详细说明一下这个要求吗?
  • Is it possible to create and write into textures locally in shaders? 写信给:是的。创建:没有。查看如何绑定和渲染到多个渲染目标。
  • 您必须渲染到 Framebuffer Object 并将 Texture 附加到帧缓冲区的颜色平面。见Framebuffer Object - Attaching Images
  • @πάντα ῥεῖ 这是一个运行良好的复杂应用程序,我只需要计算一些东西,我需要的所有数据都已经在着色器中。此外,我无法访问渲染器功能来手动附加 Rabbid76 建议的另一个纹理。但我认为,如果无法在本地创建纹理,这不是正确的方法。

标签: c++ opengl glsl textures shader


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多