【问题标题】:Can I modify vertex buffer in GPU through the vertex shader?我可以通过顶点着色器修改 GPU 中的顶点缓冲区吗?
【发布时间】:2021-11-20 18:41:05
【问题描述】:

由于某种原因无法在网上找到答案。我想通过着色器以类似的形式更新GPU中的顶点属性:

#version 330 core
layout(location = 0) in vec4 position;

uniform mat4 someTransformation;

void main()
{
    position = position * someTransformation;
    gl_Position = position;
}

有可能吗?

【问题讨论】:

  • “我可以通过顶点着色器修改 GPU 中的顶点缓冲区吗?” - 不,你不能。 position 是一个输入变量。没有将顶点写回缓冲区的概念。但是,您可以使用Transform Feedback 生成新的原语。
  • @Rabbid76 谢谢。这说明了很多

标签: opengl gpu shader


【解决方案1】:

你能写出你写的代码吗?是的,那是法律法规。

这会改变任何 GPU 存储的内容吗?没有。

虽然有ways for a VS to directly manipulate the contents of a buffer,但如果正在操作的缓冲区也可能被用作渲染命令的属性数组,那么您将有未定义的行为。

您可以使用 SSBO 来操作 other 未用作渲染输入的存储。并且您可以使用transform feedback 来累积顶点处理的数据输出。但是你不能让 VS 直接修改它自己的输入数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多