[osg-users] using modern shaders with osg - setting vertex attribute layout

Chris Kuliukas chris at kuliukas.com
Fri Sep 1 19:40:44 PDT 2017


I'm also transitioning a legacy GL OSG project with a mix of custom shaders to modern GL bit by bit. And I've also had lots of trouble and headache with the built-in modern GL vertex attrib aliasing setting.

It seems crazy that the official advice is to write shaders and use OSG just like legacy GL, and OSG will then change your shader code and reinterpret deprecated calls to make it work via "modern" GL: Obviously in years to come when GL newcomers want to use OSG the official line can't be "learn how GL was 20 years ago, write your OSG code like that, and the system will make it work". 

So I'm afraid this isn't as simple as it could be, but of course it's still easier than converting raw GL calls..


Here is my only advice since I'm not yet finished myself:

My recommendation is just leave that attrib aliasing setting alone; you can use modern GL anyway. Just make sure that you use the setVertexAttribute() calls instead of setTextureCoords() / setNormals() / etc, and use the same attrib location numbering convention as OSG (I believe NVidia's drivers enforce those conventions, so you can get the vertex positions at loc=0).

Then you'll want to get a copy of the ShaderGen class so you can customize  because you'll likely want to modify it yourself. You can use this code to hook into osgDB::readNode()'s behavior to setup your shaders/attribs/etc the way you want.

You then need to set useModelViewUniforms, which seems to be less harmful than useVertexAttribAliasing and will make sure osg_ModelViewMatrix is set.


Interested to compare notes on how you go anyway

------------------------
http://www.hrwallingford.com/facilities/ship-simulation-centre (http://www.hrwallingford.com/facilities/ship-simulation-centre)

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=71598#71598







More information about the osg-users mailing list