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
Forum Updated to NodeBB v4.3 + New Features

Geometry shaders with OpenGL 2.1

Scheduled Pinned Locked Moved General and Desktop
5 Posts 2 Posters 4.5k Views 1 Watching
  • 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 7 Sept 2014, 16:24 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
    • S Offline
      S Offline
      SGaist
      Lifetime Qt Champion
      wrote on 7 Sept 2014, 17:59 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 7 Sept 2014, 18:26 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 7 Sept 2014, 18:27 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 7 Sept 2014, 18:27 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

            5/5

            7 Sept 2014, 18:27

            • Login

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