Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Geometry shaders with OpenGL 2.1

Geometry shaders with OpenGL 2.1

Scheduled Pinned Locked Moved General and Desktop
5 Posts 2 Posters 4.5k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • U Offline
    U Offline
    user2970139
    wrote on last edited by
    #1

    I am trying to use the "GL_ARB_geometry_shader4" ("GL_EXT_geometry_shader4") extension under OpenGL 2.1, GLSL 1.2 and Qt 5.3.1. After setting up the context and the format, I setup the extension:

    @if (context->hasExtension(QByteArrayLiteral("GL_ARB_geometry_shader4"))) {
    auto geometry_shader_ext = new QOpenGLExtension_ARB_geometry_shader4();
    geometry_shader_ext->initializeOpenGLFunctions();
    }@

    (The extensions and the context are valid, I checked that). And then compile the shaders:

    @shader_program.addShaderFromSourceFile(QOpenGLShader::Vertex,
    ":/shader.v.glsl");
    shader_program.addShaderFromSourceFile(QOpenGLShader::Geometry,
    ":/shader.g.glsl");
    shader_program.addShaderFromSourceFile(QOpenGLShader::Fragment,
    ":/shader.f.glsl");
    shader_program.link();
    shader_program.bind();@

    With the following shader code:

    @#version 120
    #extension GL_ARB_geometry_shader4: enable

    void main() {
    vec4 p0 = gl_PositionIn[0];
    vec4 p1 = gl_PositionIn[1];

    ...
    }@

    However, I get the following error:

    @QOpenGLShader::compile(Geometry): ERROR: 0:17: Use of undeclared identifier 'gl_PositionIn'@

    Am I missing something here?

    Let me know, if you need more information.

    Thanks a lot in advance.

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Hi,

      Not really an answer but you should add which shader is generating this error.

      Also, please add which combo of OS/Qt you are using

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      0
      • U Offline
        U Offline
        user2970139
        wrote on last edited by
        #3

        The geometry shader is generating the error.

        The context format:

        @ QSurfaceFormat format;
        format.setDepthBufferSize(24);
        format.setMajorVersion(2);
        format.setMinorVersion(1);
        format.setSamples(4);
        format.setProfile(QSurfaceFormat::CoreProfile);@

        My platform: Mac OSX 10.9, NVidia 750M (I know it supports later OpenGL version, but I need to use it on older machines as well).

        The shader source code:

        • Vertex:

        @#version 120

        uniform mat4 u_pmv_matrix;

        attribute vec3 a_position;
        attribute vec4 a_color;
        varying vec4 v_color;

        void main(void) {
        gl_Position = u_pmv_matrix * vec4(a_position, 1);
        v_color = a_color;
        }@

        • Geometry

        @#version 120
        #extension GL_EXT_geometry_shader4: enable

        uniform vec2 u_inv_viewport;
        uniform float u_line_width;

        varying vec4 g_color;

        void main() {
        vec4 p0 = gl_PositionIn[0];
        vec4 p1 = gl_PositionIn[1];

        vec4 dir = abs(p1 - p0);

        vec2 d0 = vec2(u_line_width * p0.w) * u_inv_viewport;
        vec2 d1 = vec2(u_line_width * p1.w) * u_inv_viewport;

        if (dir.x > dir.y) {
        d0.x = 0.0;
        d1.x = 0.0;
        } else {
        d0.y = 0.0;
        d1.y = 0.0;
        }

        g_color = v_color;

        gl_FrontColor = gl_FrontColorIn[0];
        gl_TexCoord[0] = vec4(0, 0, 0, 1);
        gl_Position = p0 + vec4(d0.x, -d0.y, 0, 0);
        EmitVertex();

        gl_FrontColor = gl_FrontColorIn[1];
        gl_TexCoord[0] = vec4(1, 0, 0, 1);
        gl_Position = p1 + vec4(d1.x, -d1.y, 0, 0);
        EmitVertex();

        gl_FrontColor = gl_FrontColorIn[0];
        gl_TexCoord[0] = vec4(0, 1, 0, 1);
        gl_Position = p0 + vec4(-d0.x, d0.y, 0, 0);
        EmitVertex();

        gl_FrontColor = gl_FrontColorIn[1];
        gl_TexCoord[0] = vec4(1, 1, 0, 1);
        gl_Position = p1 + vec4(-d1.x, d1.y, 0, 0);
        EmitVertex();
        }@

        • Fragment

        @#version 120

        varying vec4 g_color;

        void main(void) {
        gl_FragColor = g_color;
        }@

        1 Reply Last reply
        0
        • U Offline
          U Offline
          user2970139
          wrote on last edited by
          #4

          OpenGL context:

          @Selected OpenGL version: 2.1
          Context validity: 1
          Used OpenGL version: 2.1
          OpenGL information: VENDOR: NVIDIA Corporation
          RENDERDER: NVIDIA GeForce GT 750M OpenGL Engine
          VERSION: 2.1 NVIDIA-8.26.26 310.40.45f01
          GLSL VERSION: 1.20
          Supported extensions (139):

          GL_APPLE_aux_depth_stencil
          GL_APPLE_client_storage
          GL_APPLE_element_array
          GL_APPLE_fence
          GL_APPLE_float_pixels
          GL_APPLE_flush_buffer_range
          GL_APPLE_flush_render
          GL_APPLE_object_purgeable
          GL_APPLE_packed_pixels
          GL_APPLE_pixel_buffer
          GL_APPLE_rgb_422
          GL_APPLE_row_bytes
          GL_APPLE_specular_vector
          GL_APPLE_texture_range
          GL_APPLE_transform_hint
          GL_APPLE_vertex_array_object
          GL_APPLE_vertex_array_range
          GL_APPLE_vertex_point_size
          GL_APPLE_vertex_program_evaluators
          GL_APPLE_ycbcr_422
          GL_ARB_color_buffer_float
          GL_ARB_depth_buffer_float
          GL_ARB_depth_clamp
          GL_ARB_depth_texture
          GL_ARB_draw_buffers
          GL_ARB_draw_elements_base_vertex
          GL_ARB_draw_instanced
          GL_ARB_fragment_program
          GL_ARB_fragment_program_shadow
          GL_ARB_fragment_shader
          GL_ARB_framebuffer_object
          GL_ARB_framebuffer_sRGB
          GL_ARB_half_float_pixel
          GL_ARB_half_float_vertex
          GL_ARB_imaging
          GL_ARB_instanced_arrays
          GL_ARB_multisample
          GL_ARB_multitexture
          GL_ARB_occlusion_query
          GL_ARB_pixel_buffer_object
          GL_ARB_point_parameters
          GL_ARB_point_sprite
          GL_ARB_provoking_vertex
          GL_ARB_seamless_cube_map
          GL_ARB_shader_objects
          GL_ARB_shader_texture_lod
          GL_ARB_shading_language_100
          GL_ARB_shadow
          GL_ARB_sync
          GL_ARB_texture_border_clamp
          GL_ARB_texture_compression
          GL_ARB_texture_compression_rgtc
          GL_ARB_texture_cube_map
          GL_ARB_texture_env_add
          GL_ARB_texture_env_combine
          GL_ARB_texture_env_crossbar
          GL_ARB_texture_env_dot3
          GL_ARB_texture_float
          GL_ARB_texture_mirrored_repeat
          GL_ARB_texture_non_power_of_two
          GL_ARB_texture_rectangle
          GL_ARB_texture_rg
          GL_ARB_transpose_matrix
          GL_ARB_vertex_array_bgra
          GL_ARB_vertex_blend
          GL_ARB_vertex_buffer_object
          GL_ARB_vertex_program
          GL_ARB_vertex_shader
          GL_ARB_window_pos
          GL_ATI_separate_stencil
          GL_ATI_texture_env_combine3
          GL_ATI_texture_float
          GL_ATI_texture_mirror_once
          GL_EXT_abgr
          GL_EXT_bgra
          GL_EXT_bindable_uniform
          GL_EXT_blend_color
          GL_EXT_blend_equation_separate
          GL_EXT_blend_func_separate
          GL_EXT_blend_minmax
          GL_EXT_blend_subtract
          GL_EXT_clip_volume_hint
          GL_EXT_debug_label
          GL_EXT_debug_marker
          GL_EXT_depth_bounds_test
          GL_EXT_draw_buffers2
          GL_EXT_draw_range_elements
          GL_EXT_fog_coord
          GL_EXT_framebuffer_blit
          GL_EXT_framebuffer_multisample
          GL_EXT_framebuffer_multisample_blit_scaled
          GL_EXT_framebuffer_object
          GL_EXT_framebuffer_sRGB
          GL_EXT_geometry_shader4
          GL_EXT_gpu_program_parameters
          GL_EXT_gpu_shader4
          GL_EXT_multi_draw_arrays
          GL_EXT_packed_depth_stencil
          GL_EXT_packed_float
          GL_EXT_provoking_vertex
          GL_EXT_rescale_normal
          GL_EXT_secondary_color
          GL_EXT_separate_specular_color
          GL_EXT_shadow_funcs
          GL_EXT_stencil_two_side
          GL_EXT_stencil_wrap
          GL_EXT_texture_array
          GL_EXT_texture_compression_dxt1
          GL_EXT_texture_compression_s3tc
          GL_EXT_texture_env_add
          GL_EXT_texture_filter_anisotropic
          GL_EXT_texture_integer
          GL_EXT_texture_lod_bias
          GL_EXT_texture_mirror_clamp
          GL_EXT_texture_rectangle
          GL_EXT_texture_sRGB
          GL_EXT_texture_sRGB_decode
          GL_EXT_texture_shared_exponent
          GL_EXT_timer_query
          GL_EXT_transform_feedback
          GL_EXT_vertex_array_bgra
          GL_IBM_rasterpos_clip
          GL_NV_blend_square
          GL_NV_conditional_render
          GL_NV_depth_clamp
          GL_NV_fog_distance
          GL_NV_fragment_program2
          GL_NV_fragment_program_option
          GL_NV_light_max_exponent
          GL_NV_multisample_filter_hint
          GL_NV_point_sprite
          GL_NV_texgen_reflection
          GL_NV_texture_barrier
          GL_NV_vertex_program2_option
          GL_NV_vertex_program3
          GL_SGIS_generate_mipmap
          GL_SGIS_texture_edge_clamp
          GL_SGIS_texture_lod@
          
          1 Reply Last reply
          0
          • U Offline
            U Offline
            user2970139
            wrote on last edited by
            #5

            Error log:

            @QOpenGLShader::compile(Geometry): ERROR: 0:13: Use of undeclared identifier 'gl_PositionIn'
            ERROR: 0:14: Use of undeclared identifier 'gl_PositionIn'
            ERROR: 0:16: Use of undeclared identifier 'p1'
            ERROR: 0:16: Use of undeclared identifier 'p0'
            ERROR: 0:18: Use of undeclared identifier 'p0'
            ERROR: 0:19: Use of undeclared identifier 'p1'
            ERROR: 0:21: Use of undeclared identifier 'dir'
            ERROR: 0:21: Use of undeclared identifier 'dir'
            ERROR: 0:22: Use of undeclared identifier 'd0'
            ERROR: 0:23: Use of undeclared identifier 'd1'
            ERROR: 0:25: Use of undeclared identifier 'd0'
            ERROR: 0:26: Use of undeclared identifier 'd1'
            ERROR: 0:29: Use of undeclared identifier 'v_color'
            ERROR: 0:31: Use of undeclared identifier 'gl_FrontColor'
            ERROR: 0:31: Use of undeclared identifier 'gl_FrontColorIn'
            ERROR: 0:32: Left-hand-side of assignment must not be read-only
            ERROR: 0:33: Use of undeclared identifier 'gl_Position'
            ERROR: 0:33: Use of undeclared identifier 'p0'
            ERROR: 0:33: Use of undeclared identifier 'd0'
            ERROR: 0:33: Use of undeclared identifier 'd0'
            ERROR: 0:34: Call to undeclared function 'EmitVertex'
            ERROR: 0:36: Use of undeclared identifier 'gl_FrontColor'
            ERROR: 0:36: Use of undeclared identifier 'gl_FrontColorIn'
            ERROR: 0:37: Left-hand-side of assignment must not be read-only
            ERROR: 0:38: Use of undeclared identifier 'gl_Position'
            ERROR: 0:38: Use of undeclared identifier 'p1'
            ERROR: 0:38: Use of undeclared identifier 'd1'
            ERROR: 0:38: Use of undeclared identifier 'd1'
            ERROR: 0:39: Call to undeclared function 'EmitVertex'
            ERROR: 0:41: Use of undeclared identifier 'gl_FrontColor'
            ERROR: 0:41: Use of undeclared identifier 'gl_FrontColorIn'
            ERROR: 0:42: Left-hand-side of assignment must not be read-only
            ERROR: 0:43: Use of undeclared identifier 'gl_Position'
            ERROR: 0:43: Use of undeclared identifier 'p0'
            ERROR: 0:43: Use of undeclared identifier 'd0'
            ERROR: 0:43: Use of undeclared identifier 'd0'
            ERROR: 0:44: Call to undeclared function 'EmitVertex'
            ERROR: 0:46: Use of undeclared identifier 'gl_FrontColor'
            ERROR: 0:46: Use of undeclared identifier 'gl_FrontColorIn'
            ERROR: 0:47: Left-hand-side of assignment must not be read-only
            ERROR: 0:48: Use of undeclared identifier 'gl_Position'
            ERROR: 0:48: Use of undeclared identifier 'p1'
            ERROR: 0:48: Use of undeclared identifier 'd1'
            ERROR: 0:48: Use of undeclared identifier 'd1'
            ERROR: 0:49: Call to undeclared function 'EmitVertex'

            *** Problematic Geometry shader source code ***
            #version 120
            #extension GL_EXT_geometry_shader4: enable
            #define lowp
            #define mediump
            #define highp

            uniform vec2 u_inv_viewport;
            uniform float u_line_width;

            varying vec4 g_color;

            void main() {
            vec4 p0 = gl_PositionIn[0];
            vec4 p1 = gl_PositionIn[1];

            vec4 dir = abs(p1 - p0);

            vec2 d0 = vec2(u_line_width * p0.w) * u_inv_viewport;
            vec2 d1 = vec2(u_line_width * p1.w) * u_inv_viewport;

            if (dir.x > dir.y) {
            d0.x = 0.0;
            d1.x = 0.0;
            } else {
            d0.y = 0.0;
            d1.y = 0.0;
            }

            g_color = v_color;

            gl_FrontColor = gl_FrontColorIn[0];
            gl_TexCoord[0] = vec4(0, 0, 0, 1);
            gl_Position = p0 + vec4(d0.x, -d0.y, 0, 0);
            EmitVertex();

            gl_FrontColor = gl_FrontColorIn[1];
            gl_TexCoord[0] = vec4(1, 0, 0, 1);
            gl_Position = p1 + vec4(d1.x, -d1.y, 0, 0);
            EmitVertex();

            gl_FrontColor = gl_FrontColorIn[0];
            gl_TexCoord[0] = vec4(0, 1, 0, 1);
            gl_Position = p0 + vec4(-d0.x, d0.y, 0, 0);
            EmitVertex();

            gl_FrontColor = gl_FrontColorIn[1];
            gl_TexCoord[0] = vec4(1, 1, 0, 1);
            gl_Position = p1 + vec4(-d1.x, d1.y, 0, 0);
            EmitVertex();
            }


            QOpenGLShader::link: "WARNING: Output of vertex shader 'v_color' not read by fragment shader
            ERROR: Input of fragment shader 'g_color' not written by vertex shader
            "
            QOpenGLShader::link: "WARNING: Output of vertex shader 'v_color' not read by fragment shader
            ERROR: Input of fragment shader 'g_color' not written by vertex shader
            "
            @

            1 Reply Last reply
            0

            • Login

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups
            • Search
            • Get Qt Extensions
            • Unsolved