Changed API to per texture-layer filtering.
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@731 dfc29bdd-3216-0410-991c-e03cc46cb475master
parent
cd36b187b4
commit
59ab9c522b
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue