From 2261b1cc86f5296e6e9d372570f5f75e6bacd3c2 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Tue, 21 Jan 2003 09:09:48 +0000 Subject: [PATCH] From Joseph Steel, addition of texture filter modes to txp plugin. --- src/osgPlugins/txp/TrPageArchive.cpp | 65 ++++++++++++++++++++++++---- 1 file changed, 56 insertions(+), 9 deletions(-) diff --git a/src/osgPlugins/txp/TrPageArchive.cpp b/src/osgPlugins/txp/TrPageArchive.cpp index a6ebace4d..6dfb147d4 100644 --- a/src/osgPlugins/txp/TrPageArchive.cpp +++ b/src/osgPlugins/txp/TrPageArchive.cpp @@ -276,19 +276,66 @@ void TrPageArchive::LoadMaterials() Texture2D* osg_texture = m_textures[texId].get(); if(osg_texture) { + osg_texture->setWrap(Texture2D::WRAP_S, wrap_s == trpgTextureEnv::Repeat ? Texture2D::REPEAT: Texture2D::CLAMP ); osg_texture->setWrap(Texture2D::WRAP_T, wrap_t == trpgTextureEnv::Repeat ? Texture2D::REPEAT: Texture2D::CLAMP ); + + // ----------- + // Min filter + // ----------- + int32 minFilter; + texEnv.GetMinFilter(minFilter); + switch (minFilter) + { + case trpgTextureEnv::Point: + case trpgTextureEnv::Nearest: + osg_texture->setFilter(osg::Texture2D::MIN_FILTER, Texture2D::NEAREST); + break; + case trpgTextureEnv::Linear: + osg_texture->setFilter(osg::Texture2D::MIN_FILTER, Texture2D::LINEAR); + break; + case trpgTextureEnv::MipmapPoint: + osg_texture->setFilter(osg::Texture2D::MIN_FILTER, Texture2D::NEAREST_MIPMAP_NEAREST); + break; + case trpgTextureEnv::MipmapLinear: + osg_texture->setFilter(osg::Texture2D::MIN_FILTER, Texture2D::NEAREST_MIPMAP_LINEAR); + break; + case trpgTextureEnv::MipmapBilinear: + osg_texture->setFilter(osg::Texture2D::MIN_FILTER, Texture2D::LINEAR_MIPMAP_NEAREST); + break; + case trpgTextureEnv::MipmapTrilinear: + osg_texture->setFilter(osg::Texture2D::MIN_FILTER, Texture2D::LINEAR_MIPMAP_LINEAR); + break; + default: + osg_texture->setFilter(osg::Texture2D::MIN_FILTER, Texture2D::LINEAR); + break; + } + + + // ----------- + // Mag filter + // ----------- + int32 magFilter; + texEnv.GetMagFilter(magFilter); + switch (magFilter) + { + case trpgTextureEnv::Point: + case trpgTextureEnv::Nearest: + osg_texture->setFilter(osg::Texture2D::MAG_FILTER,Texture2D::NEAREST); + break; + case trpgTextureEnv::Linear: + default: + osg_texture->setFilter(osg::Texture2D::MAG_FILTER, Texture2D::LINEAR); + break; + } + + // pass on to the stateset. osg_state_set->setTextureAttributeAndModes(ntex,osg_texture, StateAttribute::ON); - - if(osg_texture->getImage()) + + if(osg_texture->getImage() && osg_texture->getImage()->isImageTranslucent()) { - switch (osg_texture->getImage()->getPixelFormat()) - { - case GL_LUMINANCE_ALPHA: - case GL_RGBA: - osg_state_set->setMode(GL_BLEND,StateAttribute::ON); - osg_state_set->setRenderingHint(StateSet::TRANSPARENT_BIN); - } + osg_state_set->setMode(GL_BLEND,StateAttribute::ON); + osg_state_set->setRenderingHint(StateSet::TRANSPARENT_BIN); } } }