我正在使用OpenGL中的简单粒子系统,我需要在GPU上生成粒子.通常我将粒子表示为GL_POINTS并且在开始时仅使用一个粒子生成点.我所做的是创建两个顶点缓冲对象(VBO)并根据最大粒子数在GPU上分配内存.然后创建两个变换反馈缓冲区(TFB),并将它们中的每一个绑定到一个VBO的输出.第一个TFB表示第二个VBO的输入,反之亦然(交换缓冲区).
然后我在几何着色器上生成新顶点(=点,粒子).
几何着色器代码:
#version 330 compatibility
#extension GL_ARB_geometry_shader4 : enable
layout(points) in;
layout(points, max_vertices = 3) out;
in block{
vec4 v_WorldPosition;
vec3 f_Position;
vec3 f_Color;
} In[];
out block{
vec4 v_WorldPosition;
vec4 v_Color;
} Out;
out feedback{
vec3 f_Position;
vec3 f_Color;
} feedOut;
const int i = 0; // No need for loop (points. In.length() == 1)
void main()
{
feedOut.f_Position = In[i].f_Position;
feedOut.f_Color = In[i].f_Color;
if(In[i].f_Color.g == 1){
feedOut.f_Color.g = 0;
}
Out.v_Color = vec4(feedOut.f_Color, …Run Code Online (Sandbox Code Playgroud)