本文整理汇总了C++中ogre::TexturePtr::getName方法的典型用法代码示例。如果您正苦于以下问题:C++ TexturePtr::getName方法的具体用法?C++ TexturePtr::getName怎么用?C++ TexturePtr::getName使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ogre::TexturePtr
的用法示例。
在下文中一共展示了TexturePtr::getName方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: updateShadowTexture
Ogre::TexturePtr Simple::updateShadowTexture(Ogre::MaterialPtr material, const TerrainPageShadow* terrainPageShadow, std::set<std::string>& managedTextures) const
{
auto shadowTextureName = getShadowTextureName(material);
Ogre::TexturePtr texture = static_cast<Ogre::TexturePtr>(Ogre::Root::getSingletonPtr()->getTextureManager()->getByName(shadowTextureName));
if (texture.isNull()) {
texture = Ogre::Root::getSingletonPtr()->getTextureManager()->createManual(shadowTextureName, "General", Ogre::TEX_TYPE_2D, mPage.getBlendMapSize(), mPage.getBlendMapSize(), 1, Ogre::PF_L8, Ogre::TU_DYNAMIC_WRITE_ONLY);
managedTextures.insert(texture->getName());
}
Ogre::Image ogreImage;
terrainPageShadow->loadIntoImage(ogreImage);
texture->loadImage(ogreImage);
//blit the whole image to the hardware buffer
Ogre::PixelBox sourceBox(ogreImage.getPixelBox());
//blit for each mipmap
for (unsigned int i = 0; i <= texture->getNumMipmaps(); ++i) {
Ogre::HardwarePixelBufferSharedPtr hardwareBuffer(texture->getBuffer(0, i));
hardwareBuffer->blitFromMemory(sourceBox);
}
return texture;
}
示例2: update
void Material::update() {
if(!baseMaterial.isNull()) {
Ogre::ColourValue ambient = baseMaterial->getTechnique(0)->getPass(0)->getAmbient();
Ogre::ColourValue diffuse = baseMaterial->getTechnique(0)->getPass(0)->getDiffuse();
Ogre::ColourValue specular = baseMaterial->getTechnique(0)->getPass(0)->getSpecular();
Ogre::ColourValue emissive = baseMaterial->getTechnique(0)->getPass(0)->getEmissive();
float shininess = baseMaterial->getTechnique(0)->getPass(0)->getShininess();
GLuint tex = 0;
if(baseMaterial->getNumTechniques()!=0 && baseMaterial->getTechnique(0)->getNumPasses()!=0 && baseMaterial->getTechnique(0)->getPass(0)->getNumTextureUnitStates()!=0) {
Ogre::String texName = baseMaterial->getTechnique(0)->getPass(0)->getTextureUnitState(0)->getTextureName();
if(Ogre::TextureManager::getSingleton().resourceExists(texName)) {
Ogre::TexturePtr texPtr = Ogre::TextureManager::getSingleton().getByName(texName);
Ogre::Image img;
texPtr->convertToImage(img);
Ogre::TexturePtr texture = Ogre::TextureManager::getSingleton().createManual(texPtr->getName()+"_optixformat", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D, texPtr->getWidth(), texPtr->getHeight(), 0, Ogre::PF_FLOAT32_RGBA, Ogre::TU_DYNAMIC_WRITE_ONLY_DISCARDABLE);
texture->loadImage(img);
tex = ((Ogre::GLTexturePtr)texture)->getGLID();
}
}
prepareMaterial(glm::vec3(ambient.r,ambient.g,ambient.b),
glm::vec3(diffuse.r,diffuse.g,diffuse.b),
glm::vec3(specular.r,specular.g,specular.b),
glm::vec3(emissive.r,emissive.g,emissive.b),
shininess,tex);
}
}
示例3: CreateGroundMaterialTextured
//-------------------------------------------------------
Ogre::Material* Ground::CreateGroundMaterialTextured(const std::string & name, const Ogre::Image* texture)
{
Ogre::TexturePtr heightMapTexture = Ogre::TextureManager::getSingleton().loadImage("Texture/Terrain",
Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, *texture);
Ogre::MaterialPtr material = Ogre::MaterialManager::getSingleton().create(name, Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
{
Ogre::Technique* techniqueGL = material->getTechnique(0);
Ogre::Pass* pass = techniqueGL->getPass(0);
{
auto vprogram = Ogre::HighLevelGpuProgramManager::getSingleton().createProgram("Shader/" + CLASS_NAME + "/GL/Textured/V",
Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, "glsl", Ogre::GPT_VERTEX_PROGRAM);
vprogram->setSource(Shader_GL_Simple_V);
//auto vparams = vprogram->createParameters();
//vparams->setNamedAutoConstant("modelviewproj", Ogre::GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX);
pass->setVertexProgram(vprogram->getName());
}
{
auto fprogram = Ogre::HighLevelGpuProgramManager::getSingleton().createProgram("Shader/" + CLASS_NAME + "/GL/Textured/F",
Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, "glsl", Ogre::GPT_FRAGMENT_PROGRAM);
fprogram->setSource(Shader_GL_Simple_F);
auto unit0 = pass->createTextureUnitState(heightMapTexture->getName());
unit0->setTextureAddressingMode(Ogre::TextureUnitState::TAM_CLAMP);
unit0->setTextureFiltering(Ogre::TFO_NONE);
pass->setFragmentProgram(fprogram->getName());
}
}
#if !NDEBUG
material->load();
#endif
return material.get();
}
示例4: showTexture
TexturePair AssetsManager::showTexture(const std::string textureName)
{
// if (!mOgreCEGUITexture) {
// S_LOG_WARNING("You must first create a valid OgreCEGUITexture instance.");
// return;
// }
if (Ogre::TextureManager::getSingleton().resourceExists(textureName)) {
Ogre::TexturePtr texturePtr = static_cast<Ogre::TexturePtr>(Ogre::TextureManager::getSingleton().getByName(textureName));
if (!texturePtr.isNull()) {
if (!texturePtr->isLoaded()) {
try {
texturePtr->load();
} catch (...) {
S_LOG_WARNING("Error when loading " << textureName << ". This texture will not be shown.");
return TexturePair();
}
}
std::string textureName(texturePtr->getName());
std::string imageSetName(textureName + "_AssetsManager");
return createTextureImage(texturePtr, imageSetName);
// mOgreCEGUITexture->setOgreTexture(texturePtr);
}
}
return TexturePair();
}
示例5: resizeTexture
void UiManager::resizeTexture(const QSize &aSize, const Ogre::MaterialPtr &aMaterial, const Ogre::TexturePtr &aTexture)
{
assert(!aMaterial.isNull());
assert(!aTexture.isNull());
// get the smallest power of two dimension that is at least as large as the new UI size
Ogre::uint newTexWidth = nextHigherPowerOfTwo(aSize.width());
Ogre::uint newTexHeight = nextHigherPowerOfTwo(aSize.height());
if (!aTexture.isNull())
{
std::string txtrName = aTexture->getName();
// remove the old texture
aTexture->unload();
aMaterial->getTechnique(0)->getPass(0)->removeAllTextureUnitStates();
Ogre::TextureManager::getSingleton().remove(aTexture->getHandle());
Ogre::TexturePtr newTxtr = Ogre::TextureManager::getSingleton().createManual(
txtrName, "General", Ogre::TEX_TYPE_2D, newTexWidth, newTexHeight, 0, Ogre::PF_A8R8G8B8,
Ogre::TU_DYNAMIC_WRITE_ONLY);
// add the new texture
Ogre::TextureUnitState* txtrUstate = aMaterial->getTechnique(0)->getPass(0)->createTextureUnitState(txtrName);
// adjust it to stay aligned and scaled to the window
Ogre::Real txtrUScale = (Ogre::Real)newTexWidth / aSize.width();
Ogre::Real txtrVScale = (Ogre::Real)newTexHeight / aSize.height();
txtrUstate->setTextureScale(txtrUScale, txtrVScale);
txtrUstate->setTextureScroll((1 / txtrUScale) / 2 - 0.5, (1 / txtrVScale) / 2 - 0.5);
}
}
示例6: createMaterial
bool PersonShape::createMaterial( const std::string& image_name,
const std::string& resource_group)
{
if (image_name == "default")
{
material_ = Ogre::MaterialManager::getSingleton().create( "default",
Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME );
material_->setCullingMode(Ogre::CULL_NONE);
return true;
}
material_ = Ogre::MaterialManager::getSingleton().load( image_name, resource_group );
material_->setCullingMode(Ogre::CULL_NONE);
if( material_.isNull() )
return false;
Ogre::Pass* first_pass = material_->getTechnique(0)->getPass(0);
if( first_pass->getNumTextureUnitStates() == 0 )
{
Ogre::TextureUnitState* texture_unit = first_pass->createTextureUnitState();
Ogre::TexturePtr texture
= Ogre::TextureManager::getSingleton().load( image_name, resource_group );
if( texture.isNull() )
return false;
#if (OGRE_VERSION_MINOR >=8)
texture_unit->setTexture( texture ); // or setTextureName if Ogre 1.8?
#else
texture_unit->setTextureName( texture->getName());
#endif
}
return true;
}
示例7: addLightingPass
void Simple::addLightingPass(Ogre::Technique* technique, std::set<std::string>& managedTextures) const
{
Ogre::Pass* lightingPass = technique->createPass();
lightingPass->setSceneBlending(Ogre::SBT_MODULATE);
lightingPass->setLightingEnabled(false);
Ogre::TextureUnitState * textureUnitStateSplat = lightingPass->createTextureUnitState();
//we need an unique name for our alpha texture
std::stringstream lightingTextureNameSS;
lightingTextureNameSS << technique->getParent()->getName() << "_lighting";
const Ogre::String lightingTextureName(lightingTextureNameSS.str());
Ogre::TexturePtr texture = static_cast<Ogre::TexturePtr>(Ogre::Root::getSingletonPtr()->getTextureManager()->getByName(lightingTextureName));
if (texture.isNull()) {
texture = Ogre::Root::getSingletonPtr()->getTextureManager()->createManual(lightingTextureName, "General", Ogre::TEX_TYPE_2D, mPage.getBlendMapSize(), mPage.getBlendMapSize(), 1, Ogre::PF_L8, Ogre::TU_DYNAMIC_WRITE_ONLY);
managedTextures.insert(texture->getName());
}
Ogre::Image ogreImage;
ogreImage.loadDynamicImage(const_cast<unsigned char*>(mLightingImage->getData()), mLightingImage->getResolution(), mLightingImage->getResolution(), 1, Ogre::PF_L8);
texture->loadImage(ogreImage);
//blit the whole image to the hardware buffer
Ogre::PixelBox sourceBox(ogreImage.getPixelBox());
//blit for each mipmap
for (unsigned int i = 0; i <= texture->getNumMipmaps(); ++i) {
Ogre::HardwarePixelBufferSharedPtr hardwareBuffer(texture->getBuffer(0, i));
hardwareBuffer->blitFromMemory(sourceBox);
}
textureUnitStateSplat->setTextureName(texture->getName());
textureUnitStateSplat->setTextureCoordSet(0);
textureUnitStateSplat->setTextureAddressingMode(Ogre::TextureUnitState::TAM_CLAMP);
textureUnitStateSplat->setTextureFiltering(Ogre::TFO_ANISOTROPIC);
}
示例8: replace_texture_now
void LIRenAttachmentEntity::replace_texture_now (const Ogre::String& name, Ogre::TexturePtr& texture)
{
if (mesh.isNull () || entity == NULL)
return;
// Translate the name if already replaced before.
std::map<Ogre::String, Ogre::String>::const_iterator iter;
iter = applied_texture_replaces.find(name);
Ogre::String real_name;
if (iter != applied_texture_replaces.end())
real_name = iter->second;
else
real_name = name;
// Save the replaced name for future translations.
applied_texture_replaces[name] = texture->getName ();
// Replace in each submesh.
for (size_t subent_idx = 0 ; subent_idx < entity->getNumSubEntities () ; ++subent_idx)
{
// Get the material of the subent.
Ogre::SubEntity* subent = entity->getSubEntity (subent_idx);
Ogre::MaterialPtr submat = subent->getMaterial ();
if (submat.isNull ())
continue;
// Check if there are replaceable textures.
if (!render->material_utils->has_overridable_texture (submat, real_name))
continue;
// Create a modified version of the material.
Ogre::String new_name = render->id.next ();
Ogre::MaterialPtr material = submat->clone (new_name, true, LIREN_RESOURCES_TEMPORARY);
render->material_utils->replace_texture (material, real_name, texture->getName ());
subent->setMaterial (material);
}
}
示例9: createTextureImage
TexturePair AssetsManager::createTextureImage(Ogre::TexturePtr texturePtr, const std::string& imageName)
{
// if (mOgreCEGUITexture) {
// GUIManager::getSingleton().getGuiRenderer()->destroyTexture(mOgreCEGUITexture);
// mOgreCEGUITexture = 0;
// }
auto renderer = CEGUI::System::getSingleton().getRenderer();
CEGUI::Texture* ogreCEGUITexture;
if (renderer->isTextureDefined(texturePtr->getName())) {
ogreCEGUITexture = &renderer->getTexture(texturePtr->getName());
static_cast<CEGUI::OgreTexture*>(ogreCEGUITexture)->setOgreTexture(texturePtr);
} else {
//create a CEGUI texture from our Ogre texture
S_LOG_VERBOSE("Creating new CEGUI texture from Ogre texture.");
ogreCEGUITexture = &GUIManager::getSingleton().createTexture(texturePtr);
}
//assign our image element to the StaticImage widget
CEGUI::Image* textureImage;
if (CEGUI::ImageManager::getSingleton().isDefined(imageName)) {
textureImage = &CEGUI::ImageManager::getSingleton().get(imageName);
} else {
textureImage = &CEGUI::ImageManager::getSingleton().create("BasicImage", imageName);
}
CEGUI::BasicImage* basicImage = static_cast<CEGUI::BasicImage*>(textureImage);
basicImage->setTexture(ogreCEGUITexture);
auto area = CEGUI::Rectf(0, 0, ogreCEGUITexture->getSize().d_width, ogreCEGUITexture->getSize().d_height);
basicImage->setArea(area);
basicImage->setNativeResolution(area.getSize());
basicImage->setAutoScaled(CEGUI::ASM_Both);
return TexturePair(texturePtr, textureImage);
}
示例10: addShadow
void Simple::addShadow(Ogre::Technique* technique, const TerrainPageShadow* terrainPageShadow, Ogre::MaterialPtr material, std::set<std::string>& managedTextures) const
{
Ogre::Pass* shadowPass = technique->createPass();
shadowPass->setSceneBlending(Ogre::SBT_MODULATE);
shadowPass->setLightingEnabled(false);
// shadowPass->setFog(true, Ogre::FOG_NONE);
Ogre::TextureUnitState * textureUnitStateSplat = shadowPass->createTextureUnitState();
Ogre::TexturePtr texture = updateShadowTexture(material, terrainPageShadow, managedTextures);
textureUnitStateSplat->setTextureName(texture->getName());
textureUnitStateSplat->setTextureCoordSet(0);
textureUnitStateSplat->setTextureAddressingMode(Ogre::TextureUnitState::TAM_CLAMP);
textureUnitStateSplat->setTextureFiltering(Ogre::TFO_ANISOTROPIC);
}
示例11: createMaterial
Ogre::MaterialPtr OgrePlanarReflectionMaterial::createMaterial(const Ogre::TexturePtr& texture, const Ogre::Camera& projectionCamera)
{
using namespace::Ogre;
Ogre::MaterialPtr matPtr = MaterialManager::getSingleton().create(this->getName(),"General");
Ogre::TextureUnitState* t;
if(! textureFilename.getValue().empty() )
{
t = matPtr->getTechnique(0)->getPass(0)->createTextureUnitState(textureFilename.getValue());
}
t = matPtr->getTechnique(0)->getPass(0)->createTextureUnitState(texture->getName() );
t->setColourOperationEx(Ogre::LBX_BLEND_MANUAL, Ogre::LBS_TEXTURE, Ogre::LBS_CURRENT,
Ogre::ColourValue::White, Ogre::ColourValue::White,
blendingFactor.getValue());
t->setTextureAddressingMode(Ogre::TextureUnitState::TAM_CLAMP);
t->setProjectiveTexturing(true,&projectionCamera);
matPtr->compile();
return matPtr;
}
示例12: errorMessage
void
GraphicsController::_attachTextureToMaterials(const Ogre::String &textureUnitName, Ogre::TexturePtr texturePtr,
const std::vector<Ogre::String> materialNames)
{
//for(auto iter = materialNames.cbegin(); iter != materialNames.cend(); ++iter)
for(const Ogre::String &materialName : materialNames)
{
Ogre::MaterialPtr mat = Ogre::MaterialManager::getSingleton().getByName(materialName);
Ogre::String errorMessage("This material ");
errorMessage += materialName + " was not found.";
if(mat.isNull())
{
OGRE_EXCEPT(Ogre::Exception::ERR_INVALIDPARAMS, errorMessage, "GraphicsController::_attachTextureToMaterials");
}
Ogre::TextureUnitState* txUnit = mat->getTechnique(0)->getPass(0)->getTextureUnitState(textureUnitName);
if(!txUnit)
OGRE_EXCEPT(Ogre::Exception::ERR_ITEM_NOT_FOUND, textureUnitName + " was not found", "GraphicsController::_attachTextureToMaterials");
txUnit->setTextureName(texturePtr->getName());
}
}
示例13: onInitialize
void ImageSelectionToolCustom::onInitialize()
{
move_tool_->initialize( context_ );
// Create our highlight rectangle
Ogre::SceneManager* scene_manager = context_->getSceneManager();
highlight_node_ = scene_manager->getRootSceneNode()->createChildSceneNode();
std::stringstream ss;
static int count = 0;
ss << "ImageSelectionRect" << count++;
highlight_rectangle_ = new Ogre::Rectangle2D(true);
const static uint32_t texture_data[1] = { 0xffff0070 };
Ogre::DataStreamPtr pixel_stream;
pixel_stream.bind(new Ogre::MemoryDataStream( (void*)&texture_data[0], 4 ));
Ogre::TexturePtr tex = Ogre::TextureManager::getSingleton().loadRawData(ss.str() + "Texture", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, pixel_stream, 1, 1, Ogre::PF_R8G8B8A8, Ogre::TEX_TYPE_2D, 0);
Ogre::MaterialPtr material = Ogre::MaterialManager::getSingleton().create(ss.str(), Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
material->setLightingEnabled(false);
//material->getTechnique(0)->getPass(0)->setPolygonMode(Ogre::PM_WIREFRAME);
highlight_rectangle_->setMaterial(material->getName());
Ogre::AxisAlignedBox aabInf;
aabInf.setInfinite();
highlight_rectangle_->setBoundingBox(aabInf);
highlight_rectangle_->setRenderQueueGroup(Ogre::RENDER_QUEUE_OVERLAY + 4);
material->setSceneBlending(Ogre::SBT_TRANSPARENT_ALPHA);
material->setCullingMode(Ogre::CULL_NONE);
Ogre::TextureUnitState* tex_unit = material->getTechnique(0)->getPass(0)->createTextureUnitState();
tex_unit->setTextureName(tex->getName());
tex_unit->setTextureFiltering( Ogre::TFO_NONE );
highlight_node_->attachObject(highlight_rectangle_);
}
示例14: destroyHardwareBuffer
//.........这里部分代码省略.........
newSize=OGRE2D_MINIMAL_HARDWARE_BUFFER_SIZE;
// grow hardware buffer if needed
if (hardwareBuffer.isNull() || hardwareBuffer->getNumVertices()<newSize)
{
if (!hardwareBuffer.isNull())
destroyHardwareBuffer();
createHardwareBuffer(newSize);
}
if (sprites.empty()) return;
// write quads to the hardware buffer, and remember chunks
float* buffer;
float z=-1;
buffer=(float*)hardwareBuffer->lock(Ogre::HardwareBuffer::HBL_DISCARD);
endSpr=sprites.end();
currSpr=sprites.begin();
thisChunk.texHandle=currSpr->texHandle;
thisChunk.vertexCount=0;
while (currSpr!=endSpr)
{
// 1st point (left bottom)
*buffer=currSpr->x1; buffer++;
*buffer=currSpr->y2; buffer++;
*buffer=z; buffer++;
*buffer=currSpr->tx1; buffer++;
*buffer=currSpr->ty2; buffer++;
// 2st point (right top)
*buffer=currSpr->x2; buffer++;
*buffer=currSpr->y1; buffer++;
*buffer=z; buffer++;
*buffer=currSpr->tx2; buffer++;
*buffer=currSpr->ty1; buffer++;
// 3rd point (left top)
*buffer=currSpr->x1; buffer++;
*buffer=currSpr->y1; buffer++;
*buffer=z; buffer++;
*buffer=currSpr->tx1; buffer++;
*buffer=currSpr->ty1; buffer++;
// 4th point (left bottom)
*buffer=currSpr->x1; buffer++;
*buffer=currSpr->y2; buffer++;
*buffer=z; buffer++;
*buffer=currSpr->tx1; buffer++;
*buffer=currSpr->ty2; buffer++;
// 5th point (right bottom)
*buffer=currSpr->x2; buffer++;
*buffer=currSpr->y1; buffer++;
*buffer=z; buffer++;
*buffer=currSpr->tx2; buffer++;
*buffer=currSpr->ty1; buffer++;
// 6th point (right top)
*buffer=currSpr->x2; buffer++;
*buffer=currSpr->y2; buffer++;
*buffer=z; buffer++;
*buffer=currSpr->tx2; buffer++;
*buffer=currSpr->ty2; buffer++;
// remember this chunk
thisChunk.vertexCount+=6;
currSpr++;
if (currSpr==endSpr || thisChunk.texHandle!=currSpr->texHandle)
{
chunks.push_back(thisChunk);
if (currSpr!=endSpr)
{
thisChunk.texHandle=currSpr->texHandle;
thisChunk.vertexCount=0;
}
}
}
hardwareBuffer->unlock();
// set up...
prepareForRender();
// do the real render!
Ogre::TexturePtr tp;
std::list<VertexChunk>::iterator currChunk, endChunk;
endChunk=chunks.end();
renderOp.vertexData->vertexStart=0;
for (currChunk=chunks.begin(); currChunk!=endChunk; currChunk++)
{
renderOp.vertexData->vertexCount=currChunk->vertexCount;
tp=Ogre::TextureManager::getSingleton().getByHandle(currChunk->texHandle);
rs->_setTexture(0, true, tp->getName());
rs->_render(renderOp);
renderOp.vertexData->vertexStart+=currChunk->vertexCount;
}
// sprites go home!
sprites.clear();
}
示例15: addPassToTechnique
// void TerrainPageSurfaceCompiler::addTextureUnitsToPass(Ogre::Pass* pass, const Ogre::String& splatTextureName) {
//
// if (getMaxTextureUnits() - pass->getNumTextureUnitStates() < 2 || pass->getParent()->getNumPasses() > 1) {
// addPassToTechnique(pass->getParent(), splatTextureName);
// // S_LOG_WARNING("Trying to add texture units to pass with too few available texture unit states.");
// return;
// }
//
// S_LOG_VERBOSE("Adding new texture unit (detailtexture: " << mTextureName << " alphatexture: " << splatTextureName << ") to pass nr " << pass->getIndex() << " in technique for material " << pass->getParent()->getParent()->getName());
//
// /* pass->setSelfIllumination(Ogre::ColourValue(1,1,1));
// pass->setAmbient(Ogre::ColourValue(1,1,1));
// pass->setDiffuse(Ogre::ColourValue(1,1,1));
// pass->setLightingEnabled(true);*/
// Ogre::TextureUnitState * textureUnitStateSplat = pass->createTextureUnitState();
// textureUnitStateSplat->setTextureName(splatTextureName);
//
// textureUnitStateSplat->setTextureCoordSet(0);
// textureUnitStateSplat->setTextureFiltering(Ogre::TFO_ANISOTROPIC);
// textureUnitStateSplat->setAlphaOperation(Ogre::LBX_SOURCE1, Ogre::LBS_TEXTURE, Ogre::LBS_TEXTURE);
// textureUnitStateSplat->setColourOperationEx(Ogre::LBX_SOURCE1, Ogre::LBS_CURRENT, Ogre::LBS_CURRENT);
// textureUnitStateSplat->setTextureAddressingMode(Ogre::TextureUnitState::TAM_CLAMP);
// // textureUnitStateSplat->setColourOperationEx(Ogre::LBX_BLEND_DIFFUSE_ALPHA, Ogre::LBS_CURRENT, Ogre::LBS_TEXTURE);
// // textureUnitStateSplat->setColourOperationEx(Ogre::LBX_BLEND_TEXTURE_ALPHA, Ogre::LBS_CURRENT, Ogre::LBS_TEXTURE);
//
// Ogre::TextureUnitState * textureUnitState = pass->createTextureUnitState();
// textureUnitState->setTextureName(mTextureName);
// textureUnitState->setTextureAddressingMode(Ogre::TextureUnitState::TAM_WRAP);
// /* textureUnitState->setTextureCoordSet(0);*/
// textureUnitState->setTextureScale(0.025, 0.025);
// textureUnitState->setColourOperationEx(Ogre::LBX_BLEND_CURRENT_ALPHA, Ogre::LBS_TEXTURE, Ogre::LBS_CURRENT);
//
// /* Ogre::TextureUnitState * alphaTextureState= pass->createTextureUnitState();
// alphaTextureState->setTextureName(mTextureName);
// // alphaTextureState->setTextureName(splatTextureName);
// alphaTextureState->setTextureCoordSet(0);
// alphaTextureState->setTextureFiltering(Ogre::TFO_ANISOTROPIC);
// alphaTextureState->setTextureAddressingMode(Ogre::TextureUnitState::TAM_CLAMP);
// alphaTextureState->setColourOperationEx(Ogre::LBX_BLEND_DIFFUSE_ALPHA, Ogre::LBS_CURRENT, Ogre::LBS_TEXTURE);
//
//
//
// // detailTextureState->setAlphaOperation(Ogre::LBX_SOURCE1, Ogre::LBS_TEXTURE, Ogre::LBS_TEXTURE);
// // detailTextureState->setColourOperationEx(Ogre::LBX_SOURCE1, Ogre::LBS_CURRENT, Ogre::LBS_CURRENT);
//
// Ogre::TextureUnitState * detailTextureState = pass->createTextureUnitState();
// detailTextureState ->setTextureName(splatTextureName);
// // detailTextureState ->setTextureName(mTextureName);
// detailTextureState ->setTextureAddressingMode(Ogre::TextureUnitState::TAM_WRAP);
// detailTextureState ->setTextureCoordSet(0);
// detailTextureState ->setTextureScale(0.01, 0.01);
// //detailTextureState ->setColourOperationEx(Ogre::LBX_BLEND_CURRENT_ALPHA, Ogre::LBS_TEXTURE, Ogre::LBS_CURRENT);*/
//
// }
//
Ogre::Pass* Simple::addPassToTechnique(const TerrainPageGeometry& geometry, Ogre::Technique* technique, const Layer& layer, std::set<std::string>& managedTextures) const
{
//check if we instead can reuse the existing pass
// if (technique->getNumPasses() != 0) {
// Ogre::Pass* pass = technique->getPass(technique->getNumPasses() - 1);
// if (4 - pass->getNumTextureUnitStates() >= 2) {
// //there's more than two texture units available, use those instead of creating a new pass
// S_LOG_VERBOSE("Reusing existing pass. ("<< pass->getNumTextureUnitStates() << " of "<< mNumberOfTextureUnitsOnCard << " texture unit used)");
// addTextureUnitsToPass(pass, splatTextureName);
// return pass;
// }
//
// }
const OgreImage& ogreImage = *layer.blendMap;
Ogre::Image image;
image.loadDynamicImage(const_cast<unsigned char*>(ogreImage.getData()), ogreImage.getResolution(), ogreImage.getResolution(), 1, Ogre::PF_A8);
std::stringstream splatTextureNameSS;
splatTextureNameSS << "terrain_" << mPage.getWFPosition().x() << "_" << mPage.getWFPosition().y() << "_" << technique->getNumPasses();
const Ogre::String splatTextureName(splatTextureNameSS.str());
Ogre::TexturePtr blendMapTexture;
if (Ogre::Root::getSingletonPtr()->getTextureManager()->resourceExists(splatTextureName)) {
blendMapTexture = static_cast<Ogre::TexturePtr>(Ogre::Root::getSingletonPtr()->getTextureManager()->getByName(splatTextureName));
blendMapTexture->loadImage(image);
Ogre::HardwarePixelBufferSharedPtr hardwareBuffer(blendMapTexture->getBuffer());
//blit the whole image to the hardware buffer
Ogre::PixelBox sourceBox(image.getPixelBox());
hardwareBuffer->blitFromMemory(sourceBox);
} else {
blendMapTexture = Ogre::Root::getSingletonPtr()->getTextureManager()->loadImage(splatTextureName, "General", image, Ogre::TEX_TYPE_2D, 0);
managedTextures.insert(blendMapTexture->getName());
}
//we need to create the image, update it and then destroy it again (to keep the memory usage down)
// if (layer->getBlendMapTextureName() == "") {
// //no texture yet; let's create one
// layer->createBlendMapImage();
// layer->updateBlendMapImage(geometry);
// layer->createTexture();
// } else {
// //a texture exists, so we just need to update the image
// layer->updateBlendMapImage(geometry); //calling this will also update the texture since the method will blit the image onto it
//.........这里部分代码省略.........