Hi Ferdi,
I could be a driver bug or limit. Try disabling the display lists and
don't enable VBO's.
Also try breaking the data up into a number of Geometry objects rather
than packing all the data into a single Geometry. Chunking the data
in this way will help with culling and with the OpenGL driver manage
the data as each chunk will be able to fit on the graphics card, even
if they have to be swapped in and out to render all of them it'll
still utilise the graphics pipeline much more efficiently.
Robert.
On Wed, Dec 10, 2008 at 4:28 PM, Ferdi Smit <[EMAIL PROTECTED]> wrote:
> Hello,
>
> I ran into something peculiar. When loading my own simple binary file format
> into osg vertex array, normal array and element array (unsigned int) it
> works fine for models of say 1 million faces (~25MB); however, for the same
> model files it fails for models of say 7 million faces and up (~160MB). The
> stats handler does say the vertices and geometry and faces are all there,
> but it doesn't display anything. It runs at 60Hz and the screen is blank. I
> disabled all culling, set both counter- and clockwise ordering, but nothing
> helps. All these models work when I just load them to VBOs manually and call
> a glDrawElements. Any ideas what may be causing this?
>
> (simple, boring, poor code follows)
>
> template <typename T>
> void binout(std::ostream& ofs, const T& x) {
> ofs.write((char*)&x, sizeof(T));
> }
>
> template <typename T>
> void binin(std::istream& is, T& out) {
> is.read((char*)&out, sizeof(T));
> }
>
> typedef unsigned int uint32;
> typedef unsigned char uint8;
>
> osg::ref_ptr<osg::Node> loadBinFile(const std::string& fname) {
> osg::ref_ptr<osg::Geode> geode = new osg::Geode;
> osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;
> geode->addDrawable(geom);
>
> osg::ref_ptr<osg::Vec3Array> c = new osg::Vec3Array;
> c->push_back(osg::Vec3(0.5, 1.0, 1.0));
> geom->setColorArray(c);
> geom->setColorBinding(osg::Geometry::BIND_OVERALL);
>
> osg::ref_ptr<osg::Vec3Array> v = new osg::Vec3Array;
> osg::ref_ptr<osg::Vec3Array> n = new osg::Vec3Array;
> osg::DrawElementsUInt* elements = new
> osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES);
>
> std::cout << "Loading scene " << fname << " ..." << std::endl;
> std::ifstream ifs;
> ifs.exceptions(std::ios_base::failbit | std::ios_base::badbit |
> std::ios_base::eofbit);
> ifs.open(fname.c_str(), std::ios::in | std::ios::binary);
>
> uint32 nr_objs;
> binin<uint32>(ifs, nr_objs);
> std::cout << "File contains " << nr_objs << " object(s); skipping all but
> first." << std::endl;
>
> uint32 num_verts, num_faces;
> uint8 r, g, b;
>
> binin<uint32>(ifs, num_verts);
> binin<uint32>(ifs, num_faces);
> binin<uint8>(ifs, r);
> binin<uint8>(ifs, g);
> binin<uint8>(ifs, b);
>
> v->resize(num_verts);
> n->resize(num_verts);
> elements->resize(num_faces*3); // 3 indices per face
>
> // vertex / normal interleaved storage
> std::cout << "Reading vertex data ... " << std::endl;
> for (size_t i=0; i<num_verts; ++i) {
> binin<float>(ifs, (*v)[i].x());
> binin<float>(ifs, (*v)[i].y());
> binin<float>(ifs, (*v)[i].z());
> binin<float>(ifs, (*n)[i].x());
> binin<float>(ifs, (*n)[i].y());
> binin<float>(ifs, (*n)[i].z());
> }
>
> std::cout << "Reading face data ... " << std::endl;
> for (size_t i=0; i<num_faces; ++i) {
> binin<uint32>(ifs, (*elements)[3*i+0]);
> binin<uint32>(ifs, (*elements)[3*i+1]);
> binin<uint32>(ifs, (*elements)[3*i+2]);
> }
> // ifs.read((char*)&((*elements)[0]), num_faces*3*sizeof(uint32));
>
> std::cout << "Done." << std::endl;
>
> geom->setVertexArray(v);
> geom->setNormalArray(n);
> geom->setNormalBinding(osg::Geometry::BIND_PER_VERTEX);
> geom->addPrimitiveSet(elements);
>
> return geode.get();
> }
>
> int main(int argc, char* argv[]) {
> osg::ref_ptr<osg::Node> root = loadBinFile("D:\\models\\dragon1.bin");
> root->getOrCreateStateSet()->setMode(GL_NORMALIZE,
> osg::StateAttribute::ON);
>
> osgViewer::Viewer viewer;
> viewer.getCamera()->setCullingMode(osg::CullSettings::NO_CULLING);
> viewer.setSceneData(root);
> viewer.addEventHandler(new osgViewer::StatsHandler);
> viewer.run();
>
> return 0;
> }
>
>
>
> --
> Regards,
>
> Ferdi Smit
> INS3 Visualization and 3D Interfaces
> CWI Amsterdam, The Netherlands
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org