There must be something I'm missing.

Below is a repro of my problem. This is a modification of the 
osgvertexattributes sample, from the trunk.

Copy/paste the following code after createSimpleTestModel:


Code:
class MyCallback : public osg::Drawable::ComputeBoundingBoxCallback
{
public:
        MyCallback() {}
    virtual osg::BoundingBox computeBound(const osg::Drawable& drawable) const
        {
                osg::BoundingBox box(0, 0, 0, 1, 0, 1);
                return box;
        }
};

osg::Node* createSimpleTestModelATTRIBS()
{
    osg::Group* group = new osg::Group;
    
    osg::Geode* geode = new osg::Geode;
    group->addChild(geode);
    
    osg::Geometry* geometry = new osg::Geometry;
        geometry->setUseDisplayList(false);
    geode->addDrawable(geometry);

    osg::Vec3Array* vertices = new osg::Vec3Array;
        vertices->setName("in_vertex");
    vertices->push_back(osg::Vec3(0.0,0.0,0.0));
    vertices->push_back(osg::Vec3(0.0,0.0,1.0));
    vertices->push_back(osg::Vec3(1.0,0.0,0.0));
    vertices->push_back(osg::Vec3(1.0,0.0,1.0));
        //geometry->setVertexArray(vertices);
        geometry->setVertexAttribArray(6, vertices);
        geometry->setVertexAttribNormalize(6, false);
        geometry->setVertexAttribBinding(6, osg::Geometry::BIND_PER_VERTEX);

        geometry->setComputeBoundingBoxCallback(new MyCallback());

    geometry->addPrimitiveSet(new osg::DrawArrays(GL_TRIANGLE_STRIP, 0, 4));
    
    char vertexShaderSource[] = 
                "#version 150\n"
                "in vec3 in_vertex;\n"
                "uniform mat4 osg_ModelViewProjectionMatrix;\n"
       "void main(void)\n"
       "{\n"
           "    gl_Position = osg_ModelViewProjectionMatrix * vec4(in_vertex, 
1.0);\n"
       "}\n";

    char fragmentShaderSource[] = 
                "#version 150\n"
                "out vec4 out_fragcolor;\n"
        "void main(void)\n"
        "{\n"
        "    out_fragcolor = vec4(1.0, 1.0, 0.0, 1.0);\n"
        "}\n";

    osg::Program* program = new osg::Program;
    program->addShader(new osg::Shader(osg::Shader::VERTEX, 
vertexShaderSource));
    program->addShader(new osg::Shader(osg::Shader::FRAGMENT, 
fragmentShaderSource));

        program->addBindAttribLocation(std::string("in_vertex"), 6);

    geometry->getOrCreateStateSet()->setAttribute(program);
    
    return group;
}




Now modify main() so that it reads:


Code:

    bool runConvertToVertexAttributes = true; // Note: true here
    if (arguments.read("--simple") || arguments.read("--s"))
    {
        loadedModel = createSimpleTestModelATTRIBS(); // change the function 
name
    }
   
   // [...]

    if (runConvertToVertexAttributes)
    {
        // switch on the uniforms that track the modelview and projection 
matrices
        osgViewer::Viewer::Windows windows;
        viewer.getWindows(windows);
        for(osgViewer::Viewer::Windows::iterator itr = windows.begin();
            itr != windows.end();
            ++itr)
        {
            (*itr)->getState()->setUseModelViewAndProjectionUniforms(true);
            // Comment out this line (I don't think I need, so I do not use it)
            //(*itr)->getState()->setUseVertexAttributeAliasing(true);
        }
    }




Result: nothing shows up.
Expected: we should see a square.

Now uncomment the setVertexArray line when building the geometry. You will see 
the square.

Cheers,
Fred

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





_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to