本文整理汇总了C++中ogre::DataStreamPtr类的典型用法代码示例。如果您正苦于以下问题:C++ DataStreamPtr类的具体用法?C++ DataStreamPtr怎么用?C++ DataStreamPtr使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了DataStreamPtr类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: importFullTerrainFromHeightMap
//-----------------------------------------------------------------------------------------
void CTerrainGroupEditor::importFullTerrainFromHeightMap()
{
UTFStringVector extlist;
extlist.push_back(OTR("PNG Grayscale"));
extlist.push_back("*.png");
extlist.push_back(OTR("Raw 32bit Float File"));
extlist.push_back("*.raw;*.ohm;*.f32;*.r32");
Ogre::UTFString defaultPath = mSystem->GetSetting("system", "ExportTerrainPath", "");
Ogre::String filename = mSystem->DisplayOpenDialog(OTR("Import Heightmap"), extlist, defaultPath);
if(filename == "")
return;
mSystem->SetSetting("system", "ExportTerrainPath", OgitorsUtils::ExtractFilePath(filename));
Ogre::NameValuePairList params;
if(!mSystem->DisplayImportHeightMapDialog(params))
return;
Ogre::Real fScale = Ogre::StringConverter::parseReal(params["scale"]);
Ogre::Real fBias = Ogre::StringConverter::parseReal(params["bias"]);
Ogre::String normal = params["normal"];
Ogre::String diffuse = params["diffuse"];
bool flipV = Ogre::StringConverter::parseBool(params["inverted"]);
float *data = 0;
float *flipBV = 0;
Ogre::String namePart = OgitorsUtils::ExtractFileName(filename);
namePart.erase(0, namePart.find("."));
int imgW = 0;
int imgH = 0;
if(namePart == ".png")
{
std::fstream fstr(filename.c_str(), std::ios::in|std::ios::binary);
Ogre::DataStreamPtr stream = Ogre::DataStreamPtr(OGRE_NEW Ogre::FileStreamDataStream(&fstr, false));
Ogre::Image img;
img.load(stream);
data = OGRE_ALLOC_T(float, img.getWidth() * img.getHeight(), Ogre::MEMCATEGORY_GEOMETRY);
Ogre::PixelBox pb(img.getWidth(), img.getHeight(), 1, Ogre::PF_FLOAT32_R, data);
Ogre::PixelUtil::bulkPixelConversion(img.getPixelBox(), pb);
imgW = img.getWidth();
imgH = img.getHeight();
img.freeMemory();
stream.setNull();
}
示例2: parseXMLFile
//-----------------------------------------------------------------------
void ExpatParser::parseXMLFile(XMLHandler& handler,
const Ogre::String& xmlName, const Ogre::String& xmlResourceGroup,
const Ogre::String& schemaName, const Ogre::String& schemaResourceGroup)
{
XML_Parser parser = XML_ParserCreate(NULL);
try
{
MyUserData myUserData;
myUserData.handler = &handler;
if (_locale.get())
myUserData.converter = boost::bind(&expat_to_local, _1, _2, boost::ref(*_locale));
else
myUserData.converter = boost::bind(&expat_to_local_win32, _1, _2, boost::ref(_buffer));
XML_SetUserData(parser, &myUserData);
XML_SetElementHandler(parser, expatStartElementHandler, expatEndElementHandler);
XML_SetCharacterDataHandler(parser, expatCharacterDataHandler);
const size_t MaxBufferSize = 64*1024;
Ogre::DataStreamPtr dataStream = Ogre::ResourceGroupManager::getSingleton().openResource(xmlName, xmlResourceGroup);
bool done;
do
{
void* buffer = XML_GetBuffer(parser, MaxBufferSize);
if (!buffer)
{
OGRE_EXCEPT(Ogre::Exception::ERR_INTERNAL_ERROR,
"Can't allocate buffer while parse XML file '" + xmlName + "'.",
"ExpatParser::parseXMLFile");
}
size_t count = dataStream->read(buffer, MaxBufferSize);
done = dataStream->eof();
if (XML_ParseBuffer(parser, count, done) != XML_STATUS_OK)
{
OGRE_EXCEPT(Ogre::Exception::ERR_INTERNAL_ERROR,
"An error occurred while parsing XML file '" + xmlName +
"' at line " + Ogre::StringConverter::toString(XML_GetCurrentLineNumber(parser)) +
". Additional information: " + XML_ErrorString(XML_GetErrorCode(parser)),
"ExpatParser::parseXMLFile");
}
} while (!done);
}
catch(...)
{
XML_ParserFree(parser);
throw;
}
XML_ParserFree(parser);
}
示例3: parseScript
void AudioScriptLoader::parseScript(Ogre::DataStreamPtr& dataStream, const Ogre::String& groupName)
{
Ogre::String line;
bool nextIsOpenBrace = false;
mScriptContext.mSection = ASS_NONE;
mScriptContext.mSection= ASS_NONE;
mScriptContext.mSound.setNull();
mScriptContext.mLineNo = 0;
mScriptContext.mFileName=dataStream->getName();
mScriptContext.mGroupName=groupName;
Logger::getInstance()->log("About to start parsing sound script "+dataStream->getName());
while(!dataStream->eof())
{
line = dataStream->getLine();
mScriptContext.mLineNo++;
// DEBUG LINE
//Logger::getInstance()->log("About to attempt line(#" +
// Ogre::StringConverter::toString(mScriptContext.mLineNo) + "): " + line);
// Ignore comments & blanks
if (!(line.length() == 0 || line.substr(0,2) == "//"))
{
if (nextIsOpenBrace)
{
// NB, parser will have changed context already
if (line != "{")
{
logParseError("Expecting '{' but got " +
line + " instead.", mScriptContext);
}
nextIsOpenBrace = false;
}
else
{
nextIsOpenBrace = parseLine(line);
}
}
}
// Check all braces were closed
if (mScriptContext.mSection != ASS_NONE)
{
logParseError("Unexpected end of file.", mScriptContext);
}
// Make sure we invalidate our context shared pointer (don't wanna hold on)
mScriptContext.mSound.setNull();
}
示例4: UnloadMaterials
void UnloadMaterials(const std::string& filename)
{
if (filename.empty())
{
Ogre::LogManager::getSingleton().logMessage("Filename is empty.");
return;
}
Ogre::DataStreamPtr stream = Ogre::ResourceGroupManager::getSingleton().openResource(filename);
if(!stream.isNull())
{
try
{
while(!stream->eof())
{
std::string line = stream->getLine();
StringUtil::trim(line);
///
/// UNLOAD MATERIALS
///
if (StringUtil::startsWith(line, "material"))
{
Ogre::vector<Ogre::String>::type vec = StringUtil::split(line," \t:");
bool skipFirst = true;
for (Ogre::vector<Ogre::String>::type::iterator it = vec.begin(); it < vec.end(); ++it)
{
if (skipFirst)
{
skipFirst = false;
continue;
}
std::string match = (*it);
StringUtil::trim(match);
if (!match.empty())
{
UnloadResource(Ogre::MaterialManager::getSingletonPtr(), match);
break;
}
}
}
}
}
catch (Ogre::Exception &e)
{
StringUtil::StrStreamType msg;
msg << "Exception: FILE: " << __FILE__ << " LINE: " << __LINE__ << " DESC: " << e.getFullDescription() << std::endl;
Ogre::LogManager::getSingleton().logMessage(msg.str());
}
}
stream->close();
}
示例5: loadAnimationInfo
void AnimationSystem::loadAnimationInfo( const std::string& animationInfoOgreResourceName, const std::string& ogreResourceResourceGroupName )
{
using namespace tecnofreak::property;
Ogre::DataStreamPtr dataStream = Ogre::ResourceGroupManager::getSingleton().openResource( animationInfoOgreResourceName, ogreResourceResourceGroupName );
std::string animationInfoData( dataStream->getAsString() );
Property animationInfo;
xml::PropertyBuilder::initialiseFromData( &animationInfo, animationInfoData );
loadAnimationInfo( &animationInfo );
}
示例6: ReadLayerMap
void FvFTDTerrainPageSerializerImpl::ReadLayerMap(Ogre::DataStreamPtr &spStream,
FvTerrainPage *pkDest, FvUInt32 uiLayerIndex)
{
FTDLayerMapHeader kHeader;
spStream->read(&kHeader,sizeof(FTDLayerMapHeader));
FvTerrainPage::TextureLayerPtr spLayer = new FvTerrainPage::TextureLayer;
FvUInt32 uiNameSize;
spStream->read(&uiNameSize,sizeof(FvUInt32));
char acTextureName[256];
FV_ASSERT(uiNameSize < 256);
spStream->read(acTextureName,uiNameSize);
acTextureName[uiNameSize] = 0;
spLayer->m_kTextureName = acTextureName;
if(kHeader.m_uiVersion == VERSION_PNG)
{
spLayer->m_pkBlends = new Ogre::Image;
spLayer->m_pkBlends->load(spStream,"png");
}
if(kHeader.m_uiVersion == VERSION_DDS)
{
spLayer->m_pkBlends = new Ogre::Image;
spLayer->m_pkBlends->load(spStream,"dds");
}
FV_ASSERT(spLayer->m_pkBlends);
try
{
spLayer->m_spTexture = Ogre::TextureManager::getSingleton().load(spLayer->m_kTextureName,
pkDest->m_spTerrainSettings->TextureGroup());
}
catch (...){}
if(spLayer->m_spTexture.isNull())
{
FV_ERROR_MSG("FvFTDTerrainPageSerializerImpl::ReadLayerMap texture %s not exist",
spLayer->m_kTextureName.c_str());
}
spLayer->m_uiWidth = kHeader.m_uiWidth;
spLayer->m_uiHeight = kHeader.m_uiHeight;
memcpy(&spLayer->m_kUProjection, kHeader.m_kUProjection, sizeof(Ogre::Vector4));
memcpy(&spLayer->m_kVProjection, kHeader.m_kVProjection, sizeof(Ogre::Vector4));
pkDest->m_kTextureLayers.push_back(spLayer);
}
示例7: LoadAll
void aiBehaviorTreeTemplateManager::LoadAll()
{
Ogre::StringVectorPtr loc = Ogre::ResourceGroupManager::getSingleton().findResourceLocation("BehaviorTemplate", "*Behaviors");
const STRING filename = loc->at(0) + "\\Script\\";
//加载全局黑板xml
Ogre::DataStreamPtr stream = Ogre::ResourceGroupManager::getSingleton().openResource("RaceGlobal.xml", "BehaviorTemplate");
char* szData = strdup(stream->getAsString().c_str());
rapidxml::xml_document<> XMLDoc;
XMLDoc.parse<0>(szData);
rapidxml::xml_node<>* pNode = XMLDoc.first_node("Root")->first_node("BlackBoard");
while(pNode)
{
const STRING raceName = pNode->first_attribute("race")->value();
rapidxml::xml_node<>* pVarNode = pNode->first_node("Variable");
eGameRace race;
if(raceName == "Terran") race = eGameRace_Terran;
else if(raceName == "Zerg") race = eGameRace_Zerg;
else assert(0);
aiBlackBoard* bb = new aiBlackBoard;
bb->LoadParams(pVarNode);
m_globalBBs.insert(std::make_pair(race, bb));
//脚本
const char* szFilename = XMLDoc.first_node("Root")->first_node("Script")->first_attribute("filename")->value();
const STRING filepath = filename + szFilename;
SCRIPTNAMAGER.DoFile(filepath);
pNode = pNode->next_sibling("BlackBoard");
}
free(szData);
XMLDoc.clear();
//加载各单位行为树xml
Ogre::StringVectorPtr files = Ogre::ResourceGroupManager::getSingleton().findResourceNames("BehaviorTemplate", "*.xml");
auto iter = std::find(files->begin(), files->end(), "RaceGlobal.xml");
files->erase(iter);
for (auto iter=files->begin(); iter!=files->end(); ++iter)
{
aiBehaviorTreeTemplate* pTmpl = new aiBehaviorTreeTemplate;
const STRING name = pTmpl->Load(*iter);
m_bts.insert(std::make_pair(name, pTmpl));
}
}
示例8: RegenerateAllMipLevels
/*
void TextureAsset::RegenerateAllMipLevels()
{
if (ogreTexture.isNull())
return;
///\todo This function does not quite work, since ogreTexture->getNumMipmaps() will return 0 to denote a "full mipmap chain".
for(int f = 0; f < ogreTexture->getNumFaces(); ++f)
for(int i = 1; i < ogreTexture->getNumMipmaps(); ++i)
{
Ogre::HardwarePixelBufferSharedPtr src = ogreTexture->getBuffer(f, i-1);
Ogre::Box srcSize(0, 0, src->getWidth(), src->getHeight());
Ogre::HardwarePixelBufferSharedPtr dst = ogreTexture->getBuffer(f, i);
Ogre::Box dstSize(0, 0, dst->getWidth(), dst->getHeight());
dst->blit(src, srcSize, dstSize);
}
}
*/
bool TextureAsset::SerializeTo(std::vector<u8> &data, const QString &serializationParameters) const
{
if (ogreTexture.isNull())
{
LogWarning("SerializeTo: Called on an unloaded texture \"" + Name().toStdString() + "\".");
return false;
}
try
{
Ogre::Image new_image;
// From Ogre 1.7 Texture::convertToImage()
size_t numMips = 1;
size_t dataSize = Ogre::Image::calculateSize(numMips,
ogreTexture->getNumFaces(), ogreTexture->getWidth(), ogreTexture->getHeight(), ogreTexture->getDepth(), ogreTexture->getFormat());
void* pixData = OGRE_MALLOC(dataSize, Ogre::MEMCATEGORY_GENERAL);
// if there are multiple faces and mipmaps we must pack them into the data
// faces, then mips
void* currentPixData = pixData;
for (size_t face = 0; face < ogreTexture->getNumFaces(); ++face)
{
for (size_t mip = 0; mip < numMips; ++mip)
{
size_t mipDataSize = Ogre::PixelUtil::getMemorySize(ogreTexture->getWidth(), ogreTexture->getHeight(), ogreTexture->getDepth(), ogreTexture->getFormat());
Ogre::PixelBox pixBox(ogreTexture->getWidth(), ogreTexture->getHeight(), ogreTexture->getDepth(), ogreTexture->getFormat(), currentPixData);
ogreTexture->getBuffer(face, mip)->blitToMemory(pixBox);
currentPixData = (void*)((char*)currentPixData + mipDataSize);
}
}
// load, and tell Image to delete the memory when it's done.
new_image.loadDynamicImage((Ogre::uchar*)pixData, ogreTexture->getWidth(), ogreTexture->getHeight(), ogreTexture->getDepth(), ogreTexture->getFormat(), true,
ogreTexture->getNumFaces(), numMips - 1);
Ogre::DataStreamPtr imageStream = new_image.encode(serializationParameters.toStdString());
if (imageStream.get() && imageStream->size() > 0)
{
data.resize(imageStream->size());
imageStream->read(&data[0], data.size());
}
} catch (std::exception &e)
{
LogError("SerializeTo: Failed to export Ogre texture " + Name().toStdString() + ":");
if (e.what())
OgreRenderer::OgreRenderingModule::LogError(e.what());
return false;
}
return true;
}
示例9: OpenAssetStream
Resource::DataStreamPtr ResourceManager::OpenAssetStream(const String& AssetName, const String& AssetGroup)
{
/// @todo This entire method is a bit of a hack. When the resource system gets refactored it should go through our archives or whatever equivalent.
/// Since we currently have to put up with Ogre's system, we'll use it for now as a hack.
NamedDataStreamIterator StreamIt = this->NamedDataStreams.find(AssetName);
if( StreamIt != this->NamedDataStreams.end() )
return (*StreamIt).second;
Ogre::DataStreamPtr OgreStream = this->OgreResource->openResource(AssetName,AssetGroup);
Char8* AssetBuffer = new Char8[ OgreStream->size() ];
OgreStream->read( (void*)AssetBuffer, OgreStream->size() );
return this->CreateDataStream(AssetName,AssetBuffer,OgreStream->size());
}
示例10: importSkeleton
void SkeletonSerializerEx::importSkeleton(Ogre::DataStreamPtr& stream, Ogre::Skeleton* pSkel)
{
// Determine endianness (must be the first thing we do!)
determineEndianness(stream);
// Check header
readFileHeader(stream);
unsigned short streamID;
while(!stream->eof())
{
streamID = readChunk(stream);
switch (streamID)
{
case Ogre::SKELETON_BONE:
readBone(stream, pSkel);
break;
case Ogre::SKELETON_BONE_PARENT:
readBoneParent(stream, pSkel);
break;
case Ogre::SKELETON_ANIMATION:
readAnimation(stream, pSkel);
break;
case Ogre::SKELETON_ANIMATION_LINK:
readSkeletonAnimationLink(stream, pSkel);
break;
}
}
// Assume bones are stored in the binding pose
pSkel->setBindingPose();
}
示例11: color_count
//---------------------------------------------------------------------
void
BackgroundFileSerializer::readObject( Ogre::DataStreamPtr &stream, Page &pDest )
{
read2ByteBool( stream, pDest.enabled );
if( !pDest.enabled ) return;
readShort( stream, pDest.unknown_02 );
readShort( stream, pDest.value_size );
if( pDest.value_size != 1 && pDest.value_size != 2 )
{
OGRE_EXCEPT(Ogre::Exception::ERR_INVALIDPARAMS
,"Page value_size other then 1 and 2 is not supported"
,"BackgroundFileSerializer::readObject" );
}
size_t color_count( BackgroundFile::PAGE_DATA_SIZE );
pDest.colors.clear();
pDest.data.clear();
if( pDest.value_size == 2 )
{
pDest.colors.reserve( color_count );
for( size_t i( color_count ); i--; )
{
Color colourDest;
readObject( stream, colourDest );
pDest.colors.push_back( colourDest );
}
}
else
{
pDest.data.resize( color_count );
stream->read( &pDest.data[0], color_count );
}
}
示例12: readSectionHeader
//---------------------------------------------------------------------
void
BackgroundFileSerializer::readPallete( Ogre::DataStreamPtr &stream
,BackgroundFile *pDest )
{
readSectionHeader( stream, SECTION_NAME_PALETTE );
stream->read( pDest->getPalette().data(), BackgroundFile::PALETTE_ENTRY_COUNT );
}
示例13: readShorts
//---------------------------------------------------------------------
void
BackgroundFileSerializer::readLayer( Ogre::DataStreamPtr &stream
,Layer *pDest, size_t layer_index )
{
if( !pDest->enabled ) return;
uint16 tmp[4], sprite_count;
readShorts( stream, tmp, 4 );
pDest->width = tmp[0];
pDest->height = tmp[1];
sprite_count = tmp[2];
pDest->unknown_06 = tmp[3];
switch( layer_index )
{
case 1:
readShorts( stream, pDest->unknown_08, 3 );
case 2:
case 3:
readShorts( stream, pDest->unknown_0E, 4 );
}
stream->skip( 2 * 2 ); // 2 * uint16 unused;
m_layer_index = layer_index;
readVector( stream, pDest->sprites, sprite_count );
removeBuggySprites( pDest->sprites );
}
示例14: load
bool VehicleRenderable::load(Ogre::String fileName, Ogre::String groupName)
{
//open resource from exist group if specify group or file does not exist
Ogre::DataStreamPtr stream = Ogre::ResourceGroupManager::getSingleton().openResource(fileName, groupName);
//create a tinyXml object by stream
TinyXml::TiXmlDocument* doc = new TinyXml::TiXmlDocument;
try
{
doc->Parse(stream->getAsString().c_str());
}
catch (...)
{
Ogre::LogManager::getSingleton().
logMessage("VehicleRenderable Error : Parse <" + fileName + "> fail!");
delete doc;
return false;
}
//check if scene file can parse
Ogre::String str = Ogre::String(doc->RootElement()->Value());
if (str != "scene")
{
Ogre::LogManager::getSingleton().
logMessage("VehicleRenderable Error : <" + fileName + "> is not a scene file!");
delete doc;
return false;
}
TinyXml::TiXmlElement* ele;
// process scene node
ele = doc->RootElement()->FirstChildElement("nodes");
if (!loadSceneNodes(ele))
{
Ogre::LogManager::getSingleton().
logMessage("VehicleRenderable Error : errors occurred in parsing nodes!");
delete doc;
return false;
}
Ogre::LogManager::getSingleton().
logMessage("VehicleRenderable succeed!");
delete doc;
return true;
}
示例15: onBeforeDisplay
//-----------------------------------------------------------------------------------------
QPixmap HeightImageEditorCodec::onBeforeDisplay(Ogre::DataStreamPtr stream)
{
double file_len = stream->size() / 4;
unsigned int map_size = sqrt(file_len);
mBuffer = new unsigned char[map_size * map_size * sizeof(float)];
float *buf = (float *)mBuffer;
stream->read(buf, map_size * map_size * 4);
float max_h = -1000000.0f;
float min_h = 1000000.0f;
for(unsigned int i = 0; i < map_size * map_size; i++)
{
if(buf[i] > max_h)
max_h = buf[i];
if(buf[i] < min_h)
min_h = buf[i];
}
float diff = max_h - min_h;
if(diff > 0.0f)
{
unsigned char *colbuf = (unsigned char *)buf;
int pos = 0;
for(unsigned int i = 0; i < map_size * map_size; i++)
{
float tval = mapToRange(buf[i], min_h, max_h, 60, 360);
HSVtoARGB(&colbuf[pos], tval, 1.0f, 1.0f);
pos += 4;
}
}
else
memset(buf, 0xFF, map_size * map_size * 4);
QImage image = QImage((unsigned char *)buf, map_size, map_size, QImage::Format_ARGB32);
mPixmap = QPixmap(QPixmap::fromImage(image));
return mPixmap;
}