Changed API to per texture-layer filtering.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@731 dfc29bdd-3216-0410-991c-e03cc46cb475
master
hybrid 2007-06-25 21:26:16 +00:00
parent cd36b187b4
commit 59ab9c522b
12 changed files with 135 additions and 138 deletions

View File

@ -322,7 +322,6 @@ namespace video
Shininess(0.0f), MaterialTypeParam(0.0f), MaterialTypeParam2(0.0f), Thickness(1.0f),
Wireframe(false), PointCloud(false), GouraudShading(true), Lighting(true),
ZBuffer(true), ZWriteEnable(true), BackfaceCulling(true),
BilinearFilter(true), TrilinearFilter(false), AnisotropicFilter(false),
FogEnable(false), NormalizeNormals(false)
{
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
@ -330,6 +329,9 @@ namespace video
Textures[i] = 0;
TextureMatrix[i] = 0;
TextureWrap[i] = ETC_REPEAT;
BilinearFilter[i] = true;
TrilinearFilter[i] = false;
AnisotropicFilter[i] = false;
}
}
@ -383,6 +385,9 @@ namespace video
TextureMatrix[i] = 0;
}
TextureWrap[i] = other.TextureWrap[i];
BilinearFilter[i] = other.BilinearFilter[i];
TrilinearFilter[i] = other.TrilinearFilter[i];
AnisotropicFilter[i] = other.AnisotropicFilter[i];
}
Wireframe = other.Wireframe;
@ -392,9 +397,6 @@ namespace video
ZBuffer = other.ZBuffer;
ZWriteEnable = other.ZWriteEnable;
BackfaceCulling = other.BackfaceCulling;
BilinearFilter = other.BilinearFilter;
TrilinearFilter = other.TrilinearFilter;
AnisotropicFilter = other.AnisotropicFilter;
FogEnable = other.FogEnable;
NormalizeNormals = other.NormalizeNormals;
@ -504,19 +506,19 @@ namespace video
bool BackfaceCulling;
//! Is bilinear filtering enabled? Default: true
bool BilinearFilter;
bool BilinearFilter[MATERIAL_MAX_TEXTURES];
//! Is trilinear filtering enabled? Default: false
/** If the trilinear filter flag is enabled,
the bilinear filtering flag is ignored. */
bool TrilinearFilter;
bool TrilinearFilter[MATERIAL_MAX_TEXTURES];
//! Is anisotropic filtering enabled? Default: false
/** In Irrlicht you can use anisotropic texture filtering
in conjunction with bilinear or trilinear texture
filtering to improve rendering results. Primitives
will look less blurry with this flag switched on. */
bool AnisotropicFilter;
bool AnisotropicFilter[MATERIAL_MAX_TEXTURES];
//! Is fog enabled? Default: false
bool FogEnable;
@ -572,18 +574,33 @@ namespace video
case EMF_BACK_FACE_CULLING:
BackfaceCulling = value; break;
case EMF_BILINEAR_FILTER:
BilinearFilter = value; break;
{
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
BilinearFilter[i] = value;
}
break;
case EMF_TRILINEAR_FILTER:
TrilinearFilter = value; break;
{
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
TrilinearFilter[i] = value;
}
break;
case EMF_ANISOTROPIC_FILTER:
AnisotropicFilter = value; break;
{
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
AnisotropicFilter[i] = value;
}
break;
case EMF_FOG_ENABLE:
FogEnable = value; break;
case EMF_NORMALIZE_NORMALS:
NormalizeNormals = value; break;
case EMF_TEXTURE_WRAP:
TextureWrap[0] = TextureWrap[1] = TextureWrap[2] = TextureWrap[3] = (E_TEXTURE_CLAMP)value;
break;
{
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
TextureWrap[i] = (E_TEXTURE_CLAMP)value;
}
break;
default:
break;
}
@ -609,11 +626,11 @@ namespace video
case EMF_BACK_FACE_CULLING:
return BackfaceCulling;
case EMF_BILINEAR_FILTER:
return BilinearFilter;
return BilinearFilter[0];
case EMF_TRILINEAR_FILTER:
return TrilinearFilter;
return TrilinearFilter[0];
case EMF_ANISOTROPIC_FILTER:
return AnisotropicFilter;
return AnisotropicFilter[0];
case EMF_FOG_ENABLE:
return FogEnable;
case EMF_NORMALIZE_NORMALS:
@ -630,11 +647,7 @@ namespace video
//! Inequality operator
inline bool operator!=(const SMaterial& b) const
{
return
Textures[0] != b.Textures[0] ||
Textures[1] != b.Textures[1] ||
Textures[2] != b.Textures[2] ||
Textures[3] != b.Textures[3] ||
bool different =
MaterialType != b.MaterialType ||
AmbientColor != b.AmbientColor ||
DiffuseColor != b.DiffuseColor ||
@ -651,19 +664,22 @@ namespace video
ZBuffer != b.ZBuffer ||
ZWriteEnable != b.ZWriteEnable ||
BackfaceCulling != b.BackfaceCulling ||
BilinearFilter != b.BilinearFilter ||
TrilinearFilter != b.TrilinearFilter ||
AnisotropicFilter != b.AnisotropicFilter ||
FogEnable != b.FogEnable ||
NormalizeNormals != b.NormalizeNormals ||
TextureWrap[0] != b.TextureWrap[0] ||
TextureWrap[1] != b.TextureWrap[1] ||
TextureWrap[2] != b.TextureWrap[2] ||
TextureWrap[3] != b.TextureWrap[3] ||
TextureMatrix[0] != b.TextureMatrix[0] ||
TextureMatrix[1] != b.TextureMatrix[1] ||
TextureMatrix[2] != b.TextureMatrix[2] ||
TextureMatrix[3] != b.TextureMatrix[3];
NormalizeNormals != b.NormalizeNormals;
for (u32 i=0; (i<MATERIAL_MAX_TEXTURES) && !different; ++i)
{
different |= (Textures[i] != b.Textures[i]);
different |= (TextureWrap[i] != b.TextureWrap[i]);
different |= (BilinearFilter[i] != b.BilinearFilter[i]);
different |= (TrilinearFilter[i] != b.TrilinearFilter[i]);
different |= (AnisotropicFilter[i] != b.AnisotropicFilter[i]);
}
if (different)
return true;
else
for (u32 i=0; i<MATERIAL_MAX_TEXTURES; ++i)
different |= (TextureMatrix[i] != b.TextureMatrix[i]);
return different;
}
//! Equality operator

View File

@ -178,8 +178,7 @@ namespace core
//! false if it is backfacing.
bool isFrontFacing(const vector3d<T>& lookDirection) const
{
vector3d<T> n = getNormal();
n.normalize();
vector3d<T> n = getNormal().normalize();
return F32_LOWER_EQUAL_0(n.dotProduct(lookDirection));
}

View File

@ -1246,36 +1246,6 @@ void CD3D8Driver::setBasicRenderStates(const SMaterial& material, const SMateria
pID3DDevice->SetMaterial(&mat);
}
// Bilinear and/or trilinear
if (resetAllRenderstates ||
lastmaterial.BilinearFilter != material.BilinearFilter ||
lastmaterial.TrilinearFilter != material.TrilinearFilter ||
lastmaterial.AnisotropicFilter != material.AnisotropicFilter )
{
if (material.BilinearFilter || material.TrilinearFilter || material.AnisotropicFilter)
{
D3DTEXTUREFILTERTYPE tftMag = ((Caps.TextureFilterCaps & D3DPTFILTERCAPS_MAGFANISOTROPIC) && material.AnisotropicFilter) ? D3DTEXF_ANISOTROPIC : D3DTEXF_LINEAR;
D3DTEXTUREFILTERTYPE tftMin = ((Caps.TextureFilterCaps & D3DPTFILTERCAPS_MINFANISOTROPIC) && material.AnisotropicFilter) ? D3DTEXF_ANISOTROPIC : D3DTEXF_LINEAR;
D3DTEXTUREFILTERTYPE tftMip = material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT;
for (u32 st=0; st<MaxTextureUnits; ++st)
{
pID3DDevice->SetTextureStageState(st, D3DTSS_MAGFILTER, tftMag);
pID3DDevice->SetTextureStageState(st, D3DTSS_MINFILTER, tftMin);
pID3DDevice->SetTextureStageState(st, D3DTSS_MIPFILTER, tftMip);
}
}
else
{
for (u32 st=0; st<MaxTextureUnits; ++st)
{
pID3DDevice->SetTextureStageState(st, D3DTSS_MINFILTER, D3DTEXF_POINT);
pID3DDevice->SetTextureStageState(st, D3DTSS_MIPFILTER, D3DTEXF_NONE);
pID3DDevice->SetTextureStageState(st, D3DTSS_MAGFILTER, D3DTEXF_POINT);
}
}
}
// fillmode
if (resetAllRenderstates || lastmaterial.Wireframe != material.Wireframe || lastmaterial.PointCloud != material.PointCloud)
{
@ -1398,9 +1368,30 @@ void CD3D8Driver::setBasicRenderStates(const SMaterial& material, const SMateria
pID3DDevice->SetTextureStageState(st, D3DTSS_ADDRESSV, mode );
}
// Bilinear and/or trilinear
if (resetAllRenderstates ||
lastmaterial.BilinearFilter[st] != material.BilinearFilter[st] ||
lastmaterial.TrilinearFilter[st] != material.TrilinearFilter[st] ||
lastmaterial.AnisotropicFilter[st] != material.AnisotropicFilter[st] )
{
if (material.BilinearFilter[st] || material.TrilinearFilter[st] || material.AnisotropicFilter[st])
{
D3DTEXTUREFILTERTYPE tftMag = ((Caps.TextureFilterCaps & D3DPTFILTERCAPS_MAGFANISOTROPIC) && material.AnisotropicFilter[st]) ? D3DTEXF_ANISOTROPIC : D3DTEXF_LINEAR;
D3DTEXTUREFILTERTYPE tftMin = ((Caps.TextureFilterCaps & D3DPTFILTERCAPS_MINFANISOTROPIC) && material.AnisotropicFilter[st]) ? D3DTEXF_ANISOTROPIC : D3DTEXF_LINEAR;
D3DTEXTUREFILTERTYPE tftMip = material.TrilinearFilter[st] ? D3DTEXF_LINEAR : D3DTEXF_POINT;
pID3DDevice->SetTextureStageState(st, D3DTSS_MAGFILTER, tftMag);
pID3DDevice->SetTextureStageState(st, D3DTSS_MINFILTER, tftMin);
pID3DDevice->SetTextureStageState(st, D3DTSS_MIPFILTER, tftMip);
}
else
{
pID3DDevice->SetTextureStageState(st, D3DTSS_MINFILTER, D3DTEXF_POINT);
pID3DDevice->SetTextureStageState(st, D3DTSS_MIPFILTER, D3DTEXF_NONE);
pID3DDevice->SetTextureStageState(st, D3DTSS_MAGFILTER, D3DTEXF_POINT);
}
}
}
}

View File

@ -1243,39 +1243,6 @@ void CD3D9Driver::setBasicRenderStates(const SMaterial& material, const SMateria
pID3DDevice->SetMaterial(&mat);
}
// Bilinear and/or trilinear
if (resetAllRenderstates ||
lastmaterial.BilinearFilter != material.BilinearFilter ||
lastmaterial.TrilinearFilter != material.TrilinearFilter ||
lastmaterial.AnisotropicFilter != material.AnisotropicFilter
//|| !LastTextureMipMapsAvailable[0]
//|| !LastTextureMipMapsAvailable[1]
)
{
if (material.BilinearFilter || material.TrilinearFilter || material.AnisotropicFilter)
{
D3DTEXTUREFILTERTYPE tftMag = ((Caps.TextureFilterCaps & D3DPTFILTERCAPS_MAGFANISOTROPIC) && material.AnisotropicFilter) ? D3DTEXF_ANISOTROPIC : D3DTEXF_LINEAR;
D3DTEXTUREFILTERTYPE tftMin = ((Caps.TextureFilterCaps & D3DPTFILTERCAPS_MINFANISOTROPIC) && material.AnisotropicFilter) ? D3DTEXF_ANISOTROPIC : D3DTEXF_LINEAR;
D3DTEXTUREFILTERTYPE tftMip = material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT;
for (u32 st=0; st<MaxTextureUnits; ++st)
{
pID3DDevice->SetSamplerState(st, D3DSAMP_MAGFILTER, tftMag);
pID3DDevice->SetSamplerState(st, D3DSAMP_MINFILTER, tftMin);
pID3DDevice->SetSamplerState(st, D3DSAMP_MIPFILTER, tftMip);
}
}
else
{
for (u32 st=0; st<MaxTextureUnits; ++st)
{
pID3DDevice->SetSamplerState(st, D3DSAMP_MINFILTER, D3DTEXF_POINT);
pID3DDevice->SetSamplerState(st, D3DSAMP_MIPFILTER, D3DTEXF_NONE);
pID3DDevice->SetSamplerState(st, D3DSAMP_MAGFILTER, D3DTEXF_POINT);
}
}
}
// fillmode
if (resetAllRenderstates || lastmaterial.Wireframe != material.Wireframe || lastmaterial.PointCloud != material.PointCloud)
{
@ -1394,9 +1361,31 @@ void CD3D9Driver::setBasicRenderStates(const SMaterial& material, const SMateria
pID3DDevice->SetSamplerState(st, D3DSAMP_ADDRESSU, mode );
pID3DDevice->SetSamplerState(st, D3DSAMP_ADDRESSV, mode );
}
// Bilinear and/or trilinear
if (resetAllRenderstates ||
lastmaterial.BilinearFilter[st] != material.BilinearFilter[st] ||
lastmaterial.TrilinearFilter[st] != material.TrilinearFilter[st] ||
lastmaterial.AnisotropicFilter[st] != material.AnisotropicFilter[st])
{
if (material.BilinearFilter[st] || material.TrilinearFilter[st] || material.AnisotropicFilter[st])
{
D3DTEXTUREFILTERTYPE tftMag = ((Caps.TextureFilterCaps & D3DPTFILTERCAPS_MAGFANISOTROPIC) && material.AnisotropicFilter[st]) ? D3DTEXF_ANISOTROPIC : D3DTEXF_LINEAR;
D3DTEXTUREFILTERTYPE tftMin = ((Caps.TextureFilterCaps & D3DPTFILTERCAPS_MINFANISOTROPIC) && material.AnisotropicFilter[st]) ? D3DTEXF_ANISOTROPIC : D3DTEXF_LINEAR;
D3DTEXTUREFILTERTYPE tftMip = material.TrilinearFilter[st] ? D3DTEXF_LINEAR : D3DTEXF_POINT;
pID3DDevice->SetSamplerState(st, D3DSAMP_MAGFILTER, tftMag);
pID3DDevice->SetSamplerState(st, D3DSAMP_MINFILTER, tftMin);
pID3DDevice->SetSamplerState(st, D3DSAMP_MIPFILTER, tftMip);
}
else
{
pID3DDevice->SetSamplerState(st, D3DSAMP_MINFILTER, D3DTEXF_POINT);
pID3DDevice->SetSamplerState(st, D3DSAMP_MIPFILTER, D3DTEXF_NONE);
pID3DDevice->SetSamplerState(st, D3DSAMP_MAGFILTER, D3DTEXF_POINT);
}
}
}
}

View File

@ -167,7 +167,6 @@ IAnimatedMesh* CDMFLoader::createMesh(io::IReadFile* file)
buffer->Material.MaterialType = video::EMT_LIGHTMAP_LIGHTING ;
buffer->Material.Wireframe = false;
buffer->Material.Lighting = true;
buffer->Material.BilinearFilter = true;
Mesh->addMeshBuffer(buffer);
buffer->drop();
}

View File

@ -248,7 +248,6 @@ void CLMTSMeshFileLoader::constructMesh()
meshBuffer->Material.MaterialType = video::EMT_LIGHTMAP; // EMT_LIGHTMAP_M2/EMT_LIGHTMAP_M4 also possible
meshBuffer->Material.Wireframe = false;
meshBuffer->Material.Lighting = false;
meshBuffer->Material.BilinearFilter = true;
Mesh->addMeshBuffer(meshBuffer);

View File

@ -611,7 +611,6 @@ for (u32 p=0; p<nToRead; p++)
buffer->Material.MaterialType = video::EMT_LIGHTMAP_M2; // EMT_LIGHTMAP_M4 also possible
buffer->Material.Wireframe = false;
buffer->Material.Lighting = false;
buffer->Material.BilinearFilter = true;
if (matEnt)
{

View File

@ -1302,7 +1302,8 @@ io::IAttributes* CNullDriver::createAttributesFromMaterial(const video::SMateria
io::CAttributes* attr = new io::CAttributes(this);
const char** materialNames = new const char*[MaterialRenderers.size()+1];
for (u32 i=0; i < MaterialRenderers.size(); ++i)
u32 i;
for (i=0; i < MaterialRenderers.size(); ++i)
materialNames[i] = MaterialRenderers[i].Name.c_str();
materialNames[MaterialRenderers.size()] = 0;
@ -1320,27 +1321,31 @@ io::IAttributes* CNullDriver::createAttributesFromMaterial(const video::SMateria
attr->addFloat("Param1", material.MaterialTypeParam);
attr->addFloat("Param2", material.MaterialTypeParam2);
attr->addTexture("Texture1", material.Textures[0]);
attr->addTexture("Texture2", material.Textures[1]);
attr->addTexture("Texture3", material.Textures[2]);
attr->addTexture("Texture4", material.Textures[3]);
core::stringc prefix="Texture";
for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)
attr->addTexture((prefix+i).c_str(), material.Textures[i]);
attr->addBool("Wireframe", material.Wireframe);
attr->addBool("GouraudShading", material.GouraudShading);
attr->addBool("Lighting", material.Lighting);
attr->addBool("ZWriteEnable", material.ZWriteEnable);
attr->addInt("ZBuffer", material.ZBuffer);
attr->addBool("BackfaceCulling", material.BackfaceCulling);
attr->addBool("BilinearFilter", material.BilinearFilter);
attr->addBool("TrilinearFilter", material.TrilinearFilter);
attr->addBool("AnisotropicFilter", material.AnisotropicFilter);
attr->addBool("FogEnable", material.FogEnable);
attr->addBool("NormalizeNormals", material.NormalizeNormals);
attr->addInt("ZBuffer", material.ZBuffer);
attr->addEnum("TextureWrap1", material.TextureWrap[0], aTextureClampNames);
attr->addEnum("TextureWrap2", material.TextureWrap[1], aTextureClampNames);
attr->addEnum("TextureWrap3", material.TextureWrap[2], aTextureClampNames);
attr->addEnum("TextureWrap4", material.TextureWrap[3], aTextureClampNames);
prefix = "BilinearFilter";
for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)
attr->addBool((prefix+i).c_str(), material.BilinearFilter[i]);
prefix = "TrilinearFilter";
for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)
attr->addBool((prefix+i).c_str(), material.TrilinearFilter[i]);
prefix = "AnisotropicFilter";
for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)
attr->addBool((prefix+i).c_str(), material.AnisotropicFilter[i]);
prefix="TextureWrap";
for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)
attr->addEnum((prefix+i).c_str(), material.TextureWrap[i], aTextureClampNames);
return attr;
}
@ -1371,27 +1376,30 @@ void CNullDriver::fillMaterialStructureFromAttributes(video::SMaterial& outMater
outMaterial.MaterialTypeParam = attr->getAttributeAsFloat("Param1");
outMaterial.MaterialTypeParam2 = attr->getAttributeAsFloat("Param2");
outMaterial.Textures[0] = attr->getAttributeAsTexture("Texture1");
outMaterial.Textures[1] = attr->getAttributeAsTexture("Texture2");
outMaterial.Textures[2] = attr->getAttributeAsTexture("Texture3");
outMaterial.Textures[3] = attr->getAttributeAsTexture("Texture4");
core::stringc prefix="Texture";
for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)
outMaterial.Textures[i] = attr->getAttributeAsTexture((prefix+i).c_str());
outMaterial.Wireframe = attr->getAttributeAsBool("Wireframe");
outMaterial.GouraudShading = attr->getAttributeAsBool("GouraudShading");
outMaterial.Lighting = attr->getAttributeAsBool("Lighting");
outMaterial.ZWriteEnable = attr->getAttributeAsBool("ZWriteEnable");
outMaterial.ZBuffer = attr->getAttributeAsInt("ZBuffer");
outMaterial.BackfaceCulling = attr->getAttributeAsBool("BackfaceCulling");
outMaterial.BilinearFilter = attr->getAttributeAsBool("BilinearFilter");
outMaterial.TrilinearFilter = attr->getAttributeAsBool("TrilinearFilter");
outMaterial.AnisotropicFilter = attr->getAttributeAsBool("AnisotropicFilter");
outMaterial.FogEnable = attr->getAttributeAsBool("FogEnable");
outMaterial.NormalizeNormals = attr->getAttributeAsBool("NormalizeNormals");
outMaterial.ZBuffer = attr->getAttributeAsInt("ZBuffer");
outMaterial.TextureWrap[0] = (E_TEXTURE_CLAMP)attr->getAttributeAsEnumeration("TextureWrap1", aTextureClampNames);
outMaterial.TextureWrap[1] = (E_TEXTURE_CLAMP)attr->getAttributeAsEnumeration("TextureWrap2", aTextureClampNames);
outMaterial.TextureWrap[2] = (E_TEXTURE_CLAMP)attr->getAttributeAsEnumeration("TextureWrap3", aTextureClampNames);
outMaterial.TextureWrap[3] = (E_TEXTURE_CLAMP)attr->getAttributeAsEnumeration("TextureWrap4", aTextureClampNames);
prefix = "BilinearFilter";
for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)
outMaterial.BilinearFilter[i] = attr->getAttributeAsBool((prefix+i).c_str());
prefix = "TrilinearFilter";
for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)
outMaterial.TrilinearFilter[i] = attr->getAttributeAsBool((prefix+i).c_str());
prefix = "AnisotropicFilter";
for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)
outMaterial.AnisotropicFilter[i] = attr->getAttributeAsBool((prefix+i).c_str());
prefix = "TextureWrap";
for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)
outMaterial.TextureWrap[i] = (E_TEXTURE_CLAMP)attr->getAttributeAsEnumeration((prefix+i).c_str(), aTextureClampNames);
}

View File

@ -153,7 +153,6 @@ IAnimatedMesh* COCTLoader::createMesh(irr::io::IReadFile* file)
buffer->Material.MaterialType = video::EMT_LIGHTMAP;
buffer->Material.Wireframe = false;
buffer->Material.Lighting = false;
buffer->Material.BilinearFilter = true;
Mesh->addMeshBuffer(buffer);

View File

@ -1290,18 +1290,18 @@ void COpenGLDriver::setBasicRenderStates(const SMaterial& material, const SMater
break;
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
(material.BilinearFilter || material.TrilinearFilter) ? GL_LINEAR : GL_NEAREST);
(material.BilinearFilter[i] || material.TrilinearFilter[i]) ? GL_LINEAR : GL_NEAREST);
if (material.Textures[i] && material.Textures[i]->hasMipMaps())
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
material.TrilinearFilter ? GL_LINEAR_MIPMAP_LINEAR : material.BilinearFilter ? GL_LINEAR_MIPMAP_NEAREST : GL_NEAREST_MIPMAP_NEAREST );
material.TrilinearFilter[i] ? GL_LINEAR_MIPMAP_LINEAR : material.BilinearFilter[i] ? GL_LINEAR_MIPMAP_NEAREST : GL_NEAREST_MIPMAP_NEAREST );
else
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
(material.BilinearFilter || material.TrilinearFilter) ? GL_LINEAR : GL_NEAREST);
(material.BilinearFilter[i] || material.TrilinearFilter[i]) ? GL_LINEAR : GL_NEAREST);
if (AnisotropyExtension)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT,
material.AnisotropicFilter ? MaxAnisotropy : 1.0f );
material.AnisotropicFilter[i] ? MaxAnisotropy : 1.0f );
}
// fillmode

View File

@ -627,7 +627,6 @@ s32 CQ3LevelMesh::setShaderMaterial ( video::SMaterial &material, const tBSPFace
material.MaterialType = video::EMT_SOLID;
material.Wireframe = false;
material.Lighting = false;
material.BilinearFilter = true;
material.BackfaceCulling = true;
material.Textures[0] = 0;
material.Textures[1] = 0;
@ -907,7 +906,6 @@ void CQ3LevelMesh::constructMesh()
buffer->Material.MaterialType = video::EMT_LIGHTMAP_M4;
buffer->Material.Wireframe = false;
buffer->Material.Lighting = false;
buffer->Material.BilinearFilter = true;
Mesh[0]->addMeshBuffer(buffer);

View File

@ -38,7 +38,7 @@ CXXINCS = -I../../include -Izlib -Ijpeglib -Ilibpng
CPPFLAGS = $(CXXINCS) -DIRRLICHT_EXPORTS=1
CXXFLAGS = -Wall
ifndef NDEBUG
CXXFLAGS += -g
CXXFLAGS += -pg
else
CXXFLAGS += -fexpensive-optimizations -O3
endif