>
> So if I use custom attributes and no built in ones, then I shouldn't have this problem of overwriting existing attributes, which I also tested in the OpenGL app, and it allowed me to use 0 for a vertex attrib, and 1 for a colour attrib. So that's what I want to do now in my OSG app. But I cannot get it to work, it just renders nothing. I have tried different attribute values (from '0 and 1', '10 and 11', to '0 and 11'), but to no avail.
>
> I've posted what I believe is the relevant code, maybe I didn't set the vertex data right in the geometry. The code here currently renders nothing.
>
>
> Code:
>
> GLuint vertLoc = 0;
> GLuint colLoc = 1;
>
> //
> osg::Geode* pyramidGeode = new osg::Geode();
> root->addChild(pyramidGeode);
>
> //geometry
> osg::Geometry* pyramidGeometry = new osg::Geometry();
> pyramidGeode->addDrawable(pyramidGeometry);
>
> //vertices
> osg::Vec3Array* pyramidVertices = new osg::Vec3Array;
>
> for(int i=0;i<model->verticesNum;i++) {
> float x = model->positions[i*3];
> float y = model->positions[i*3+1];
> float z = model->positions[i*3+2];
> pyramidVertices->push_back(osg::Vec3(x,y,z));
> }
>
>
> //pyramidGeometry->setVertexArray(pyramidVertices);
>
> program->addBindAttribLocation("a_vertex", vertLoc);
> pyramidGeometry->setVertexAttribArray(vertLoc,pyramidVertices);
> pyramidGeometry->setVertexAttribBinding(vertLoc, osg::Geometry::BIND_PER_VERTEX);
> }
> //colours
> osg::Vec4Array* colors = new osg::Vec4Array;
>
> for(int i=0;i<model->verticesNum;i++) {
> float r = model->cols[i*4];
> float g = model->cols[i*4+1];
> float b = model->cols[i*4+2];
> float a = model->cols[i*4+3];
> colors->push_back(osg::Vec4(r,g,b,a));
> }
>
> program->addBindAttribLocation("a_col", colLoc);
> pyramidGeometry->setVertexAttribArray(colLoc, colors);
> pyramidGeometry->setVertexAttribBinding(colLoc, osg::Geometry::BIND_PER_VERTEX);
> }
>
> //indices
> osg::DrawElementsUInt* pyramidBase = new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES,model->indicesNum,model->indices, 0);
> pyramidGeometry->addPrimitiveSet(pyramidBase);
>
>
>
>
> and the shaders
>
> Code:
>
> //vertex shader
>
>
> attribute vec3 a_vertex;
> attribute vec4 a_col;
>
>
> varying vec4 col;
>
> void main() {
> col = a_col;
>
> //gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex
> gl_Position = gl_ModelViewProjectionMatrix * vec4(a_vertex, 1.0);
>
> }
>
> //fragment shader
>
> varying vec4 col;
>
> void main() {
> gl_FragColor =col;
> }