OpenGL ES 3.0、openGL 4.x新增的功能
我们总是将顶点数据发送到图形处理器,并且只在帧缓存中生成绘制的像素。如果我们想要在经过顶点着色器或几何着色器之后捕获这些顶点呢?在这一章中,我们将探讨一种方法,即transform feedback。TransformFeedback是OpenGL管线中,顶点处理(如果有几何着色器,那么就在几何着色器后)之后,图元装配之前的一个步骤。
我们已经使用了VBO(顶点缓冲区对象)来存储用于绘制操作的顶点。Transform feedback 允许着色器把顶点写回这些。
例如,您可以构建一个顶点着色器,它模拟重力并将更新后的顶点位置写回缓冲区。这样,您就不必将这些数据从图形内存传输到主内存。最重要的是,你可以从如今GPU的巨大的并行处理能力中获益。
这个特性可以用来简化像粒子模拟这样的效果
让我们从一个简单的顶点着色器开始。
const GLchar* vertexShaderSrc = R"glsl(
in float inValue;
out float outValue;
void main()
{
outValue = sqrt(inValue);
}
)glsl";
这个顶点着色器似乎没有多大意义。它没有设置一个gl_position,它只接受一个任意的浮点数作为输入。幸运的是,我们可以使用Transform feedback来捕获结果,我们马上就会看到。
GLuint shader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(shader, 1, &vertexShaderSrc, nullptr);
glCompileShader(shader);
GLuint program = glCreateProgram();
glAttachShader(program, sh

本文介绍了OpenGL中的Transform Feedback功能,允许在顶点处理后捕获数据,避免数据在GPU和主内存之间的传输。通过创建Transform Feedback对象,绑定缓存,并配置记录变量,可以在顶点着色器或几何着色器后捕获更新的顶点位置,适用于粒子模拟等场景。文章详细讲解了Transform Feedback对象的创建、缓存绑定、变量配置、启动和停止流程。
Transform Feedback变换反馈&spm=1001.2101.3001.5002&articleId=89873394&d=1&t=3&u=e02f21c346894db7bd6614404e891ee3)
1073

被折叠的 条评论
为什么被折叠?



