几何着色器GLSL的条件输出

时间:2014-08-28 16:40:04

标签: opengl glsl vbo opengl-4 geometry-shader

我试图弄清楚如何在几何着色器中切换输出,特别是这两个输出:

layout(points, max_vertices = 1) out;          // OUTPUT 1
layout(triangle_strip, max_vertices = 4) out;  // OUTPUT 2

我正在渲染星团,并使用几何着色器中生成的精灵,拥有100 000多颗恒星的数据集。但是,只有当我们靠近目标星时才会出现精灵“光环”。

几何着色器

#version 440
const vec2 corners[4] = { 
    vec2(0.0, 1.0), 
    vec2(0.0, 0.0), 
    vec2(1.0, 1.0), 
    vec2(1.0, 0.0) 
};

layout(points) in;
layout(points, max_vertices = 1) out;
//layout(triangle_strip, max_vertices = 4) out;

uniform vec4 campos;

float spriteSize = 0.000005; // set here for now.
out vec2 texCoord;

void main(){
    float distToPoint = 1; //(1.f/((length(gl_in[0].gl_Position - campos)) ));

    if(distToPoint == 1){ // dumb condition just to illustrate my point
    // EMIT QUAD
        for(int i=0; i<4; ++i){
            vec4 pos    = gl_in[0].gl_Position;                 
            pos.xy     += spriteSize *(corners[i] - vec2(0.5)); 
            gl_Position = pos;                                  
            texCoord    = corners[i];                           
            EmitVertex();
        }
        EndPrimitive();
    }else{ 
    // EMIT POINT
        gl_Position = gl_in[0].gl_Position;
        EmitVertex();
        EndPrimitive();
    }
}

片段着色器

void main(void){
    ... // First I do a bunch of depth computation, irrelevant to this question
    gl_FragDepth = depth;

   // Here I want to switch between these two outputs! 

    //diffuse = texture2D(texture1, texCoord); // OUTPUT 1
   diffuse = vec4(Color, 1.0);                 // OUTPUT 2

}

我最近遇到了几何着色器的,但是找不到在我的实例中如何做到这一点的一个很好的例子。

如果需要发布更多代码,请与我们联系。

0 个答案:

没有答案