From Mathias Froehlich, "attached is a change to osgsharedarray to move completely to the fast geometry
path. Also the arrays are moved back to static storage since this is the data that is actually referenced in draw. So the change moving this onto the stack that happend somewhere before broke this."
This commit is contained in:
parent
d66ee2c698
commit
a6e57026b2
@ -131,8 +131,100 @@ private:
|
|||||||
/** The data values for the example. Simply defines a cube with
|
/** The data values for the example. Simply defines a cube with
|
||||||
* per-face colors and normals.
|
* per-face colors and normals.
|
||||||
*/
|
*/
|
||||||
namespace {
|
|
||||||
}
|
const osg::Vec3 myVertices[] = { osg::Vec3(-1.,-1., 1.),
|
||||||
|
osg::Vec3( 1.,-1., 1.),
|
||||||
|
osg::Vec3( 1., 1., 1.),
|
||||||
|
osg::Vec3(-1., 1., 1.),
|
||||||
|
|
||||||
|
osg::Vec3( 1.,-1., 1.),
|
||||||
|
osg::Vec3( 1.,-1.,-1.),
|
||||||
|
osg::Vec3( 1., 1.,-1.),
|
||||||
|
osg::Vec3( 1., 1., 1.),
|
||||||
|
|
||||||
|
osg::Vec3( 1.,-1.,-1.),
|
||||||
|
osg::Vec3(-1.,-1.,-1.),
|
||||||
|
osg::Vec3(-1., 1.,-1.),
|
||||||
|
osg::Vec3( 1., 1.,-1.),
|
||||||
|
|
||||||
|
osg::Vec3(-1.,-1.,-1.),
|
||||||
|
osg::Vec3(-1.,-1., 1.),
|
||||||
|
osg::Vec3(-1., 1., 1.),
|
||||||
|
osg::Vec3(-1., 1.,-1.),
|
||||||
|
|
||||||
|
osg::Vec3(-1., 1., 1.),
|
||||||
|
osg::Vec3( 1., 1., 1.),
|
||||||
|
osg::Vec3( 1., 1.,-1.),
|
||||||
|
osg::Vec3(-1., 1.,-1.),
|
||||||
|
|
||||||
|
osg::Vec3(-1.,-1.,-1.),
|
||||||
|
osg::Vec3( 1.,-1.,-1.),
|
||||||
|
osg::Vec3( 1.,-1., 1.),
|
||||||
|
osg::Vec3(-1.,-1., 1.),
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const osg::Vec3 myNormals[] = { osg::Vec3( 0., 0., 1.),
|
||||||
|
osg::Vec3( 0., 0., 1.),
|
||||||
|
osg::Vec3( 0., 0., 1.),
|
||||||
|
osg::Vec3( 0., 0., 1.),
|
||||||
|
|
||||||
|
osg::Vec3( 1., 0., 0.),
|
||||||
|
osg::Vec3( 1., 0., 0.),
|
||||||
|
osg::Vec3( 1., 0., 0.),
|
||||||
|
osg::Vec3( 1., 0., 0.),
|
||||||
|
|
||||||
|
osg::Vec3( 0., 0.,-1.),
|
||||||
|
osg::Vec3( 0., 0.,-1.),
|
||||||
|
osg::Vec3( 0., 0.,-1.),
|
||||||
|
osg::Vec3( 0., 0.,-1.),
|
||||||
|
|
||||||
|
osg::Vec3(-1., 0., 0.),
|
||||||
|
osg::Vec3(-1., 0., 0.),
|
||||||
|
osg::Vec3(-1., 0., 0.),
|
||||||
|
osg::Vec3(-1., 0., 0.),
|
||||||
|
|
||||||
|
osg::Vec3( 0., 1., 0.),
|
||||||
|
osg::Vec3( 0., 1., 0.),
|
||||||
|
osg::Vec3( 0., 1., 0.),
|
||||||
|
osg::Vec3( 0., 1., 0.),
|
||||||
|
|
||||||
|
osg::Vec3( 0.,-1., 0.),
|
||||||
|
osg::Vec3( 0.,-1., 0.),
|
||||||
|
osg::Vec3( 0.,-1., 0.),
|
||||||
|
osg::Vec3( 0.,-1., 0.)
|
||||||
|
};
|
||||||
|
|
||||||
|
const osg::Vec4 myColors[] = { osg::Vec4( 1., 0., 0., 1.),
|
||||||
|
osg::Vec4( 1., 0., 0., 1.),
|
||||||
|
osg::Vec4( 1., 0., 0., 1.),
|
||||||
|
osg::Vec4( 1., 0., 0., 1.),
|
||||||
|
|
||||||
|
osg::Vec4( 0., 1., 0., 1.),
|
||||||
|
osg::Vec4( 0., 1., 0., 1.),
|
||||||
|
osg::Vec4( 0., 1., 0., 1.),
|
||||||
|
osg::Vec4( 0., 1., 0., 1.),
|
||||||
|
|
||||||
|
osg::Vec4( 1., 1., 0., 1.),
|
||||||
|
osg::Vec4( 1., 1., 0., 1.),
|
||||||
|
osg::Vec4( 1., 1., 0., 1.),
|
||||||
|
osg::Vec4( 1., 1., 0., 1.),
|
||||||
|
|
||||||
|
osg::Vec4( 0., 0., 1., 1.),
|
||||||
|
osg::Vec4( 0., 0., 1., 1.),
|
||||||
|
osg::Vec4( 0., 0., 1., 1.),
|
||||||
|
osg::Vec4( 0., 0., 1., 1.),
|
||||||
|
|
||||||
|
osg::Vec4( 1., 0., 1., 1.),
|
||||||
|
osg::Vec4( 1., 0., 1., 1.),
|
||||||
|
osg::Vec4( 1., 0., 1., 1.),
|
||||||
|
osg::Vec4( 1., 0., 1., 1.),
|
||||||
|
|
||||||
|
osg::Vec4( 0., 1., 1., 1.),
|
||||||
|
osg::Vec4( 0., 1., 1., 1.),
|
||||||
|
osg::Vec4( 0., 1., 1., 1.),
|
||||||
|
osg::Vec4( 0., 1., 1., 1.)
|
||||||
|
};
|
||||||
|
|
||||||
/** Create a Geode that describes a cube using our own
|
/** Create a Geode that describes a cube using our own
|
||||||
* subclass of osg::Array for the vertices. It uses
|
* subclass of osg::Array for the vertices. It uses
|
||||||
@ -160,40 +252,6 @@ namespace {
|
|||||||
*/
|
*/
|
||||||
osg::Geode* createGeometry()
|
osg::Geode* createGeometry()
|
||||||
{
|
{
|
||||||
const osg::Vec3 myVertices[] = { osg::Vec3(-1.,-1.,-1.),
|
|
||||||
osg::Vec3( 1.,-1.,-1.),
|
|
||||||
osg::Vec3(-1., 1.,-1.),
|
|
||||||
osg::Vec3( 1., 1.,-1.),
|
|
||||||
osg::Vec3(-1.,-1., 1.),
|
|
||||||
osg::Vec3( 1.,-1., 1.),
|
|
||||||
osg::Vec3(-1., 1., 1.),
|
|
||||||
osg::Vec3( 1., 1., 1.)
|
|
||||||
};
|
|
||||||
|
|
||||||
const osg::Vec3 myNormals[] = { osg::Vec3( 0., 0., 1.),
|
|
||||||
osg::Vec3( 1., 0., 0.),
|
|
||||||
osg::Vec3( 0., 0.,-1.),
|
|
||||||
osg::Vec3(-1., 0., 0.),
|
|
||||||
osg::Vec3( 0., 1., 0.),
|
|
||||||
osg::Vec3( 0.,-1., 0.)
|
|
||||||
};
|
|
||||||
|
|
||||||
const osg::Vec4 myColors[] = { osg::Vec4( 1., 0., 0., 1.),
|
|
||||||
osg::Vec4( 0., 1., 0., 1.),
|
|
||||||
osg::Vec4( 1., 1., 0., 1.),
|
|
||||||
osg::Vec4( 0., 0., 1., 1.),
|
|
||||||
osg::Vec4( 1., 0., 1., 1.),
|
|
||||||
osg::Vec4( 0., 1., 1., 1.)
|
|
||||||
};
|
|
||||||
|
|
||||||
const unsigned short myIndices[] = { 4, 5, 7, 6,
|
|
||||||
5, 1, 3, 7,
|
|
||||||
1, 0, 2, 3,
|
|
||||||
0, 4, 6, 2,
|
|
||||||
6, 7, 3, 2,
|
|
||||||
0, 1, 5, 4
|
|
||||||
};
|
|
||||||
|
|
||||||
osg::Geode* geode = new osg::Geode();
|
osg::Geode* geode = new osg::Geode();
|
||||||
|
|
||||||
// create Geometry
|
// create Geometry
|
||||||
@ -206,19 +264,16 @@ osg::Geode* createGeometry()
|
|||||||
// add normals
|
// add normals
|
||||||
unsigned int numNormals = sizeof(myNormals)/sizeof(myNormals[0]);
|
unsigned int numNormals = sizeof(myNormals)/sizeof(myNormals[0]);
|
||||||
geom->setNormalArray(new osg::Vec3Array(numNormals,const_cast<osg::Vec3*>(&myNormals[0])));
|
geom->setNormalArray(new osg::Vec3Array(numNormals,const_cast<osg::Vec3*>(&myNormals[0])));
|
||||||
geom->setNormalBinding(osg::Geometry::BIND_PER_PRIMITIVE);
|
geom->setNormalBinding(osg::Geometry::BIND_PER_VERTEX);
|
||||||
|
|
||||||
// add colors
|
// add colors
|
||||||
unsigned int numColors = sizeof(myColors)/sizeof(myColors[0]);
|
unsigned int numColors = sizeof(myColors)/sizeof(myColors[0]);
|
||||||
osg::Vec4Array* normal_array = new osg::Vec4Array(numColors,const_cast<osg::Vec4*>(&myColors[0]));
|
osg::Vec4Array* normal_array = new osg::Vec4Array(numColors,const_cast<osg::Vec4*>(&myColors[0]));
|
||||||
geom->setColorArray(normal_array);
|
geom->setColorArray(normal_array);
|
||||||
geom->setColorBinding(osg::Geometry::BIND_PER_PRIMITIVE);
|
geom->setColorBinding(osg::Geometry::BIND_PER_VERTEX);
|
||||||
|
|
||||||
// add PrimitiveSet
|
// add PrimitiveSet
|
||||||
unsigned int numIndices = sizeof(myIndices)/sizeof(myIndices[0]);
|
geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUADS, 0, numVertices));
|
||||||
geom->addPrimitiveSet(new osg::DrawElementsUShort(osg::PrimitiveSet::QUADS,
|
|
||||||
numIndices,
|
|
||||||
const_cast<unsigned short *>(myIndices)));
|
|
||||||
|
|
||||||
// Changing these flags will tickle different cases in
|
// Changing these flags will tickle different cases in
|
||||||
// Geometry::drawImplementation. They should all work fine
|
// Geometry::drawImplementation. They should all work fine
|
||||||
|
Loading…
Reference in New Issue
Block a user