首页 > 解决方案 > 我可以通过顶点着色器修改 GPU 中的顶点缓冲区吗?

问题描述

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

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

uniform mat4 someTransformation;

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

是否可以?

标签: openglgpushader

解决方案


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

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

虽然VS 可以通过多种方式直接操作缓冲区的内容,但如果正在操作的缓冲区也可能被用作渲染命令的属性数组,那么您将有未定义的行为。

您可以使用 SSBO 来操作未用作渲染输入的其他存储。您可以使用变换反馈来累积顶点处理的数据输出。但是你不能让 VS 直接修改它自己的输入数组。


推荐阅读