// use to convert draw array quads to draw elements triangles JSONObject* WriteVisitor::createJSONDrawElements(osg::DrawArrays* drawArray, osg::Object* parent) { if (_maps.find(drawArray) != _maps.end()) return _maps[drawArray]->getShadowObject(); if (drawArray->getMode() != GL_QUADS) { osg::notify(osg::WARN) << "" << std::endl; return 0; } osg::ref_ptr<osg::DrawElementsUShort> de = new osg::DrawElementsUShort(GL_TRIANGLES); for (int i = 0; i < drawArray->getCount()/4; ++i) { int base = drawArray->getFirst() + i*4; de->push_back(base + 0); de->push_back(base + 1); de->push_back(base + 3); de->push_back(base + 1); de->push_back(base + 2); de->push_back(base + 3); } JSONDrawElements<osg::DrawElementsUShort>* json = new JSONDrawElements<osg::DrawElementsUShort>(*de); _maps[drawArray] = json; if(_mergeAllBinaryFiles) { setBufferName(json, parent, drawArray); } return json; }
JSONObject* WriteVisitor::createJSONDrawArrayLengths(osg::DrawArrayLengths* da, osg::Object* parent) { if (_maps.find(da) != _maps.end()) return _maps[da]->getShadowObject(); osg::ref_ptr<JSONDrawArrayLengths> json = new JSONDrawArrayLengths(*da); _maps[da] = json; if(_mergeAllBinaryFiles) { setBufferName(json.get(), parent, da); } return json.get(); }
JSONObject* WriteVisitor::createJSONDrawElementsUByte(osg::DrawElementsUByte* de, osg::Object* parent) { if (_maps.find(de) != _maps.end()) return _maps[de]->getShadowObject(); JSONDrawElements<osg::DrawElementsUByte>* json = new JSONDrawElements<osg::DrawElementsUByte>(*de); _maps[de] = json; if(_mergeAllBinaryFiles) { setBufferName(json, parent, de); } return json; }
JSONObject* WriteVisitor::createJSONBufferArray(osg::Array* array, osg::Object* parent) { if (_maps.find(array) != _maps.end()) return _maps[array]->getShadowObject(); osg::ref_ptr<JSONBufferArray> json = new JSONBufferArray(array); _maps[array] = json; if(_mergeAllBinaryFiles) { setBufferName(json.get(), parent, array); } return json.get(); }
JSONObject* WriteVisitor::createJSONDrawArrayLengths(osg::DrawArrayLengths* da, osg::Geometry* geom) { if (_maps.find(da) != _maps.end()) return _maps[da]->getShadowObject(); osg::ref_ptr<JSONDrawArrayLengths> json = new JSONDrawArrayLengths(*da); json->addUniqueID(); _maps[da] = json; if(geom && _mergeAllBinaryFiles) { setBufferName(json.get(), geom); } return json.get(); }
JSONObject* WriteVisitor::createJSONDrawElementsUByte(osg::DrawElementsUByte* de, osg::Geometry* geom) { if (_maps.find(de) != _maps.end()) return _maps[de]->getShadowObject(); JSONDrawElements<osg::DrawElementsUByte>* json = new JSONDrawElements<osg::DrawElementsUByte>(*de); json->addUniqueID(); _maps[de] = json; if(geom && _mergeAllBinaryFiles) { setBufferName(json, geom); } return json; }
JSONObject* WriteVisitor::createJSONBufferArray(osg::Array* array, osg::Geometry* geom) { if (_maps.find(array) != _maps.end()) return _maps[array]->getShadowObject(); osg::ref_ptr<JSONBufferArray> json = new JSONBufferArray(array); json->addUniqueID(); _maps[array] = json; if(geom && _mergeAllBinaryFiles) { setBufferName(json.get(), geom); } return json.get(); }