Re: [osg-users] OpenGL Extensions.
Jan, I looked at GLEW after I wrote my original post. I was about to download and use when I figured out an easier way. I essentially followed robert's advise (thanks rob!). NOTE: In my case, I would also need to recompile GLEW to use multiple threads/context (which also require installing Cygwin). Thanks for your help. -- Read this topic online here: http://forum.openscenegraph.org/viewtopic.php?p=17305#17305 ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
Re: [osg-users] OpenGL Extensions.
Hi Guy, It's the GraphicsContext/GraphicsWindow that govern what extensions are supported, so use a RealizeOperation and then realize your graphics context prior to finializing set up of your scene graph. Have look at the osgshaderterrain example to see how you could do this. Robert. On Wed, Sep 9, 2009 at 3:24 PM, Guy Volckaert wrote: > Hi, > > I have several cameras that need to be configured slightly differently > depending on the opengl extensions supported by the card. For example, I > have a card that does not support p-buffers in which case I need to devise a > different way to perform RTT. Same goes for vertex and fragment shaders. In > essence, I need to handle these situations. > > I know how to recover all supported extensions but that can only be done > after the graphic context is create and made current for the camera (i.e. > the osg::camera::realize() is called). > > As I understand, I'm in a catch-22 situation. I cannot get the opengl > extension because I did not fully configured my camera, and I can't > configure my camera because I don't have the opengl extension yet. > > Obviously, I can register a InitialDrawCallback function for each of my > cameras. This callback could then lookup the extension and complete the > camera configuration, but that seems very messy. > > Is there an easier way to do this? > > Thank you! > > Guy > > -- > Read this topic online here: > http://forum.openscenegraph.org/viewtopic.php?p=17188#17188 > > > > > > ___ > osg-users mailing list > osg-users@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
Re: [osg-users] OpenGL Extensions.
"Guy Volckaert" wrote: > Is there an easier way to do this? > Perhaps using GLEW (http://glew.sourceforge.net/) directly to figure out the extensions before you initialize OSG? Regards, Jan signature.asc Description: This is a digitally signed message part. ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
[osg-users] OpenGL Extensions.
Hi, I have several cameras that need to be configured slightly differently depending on the opengl extensions supported by the card. For example, I have a card that does not support p-buffers in which case I need to devise a different way to perform RTT. Same goes for vertex and fragment shaders. In essence, I need to handle these situations. I know how to recover all supported extensions but that can only be done after the graphic context is create and made current for the camera (i.e. the osg::camera::realize() is called). As I understand, I'm in a catch-22 situation. I cannot get the opengl extension because I did not fully configured my camera, and I can't configure my camera because I don't have the opengl extension yet. Obviously, I can register a InitialDrawCallback function for each of my cameras. This callback could then lookup the extension and complete the camera configuration, but that seems very messy. Is there an easier way to do this? Thank you! Guy -- Read this topic online here: http://forum.openscenegraph.org/viewtopic.php?p=17188#17188 ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
Re: [osg-users] openGL extensions
Hi Ben, GL_ARB_fragment_shader In order to use the shadow fragment shader, you need this one too. If it's not supported by your card, osgShadow::ShadowMap (and most shadow techniques) can do a fixed function fallback. To see if this works for you, you can call shadowMap->clearShaderList() before the first frame (i.e. when you construct the shadowMap object). If GL_EXT_framebuffer_object is supported, the fixed function fallback should be fast enough. The only time I've seen shadow maps be REALLY slow (i.e. 1.5 fps vs 60+ when disabled) both in fixed function and with the shader is when GL_EXT_framebuffer_object was not supported. Sorry I didn't include this one in my list, I assumed that if a card supported GL_ARB_fragment_program, then it also supported GL_ARB_fragment_shader, but this seems not to be the case for you. Bare in mind that this is all though my experiences of what works in my projects, so there are shortcomings sometimes. :-) Hope this helps, J-S -- __ Jean-Sebastien Guay[EMAIL PROTECTED] http://www.cm-labs.com/ http://whitestar02.webhop.org/ ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
Re: [osg-users] openGL extensions
Hi Jean, Thanks for the list of extensions that you test for in the ShadowMap. However, I have a graphics card that meets those requirements yet still does not render ShadowMap shadows. Can you tell me if any of these extensions look like the 'smoking gun' as to why this card does not display shadows? Here is a list of extensions that ARE NOT supported on this graphics card. This list was extracted from a diff between a working graphics card that does display shadows and the current 'broken' one. I am sure there are more extensions that are not listed here that I am unaware of. GL_ARB_draw_buffers GL_ARB_fragment_shader GL_ARB_multisample GL_ARB_shader_objects GL_ARB_shading_language_100 GL_ARB_transpose_matrix GL_ARB_vertex_buffer_object GL_ARB_vertex_shader GL_ATI_draw_buffers GL_EXT_blend_equation_separate GL_EXT_compiled_vertex_array GL_EXT_Cg_shader GL_EXT_depth_bounds_test GL_EXT_framebuffer_blit GL_EXT_framebuffer_multisample GL_EXT_gpu_program_parameters GL_EXT_point_parameters GL_EXT_stencil_two_side GL_NV_fence GL_NV_fragment_program GL_NV_framebuffer_multisample_coverage GL_NV_half_float GL_NV_occlusion_query GL_NV_pixel_data_range GL_NV_point_sprite GL_NV_primitive_restart GL_NV_register_combiners GL_NV_register_combiners2 GL_NV_vertex_array_range GL_NV_vertex_array_range2 GL_NV_vertex_program GL_NV_vertex_program1_1 GL_NV_vertex_program2 GL_NVX_conditional_render This is the list of extensions are ARE supported by this 'broken' card that does not display shadows: GL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_half_float_pixel GL_ARB_imaging GL_ARB_multitexture GL_ARB_occlusion_query GL_ARB_pixel_buffer_object GL_ARB_point_parameters GL_ARB_point_sprite GL_ARB_shadow GL_ARB_texture_border_clamp GL_ARB_texture_compression GL_ARB_texture_cube_map GL_ARB_texture_env_add GL_ARB_texture_env_combine 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_vertex_program GL_ARB_window_pos 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_blend_color GL_EXT_blend_func_separate GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_draw_range_elements GL_EXT_fog_coord GL_EXT_framebuffer_object GL_EXT_multi_draw_arrays GL_EXT_packed_depth_stencil GL_EXT_packed_pixels GL_EXT_pixel_buffer_object GL_EXT_rescale_normal GL_EXT_secondary_color GL_EXT_separate_specular_color GL_EXT_shadow_funcs GL_EXT_stencil_wrap GL_EXT_texture3D 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_lod GL_EXT_texture_lod_bias GL_EXT_texture_mirror_clamp GL_EXT_texture_object GL_EXT_texture_sRGB GL_EXT_timer_query GL_EXT_vertex_array GL_IBM_rasterpos_clip GL_IBM_texture_mirrored_repeat GL_KTX_buffer_region GL_NV_blend_square GL_NV_copy_depth_to_color GL_NV_depth_clamp GL_NV_float_buffer GL_NV_fog_distance GL_NV_fragment_program_option GL_NV_fragment_program2 GL_NV_light_max_exponent GL_NV_multisample_filter_hint GL_NV_packed_depth_stencil GL_NV_texgen_reflection GL_NV_texture_compression_vtc GL_NV_texture_env_combine4 GL_NV_texture_expand_normal GL_NV_texture_rectangle GL_NV_texture_shader GL_NV_texture_shader2 GL_NV_texture_shader3 GL_NV_vertex_program2_option GL_NV_vertex_program3 GL_SGIS_generate_mipmap GL_SGIS_texture_lod GL_SGIX_depth_texture GL_SGIX_shadow GL_SUN_slice_accum Thanks, -Ben -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Jean-Sébastien Guay Sent: Monday, September 22, 2008 8:12 PM To: OpenSceneGraph Users Subject: Re: [osg-users] openGL extensions Hi Ben, > I would like to detect if the user has the appropriate openGL extensions > in order to do shadowing. However, when I do: > > glGetString(GL_VERSION) > glGetString(GL_EXTENSIONS) > > They return null. How can I get a list of the available extensions? Is > there an easy way to get this info from OSG? For the first part of your question, they return NULL if they were called from a thread that does not have a graphics context. The safest way to do this is to create a camera predraw/postdraw/finaldraw callback or a node cull callback or a drawable draw callback. In each of these points you will have a graphics context. What I generally do is assume support is present and start the viewer with a detection callback attached (camera predraw callback on the main camera) which will check extensions and then remove itself from the camera. Then after the first frame, if I see that some feature is not supported, I disable the relevant options. There are other valid strategies of course. As for detecting actual extensions, instead of calling glGetString(GL_EXTENSIONS) and parsing it yourself, you can use #inc
Re: [osg-users] openGL extensions
Ben Axelrod wrote: Thank you Jean and Gordon. I put those functions in my draw callback and now I get some information. However, the behavior is very strange. It only works the first time through. The rest of the time, they return null. Even weirder is that if I click on another window, they work again for one iteration, then go back to being null. Every time I click off and on again of my OSG application, the info appears. Why is this? Draw callbacks are only called when the node is drawn. If you are using display lists (OSG does by default), then the draw is called only on the first draw or when the context is initialized. All other draws are done using the cached display list. You need to disable display lists on your drawable with setUseDisplayList( false ). Hope this helps, --Will FYI: OSG 2.6.0 on Debian Etch with an NVidia 7300 card. Thanks, -Ben -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Jean-Sébastien Guay Sent: Monday, September 22, 2008 8:12 PM To: OpenSceneGraph Users Subject: Re: [osg-users] openGL extensions Hi Ben, I would like to detect if the user has the appropriate openGL extensions in order to do shadowing. However, when I do: glGetString(GL_VERSION) glGetString(GL_EXTENSIONS) They return null. How can I get a list of the available extensions? Is there an easy way to get this info from OSG? For the first part of your question, they return NULL if they were called from a thread that does not have a graphics context. The safest way to do this is to create a camera predraw/postdraw/finaldraw callback or a node cull callback or a drawable draw callback. In each of these points you will have a graphics context. What I generally do is assume support is present and start the viewer with a detection callback attached (camera predraw callback on the main camera) which will check extensions and then remove itself from the camera. Then after the first frame, if I see that some feature is not supported, I disable the relevant options. There are other valid strategies of course. As for detecting actual extensions, instead of calling glGetString(GL_EXTENSIONS) and parsing it yourself, you can use #include #include osg::isGLExtensionSupported(contextID, extensionName) Also, how do I know which extensions I need for the different shadow techniques? I'm personally not sure which extensions are required for all of them, perhaps someone else will know (it might be good to add that info to the osgShadow page on the wiki). I can tell you what I test for in the case of osgShadow::ShadowMap: _shadowsSupported = osg::isGLExtensionSupported(contextID, "GL_EXT_framebuffer_object") && (osg::isGLExtensionSupported(contextID, "GL_ARB_fragment_program") || osg::isGLExtensionSupported(contextID, "GL_EXT_fragment_program")) && (osg::isGLExtensionSupported(contextID, "GL_ARB_fragment_program_shadow") || osg::isGLExtensionSupported(contextID, "GL_EXT_fragment_program_shadow")); Not sure if that's totally correct, but in most cases where shadow maps were not supported (they fell back to software and so were extremely slow) it was the first (GL_EXT_framebuffer_object) which was not supported. Hope this helps, J-S -- __ Jean-Sebastien Guay[EMAIL PROTECTED] http://www.cm-labs.com/ http://whitestar02.webhop.org/ ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org smime.p7s Description: S/MIME Cryptographic Signature ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
Re: [osg-users] openGL extensions
Thank you Jean and Gordon. I put those functions in my draw callback and now I get some information. However, the behavior is very strange. It only works the first time through. The rest of the time, they return null. Even weirder is that if I click on another window, they work again for one iteration, then go back to being null. Every time I click off and on again of my OSG application, the info appears. Why is this? FYI: OSG 2.6.0 on Debian Etch with an NVidia 7300 card. Thanks, -Ben -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Jean-Sébastien Guay Sent: Monday, September 22, 2008 8:12 PM To: OpenSceneGraph Users Subject: Re: [osg-users] openGL extensions Hi Ben, > I would like to detect if the user has the appropriate openGL extensions > in order to do shadowing. However, when I do: > > glGetString(GL_VERSION) > glGetString(GL_EXTENSIONS) > > They return null. How can I get a list of the available extensions? Is > there an easy way to get this info from OSG? For the first part of your question, they return NULL if they were called from a thread that does not have a graphics context. The safest way to do this is to create a camera predraw/postdraw/finaldraw callback or a node cull callback or a drawable draw callback. In each of these points you will have a graphics context. What I generally do is assume support is present and start the viewer with a detection callback attached (camera predraw callback on the main camera) which will check extensions and then remove itself from the camera. Then after the first frame, if I see that some feature is not supported, I disable the relevant options. There are other valid strategies of course. As for detecting actual extensions, instead of calling glGetString(GL_EXTENSIONS) and parsing it yourself, you can use #include #include osg::isGLExtensionSupported(contextID, extensionName) > Also, how do I know which extensions I need for the different shadow > techniques? I'm personally not sure which extensions are required for all of them, perhaps someone else will know (it might be good to add that info to the osgShadow page on the wiki). I can tell you what I test for in the case of osgShadow::ShadowMap: _shadowsSupported = osg::isGLExtensionSupported(contextID, "GL_EXT_framebuffer_object") && (osg::isGLExtensionSupported(contextID, "GL_ARB_fragment_program") || osg::isGLExtensionSupported(contextID, "GL_EXT_fragment_program")) && (osg::isGLExtensionSupported(contextID, "GL_ARB_fragment_program_shadow") || osg::isGLExtensionSupported(contextID, "GL_EXT_fragment_program_shadow")); Not sure if that's totally correct, but in most cases where shadow maps were not supported (they fell back to software and so were extremely slow) it was the first (GL_EXT_framebuffer_object) which was not supported. Hope this helps, J-S -- __ Jean-Sebastien Guay[EMAIL PROTECTED] http://www.cm-labs.com/ http://whitestar02.webhop.org/ ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
Re: [osg-users] openGL extensions
Hi Ben, I would like to detect if the user has the appropriate openGL extensions in order to do shadowing. However, when I do: glGetString(GL_VERSION) glGetString(GL_EXTENSIONS) They return null. How can I get a list of the available extensions? Is there an easy way to get this info from OSG? For the first part of your question, they return NULL if they were called from a thread that does not have a graphics context. The safest way to do this is to create a camera predraw/postdraw/finaldraw callback or a node cull callback or a drawable draw callback. In each of these points you will have a graphics context. What I generally do is assume support is present and start the viewer with a detection callback attached (camera predraw callback on the main camera) which will check extensions and then remove itself from the camera. Then after the first frame, if I see that some feature is not supported, I disable the relevant options. There are other valid strategies of course. As for detecting actual extensions, instead of calling glGetString(GL_EXTENSIONS) and parsing it yourself, you can use #include #include osg::isGLExtensionSupported(contextID, extensionName) Also, how do I know which extensions I need for the different shadow techniques? I'm personally not sure which extensions are required for all of them, perhaps someone else will know (it might be good to add that info to the osgShadow page on the wiki). I can tell you what I test for in the case of osgShadow::ShadowMap: _shadowsSupported = osg::isGLExtensionSupported(contextID, "GL_EXT_framebuffer_object") && (osg::isGLExtensionSupported(contextID, "GL_ARB_fragment_program") || osg::isGLExtensionSupported(contextID, "GL_EXT_fragment_program")) && (osg::isGLExtensionSupported(contextID, "GL_ARB_fragment_program_shadow") || osg::isGLExtensionSupported(contextID, "GL_EXT_fragment_program_shadow")); Not sure if that's totally correct, but in most cases where shadow maps were not supported (they fell back to software and so were extremely slow) it was the first (GL_EXT_framebuffer_object) which was not supported. Hope this helps, J-S -- __ Jean-Sebastien Guay[EMAIL PROTECTED] http://www.cm-labs.com/ http://whitestar02.webhop.org/ ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
Re: [osg-users] Opengl extensions
Yes these will work But you can only do OpenGL calls in a process that has a valid Opengl context in the case of OSG the is the draw thread We do ours in the first call to draw in a draw callback, Search the archives for more info if you require more in-depth answer __ Gordon Tomlinson <mailto:[EMAIL PROTECTED]> [EMAIL PROTECTED] IM: <mailto:[EMAIL PROTECTED]> [EMAIL PROTECTED] <http://www.vis-sim.com/> www.vis-sim.com <http://www.gordontomlinson.com/> www.gordontomlinson.com __ From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Ben Axelrod Sent: Monday, September 22, 2008 6:28 PM To: OpenSceneGraph Users Subject: [osg-users] openGL extensions I would like to detect if the user has the appropriate openGL extensions in order to do shadowing. However, when I do: glGetString(GL_VERSION) glGetString(GL_EXTENSIONS) They return null. How can I get a list of the available extensions? Is there an easy way to get this info from OSG? Also, how do I know which extensions I need for the different shadow techniques? Thanks, -Ben ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
[osg-users] openGL extensions
I would like to detect if the user has the appropriate openGL extensions in order to do shadowing. However, when I do: glGetString(GL_VERSION) glGetString(GL_EXTENSIONS) They return null. How can I get a list of the available extensions? Is there an easy way to get this info from OSG? Also, how do I know which extensions I need for the different shadow techniques? Thanks, -Ben ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org