//----------------------------------------------------------------------- TexturePtr TextureManager::loadRawData(const String &name, const String& group, DataStreamPtr& stream, ushort uWidth, ushort uHeight, PixelFormat format, TextureType texType, int numMipmaps, Real gamma, bool hwGamma) { TexturePtr tex = create(name, group, true); tex->setTextureType(texType); tex->setNumMipmaps((numMipmaps == MIP_DEFAULT)? mDefaultNumMipmaps : static_cast<size_t>(numMipmaps)); tex->setGamma(gamma); tex->setHardwareGammaEnabled(hwGamma); tex->loadRawData(stream, uWidth, uHeight, format); return tex; }
//----------------------------------------------------------------------- TexturePtr TextureManager::loadImage( const String &name, const String& group, const Image &img, TextureType texType, int numMipmaps, Real gamma, bool isAlpha, PixelFormat desiredFormat, bool hwGamma) { TexturePtr tex = create(name, group, true); tex->setTextureType(texType); tex->setNumMipmaps((numMipmaps == MIP_DEFAULT)? mDefaultNumMipmaps : static_cast<size_t>(numMipmaps)); tex->setGamma(gamma); tex->setTreatLuminanceAsAlpha(isAlpha); tex->setFormat(desiredFormat); tex->setHardwareGammaEnabled(hwGamma); tex->loadImage(img); return tex; }
//----------------------------------------------------------------------- TexturePtr TextureManager::createManual(const String & name, const String& group, TextureType texType, uint width, uint height, uint depth, int numMipmaps, PixelFormat format, int usage, ManualResourceLoader* loader, bool hwGamma, uint fsaa, const String& fsaaHint) { TexturePtr ret = create(name, group, true, loader); ret->setTextureType(texType); ret->setWidth(width); ret->setHeight(height); ret->setDepth(depth); ret->setNumMipmaps((numMipmaps == MIP_DEFAULT)? mDefaultNumMipmaps : static_cast<size_t>(numMipmaps)); ret->setFormat(format); ret->setUsage(usage); ret->setHardwareGammaEnabled(hwGamma); ret->setFSAA(fsaa, fsaaHint); ret->createInternalResources(); return ret; }
//----------------------------------------------------------------------------------- void PbsMaterial::setTexture(SamplerType samplerType, TexturePtr tex, TextureAddressing textureAddr, float blendFactor1, float blendFactor2, BlendFunction blendFunc, float intensityFactor) { SamplerContainer& s = _samplers[samplerType]; if (s.status == SS_ACTIVE && tex == s.tex && s.blendFunc == blendFunc && s.blendFactor1 == blendFactor1 && s.blendFactor2 == blendFactor2 && s.intensity == intensityFactor && s.textureAddressing == textureAddr) return; if (s.status == SS_NOT_ACTIVE && tex.isNull()) return; if (!tex.isNull()) { // Ensure that the texture in the shader is in linear space tex->setHardwareGammaEnabled(mCanHardwareGamma && s.needsGammaCorrection); if (s.status == SS_NOT_ACTIVE) s.status = SS_ADDED; else if (s.status == SS_ACTIVE) s.status = SS_UPDATED; else if (s.status == SS_UPDATED) s.status = SS_UPDATED; else if (s.status == SS_ADDED) s.status = SS_ADDED; else if (s.status == SS_REMOVED) s.status = SS_UPDATED; } else { if (s.status == SS_NOT_ACTIVE) s.status = SS_NOT_ACTIVE; else if (s.status == SS_ACTIVE) s.status = SS_REMOVED; else if (s.status == SS_UPDATED) s.status = SS_REMOVED; else if (s.status == SS_ADDED) s.status = SS_NOT_ACTIVE; else if (s.status == SS_REMOVED) s.status = SS_REMOVED; } s.tex = tex; s.textureAddressing = textureAddr; s.blendFunc = blendFunc; s.blendFactor1 = blendFactor1; s.blendFactor2 = blendFactor2; s.intensity = intensityFactor; s.mipmapCount = tex.isNull() ? 0.0f : tex->getNumMipmaps(); _hasSamplerChanged = true; _hasSamplerListChanged = s.status == SS_ADDED || s.status == SS_REMOVED; }
//----------------------------------------------------------------------- TextureManager::ResourceCreateOrRetrieveResult TextureManager::createOrRetrieve( const String &name, const String& group, bool isManual, ManualResourceLoader* loader, const NameValuePairList* createParams, TextureType texType, int numMipmaps, Real gamma, bool isAlpha, PixelFormat desiredFormat, bool hwGamma) { ResourceCreateOrRetrieveResult res = Ogre::ResourceManager::createOrRetrieve(name, group, isManual, loader, createParams); // Was it created? if(res.second) { TexturePtr tex = res.first; tex->setTextureType(texType); tex->setNumMipmaps((numMipmaps == MIP_DEFAULT)? mDefaultNumMipmaps : static_cast<size_t>(numMipmaps)); tex->setGamma(gamma); tex->setTreatLuminanceAsAlpha(isAlpha); tex->setFormat(desiredFormat); tex->setHardwareGammaEnabled(hwGamma); } return res; }