Geometry shaders with OpenGL 2.1
-
wrote on 7 Sept 2014, 16:24 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: enablevoid 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.
-
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
-
wrote on 7 Sept 2014, 18:26 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: enableuniform 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;
}@ -
wrote on 7 Sept 2014, 18:27 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@
-
wrote on 7 Sept 2014, 18:27 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 highpuniform 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/5