PDA

View Full Version : example of red book



blob84
06-12-2017, 07:00 AM
This code is the example 03-drawcommandsexample from chapter 3. It should show 4 triangles but i get a white triangle half the window. I'm using debian 8;


#include "vapp.h"
#include "vutils.h"

#include "vmath.h"

#include "LoadShaders.h"

#include <stdio.h>

using namespace vmath;

BEGIN_APP_DECLARATION(DrawCommandExample)
// Override functions from base class
virtual void Initialize(const char * title);
virtual void Display(bool auto_redraw);
virtual void Finalize(void);
virtual void Resize(int width, int height);

// Member variables
float aspect;
GLuint render_prog;
GLuint vao[1];
GLuint vbo[1];
GLuint ebo[1];

GLint render_model_matrix_loc;
GLint render_projection_matrix_loc;
END_APP_DECLARATION()

DEFINE_APP(DrawCommandExample, "Drawing Commands Example")

void DrawCommandExample::Initialize(const char * title)
{
base::Initialize(title);

ShaderInfo shader_info[] =
{
{ GL_VERTEX_SHADER, "media/shaders/primitive_restart/primitive_restart.vs.glsl" },
{ GL_FRAGMENT_SHADER, "media/shaders/primitive_restart/primitive_restart.fs.glsl" },
{ GL_NONE, NULL }
};

render_prog = LoadShaders(shader_info);

glUseProgram(render_prog);

// "model_matrix" is actually an array of 4 matrices
render_model_matrix_loc = glGetUniformLocation(render_prog, "model_matrix");
render_projection_matrix_loc = glGetUniformLocation(render_prog, "projection_matrix");

// A single triangle
static const GLfloat vertex_positions[] =
{
-1.0f, -1.0f, 0.0f, 1.0f,
1.0f, -1.0f, 0.0f, 1.0f,
-1.0f, 1.0f, 0.0f, 1.0f,
-1.0f, -1.0f, 0.0f, 1.0f,
};

// Color for each vertex
static const GLfloat vertex_colors[] =
{
1.0f, 1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 0.0f, 1.0f,
1.0f, 0.0f, 1.0f, 1.0f,
0.0f, 1.0f, 1.0f, 1.0f
};

// Indices for the triangle strips
static const GLushort vertex_indices[] =
{
0, 1, 2
};

// Set up the element array buffer
glGenBuffers(1, ebo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo[0]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(vertex_indices), vertex_indices, GL_STATIC_DRAW);

// Set up the vertex attributes
glGenVertexArrays(1, vao);
glBindVertexArray(vao[0]);

glGenBuffers(1, vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertex_positions) + sizeof(vertex_colors), NULL, GL_STATIC_DRAW);
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertex_positions), vertex_positions);
glBufferSubData(GL_ARRAY_BUFFER, sizeof(vertex_positions), sizeof(vertex_colors), vertex_colors);

glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL);
glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, (const GLvoid *)sizeof(vertex_positions));
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
}

void DrawCommandExample::Display(bool auto_redraw)
{
float t = float(app_time() & 0x1FFF) / float(0x1FFF);
static float q = 0.0f;
static const vmath::vec3 X(1.0f, 0.0f, 0.0f);
static const vmath::vec3 Y(0.0f, 1.0f, 0.0f);
static const vmath::vec3 Z(0.0f, 0.0f, 1.0f);
static const vmath::vec4 black = vmath::vec4(0.0f, 0.0f, 0.0f, 0.0f);

mat4 model_matrix;

// Setup
glEnable(GL_CULL_FACE);
glDisable(GL_DEPTH_TEST);

glClearBufferfv(GL_COLOR, 0, black);

// Activate simple shading program
glUseProgram(render_prog);

// Set up the model and projection matrix
vmath::mat4 projection_matrix(vmath::frustum(-1.0f, 1.0f, -aspect, aspect, 1.0f, 500.0f));
glUniformMatrix4fv(render_projection_matrix_loc, 1, GL_FALSE, projection_matrix);

// Set up for a glDrawElements call
glBindVertexArray(vao[0]);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo[0]);

// Draw Arrays...
model_matrix = vmath::translate(-3.0f, 0.0f, -5.0f);
glUniformMatrix4fv(render_model_matrix_loc, 1, GL_FALSE, model_matrix);
glDrawArrays(GL_TRIANGLES, 0, 3);

// DrawElements
model_matrix = vmath::translate(-1.0f, 0.0f, -5.0f);
glUniformMatrix4fv(render_model_matrix_loc, 1, GL_FALSE, model_matrix);
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, NULL);

// DrawElementsBaseVertex
model_matrix = vmath::translate(1.0f, 0.0f, -5.0f);
glUniformMatrix4fv(render_model_matrix_loc, 1, GL_FALSE, model_matrix);
glDrawElementsBaseVertex(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, NULL, 1);

// DrawArraysInstanced
model_matrix = vmath::translate(3.0f, 0.0f, -5.0f);
glUniformMatrix4fv(render_model_matrix_loc, 1, GL_FALSE, model_matrix);
glDrawArraysInstanced(GL_TRIANGLES, 0, 3, 1);

base::Display();
}

void DrawCommandExample::Finalize(void)
{
glUseProgram(0);
glDeleteProgram(render_prog);
glDeleteVertexArrays(1, vao);
glDeleteBuffers(1, vbo);
}

void DrawCommandExample::Resize(int width, int height)
{
glViewport(0, 0 , width, height);

aspect = float(height) / float(width);
}

Shaders:


#version 330

uniform mat4 model_matrix;
uniform mat4 projection_matrix;

layout (location = 0) in vec4 position;
layout (location = 1) in vec4 color;

out vec4 vs_fs_color;

void main(void)
{
const vec4 pos[3] = vec4[3](vec4(-0.3, -0.3, 0.0, 1.0), vec4(0.3, -0.3, 0.0, 1.0), vec4(-0.3, 0.3, 0.0, 1.0) );
vs_fs_color = color;
gl_Position = projection_matrix * (model_matrix * position);
}


#version 330

in vec4 vs_fs_color;

layout (location = 0) out vec4 color;

void main(void)
{
color = vs_fs_color;
}

mhagain
06-12-2017, 09:13 AM
I'm using debian 8;

Hardware?
Hardware?
Hardware?
Hardware?
Hardware?
Hardware?

To be a little more useful to you.

OpenGL is not a software library. What OS you're using is largely irelevant (save in so far as device driver availability); far more important is what graphics hardware you have. Because OpenGL is a specification; GL vendors implement that specification, typically as a device driver for their GPUs. So what functionality you have and how it works (and what bugs it might have) is therefore almost entirely dependent on your GPU and it's device driver; telling us what OS you have is almost as useless as telling us what colour your keyboard is.

blob84
06-12-2017, 10:42 PM
Hardware?
Hardware?
Hardware?
Hardware?
Hardware?
Hardware?

To be a little more useful to you.

OpenGL is not a software library. What OS you're using is largely irelevant (save in so far as device driver availability); far more important is what graphics hardware you have. Because OpenGL is a specification; GL vendors implement that specification, typically as a device driver for their GPUs. So what functionality you have and how it works (and what bugs it might have) is therefore almost entirely dependent on your GPU and it's device driver; telling us what OS you have is almost as useless as telling us what colour your keyboard is.

I don't think it is a hardware or driver problem. This is the example of the book "Opengl programming guide: ... 9th". It is the example 3.5, the source code is named 03-drawcommands.cpp in src/03-drawcommands.
I would ask if you can try the code and post the results before to get into hardware details.
The entire source code need to be fixed so I can sent you a fixed copy: https://ufile.io/q90i9

john_connor
06-12-2017, 11:39 PM
assuming that your system supports the GL version needed for that example code, you still have not a single check for any possible error in that code, i'd guess you get some ..


base::Initialize(title); /* has it succeeded ? */

ShaderInfo shader_info[] =
{
{ GL_VERTEX_SHADER, "media/shaders/primitive_restart/primitive_restart.vs.glsl" },
{ GL_FRAGMENT_SHADER, "media/shaders/primitive_restart/primitive_restart.fs.glsl" },
{ GL_NONE, NULL }
};

render_prog = LoadShaders(shader_info); /* has it succeeded ? */

glUseProgram(render_prog); /* do you have a valid program ? */

... etc ...

you should check each major step for success, maybe a "bool Initialize();" that returns true on success is more helpful that a "void Initialize();" that assumes success

mhagain
06-12-2017, 11:43 PM
Does your hardware support GLSL 330?
Does your hardware support ClearBuffer?
Does your hardware support BaseVertex?
Does your hardware support instancing?

I think hardware is very relevant here.

blob84
06-13-2017, 01:08 AM
Does your hardware support GLSL 330?
Does your hardware support ClearBuffer?
Does your hardware support BaseVertex?
Does your hardware support instancing?

I think hardware is very relevant here.


name of display: :0.0
display: :0 screen: 0
direct rendering: Yes
server glx vendor string: NVIDIA Corporation
server glx version string: 1.4
server glx extensions:
GLX_ARB_context_flush_control, GLX_ARB_create_context,
GLX_ARB_create_context_profile, GLX_ARB_create_context_robustness,
GLX_ARB_fbconfig_float, GLX_ARB_multisample, GLX_EXT_buffer_age,
GLX_EXT_create_context_es2_profile, GLX_EXT_create_context_es_profile,
GLX_EXT_framebuffer_sRGB, GLX_EXT_import_context, GLX_EXT_libglvnd,
GLX_EXT_stereo_tree, GLX_EXT_swap_control, GLX_EXT_swap_control_tear,
GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, GLX_EXT_visual_rating,
GLX_NV_copy_image, GLX_NV_delay_before_swap, GLX_NV_float_buffer,
GLX_NV_multisample_coverage, GLX_NV_robustness_video_memory_purge,
GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGI_swap_control,
GLX_SGI_video_sync
client glx vendor string: NVIDIA Corporation
client glx version string: 1.4
client glx extensions:
GLX_ARB_context_flush_control, GLX_ARB_create_context,
GLX_ARB_create_context_profile, GLX_ARB_create_context_robustness,
GLX_ARB_fbconfig_float, GLX_ARB_get_proc_address, GLX_ARB_multisample,
GLX_EXT_buffer_age, GLX_EXT_create_context_es2_profile,
GLX_EXT_create_context_es_profile, GLX_EXT_fbconfig_packed_float,
GLX_EXT_framebuffer_sRGB, GLX_EXT_import_context, GLX_EXT_stereo_tree,
GLX_EXT_swap_control, GLX_EXT_swap_control_tear,
GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, GLX_EXT_visual_rating,
GLX_NV_copy_buffer, GLX_NV_copy_image, GLX_NV_delay_before_swap,
GLX_NV_float_buffer, GLX_NV_multisample_coverage, GLX_NV_present_video,
GLX_NV_robustness_video_memory_purge, GLX_NV_swap_group,
GLX_NV_video_capture, GLX_NV_video_out, GLX_SGIX_fbconfig,
GLX_SGIX_pbuffer, GLX_SGI_swap_control, GLX_SGI_video_sync
GLX version: 1.4
GLX extensions:
GLX_ARB_context_flush_control, GLX_ARB_create_context,
GLX_ARB_create_context_profile, GLX_ARB_create_context_robustness,
GLX_ARB_fbconfig_float, GLX_ARB_get_proc_address, GLX_ARB_multisample,
GLX_EXT_buffer_age, GLX_EXT_create_context_es2_profile,
GLX_EXT_create_context_es_profile, GLX_EXT_framebuffer_sRGB,
GLX_EXT_import_context, GLX_EXT_stereo_tree, GLX_EXT_swap_control,
GLX_EXT_swap_control_tear, GLX_EXT_texture_from_pixmap,
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_NV_copy_image,
GLX_NV_delay_before_swap, GLX_NV_float_buffer,
GLX_NV_multisample_coverage, GLX_NV_robustness_video_memory_purge,
GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGI_swap_control,
GLX_SGI_video_sync
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce GTX 460/PCIe/SSE2
OpenGL core profile version string: 4.4.0 NVIDIA 375.26
OpenGL core profile shading language version string: 4.40 NVIDIA via Cg compiler
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
GL_AMD_multi_draw_indirect, GL_ARB_ES2_compatibility,
GL_ARB_ES3_1_compatibility, GL_ARB_ES3_2_compatibility,
GL_ARB_ES3_compatibility, GL_ARB_arrays_of_arrays, GL_ARB_base_instance,
GL_ARB_blend_func_extended, GL_ARB_buffer_storage,
GL_ARB_clear_buffer_object, GL_ARB_clear_texture, GL_ARB_clip_control,
GL_ARB_color_buffer_float, GL_ARB_compressed_texture_pixel_storage,
GL_ARB_compute_shader, GL_ARB_compute_variable_group_size,
GL_ARB_conditional_render_inverted, GL_ARB_conservative_depth,
GL_ARB_copy_buffer, GL_ARB_copy_image, GL_ARB_cull_distance,
GL_ARB_debug_output, GL_ARB_depth_buffer_float, GL_ARB_depth_clamp,
GL_ARB_depth_texture, GL_ARB_derivative_control,
GL_ARB_direct_state_access, GL_ARB_draw_buffers,
GL_ARB_draw_buffers_blend, GL_ARB_draw_elements_base_vertex,
GL_ARB_draw_indirect, GL_ARB_draw_instanced, GL_ARB_enhanced_layouts,
GL_ARB_explicit_attrib_location, GL_ARB_explicit_uniform_location,
GL_ARB_fragment_coord_conventions, GL_ARB_fragment_layer_viewport,
GL_ARB_fragment_program, GL_ARB_fragment_program_shadow,
GL_ARB_fragment_shader, GL_ARB_framebuffer_no_attachments,
GL_ARB_framebuffer_object, GL_ARB_framebuffer_sRGB,
GL_ARB_geometry_shader4, GL_ARB_get_program_binary,
GL_ARB_get_texture_sub_image, GL_ARB_gl_spirv, GL_ARB_gpu_shader5,
GL_ARB_gpu_shader_fp64, GL_ARB_gpu_shader_int64, GL_ARB_half_float_pixel,
GL_ARB_half_float_vertex, GL_ARB_imaging, GL_ARB_indirect_parameters,
GL_ARB_instanced_arrays, GL_ARB_internalformat_query,
GL_ARB_internalformat_query2, GL_ARB_invalidate_subdata,
GL_ARB_map_buffer_alignment, GL_ARB_map_buffer_range, GL_ARB_multi_bind,
GL_ARB_multi_draw_indirect, GL_ARB_multisample, GL_ARB_multitexture,
GL_ARB_occlusion_query, GL_ARB_occlusion_query2,
GL_ARB_parallel_shader_compile, GL_ARB_pipeline_statistics_query,
GL_ARB_pixel_buffer_object, GL_ARB_point_parameters, GL_ARB_point_sprite,
GL_ARB_program_interface_query, GL_ARB_provoking_vertex,
GL_ARB_query_buffer_object, GL_ARB_robust_buffer_access_behavior,
GL_ARB_robustness, GL_ARB_sample_shading, GL_ARB_sampler_objects,
GL_ARB_seamless_cube_map, GL_ARB_separate_shader_objects,
GL_ARB_shader_atomic_counter_ops, GL_ARB_shader_atomic_counters,
GL_ARB_shader_bit_encoding, GL_ARB_shader_draw_parameters,
GL_ARB_shader_group_vote, GL_ARB_shader_image_load_store,
GL_ARB_shader_image_size, GL_ARB_shader_objects, GL_ARB_shader_precision,
GL_ARB_shader_storage_buffer_object, GL_ARB_shader_subroutine,
GL_ARB_shader_texture_image_samples, GL_ARB_shader_texture_lod,
GL_ARB_shading_language_100, GL_ARB_shading_language_420pack,
GL_ARB_shading_language_include, GL_ARB_shading_language_packing,
GL_ARB_shadow, GL_ARB_sparse_buffer, GL_ARB_sparse_texture,
GL_ARB_stencil_texturing, GL_ARB_sync, GL_ARB_tessellation_shader,
GL_ARB_texture_barrier, GL_ARB_texture_border_clamp,
GL_ARB_texture_buffer_object, GL_ARB_texture_buffer_object_rgb32,
GL_ARB_texture_buffer_range, GL_ARB_texture_compression,
GL_ARB_texture_compression_bptc, GL_ARB_texture_compression_rgtc,
GL_ARB_texture_cube_map, GL_ARB_texture_cube_map_array,
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_gather,
GL_ARB_texture_mirror_clamp_to_edge, GL_ARB_texture_mirrored_repeat,
GL_ARB_texture_multisample, GL_ARB_texture_non_power_of_two,
GL_ARB_texture_query_levels, GL_ARB_texture_query_lod,
GL_ARB_texture_rectangle, GL_ARB_texture_rg, GL_ARB_texture_rgb10_a2ui,
GL_ARB_texture_stencil8, GL_ARB_texture_storage,
GL_ARB_texture_storage_multisample, GL_ARB_texture_swizzle,
GL_ARB_texture_view, GL_ARB_timer_query, GL_ARB_transform_feedback2,
GL_ARB_transform_feedback3, GL_ARB_transform_feedback_instanced,
GL_ARB_transform_feedback_overflow_query, GL_ARB_transpose_matrix,
GL_ARB_uniform_buffer_object, GL_ARB_vertex_array_bgra,
GL_ARB_vertex_array_object, GL_ARB_vertex_attrib_64bit,
GL_ARB_vertex_attrib_binding, GL_ARB_vertex_buffer_object,
GL_ARB_vertex_program, GL_ARB_vertex_shader,
GL_ARB_vertex_type_10f_11f_11f_rev, GL_ARB_vertex_type_2_10_10_10_rev,
GL_ARB_viewport_array, GL_ARB_window_pos, GL_ATI_draw_buffers,
GL_ATI_texture_float, GL_ATI_texture_mirror_once,
GL_EXTX_framebuffer_mixed_formats, GL_EXT_Cg_shader, 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_compiled_vertex_array,
GL_EXT_depth_bounds_test, GL_EXT_direct_state_access,
GL_EXT_draw_buffers2, GL_EXT_draw_instanced, 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_import_sync_object, GL_EXT_multi_draw_arrays,
GL_EXT_packed_depth_stencil, GL_EXT_packed_float, GL_EXT_packed_pixels,
GL_EXT_pixel_buffer_object, GL_EXT_point_parameters,
GL_EXT_polygon_offset_clamp, GL_EXT_provoking_vertex,
GL_EXT_rescale_normal, GL_EXT_secondary_color,
GL_EXT_separate_shader_objects, GL_EXT_separate_specular_color,
GL_EXT_shader_image_load_store, GL_EXT_shader_integer_mix,
GL_EXT_shadow_funcs, GL_EXT_stencil_two_side, GL_EXT_stencil_wrap,
GL_EXT_texture3D, GL_EXT_texture_array, GL_EXT_texture_buffer_object,
GL_EXT_texture_compression_dxt1, GL_EXT_texture_compression_latc,
GL_EXT_texture_compression_rgtc, GL_EXT_texture_compression_s3tc,
GL_EXT_texture_cube_map, GL_EXT_texture_edge_clamp,
GL_EXT_texture_env_add, GL_EXT_texture_env_combine,
GL_EXT_texture_env_dot3, GL_EXT_texture_filter_anisotropic,
GL_EXT_texture_integer, GL_EXT_texture_lod, GL_EXT_texture_lod_bias,
GL_EXT_texture_mirror_clamp, GL_EXT_texture_object, GL_EXT_texture_sRGB,
GL_EXT_texture_sRGB_decode, GL_EXT_texture_shared_exponent,
GL_EXT_texture_storage, GL_EXT_texture_swizzle, GL_EXT_timer_query,
GL_EXT_transform_feedback2, GL_EXT_vertex_array, GL_EXT_vertex_array_bgra,
GL_EXT_vertex_attrib_64bit, GL_EXT_window_rectangles,
GL_EXT_x11_sync_object, GL_IBM_rasterpos_clip,
GL_IBM_texture_mirrored_repeat, GL_KHR_blend_equation_advanced,
GL_KHR_context_flush_control, GL_KHR_debug, GL_KHR_no_error,
GL_KHR_robust_buffer_access_behavior, GL_KHR_robustness,
GL_KTX_buffer_region, GL_NVX_conditional_render, GL_NVX_gpu_memory_info,
GL_NV_ES1_1_compatibility, GL_NV_ES3_1_compatibility,
GL_NV_alpha_to_coverage_dither_control, GL_NV_bindless_multi_draw_indirect,
GL_NV_bindless_multi_draw_indirect_count, GL_NV_blend_equation_advanced,
GL_NV_blend_square, GL_NV_command_list, GL_NV_compute_program5,
GL_NV_conditional_render, GL_NV_copy_depth_to_color, GL_NV_copy_image,
GL_NV_depth_buffer_float, GL_NV_depth_clamp, GL_NV_draw_texture,
GL_NV_explicit_multisample, GL_NV_fence, GL_NV_float_buffer,
GL_NV_fog_distance, GL_NV_fragment_program, GL_NV_fragment_program2,
GL_NV_fragment_program_option, GL_NV_framebuffer_multisample_coverage,
GL_NV_geometry_shader4, GL_NV_gpu_program4, GL_NV_gpu_program4_1,
GL_NV_gpu_program5, GL_NV_gpu_program5_mem_extended,
GL_NV_gpu_program_fp64, GL_NV_gpu_shader5, GL_NV_half_float,
GL_NV_internalformat_sample_query, GL_NV_light_max_exponent,
GL_NV_multisample_coverage, GL_NV_multisample_filter_hint,
GL_NV_occlusion_query, GL_NV_packed_depth_stencil,
GL_NV_parameter_buffer_object, GL_NV_parameter_buffer_object2,
GL_NV_path_rendering, GL_NV_pixel_data_range, GL_NV_point_sprite,
GL_NV_primitive_restart, GL_NV_register_combiners,
GL_NV_register_combiners2, GL_NV_robustness_video_memory_purge,
GL_NV_shader_atomic_counters, GL_NV_shader_atomic_float,
GL_NV_shader_buffer_load, GL_NV_shader_storage_buffer_object,
GL_NV_shader_thread_group, GL_NV_texgen_reflection, GL_NV_texture_barrier,
GL_NV_texture_compression_vtc, GL_NV_texture_env_combine4,
GL_NV_texture_multisample, GL_NV_texture_rectangle, GL_NV_texture_shader,
GL_NV_texture_shader2, GL_NV_texture_shader3, GL_NV_transform_feedback,
GL_NV_transform_feedback2, GL_NV_uniform_buffer_unified_memory,
GL_NV_vdpau_interop, GL_NV_vertex_array_range, GL_NV_vertex_array_range2,
GL_NV_vertex_attrib_integer_64bit, GL_NV_vertex_buffer_unified_memory,
GL_NV_vertex_program, GL_NV_vertex_program1_1, GL_NV_vertex_program2,
GL_NV_vertex_program2_option, GL_NV_vertex_program3, GL_S3_s3tc,
GL_SGIS_generate_mipmap, GL_SGIS_texture_lod, GL_SGIX_depth_texture,
GL_SGIX_shadow, GL_SUN_slice_accum

OpenGL version string: 4.5.0 NVIDIA 375.26
OpenGL shading language version string: 4.50 NVIDIA
OpenGL context flags: (none)
OpenGL profile mask: (none)
OpenGL extensions:
GL_AMD_multi_draw_indirect, GL_ARB_ES2_compatibility,
GL_ARB_ES3_1_compatibility, GL_ARB_ES3_2_compatibility,
GL_ARB_ES3_compatibility, GL_ARB_arrays_of_arrays, GL_ARB_base_instance,
GL_ARB_blend_func_extended, GL_ARB_buffer_storage,
GL_ARB_clear_buffer_object, GL_ARB_clear_texture, GL_ARB_clip_control,
GL_ARB_color_buffer_float, GL_ARB_compatibility,
GL_ARB_compressed_texture_pixel_storage, GL_ARB_compute_shader,
GL_ARB_compute_variable_group_size, GL_ARB_conditional_render_inverted,
GL_ARB_conservative_depth, GL_ARB_copy_buffer, GL_ARB_copy_image,
GL_ARB_cull_distance, GL_ARB_debug_output, GL_ARB_depth_buffer_float,
GL_ARB_depth_clamp, GL_ARB_depth_texture, GL_ARB_derivative_control,
GL_ARB_direct_state_access, GL_ARB_draw_buffers,
GL_ARB_draw_buffers_blend, GL_ARB_draw_elements_base_vertex,
GL_ARB_draw_indirect, GL_ARB_draw_instanced, GL_ARB_enhanced_layouts,
GL_ARB_explicit_attrib_location, GL_ARB_explicit_uniform_location,
GL_ARB_fragment_coord_conventions, GL_ARB_fragment_layer_viewport,
GL_ARB_fragment_program, GL_ARB_fragment_program_shadow,
GL_ARB_fragment_shader, GL_ARB_framebuffer_no_attachments,
GL_ARB_framebuffer_object, GL_ARB_framebuffer_sRGB,
GL_ARB_geometry_shader4, GL_ARB_get_program_binary,
GL_ARB_get_texture_sub_image, GL_ARB_gl_spirv, GL_ARB_gpu_shader5,
GL_ARB_gpu_shader_fp64, GL_ARB_gpu_shader_int64, GL_ARB_half_float_pixel,
GL_ARB_half_float_vertex, GL_ARB_imaging, GL_ARB_indirect_parameters,
GL_ARB_instanced_arrays, GL_ARB_internalformat_query,
GL_ARB_internalformat_query2, GL_ARB_invalidate_subdata,
GL_ARB_map_buffer_alignment, GL_ARB_map_buffer_range, GL_ARB_multi_bind,
GL_ARB_multi_draw_indirect, GL_ARB_multisample, GL_ARB_multitexture,
GL_ARB_occlusion_query, GL_ARB_occlusion_query2,
GL_ARB_parallel_shader_compile, GL_ARB_pipeline_statistics_query,
GL_ARB_pixel_buffer_object, GL_ARB_point_parameters, GL_ARB_point_sprite,
GL_ARB_program_interface_query, GL_ARB_provoking_vertex,
GL_ARB_query_buffer_object, GL_ARB_robust_buffer_access_behavior,
GL_ARB_robustness, GL_ARB_sample_shading, GL_ARB_sampler_objects,
GL_ARB_seamless_cube_map, GL_ARB_separate_shader_objects,
GL_ARB_shader_atomic_counter_ops, GL_ARB_shader_atomic_counters,
GL_ARB_shader_bit_encoding, GL_ARB_shader_draw_parameters,
GL_ARB_shader_group_vote, GL_ARB_shader_image_load_store,
GL_ARB_shader_image_size, GL_ARB_shader_objects, GL_ARB_shader_precision,
GL_ARB_shader_storage_buffer_object, GL_ARB_shader_subroutine,
GL_ARB_shader_texture_image_samples, GL_ARB_shader_texture_lod,
GL_ARB_shading_language_100, GL_ARB_shading_language_420pack,
GL_ARB_shading_language_include, GL_ARB_shading_language_packing,
GL_ARB_shadow, GL_ARB_sparse_buffer, GL_ARB_sparse_texture,
GL_ARB_stencil_texturing, GL_ARB_sync, GL_ARB_tessellation_shader,
GL_ARB_texture_barrier, GL_ARB_texture_border_clamp,
GL_ARB_texture_buffer_object, GL_ARB_texture_buffer_object_rgb32,
GL_ARB_texture_buffer_range, GL_ARB_texture_compression,
GL_ARB_texture_compression_bptc, GL_ARB_texture_compression_rgtc,
GL_ARB_texture_cube_map, GL_ARB_texture_cube_map_array,
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_gather,
GL_ARB_texture_mirror_clamp_to_edge, GL_ARB_texture_mirrored_repeat,
GL_ARB_texture_multisample, GL_ARB_texture_non_power_of_two,
GL_ARB_texture_query_levels, GL_ARB_texture_query_lod,
GL_ARB_texture_rectangle, GL_ARB_texture_rg, GL_ARB_texture_rgb10_a2ui,
GL_ARB_texture_stencil8, GL_ARB_texture_storage,
GL_ARB_texture_storage_multisample, GL_ARB_texture_swizzle,
GL_ARB_texture_view, GL_ARB_timer_query, GL_ARB_transform_feedback2,
GL_ARB_transform_feedback3, GL_ARB_transform_feedback_instanced,
GL_ARB_transform_feedback_overflow_query, GL_ARB_transpose_matrix,
GL_ARB_uniform_buffer_object, GL_ARB_vertex_array_bgra,
GL_ARB_vertex_array_object, GL_ARB_vertex_attrib_64bit,
GL_ARB_vertex_attrib_binding, GL_ARB_vertex_buffer_object,
GL_ARB_vertex_program, GL_ARB_vertex_shader,
GL_ARB_vertex_type_10f_11f_11f_rev, GL_ARB_vertex_type_2_10_10_10_rev,
GL_ARB_viewport_array, GL_ARB_window_pos, GL_ATI_draw_buffers,
GL_ATI_texture_float, GL_ATI_texture_mirror_once,
GL_EXTX_framebuffer_mixed_formats, GL_EXT_Cg_shader, 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_compiled_vertex_array,
GL_EXT_depth_bounds_test, GL_EXT_direct_state_access,
GL_EXT_draw_buffers2, GL_EXT_draw_instanced, 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_import_sync_object, GL_EXT_multi_draw_arrays,
GL_EXT_packed_depth_stencil, GL_EXT_packed_float, GL_EXT_packed_pixels,
GL_EXT_pixel_buffer_object, GL_EXT_point_parameters,
GL_EXT_polygon_offset_clamp, GL_EXT_provoking_vertex,
GL_EXT_rescale_normal, GL_EXT_secondary_color,
GL_EXT_separate_shader_objects, GL_EXT_separate_specular_color,
GL_EXT_shader_image_load_store, GL_EXT_shader_integer_mix,
GL_EXT_shadow_funcs, GL_EXT_stencil_two_side, GL_EXT_stencil_wrap,
GL_EXT_texture3D, GL_EXT_texture_array, GL_EXT_texture_buffer_object,
GL_EXT_texture_compression_dxt1, GL_EXT_texture_compression_latc,
GL_EXT_texture_compression_rgtc, GL_EXT_texture_compression_s3tc,
GL_EXT_texture_cube_map, GL_EXT_texture_edge_clamp,
GL_EXT_texture_env_add, GL_EXT_texture_env_combine,
GL_EXT_texture_env_dot3, GL_EXT_texture_filter_anisotropic,
GL_EXT_texture_integer, GL_EXT_texture_lod, GL_EXT_texture_lod_bias,
GL_EXT_texture_mirror_clamp, GL_EXT_texture_object, GL_EXT_texture_sRGB,
GL_EXT_texture_sRGB_decode, GL_EXT_texture_shared_exponent,
GL_EXT_texture_storage, GL_EXT_texture_swizzle, GL_EXT_timer_query,
GL_EXT_transform_feedback2, GL_EXT_vertex_array, GL_EXT_vertex_array_bgra,
GL_EXT_vertex_attrib_64bit, GL_EXT_window_rectangles,
GL_EXT_x11_sync_object, GL_IBM_rasterpos_clip,
GL_IBM_texture_mirrored_repeat, GL_KHR_blend_equation_advanced,
GL_KHR_context_flush_control, GL_KHR_debug, GL_KHR_no_error,
GL_KHR_robust_buffer_access_behavior, GL_KHR_robustness,
GL_KTX_buffer_region, GL_NVX_conditional_render, GL_NVX_gpu_memory_info,
GL_NV_ES1_1_compatibility, GL_NV_ES3_1_compatibility,
GL_NV_alpha_to_coverage_dither_control, GL_NV_bindless_multi_draw_indirect,
GL_NV_bindless_multi_draw_indirect_count, GL_NV_blend_equation_advanced,
GL_NV_blend_square, GL_NV_command_list, GL_NV_compute_program5,
GL_NV_conditional_render, GL_NV_copy_depth_to_color, GL_NV_copy_image,
GL_NV_depth_buffer_float, GL_NV_depth_clamp, GL_NV_draw_texture,
GL_NV_explicit_multisample, GL_NV_fence, GL_NV_float_buffer,
GL_NV_fog_distance, GL_NV_fragment_program, GL_NV_fragment_program2,
GL_NV_fragment_program_option, GL_NV_framebuffer_multisample_coverage,
GL_NV_geometry_shader4, GL_NV_gpu_program4, GL_NV_gpu_program4_1,
GL_NV_gpu_program5, GL_NV_gpu_program5_mem_extended,
GL_NV_gpu_program_fp64, GL_NV_gpu_shader5, GL_NV_half_float,
GL_NV_internalformat_sample_query, GL_NV_light_max_exponent,
GL_NV_multisample_coverage, GL_NV_multisample_filter_hint,
GL_NV_occlusion_query, GL_NV_packed_depth_stencil,
GL_NV_parameter_buffer_object, GL_NV_parameter_buffer_object2,
GL_NV_path_rendering, GL_NV_pixel_data_range, GL_NV_point_sprite,
GL_NV_primitive_restart, GL_NV_register_combiners,
GL_NV_register_combiners2, GL_NV_robustness_video_memory_purge,
GL_NV_shader_atomic_counters, GL_NV_shader_atomic_float,
GL_NV_shader_buffer_load, GL_NV_shader_storage_buffer_object,
GL_NV_shader_thread_group, GL_NV_texgen_reflection, GL_NV_texture_barrier,
GL_NV_texture_compression_vtc, GL_NV_texture_env_combine4,
GL_NV_texture_multisample, GL_NV_texture_rectangle, GL_NV_texture_shader,
GL_NV_texture_shader2, GL_NV_texture_shader3, GL_NV_transform_feedback,
GL_NV_transform_feedback2, GL_NV_uniform_buffer_unified_memory,
GL_NV_vdpau_interop, GL_NV_vertex_array_range, GL_NV_vertex_array_range2,
GL_NV_vertex_attrib_integer_64bit, GL_NV_vertex_buffer_unified_memory,
GL_NV_vertex_program, GL_NV_vertex_program1_1, GL_NV_vertex_program2,
GL_NV_vertex_program2_option, GL_NV_vertex_program3, GL_S3_s3tc,
GL_SGIS_generate_mipmap, GL_SGIS_texture_lod, GL_SGIX_depth_texture,
GL_SGIX_shadow, GL_SUN_slice_accum

OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 375.26
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:
GL_ANDROID_extension_pack_es31a, GL_EXT_base_instance,
GL_EXT_blend_func_extended, GL_EXT_blend_minmax, GL_EXT_buffer_storage,
GL_EXT_color_buffer_float, GL_EXT_color_buffer_half_float,
GL_EXT_copy_image, GL_EXT_debug_label, GL_EXT_discard_framebuffer,
GL_EXT_disjoint_timer_query, GL_EXT_draw_buffers_indexed,
GL_EXT_draw_elements_base_vertex, GL_EXT_float_blend, GL_EXT_frag_depth,
GL_EXT_geometry_point_size, GL_EXT_geometry_shader, GL_EXT_gpu_shader5,
GL_EXT_map_buffer_range, GL_EXT_multi_draw_indirect,
GL_EXT_multisample_compatibility, GL_EXT_occlusion_query_boolean,
GL_EXT_primitive_bounding_box, GL_EXT_protected_textures,
GL_EXT_render_snorm, GL_EXT_robustness, GL_EXT_sRGB,
GL_EXT_sRGB_write_control, GL_EXT_separate_shader_objects,
GL_EXT_shader_implicit_conversions, GL_EXT_shader_integer_mix,
GL_EXT_shader_io_blocks, GL_EXT_shader_non_constant_global_initializers,
GL_EXT_shader_texture_lod, GL_EXT_shadow_samplers, GL_EXT_sparse_texture,
GL_EXT_tessellation_point_size, GL_EXT_tessellation_shader,
GL_EXT_texture_border_clamp, GL_EXT_texture_buffer,
GL_EXT_texture_compression_dxt1, GL_EXT_texture_compression_s3tc,
GL_EXT_texture_cube_map_array, GL_EXT_texture_filter_anisotropic,
GL_EXT_texture_format_BGRA8888, GL_EXT_texture_norm16, GL_EXT_texture_rg,
GL_EXT_texture_sRGB_decode, GL_EXT_texture_storage, GL_EXT_texture_view,
GL_EXT_unpack_subimage, GL_EXT_window_rectangles,
GL_KHR_blend_equation_advanced, GL_KHR_context_flush_control,
GL_KHR_debug, GL_KHR_no_error, GL_KHR_robust_buffer_access_behavior,
GL_KHR_robustness, GL_NV_bgr, GL_NV_blend_equation_advanced,
GL_NV_conditional_render, GL_NV_copy_buffer, GL_NV_copy_image,
GL_NV_draw_buffers, GL_NV_draw_instanced, GL_NV_draw_texture,
GL_NV_explicit_attrib_location, GL_NV_fbo_color_attachments,
GL_NV_framebuffer_blit, GL_NV_framebuffer_multisample,
GL_NV_generate_mipmap_sRGB, GL_NV_gpu_shader5, GL_NV_image_formats,
GL_NV_instanced_arrays, GL_NV_internalformat_sample_query,
GL_NV_non_square_matrices, GL_NV_occlusion_query_samples,
GL_NV_pack_subimage, GL_NV_packed_float, GL_NV_packed_float_linear,
GL_NV_path_rendering, GL_NV_pixel_buffer_object, GL_NV_polygon_mode,
GL_NV_read_buffer, GL_NV_read_depth, GL_NV_read_depth_stencil,
GL_NV_read_stencil, GL_NV_sRGB_formats,
GL_NV_shader_noperspective_interpolation, GL_NV_shadow_samplers_array,
GL_NV_shadow_samplers_cube, GL_NV_texture_array,
GL_NV_texture_border_clamp, GL_NV_texture_compression_latc,
GL_NV_texture_compression_s3tc, GL_NV_texture_compression_s3tc_update,
GL_NV_timer_query, GL_NV_viewport_array,
GL_OES_compressed_ETC1_RGB8_texture, GL_OES_copy_image, GL_OES_depth24,
GL_OES_depth32, GL_OES_depth_texture, GL_OES_depth_texture_cube_map,
GL_OES_draw_buffers_indexed, GL_OES_draw_elements_base_vertex,
GL_OES_element_index_uint, GL_OES_fbo_render_mipmap,
GL_OES_geometry_point_size, GL_OES_geometry_shader,
GL_OES_get_program_binary, GL_OES_gpu_shader5, GL_OES_mapbuffer,
GL_OES_packed_depth_stencil, GL_OES_primitive_bounding_box,
GL_OES_rgb8_rgba8, GL_OES_sample_shading, GL_OES_sample_variables,
GL_OES_shader_image_atomic, GL_OES_shader_io_blocks,
GL_OES_shader_multisample_interpolation, GL_OES_standard_derivatives,
GL_OES_tessellation_point_size, GL_OES_tessellation_shader,
GL_OES_texture_border_clamp, GL_OES_texture_buffer,
GL_OES_texture_cube_map_array, GL_OES_texture_float,
GL_OES_texture_float_linear, GL_OES_texture_half_float,
GL_OES_texture_half_float_linear, GL_OES_texture_npot,
GL_OES_texture_stencil8, GL_OES_texture_storage_multisample_2d_array,
GL_OES_texture_view, GL_OES_vertex_array_object, GL_OES_vertex_half_float

mhagain
06-13-2017, 01:39 AM
OK, so we've established that your hardware does support the required version.

What happens when you check for errors in your code?

I am asking this because the symptom you describe is exactly what would happen if you had GL errors, although it's difficult to say what potential causes may be at this early stage.

I am asking you to do the checking rather than downloading your code and doing it for you because I want you to learn this stuff.

blob84
06-13-2017, 09:16 AM
OK, so we've established that your hardware does support the required version.

What happens when you check for errors in your code?

I am asking this because the symptom you describe is exactly what would happen if you had GL errors, although it's difficult to say what potential causes may be at this early stage.

I am asking you to do the checking rather than downloading your code and doing it for you because I want you to learn this stuff.

The debugging mode print this:

Debug Message: SOURCE(0x8246), TYPE(0x824C), ID(0x00000502), SEVERITY(0x9146), "GL_INVALID_OPERATION error generated. No active program."
...
I supposed it is a logical error. Some gl function is not in the right method or some parameters are missing.
Can you try the code and post the output, without do the checking? You should get 4 triangles of mixed colours.
The path of the file is src/03-drawcommands/03-drawcommands.cpp,
If you use GNU/Linux, run cmake into the build directory and run make.
Anyway thank you.

Dark Photon
06-13-2017, 06:29 PM
Opengl programming guide: ... 9th". ... the source code is named 03-drawcommands.cpp in src/03-drawcommands. ... The entire source code need to be fixed so I can sent you a fixed copy...

Boy, you're not kidding! The 9th edition OpenGL Programming Guide examples definitely takes some hacking to get it all to build on Linux in debug and release. That's not very new-user friendly.

The code was obviously written with Linux compatibility in mind, but it's got lots of MS Visual C++-isms in it. I wonder why the author didn't test or get someone to test on Linux before release?

At some point I'll have to clean up my patches and get them submitted.



The debugging mode print this:

Debug Message: SOURCE(0x8246), TYPE(0x824C), ID(0x00000502), SEVERITY(0x9146), "GL_INVALID_OPERATION error generated. No active program."
...
I supposed it is a logical error. Some gl function is not in the right method or some parameters are missing.

Ok, well here on Linux, also on an NVidia GPU+drivers (but newer GPU and slightly newer drivers), it runs fine in debug and release builds, producing the desired result. GPU = GTX760, GL drivers = 378.13.

Because you're running on NVidia drivers, you're in luck. From when I've noticed, the GL debug callback the GL driver calls when GL errors are triggered (which is printing the message you quoted above BTW) is called underneath the GL call that triggered the error. So, you can just put a breakpoint on that callback function, and when it's called you can walk up the stack and see the exact GL call that's triggering the error.

In the red book examples, the function you want to put a breakpoint on is VermilionApplication :: DebugOutputCallback() (in vapp.h). That's the function that's registered as a GL debug callback using glDebugMessageCallbackARB() in vermiilion.cpp.