Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 5 of 5

Thread: 2 questions: VAO and geometry shaders

  1. #1
    Junior Member Newbie
    Join Date
    Jul 2014
    Posts
    15

    2 questions: VAO and geometry shaders

    1) VAO:

    I'm getting really bad performance from VAOs, wich is the greatest version number of OpenGL in wich VAOs are not mandatory? I will use core context of that version (like 6-8% less drawcalls if using VAOs instead of setting states singulary, also because when states are singular you can avoid in average 3/4 of the calls because become redundant, seems that you can easily outperform drivers in that kind of optimization).


    2) Geometry shaders:

    Is it possible to emit vertices inside geometry shaders and having those vertices use a vertex format different from the one of the VBO? (says I have particles I just input a set o points (X,Y,Z) and a textureindex (for the texture array) then the geometry shader outputs 4 (or more if want to save some fill rate) vertices and adds to them the UV coordinates wich are easily generated.

    Thanks in advance

  2. #2
    Member Regular Contributor malexander's Avatar
    Join Date
    Aug 2009
    Location
    Ontario
    Posts
    326
    1) There is no version of the core profile where you can avoid VAOs. You can bind a VAO at startup and leave it bound in the context for the entire program duration, though. Then you can set vertex states singularly as you did in non-core.

    2) Yes, you can emit any set of varyings you want from a geometry shader, as long as they match up to your fragment shader inputs. However, the more outputs and vertices you produce, the slower the geometry processing will be as fewer invocations of the shader can be run in parallel. It seems like many implementations will pad your output variable to vec4, so for example combining two vec2 outputs into a vec4 output can be beneficial.

  3. #3
    Intern Contributor
    Join Date
    May 2013
    Posts
    69
    You can just run a non core profile. I think nvidia drivers will let you use a core profile without any VAOs. That is not standard conform but just there way to say "fuck VAOs".
    malexander already mentioned the default way to handle this, create and bind a single VAO. That's what I do, because I work with mesa drivers and need to use a core profile to get GL3.3.
    And if available I use ARB_vertex_attrib_binding and ARB_multi_bind. If your layout stays the same you can change all vertex buffer bindings with a single call.

    You tell the geometry shader what type (there is only points​, line_strip​, triangle_strip​) and how many you output maximum. (http://www.opengl.org/wiki/Geometry_Shader)

  4. #4
    Senior Member OpenGL Guru Dark Photon's Avatar
    Join Date
    Oct 2004
    Location
    Druidia
    Posts
    3,220
    You've already got some good responses. Just to add to that, for VAO just use a compatibility profile and never use VAOs if you don't want to. If you must use core, just gen and bind one VAO, and then blissfully ignore the fact that VAOs even exist.

    As to geom shader, ...what they said. In the new-style (3.2 "core", ARB_gpu_shader5) way, you just declare what your geometry shader outputs in your geometry shader source code. For instance, let's suppose your geom shader is generating POINTS output to 2 streams, writing a vec4 and a float to each for point, in your geom shader you'd have:

    Code glsl:
    # extension GL_ARB_gpu_shader5  : require
     
      layout( points, max_vertices = 1 ) out;
     
      layout( stream=0 ) out vec4  apples0;
      layout( stream=1 ) out vec4  apples1;
      layout( stream=0 ) out float oranges0;
      layout( stream=1 ) out float oranges1;

  5. #5
    Junior Member Newbie
    Join Date
    Jul 2014
    Posts
    15
    Uao thanks very much guys! that's a lot of stuff I'll have my time to get deep into that unluckily I don't have parte of the features you mentioned but I have a lot to play with now

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •