Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Geometry shaders with OpenGL 2.1

    General and Desktop
    2
    5
    4053
    Loading More Posts
    • 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
      user2970139 last edited by

      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 Reply Quote 0
      • SGaist
        SGaist Lifetime Qt Champion last edited by

        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 Reply Quote 0
        • U
          user2970139 last edited by

          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 Reply Quote 0
          • U
            user2970139 last edited by

            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 Reply Quote 0
            • U
              user2970139 last edited by

              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 Reply Quote 0
              • First post
                Last post