Geometry shaders with OpenGL 2.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.


  • Lifetime Qt Champion

    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



  • 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;
    }@



  • 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@


  • 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
    "
    @


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.