SimonDanisch/GLPlot.jl

ErrorException after kiling the window created by the surface.jl example

Opened this issue · 9 comments

Runing the surface example
include("C:/j/.julia/v0.3/GLPlot/example/surface.jl")
and killing the openGL figure after, raises an non-stopable series of errors

ErrorException("assertion failed: shaderID > 0")

On MacBookPro 2009 running Win7 64.
Graphics card is a GeForce GT 330M

cannot run versioninfo(true) because it's broken

julia> versioninfo()
Julia Version 0.3.0-rc1+192
Commit 9c02c9d* (2014-07-26 17:46 UTC)
Platform Info:
  System: Windows (x86_64-w64-mingw32)
  CPU: Intel(R) Core(TM) i7 CPU       M 620  @ 2.67GHz
  WORD_SIZE: 64
  BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY Nehalem)
  LAPACK: libopenblas
  LIBM: libopenlibm
  LLVM: libLLVM-3.3

Can you please also run this code:

using GLWindow, GLAbstraction
createwindow("test", 10,10)
println(GLAbstraction.OPENGL_CONTEXT)

Thanks :)

Ok, here it goes

julia> createwindow("test", 10,10)
Screen(:test,Screen(:root,Screen(#undef,#undef,#undef,#undef,#undef,Window(Ptr{Void} @0xffffffffffffffff)),[],Dict{Symbol,Any}(),{},Window(Null)),[],[:keypressedstate=>Input{Int64}(0x000000000000000d,Signal[],0),:mousebutton=>Input{Int64}(0x0000000000000004,Signal[],0),:insidewindow=>Input{Bool}(0x0000000000000010,Signal[],false),:scroll_x=>Input{Int64}(0x000000000000000e,Signal[],0),:windowposition=>Input{Vector2{Int64}}(0x0000000000000009,Signal[],[0,0]),:scroll_y=>Input{Int64}(0x000000000000000f,Signal[],0),:framebuffer_size=>Input{Vector2{Int64}}(0x0000000000000008,Signal[],[0,0]),:mousedragged=>DropWhen{Vector2{Float64}}(0x0000000000000007,Signal[],Lift{Bool}(0x0000000000000006,Signal[],(anonymous function),(Input{Bool}(0x0000000000000005,Signal[Lift{Bool}(#= circular reference =#)],false),),true),Lift{Vector2{Float64}}(0x0000000000000003,Signal[DropWhen{Vector2{Float64}}(#= circular reference =#)],(anonymous function),(Input{Vector2{Float64}}(0x0000000000000002,Signal[Lift{Vector2{Float64}}(#=
circular reference =#)],[0.0,0.0]),Input{Vector2{Int64}}(0x0000000000000001,Signal[Lift{Vector2{Float64}}(#= circular reference =#)],[116,10])),[0.0,10.0]),[0.0,0.0]),:open=>Input{Bool}(0x0000000000000011,Signal[],true),:mouseposition_glfw_coordinates=>Input{Vector2{Float64}}(0x0000000000000002,Signal[Lift{Vector2{Float64}}(0x0000000000000003,Signal[DropWhen{Vector2{Float64}}(0x0000000000000007,Signal[],Lift{Bool}(0x0000000000000006,Signal[],(anonymous function),(Input{Bool}(0x0000000000000005,Signal[Lift{Bool}(#= circular reference =#)],false),),true),Lift{Vector2{Float64}}(#= circular reference =#),[0.0,0.0])],(anonymous function),(Input{Vector2{Float64}}(#= circular reference =#),Input{Vector2{Int64}}(0x0000000000000001,Signal[Lift{Vector2{Float64}}(#= circular reference =#)],[116,10])),[0.0,10.0])],[0.0,0.0]),:unicodeinput=>Input{Char}(0x000000000000000a,Signal[],'0'),:mouseposition=>Lift{Vector2{Float64}}(0x0000000000000003,Signal[DropWhen{Vector2{Float64}}(0x0000000000000007,Signal[],Lift{Bool}(0x0000000000000006,Signal[],(anonymous function),(Input{Bool}(0x0000000000000005,Signal[Lift{Bool}(#= circular reference =#)],false),),true),Lift{Vector2{Float64}}(#= circular reference =#),[0.0,0.0])],(anonymous function),(Input{Vector2{Float64}}(0x0000000000000002,Signal[Lift{Vector2{Float64}}(#= circular reference =#)],[0.0,0.0]),Input{Vector2{Int64}}(0x0000000000000001,Signal[Lift{Vector2{Float64}}(#= circular reference =#)],[116,10])),[0.0,10.0]),:keymodifiers=>Input{Int64}(0x000000000000000b,Signal[],0),:window_size=>Input{Vector2{Int64}}(0x0000000000000001,Signal[Lift{Vector2{Float64}}(0x0000000000000003,Signal[DropWhen{Vector2{Float64}}(0x0000000000000007,Signal[],Lift{Bool}(0x0000000000000006,Signal[],(anonymous function),(Input{Bool}(0x0000000000000005,Signal[Lift{Bool}(#= circular reference =#)],false),),true),Lift{Vector2{Float64}}(#= circular reference =#),[0.0,0.0])],(anonymous function),(Input{Vector2{Float64}}(0x0000000000000002,Signal[Lift{Vector2{Float64}}(#= circular reference =#)],[0.0,0.0]),Input{Vector2{Int64}}(#= circular reference =#)),[0.0,10.0])],[116,10]),:mousepressed=>Input{Bool}(0x0000000000000005,Signal[Lift{Bool}(0x0000000000000006,Signal[],(anonymous function),(Input{Bool}(#= circular reference =#),),true)],false),:keypressed=>Input{Int64}(0x000000000000000c,Signal[],0)],{},Window(test))

julia> println(GLAbstraction.OPENGL_CONTEXT)
[:gl_renderer=>"GeForce GT 330M/PCI/SSE2",:gl_vendor=>"NVIDIA Corporation",:gl_extensions=>Union(UTF8String,ASCIIString)["GL_ARB_blend_func_extended","GL_ARB_color_buffer_float","GL_ARB_compatibility","GL_ARB_copy_buffer","GL_ARB_depth_buffer_float","GL_ARB_depth_clamp","GL_ARB_depth_texture","GL_ARB_draw_buffers","GL_ARB_draw_buffers_blend","GL_ARB_draw_elements_base_vertex","GL_ARB_draw_instanced","GL_ARB_ES2_compatibility","GL_ARB_explicit_attrib_location","GL_ARB_fragment_coord_conventions","GL_ARB_fragment_program","GL_ARB_fragment_program_shadow","GL_ARB_fragment_shader","GL_ARB_framebuffer_object","GL_ARB_framebuffer_sRGB","GL_ARB_geometry_shader4","GL_ARB_get_program_binary","GL_ARB_half_float_pixel","GL_ARB_half_float_vertex","GL_ARB_imaging","GL_ARB_instanced_arrays","GL_ARB_map_buffer_range","GL_ARB_multisample","GL_ARB_multitexture","GL_ARB_occlusion_query","GL_ARB_occlusion_query2","GL_ARB_pixel_buffer_object","GL_ARB_point_parameters","GL_ARB_point_sprite","GL_ARB_provoking_vertex","GL_ARB_robustness","GL_ARB_sample_shading","GL_ARB_sampler_objects","GL_ARB_seamless_cube_map","GL_ARB_separate_shader_objects","GL_ARB_shader_bit_encoding","GL_ARB_shader_objects","GL_ARB_shading_language_100","GL_ARB_shadow","GL_ARB_sync","GL_ARB_texture_border_clamp","GL_ARB_texture_buffer_object","GL_ARB_texture_compression","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_mirrored_repeat","GL_ARB_texture_multisample","GL_ARB_texture_non_power_of_two","GL_ARB_texture_query_lod","GL_ARB_texture_rectangle","GL_ARB_texture_rg","GL_ARB_texture_rgb10_a2ui","GL_ARB_texture_swizzle","GL_ARB_timer_query","GL_ARB_transform_feedback2","GL_ARB_transpose_matrix","GL_ARB_uniform_buffer_object","GL_ARB_vertex_array_bgra","GL_ARB_vertex_array_object","GL_ARB_vertex_buffer_object","GL_ARB_vertex_program","GL_ARB_vertex_shader","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_S3_s3tc","GL_EXT_texture_env_add","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_Cg_shader","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_EXTX_framebuffer_mixed_formats","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_packed_pixels","GL_EXT_pixel_buffer_object","GL_EXT_point_parameters","GL_EXT_provoking_vertex","GL_EXT_rescale_normal","GL_EXT_secondary_color","GL_EXT_separate_shader_objects","GL_EXT_separate_specular_color","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_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_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_shared_exponent","GL_EXT_texture_sRGB","GL_EXT_texture_swizzle","GL_EXT_timer_query","GL_EXT_transform_feedback2","GL_EXT_vertex_array","GL_EXT_vertex_array_bgra","GL_IBM_rasterpos_clip","GL_IBM_texture_mirrored_repeat","GL_KTX_buffer_region","GL_NV_blend_square","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_explicit_multisample","GL_NV_fence","GL_NV_float_buffer","GL_NV_fog_distance","GL_NV_fragment_program","GL_NV_fragment_program_option","GL_NV_fragment_program2","GL_NV_framebuffer_multisample_coverage","GL_NV_geometry_shader4","GL_NV_gpu_program4","GL_NV_gpu_program4_1","GL_NV_half_float","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_pixel_data_range","GL_NV_point_sprite","GL_NV_primitive_restart","GL_NV_register_combiners","GL_NV_register_combiners2","GL_NV_shader_buffer_load","GL_NV_texgen_reflection","GL_NV_texture_barrier","GL_NV_texture_compression_vtc","GL_NV_texture_env_combine4","GL_NV_texture_expand_normal","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_vertex_array_range","GL_NV_vertex_array_range2","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_NVX_conditional_render","GL_NVX_gpu_memory_info","GL_SGIS_generate_mipmap","GL_SGIS_texture_lod","GL_SGIX_depth_texture","GL_SGIX_shadow","GL_SUN_slice_accum","GL_WIN_swap_hint","WGL_EXT_swap_control"],:glsl_version=>v"3.30.0",:gl_version=>v"3.3.0"]

Is the error in GLShader line 39?
Can you run:

using GLWindow, ModernGL, GLAbstraction
createwindow("test", 40,40)
println(glCreateShader(GL_FRAGMENT_SHADER))

Sorry, don't know the answer to your question

and, when I delete the window it crashes julia

julia> createwindow("test", 40,40)
Screen(:test,Screen(:root,Screen(#undef,#undef,#undef,#undef,#undef,Window(Ptr{Void} @0xffffffffffffffff)),[],Dict{Symbol,Any}(),{},Window(Null)),[],[:keypressedstate=>Input{Int64}(0x000000000000000d,Signal[],0),:mousebutton=>Input{Int64}(0x0000000000000004,Signal[],0),:insidewindow=>Input{Bool}(0x0000000000000010,Signal[],false),:scroll_x=>Input{Int64}(0x000000000000000e,Signal[],0),:windowposition=>Input{Vector2{Int64}}(0x0000000000000009,Signal[],[0,0]),:scroll_y=>Input{Int64}(0x000000000000000f,Signal[],0),:framebuffer_size=>Input{Vector2{Int64}}(0x0000000000000008,Signal[],[0,0]),:mousedragged=>DropWhen{Vector2{Float64}}(0x0000000000000007,Signal[],Lift{Bool}(0x0000000000000006,Signal[],(anonymous function),(Input{Bool}(0x0000000000000005,Signal[Lift{Bool}(#= circular reference =#)],false),),true),Lift{Vector2{Float64}}(0x0000000000000003,Signal[DropWhen{Vector2{Float64}}(#= circular reference =#)],(anonymous function),(Input{Vector2{Float64}}(0x0000000000000002,Signal[Lift{Vector2{Float64}}(#=
circular reference =#)],[0.0,0.0]),Input{Vector2{Int64}}(0x0000000000000001,Signal[Lift{Vector2{Float64}}(#= circular reference =#)],[116,40])),[0.0,40.0]),[0.0,0.0]),:open=>Input{Bool}(0x0000000000000011,Signal[],true),:mouseposition_glfw_coordinates=>Input{Vector2{Float64}}(0x0000000000000002,Signal[Lift{Vector2{Float64}}(0x0000000000000003,Signal[DropWhen{Vector2{Float64}}(0x0000000000000007,Signal[],Lift{Bool}(0x0000000000000006,Signal[],(anonymous function),(Input{Bool}(0x0000000000000005,Signal[Lift{Bool}(#= circular reference =#)],false),),true),Lift{Vector2{Float64}}(#= circular reference =#),[0.0,0.0])],(anonymous function),(Input{Vector2{Float64}}(#= circular reference =#),Input{Vector2{Int64}}(0x0000000000000001,Signal[Lift{Vector2{Float64}}(#= circular reference =#)],[116,40])),[0.0,40.0])],[0.0,0.0]),:unicodeinput=>Input{Char}(0x000000000000000a,Signal[],'0'),:mouseposition=>Lift{Vector2{Float64}}(0x0000000000000003,Signal[DropWhen{Vector2{Float64}}(0x0000000000000007,Signal[],Lift{Bool}(0x0000000000000006,Signal[],(anonymous function),(Input{Bool}(0x0000000000000005,Signal[Lift{Bool}(#= circular reference =#)],false),),true),Lift{Vector2{Float64}}(#= circular reference =#),[0.0,0.0])],(anonymous function),(Input{Vector2{Float64}}(0x0000000000000002,Signal[Lift{Vector2{Float64}}(#= circular reference =#)],[0.0,0.0]),Input{Vector2{Int64}}(0x0000000000000001,Signal[Lift{Vector2{Float64}}(#= circular reference =#)],[116,40])),[0.0,40.0]),:keymodifiers=>Input{Int64}(0x000000000000000b,Signal[],0),:window_size=>Input{Vector2{Int64}}(0x0000000000000001,Signal[Lift{Vector2{Float64}}(0x0000000000000003,Signal[DropWhen{Vector2{Float64}}(0x0000000000000007,Signal[],Lift{Bool}(0x0000000000000006,Signal[],(anonymous function),(Input{Bool}(0x0000000000000005,Signal[Lift{Bool}(#= circular reference =#)],false),),true),Lift{Vector2{Float64}}(#= circular reference =#),[0.0,0.0])],(anonymous function),(Input{Vector2{Float64}}(0x0000000000000002,Signal[Lift{Vector2{Float64}}(#= circular reference =#)],[0.0,0.0]),Input{Vector2{Int64}}(#= circular reference =#)),[0.0,40.0])],[116,40]),:mousepressed=>Input{Bool}(0x0000000000000005,Signal[Lift{Bool}(0x0000000000000006,Signal[],(anonymous function),(Input{Bool}(#= circular reference =#),),true)],false),:keypressed=>Input{Int64}(0x000000000000000c,Signal[],0)],{},Window(test))

julia>

julia> println(glCreateShader(GL_FRAGMENT_SHADER))
1

That means it theoretically works, and ModernGL + GLFW seem to work correctly.
I will take a look, if there is something spooky in the rest of the shader loading code.

Ah by the way:
could you run the example and change createwindow("test", 1000,1000, debugging=false to createwindow("test", 1000,1000, debugging=true
That should be really the first thing to start with.

Simon, very glad to help but I won't be able to run more tests in a couple of weeks.
Good luck with your entusiastic work.

Joaquim

julia> createwindow("test", 1000,1000, debugging=true)
warning: glDebugMessageCallbacknot available for your driver, or OpenGL context not initialized
ERROR: access to undefined reference
 in glDebugMessageCallbackARB at C:\j\.julia\v0.3\ModernGL\src\glFunctions.jl:91
 in createwindow at C:\j\.julia\v0.3\GLWindow\src\reactglfw.jl:217

Oh okay...Well, thanks for your help!! :)
If the debugcallback is not available on your platform, that might be a hint, that your drivers are not the most current. But maybe, that's just how old the chip is.

I was able to find the bug.
I'm using a timer function from React and don't terminate it, after the window closes.
So it still tries to compile a shader, after the context got invalidated.
In principal easy to fix, practically I should find a better way to deal with these kind of problems in general.