Rename SMaterial::TextureLayer -> SMaterial::TextureLayers

It's not the "texture layer" of the material, but an array of texture layers.
This commit is contained in:
Gregor Parzefall 2023-06-24 15:18:06 +02:00 committed by sfan5
parent c0ef1092c0
commit c40045a40a
11 changed files with 107 additions and 107 deletions

View File

@ -303,7 +303,7 @@ namespace video
{ } { }
//! Texture layer array. //! Texture layer array.
SMaterialLayer TextureLayer[MATERIAL_MAX_TEXTURES]; SMaterialLayer TextureLayers[MATERIAL_MAX_TEXTURES];
//! Type of the material. Specifies how everything is blended together //! Type of the material. Specifies how everything is blended together
E_MATERIAL_TYPE MaterialType; E_MATERIAL_TYPE MaterialType;
@ -465,7 +465,7 @@ namespace video
template <typename F> template <typename F>
void forEachTexture(F &&fn) { void forEachTexture(F &&fn) {
for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; i++) { for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; i++) {
fn(TextureLayer[i]); fn(TextureLayers[i]);
} }
} }
@ -474,7 +474,7 @@ namespace video
\return Texture matrix for texture level i. */ \return Texture matrix for texture level i. */
core::matrix4& getTextureMatrix(u32 i) core::matrix4& getTextureMatrix(u32 i)
{ {
return TextureLayer[i].getTextureMatrix(); return TextureLayers[i].getTextureMatrix();
} }
//! Gets the immutable texture transformation matrix for level i //! Gets the immutable texture transformation matrix for level i
@ -483,7 +483,7 @@ namespace video
const core::matrix4& getTextureMatrix(u32 i) const const core::matrix4& getTextureMatrix(u32 i) const
{ {
if (i<MATERIAL_MAX_TEXTURES) if (i<MATERIAL_MAX_TEXTURES)
return TextureLayer[i].getTextureMatrix(); return TextureLayers[i].getTextureMatrix();
else else
return core::IdentityMatrix; return core::IdentityMatrix;
} }
@ -495,7 +495,7 @@ namespace video
{ {
if (i>=MATERIAL_MAX_TEXTURES) if (i>=MATERIAL_MAX_TEXTURES)
return; return;
TextureLayer[i].setTextureMatrix(mat); TextureLayers[i].setTextureMatrix(mat);
} }
//! Gets the i-th texture //! Gets the i-th texture
@ -503,7 +503,7 @@ namespace video
\return Texture for texture level i, if defined, else 0. */ \return Texture for texture level i, if defined, else 0. */
ITexture* getTexture(u32 i) const ITexture* getTexture(u32 i) const
{ {
return i < MATERIAL_MAX_TEXTURES ? TextureLayer[i].Texture : 0; return i < MATERIAL_MAX_TEXTURES ? TextureLayers[i].Texture : 0;
} }
//! Sets the i-th texture //! Sets the i-th texture
@ -514,7 +514,7 @@ namespace video
{ {
if (i>=MATERIAL_MAX_TEXTURES) if (i>=MATERIAL_MAX_TEXTURES)
return; return;
TextureLayer[i].Texture = tex; TextureLayers[i].Texture = tex;
} }
//! Inequality operator //! Inequality operator
@ -554,7 +554,7 @@ namespace video
; ;
for (u32 i=0; (i<MATERIAL_MAX_TEXTURES) && !different; ++i) for (u32 i=0; (i<MATERIAL_MAX_TEXTURES) && !different; ++i)
{ {
different |= (TextureLayer[i] != b.TextureLayer[i]); different |= (TextureLayers[i] != b.TextureLayers[i]);
} }
return different; return different;
} }

View File

@ -109,7 +109,7 @@ namespace video
{ {
if ( EnableLayerProps[i] ) if ( EnableLayerProps[i] )
{ {
material.TextureLayer[i].MinFilter = Material.TextureLayer[i].MinFilter; material.TextureLayers[i].MinFilter = Material.TextureLayers[i].MinFilter;
} }
} }
break; break;
@ -118,7 +118,7 @@ namespace video
{ {
if ( EnableLayerProps[i] ) if ( EnableLayerProps[i] )
{ {
material.TextureLayer[i].MagFilter = Material.TextureLayer[i].MagFilter; material.TextureLayers[i].MagFilter = Material.TextureLayers[i].MagFilter;
} }
} }
break; break;
@ -127,7 +127,7 @@ namespace video
{ {
if ( EnableLayerProps[i] ) if ( EnableLayerProps[i] )
{ {
material.TextureLayer[i].AnisotropicFilter = Material.TextureLayer[i].AnisotropicFilter; material.TextureLayers[i].AnisotropicFilter = Material.TextureLayers[i].AnisotropicFilter;
} }
} }
break; break;
@ -138,9 +138,9 @@ namespace video
{ {
if ( EnableLayerProps[i] ) if ( EnableLayerProps[i] )
{ {
material.TextureLayer[i].TextureWrapU = Material.TextureLayer[i].TextureWrapU; material.TextureLayers[i].TextureWrapU = Material.TextureLayers[i].TextureWrapU;
material.TextureLayer[i].TextureWrapV = Material.TextureLayer[i].TextureWrapV; material.TextureLayers[i].TextureWrapV = Material.TextureLayers[i].TextureWrapV;
material.TextureLayer[i].TextureWrapW = Material.TextureLayer[i].TextureWrapW; material.TextureLayers[i].TextureWrapW = Material.TextureLayers[i].TextureWrapW;
} }
} }
break; break;
@ -163,11 +163,11 @@ namespace video
{ {
if ( EnableLayers[i] ) if ( EnableLayers[i] )
{ {
material.TextureLayer[i] = Material.TextureLayer[i]; material.TextureLayers[i] = Material.TextureLayers[i];
} }
else if ( EnableTextures[i] ) else if ( EnableTextures[i] )
{ {
material.TextureLayer[i].Texture = Material.TextureLayer[i].Texture; material.TextureLayers[i].Texture = Material.TextureLayers[i].Texture;
} }
} }
} }

View File

@ -264,7 +264,7 @@ COGLES2Driver::~COGLES2Driver()
bool COGLES2Driver::setMaterialTexture(irr::u32 layerIdx, const irr::video::ITexture* texture) bool COGLES2Driver::setMaterialTexture(irr::u32 layerIdx, const irr::video::ITexture* texture)
{ {
Material.TextureLayer[layerIdx].Texture = const_cast<ITexture*>(texture); // function uses const-pointer for texture because all draw functions use const-pointers already Material.TextureLayers[layerIdx].Texture = const_cast<ITexture*>(texture); // function uses const-pointer for texture because all draw functions use const-pointers already
return CacheHandler->getTextureCache().set(0, texture); return CacheHandler->getTextureCache().set(0, texture);
} }
@ -1696,9 +1696,9 @@ COGLES2Driver::~COGLES2Driver()
if (resetAllRenderstates) if (resetAllRenderstates)
tmpTexture->getStatesCache().IsCached = false; tmpTexture->getStatesCache().IsCached = false;
if (!tmpTexture->getStatesCache().IsCached || material.TextureLayer[i].MagFilter != tmpTexture->getStatesCache().MagFilter) if (!tmpTexture->getStatesCache().IsCached || material.TextureLayers[i].MagFilter != tmpTexture->getStatesCache().MagFilter)
{ {
E_TEXTURE_MAG_FILTER magFilter = material.TextureLayer[i].MagFilter; E_TEXTURE_MAG_FILTER magFilter = material.TextureLayers[i].MagFilter;
glTexParameteri(tmpTextureType, GL_TEXTURE_MAG_FILTER, glTexParameteri(tmpTextureType, GL_TEXTURE_MAG_FILTER,
magFilter == ETMAGF_BILINEAR ? GL_LINEAR : GL_NEAREST); magFilter == ETMAGF_BILINEAR ? GL_LINEAR : GL_NEAREST);
@ -1707,10 +1707,10 @@ COGLES2Driver::~COGLES2Driver()
if (material.UseMipMaps && tmpTexture->hasMipMaps()) if (material.UseMipMaps && tmpTexture->hasMipMaps())
{ {
if (!tmpTexture->getStatesCache().IsCached || material.TextureLayer[i].MinFilter != tmpTexture->getStatesCache().MinFilter || if (!tmpTexture->getStatesCache().IsCached || material.TextureLayers[i].MinFilter != tmpTexture->getStatesCache().MinFilter ||
!tmpTexture->getStatesCache().MipMapStatus) !tmpTexture->getStatesCache().MipMapStatus)
{ {
E_TEXTURE_MIN_FILTER minFilter = material.TextureLayer[i].MinFilter; E_TEXTURE_MIN_FILTER minFilter = material.TextureLayers[i].MinFilter;
glTexParameteri(tmpTextureType, GL_TEXTURE_MIN_FILTER, glTexParameteri(tmpTextureType, GL_TEXTURE_MIN_FILTER,
minFilter == ETMINF_TRILINEAR ? GL_LINEAR_MIPMAP_LINEAR : minFilter == ETMINF_TRILINEAR ? GL_LINEAR_MIPMAP_LINEAR :
minFilter == ETMINF_BILINEAR ? GL_LINEAR_MIPMAP_NEAREST : minFilter == ETMINF_BILINEAR ? GL_LINEAR_MIPMAP_NEAREST :
@ -1722,10 +1722,10 @@ COGLES2Driver::~COGLES2Driver()
} }
else else
{ {
if (!tmpTexture->getStatesCache().IsCached || material.TextureLayer[i].MinFilter != tmpTexture->getStatesCache().MinFilter || if (!tmpTexture->getStatesCache().IsCached || material.TextureLayers[i].MinFilter != tmpTexture->getStatesCache().MinFilter ||
tmpTexture->getStatesCache().MipMapStatus) tmpTexture->getStatesCache().MipMapStatus)
{ {
E_TEXTURE_MIN_FILTER minFilter = material.TextureLayer[i].MinFilter; E_TEXTURE_MIN_FILTER minFilter = material.TextureLayers[i].MinFilter;
glTexParameteri(tmpTextureType, GL_TEXTURE_MIN_FILTER, glTexParameteri(tmpTextureType, GL_TEXTURE_MIN_FILTER,
(minFilter == ETMINF_TRILINEAR || minFilter == ETMINF_BILINEAR) ? GL_LINEAR : GL_NEAREST); (minFilter == ETMINF_TRILINEAR || minFilter == ETMINF_BILINEAR) ? GL_LINEAR : GL_NEAREST);
@ -1736,25 +1736,25 @@ COGLES2Driver::~COGLES2Driver()
#ifdef GL_EXT_texture_filter_anisotropic #ifdef GL_EXT_texture_filter_anisotropic
if (FeatureAvailable[COGLESCoreExtensionHandler::IRR_GL_EXT_texture_filter_anisotropic] && if (FeatureAvailable[COGLESCoreExtensionHandler::IRR_GL_EXT_texture_filter_anisotropic] &&
(!tmpTexture->getStatesCache().IsCached || material.TextureLayer[i].AnisotropicFilter != tmpTexture->getStatesCache().AnisotropicFilter)) (!tmpTexture->getStatesCache().IsCached || material.TextureLayers[i].AnisotropicFilter != tmpTexture->getStatesCache().AnisotropicFilter))
{ {
glTexParameteri(tmpTextureType, GL_TEXTURE_MAX_ANISOTROPY_EXT, glTexParameteri(tmpTextureType, GL_TEXTURE_MAX_ANISOTROPY_EXT,
material.TextureLayer[i].AnisotropicFilter>1 ? core::min_(MaxAnisotropy, material.TextureLayer[i].AnisotropicFilter) : 1); material.TextureLayers[i].AnisotropicFilter>1 ? core::min_(MaxAnisotropy, material.TextureLayers[i].AnisotropicFilter) : 1);
tmpTexture->getStatesCache().AnisotropicFilter = material.TextureLayer[i].AnisotropicFilter; tmpTexture->getStatesCache().AnisotropicFilter = material.TextureLayers[i].AnisotropicFilter;
} }
#endif #endif
if (!tmpTexture->getStatesCache().IsCached || material.TextureLayer[i].TextureWrapU != tmpTexture->getStatesCache().WrapU) if (!tmpTexture->getStatesCache().IsCached || material.TextureLayers[i].TextureWrapU != tmpTexture->getStatesCache().WrapU)
{ {
glTexParameteri(tmpTextureType, GL_TEXTURE_WRAP_S, getTextureWrapMode(material.TextureLayer[i].TextureWrapU)); glTexParameteri(tmpTextureType, GL_TEXTURE_WRAP_S, getTextureWrapMode(material.TextureLayers[i].TextureWrapU));
tmpTexture->getStatesCache().WrapU = material.TextureLayer[i].TextureWrapU; tmpTexture->getStatesCache().WrapU = material.TextureLayers[i].TextureWrapU;
} }
if (!tmpTexture->getStatesCache().IsCached || material.TextureLayer[i].TextureWrapV != tmpTexture->getStatesCache().WrapV) if (!tmpTexture->getStatesCache().IsCached || material.TextureLayers[i].TextureWrapV != tmpTexture->getStatesCache().WrapV)
{ {
glTexParameteri(tmpTextureType, GL_TEXTURE_WRAP_T, getTextureWrapMode(material.TextureLayer[i].TextureWrapV)); glTexParameteri(tmpTextureType, GL_TEXTURE_WRAP_T, getTextureWrapMode(material.TextureLayers[i].TextureWrapV));
tmpTexture->getStatesCache().WrapV = material.TextureLayer[i].TextureWrapV; tmpTexture->getStatesCache().WrapV = material.TextureLayers[i].TextureWrapV;
} }
tmpTexture->getStatesCache().IsCached = true; tmpTexture->getStatesCache().IsCached = true;

View File

@ -112,7 +112,7 @@ void COGLES2MaterialSolidCB::OnSetMaterial(const SMaterial& material)
COGLES2MaterialBaseCB::OnSetMaterial(material); COGLES2MaterialBaseCB::OnSetMaterial(material);
AlphaRef = material.MaterialTypeParam; AlphaRef = material.MaterialTypeParam;
TextureUsage0 = (material.TextureLayer[0].Texture) ? 1 : 0; TextureUsage0 = (material.TextureLayers[0].Texture) ? 1 : 0;
} }
void COGLES2MaterialSolidCB::OnSetConstants(IMaterialRendererServices* services, s32 userData) void COGLES2MaterialSolidCB::OnSetConstants(IMaterialRendererServices* services, s32 userData)
@ -169,7 +169,7 @@ void COGLES2MaterialOneTextureBlendCB::OnSetMaterial(const SMaterial& material)
} }
} }
TextureUsage0 = (material.TextureLayer[0].Texture) ? 1 : 0; TextureUsage0 = (material.TextureLayers[0].Texture) ? 1 : 0;
} }
void COGLES2MaterialOneTextureBlendCB::OnSetConstants(IMaterialRendererServices* services, s32 userData) void COGLES2MaterialOneTextureBlendCB::OnSetConstants(IMaterialRendererServices* services, s32 userData)

View File

@ -71,7 +71,7 @@ void COGLES2Renderer2D::OnSetMaterial(const video::SMaterial& material,
if ( WithTexture ) if ( WithTexture )
{ {
s32 TextureUsage = material.TextureLayer[0].Texture ? 1 : 0; s32 TextureUsage = material.TextureLayers[0].Texture ? 1 : 0;
setPixelShaderConstant(TextureUsageID, &TextureUsage, 1); setPixelShaderConstant(TextureUsageID, &TextureUsage, 1);
} }
} }

View File

@ -1841,7 +1841,7 @@ void COGLES1Driver::setTextureRenderStates(const SMaterial& material, bool reset
for (s32 i = Feature.MaxTextureUnits - 1; i >= 0; --i) for (s32 i = Feature.MaxTextureUnits - 1; i >= 0; --i)
{ {
CacheHandler->getTextureCache().set(i, material.TextureLayer[i].Texture); CacheHandler->getTextureCache().set(i, material.TextureLayers[i].Texture);
const COGLES1Texture* tmpTexture = CacheHandler->getTextureCache().get(i); const COGLES1Texture* tmpTexture = CacheHandler->getTextureCache().get(i);
@ -1878,24 +1878,24 @@ void COGLES1Driver::setTextureRenderStates(const SMaterial& material, bool reset
#ifdef GL_VERSION_2_1 #ifdef GL_VERSION_2_1
if (Version >= 210) if (Version >= 210)
{ {
if (!statesCache.IsCached || material.TextureLayer[i].LODBias != statesCache.LODBias) if (!statesCache.IsCached || material.TextureLayers[i].LODBias != statesCache.LODBias)
{ {
if (material.TextureLayer[i].LODBias) if (material.TextureLayers[i].LODBias)
{ {
const float tmp = core::clamp(material.TextureLayer[i].LODBias * 0.125f, -MaxTextureLODBias, MaxTextureLODBias); const float tmp = core::clamp(material.TextureLayers[i].LODBias * 0.125f, -MaxTextureLODBias, MaxTextureLODBias);
glTexParameterf(tmpTextureType, GL_TEXTURE_LOD_BIAS, tmp); glTexParameterf(tmpTextureType, GL_TEXTURE_LOD_BIAS, tmp);
} }
else else
glTexParameterf(tmpTextureType, GL_TEXTURE_LOD_BIAS, 0.f); glTexParameterf(tmpTextureType, GL_TEXTURE_LOD_BIAS, 0.f);
statesCache.LODBias = material.TextureLayer[i].LODBias; statesCache.LODBias = material.TextureLayers[i].LODBias;
} }
} }
else if (FeatureAvailable[IRR_EXT_texture_lod_bias]) else if (FeatureAvailable[IRR_EXT_texture_lod_bias])
{ {
if (material.TextureLayer[i].LODBias) if (material.TextureLayers[i].LODBias)
{ {
const float tmp = core::clamp(material.TextureLayer[i].LODBias * 0.125f, -MaxTextureLODBias, MaxTextureLODBias); const float tmp = core::clamp(material.TextureLayers[i].LODBias * 0.125f, -MaxTextureLODBias, MaxTextureLODBias);
glTexEnvf(GL_TEXTURE_FILTER_CONTROL_EXT, GL_TEXTURE_LOD_BIAS_EXT, tmp); glTexEnvf(GL_TEXTURE_FILTER_CONTROL_EXT, GL_TEXTURE_LOD_BIAS_EXT, tmp);
} }
else else
@ -1904,9 +1904,9 @@ void COGLES1Driver::setTextureRenderStates(const SMaterial& material, bool reset
#elif defined(GL_EXT_texture_lod_bias) #elif defined(GL_EXT_texture_lod_bias)
if (FeatureAvailable[COGLESCoreExtensionHandler::IRR_GL_EXT_texture_lod_bias]) if (FeatureAvailable[COGLESCoreExtensionHandler::IRR_GL_EXT_texture_lod_bias])
{ {
if (material.TextureLayer[i].LODBias) if (material.TextureLayers[i].LODBias)
{ {
const float tmp = core::clamp(material.TextureLayer[i].LODBias * 0.125f, -MaxTextureLODBias, MaxTextureLODBias); const float tmp = core::clamp(material.TextureLayers[i].LODBias * 0.125f, -MaxTextureLODBias, MaxTextureLODBias);
glTexEnvf(GL_TEXTURE_FILTER_CONTROL_EXT, GL_TEXTURE_LOD_BIAS_EXT, tmp); glTexEnvf(GL_TEXTURE_FILTER_CONTROL_EXT, GL_TEXTURE_LOD_BIAS_EXT, tmp);
} }
else else
@ -1914,9 +1914,9 @@ void COGLES1Driver::setTextureRenderStates(const SMaterial& material, bool reset
} }
#endif #endif
if (!statesCache.IsCached || material.TextureLayer[i].MagFilter != statesCache.MagFilter) if (!statesCache.IsCached || material.TextureLayers[i].MagFilter != statesCache.MagFilter)
{ {
E_TEXTURE_MAG_FILTER magFilter = material.TextureLayer[i].MagFilter; E_TEXTURE_MAG_FILTER magFilter = material.TextureLayers[i].MagFilter;
glTexParameteri(tmpTextureType, GL_TEXTURE_MAG_FILTER, glTexParameteri(tmpTextureType, GL_TEXTURE_MAG_FILTER,
magFilter == ETMAGF_BILINEAR ? GL_LINEAR : GL_NEAREST); magFilter == ETMAGF_BILINEAR ? GL_LINEAR : GL_NEAREST);
@ -1925,10 +1925,10 @@ void COGLES1Driver::setTextureRenderStates(const SMaterial& material, bool reset
if (material.UseMipMaps && tmpTexture->hasMipMaps()) if (material.UseMipMaps && tmpTexture->hasMipMaps())
{ {
if (!statesCache.IsCached || material.TextureLayer[i].MinFilter != statesCache.MinFilter || if (!statesCache.IsCached || material.TextureLayers[i].MinFilter != statesCache.MinFilter ||
!statesCache.MipMapStatus) !statesCache.MipMapStatus)
{ {
E_TEXTURE_MIN_FILTER minFilter = material.TextureLayer[i].MinFilter; E_TEXTURE_MIN_FILTER minFilter = material.TextureLayers[i].MinFilter;
glTexParameteri(tmpTextureType, GL_TEXTURE_MIN_FILTER, glTexParameteri(tmpTextureType, GL_TEXTURE_MIN_FILTER,
minFilter == ETMINF_TRILINEAR ? GL_LINEAR_MIPMAP_LINEAR : minFilter == ETMINF_TRILINEAR ? GL_LINEAR_MIPMAP_LINEAR :
minFilter == ETMINF_BILINEAR ? GL_LINEAR_MIPMAP_NEAREST : minFilter == ETMINF_BILINEAR ? GL_LINEAR_MIPMAP_NEAREST :
@ -1940,10 +1940,10 @@ void COGLES1Driver::setTextureRenderStates(const SMaterial& material, bool reset
} }
else else
{ {
if (!statesCache.IsCached || material.TextureLayer[i].MinFilter != statesCache.MinFilter || if (!statesCache.IsCached || material.TextureLayers[i].MinFilter != statesCache.MinFilter ||
statesCache.MipMapStatus) statesCache.MipMapStatus)
{ {
E_TEXTURE_MIN_FILTER minFilter = material.TextureLayer[i].MinFilter; E_TEXTURE_MIN_FILTER minFilter = material.TextureLayers[i].MinFilter;
glTexParameteri(tmpTextureType, GL_TEXTURE_MIN_FILTER, glTexParameteri(tmpTextureType, GL_TEXTURE_MIN_FILTER,
(minFilter == ETMINF_TRILINEAR || minFilter == ETMINF_BILINEAR) ? GL_LINEAR : GL_NEAREST); (minFilter == ETMINF_TRILINEAR || minFilter == ETMINF_BILINEAR) ? GL_LINEAR : GL_NEAREST);
@ -1954,25 +1954,25 @@ void COGLES1Driver::setTextureRenderStates(const SMaterial& material, bool reset
#ifdef GL_EXT_texture_filter_anisotropic #ifdef GL_EXT_texture_filter_anisotropic
if (FeatureAvailable[COGLESCoreExtensionHandler::IRR_GL_EXT_texture_filter_anisotropic] && if (FeatureAvailable[COGLESCoreExtensionHandler::IRR_GL_EXT_texture_filter_anisotropic] &&
(!statesCache.IsCached || material.TextureLayer[i].AnisotropicFilter != statesCache.AnisotropicFilter)) (!statesCache.IsCached || material.TextureLayers[i].AnisotropicFilter != statesCache.AnisotropicFilter))
{ {
glTexParameteri(tmpTextureType, GL_TEXTURE_MAX_ANISOTROPY_EXT, glTexParameteri(tmpTextureType, GL_TEXTURE_MAX_ANISOTROPY_EXT,
material.TextureLayer[i].AnisotropicFilter>1 ? core::min_(MaxAnisotropy, material.TextureLayer[i].AnisotropicFilter) : 1); material.TextureLayers[i].AnisotropicFilter>1 ? core::min_(MaxAnisotropy, material.TextureLayers[i].AnisotropicFilter) : 1);
statesCache.AnisotropicFilter = material.TextureLayer[i].AnisotropicFilter; statesCache.AnisotropicFilter = material.TextureLayers[i].AnisotropicFilter;
} }
#endif #endif
if (!statesCache.IsCached || material.TextureLayer[i].TextureWrapU != statesCache.WrapU) if (!statesCache.IsCached || material.TextureLayers[i].TextureWrapU != statesCache.WrapU)
{ {
glTexParameteri(tmpTextureType, GL_TEXTURE_WRAP_S, getTextureWrapMode(material.TextureLayer[i].TextureWrapU)); glTexParameteri(tmpTextureType, GL_TEXTURE_WRAP_S, getTextureWrapMode(material.TextureLayers[i].TextureWrapU));
statesCache.WrapU = material.TextureLayer[i].TextureWrapU; statesCache.WrapU = material.TextureLayers[i].TextureWrapU;
} }
if (!statesCache.IsCached || material.TextureLayer[i].TextureWrapV != statesCache.WrapV) if (!statesCache.IsCached || material.TextureLayers[i].TextureWrapV != statesCache.WrapV)
{ {
glTexParameteri(tmpTextureType, GL_TEXTURE_WRAP_T, getTextureWrapMode(material.TextureLayer[i].TextureWrapV)); glTexParameteri(tmpTextureType, GL_TEXTURE_WRAP_T, getTextureWrapMode(material.TextureLayers[i].TextureWrapV));
statesCache.WrapV = material.TextureLayer[i].TextureWrapV; statesCache.WrapV = material.TextureLayers[i].TextureWrapV;
} }
statesCache.IsCached = true; statesCache.IsCached = true;
@ -2013,7 +2013,7 @@ void COGLES1Driver::setRenderStates2DMode(bool alpha, bool texture, bool alphaCh
Material = (OverrideMaterial2DEnabled) ? OverrideMaterial2D : InitMaterial2D; Material = (OverrideMaterial2DEnabled) ? OverrideMaterial2D : InitMaterial2D;
Material.Lighting = false; Material.Lighting = false;
Material.TextureLayer[0].Texture = (texture) ? const_cast<COGLES1Texture*>(CacheHandler->getTextureCache().get(0)) : 0; Material.TextureLayers[0].Texture = (texture) ? const_cast<COGLES1Texture*>(CacheHandler->getTextureCache().get(0)) : 0;
setTransform(ETS_TEXTURE_0, core::IdentityMatrix); setTransform(ETS_TEXTURE_0, core::IdentityMatrix);
setBasicRenderStates(Material, LastMaterial, false); setBasicRenderStates(Material, LastMaterial, false);

View File

@ -590,9 +590,9 @@ public:
// Fix textures which got removed // Fix textures which got removed
for ( u32 i=0; i < MATERIAL_MAX_TEXTURES; ++i ) for ( u32 i=0; i < MATERIAL_MAX_TEXTURES; ++i )
{ {
if ( material.TextureLayer[i].Texture && !TextureCache[i] ) if ( material.TextureLayers[i].Texture && !TextureCache[i] )
{ {
material.TextureLayer[i].Texture = 0; material.TextureLayers[i].Texture = 0;
} }
} }
} }

View File

@ -2673,24 +2673,24 @@ void COpenGLDriver::setTextureRenderStates(const SMaterial& material, bool reset
#ifdef GL_VERSION_2_1 #ifdef GL_VERSION_2_1
if (Version >= 201) if (Version >= 201)
{ {
if (!statesCache.IsCached || material.TextureLayer[i].LODBias != statesCache.LODBias) if (!statesCache.IsCached || material.TextureLayers[i].LODBias != statesCache.LODBias)
{ {
if (material.TextureLayer[i].LODBias) if (material.TextureLayers[i].LODBias)
{ {
const float tmp = core::clamp(material.TextureLayer[i].LODBias * 0.125f, -MaxTextureLODBias, MaxTextureLODBias); const float tmp = core::clamp(material.TextureLayers[i].LODBias * 0.125f, -MaxTextureLODBias, MaxTextureLODBias);
glTexParameterf(tmpType, GL_TEXTURE_LOD_BIAS, tmp); glTexParameterf(tmpType, GL_TEXTURE_LOD_BIAS, tmp);
} }
else else
glTexParameterf(tmpType, GL_TEXTURE_LOD_BIAS, 0.f); glTexParameterf(tmpType, GL_TEXTURE_LOD_BIAS, 0.f);
statesCache.LODBias = material.TextureLayer[i].LODBias; statesCache.LODBias = material.TextureLayers[i].LODBias;
} }
} }
else if (FeatureAvailable[IRR_EXT_texture_lod_bias]) else if (FeatureAvailable[IRR_EXT_texture_lod_bias])
{ {
if (material.TextureLayer[i].LODBias) if (material.TextureLayers[i].LODBias)
{ {
const float tmp = core::clamp(material.TextureLayer[i].LODBias * 0.125f, -MaxTextureLODBias, MaxTextureLODBias); const float tmp = core::clamp(material.TextureLayers[i].LODBias * 0.125f, -MaxTextureLODBias, MaxTextureLODBias);
glTexEnvf(GL_TEXTURE_FILTER_CONTROL_EXT, GL_TEXTURE_LOD_BIAS_EXT, tmp); glTexEnvf(GL_TEXTURE_FILTER_CONTROL_EXT, GL_TEXTURE_LOD_BIAS_EXT, tmp);
} }
else else
@ -2699,9 +2699,9 @@ void COpenGLDriver::setTextureRenderStates(const SMaterial& material, bool reset
#elif defined(GL_EXT_texture_lod_bias) #elif defined(GL_EXT_texture_lod_bias)
if (FeatureAvailable[IRR_EXT_texture_lod_bias]) if (FeatureAvailable[IRR_EXT_texture_lod_bias])
{ {
if (material.TextureLayer[i].LODBias) if (material.TextureLayers[i].LODBias)
{ {
const float tmp = core::clamp(material.TextureLayer[i].LODBias * 0.125f, -MaxTextureLODBias, MaxTextureLODBias); const float tmp = core::clamp(material.TextureLayers[i].LODBias * 0.125f, -MaxTextureLODBias, MaxTextureLODBias);
glTexEnvf(GL_TEXTURE_FILTER_CONTROL_EXT, GL_TEXTURE_LOD_BIAS_EXT, tmp); glTexEnvf(GL_TEXTURE_FILTER_CONTROL_EXT, GL_TEXTURE_LOD_BIAS_EXT, tmp);
} }
else else
@ -2709,9 +2709,9 @@ void COpenGLDriver::setTextureRenderStates(const SMaterial& material, bool reset
} }
#endif #endif
if (!statesCache.IsCached || material.TextureLayer[i].MagFilter != statesCache.MagFilter) if (!statesCache.IsCached || material.TextureLayers[i].MagFilter != statesCache.MagFilter)
{ {
E_TEXTURE_MAG_FILTER magFilter = material.TextureLayer[i].MagFilter; E_TEXTURE_MAG_FILTER magFilter = material.TextureLayers[i].MagFilter;
glTexParameteri(tmpType, GL_TEXTURE_MAG_FILTER, glTexParameteri(tmpType, GL_TEXTURE_MAG_FILTER,
magFilter == ETMAGF_BILINEAR ? GL_LINEAR : GL_NEAREST); magFilter == ETMAGF_BILINEAR ? GL_LINEAR : GL_NEAREST);
@ -2720,10 +2720,10 @@ void COpenGLDriver::setTextureRenderStates(const SMaterial& material, bool reset
if (material.UseMipMaps && tmpTexture->hasMipMaps()) if (material.UseMipMaps && tmpTexture->hasMipMaps())
{ {
if (!statesCache.IsCached || material.TextureLayer[i].MinFilter != statesCache.MinFilter || if (!statesCache.IsCached || material.TextureLayers[i].MinFilter != statesCache.MinFilter ||
!statesCache.MipMapStatus) !statesCache.MipMapStatus)
{ {
E_TEXTURE_MIN_FILTER minFilter = material.TextureLayer[i].MinFilter; E_TEXTURE_MIN_FILTER minFilter = material.TextureLayers[i].MinFilter;
glTexParameteri(tmpType, GL_TEXTURE_MIN_FILTER, glTexParameteri(tmpType, GL_TEXTURE_MIN_FILTER,
minFilter == ETMINF_TRILINEAR ? GL_LINEAR_MIPMAP_LINEAR : minFilter == ETMINF_TRILINEAR ? GL_LINEAR_MIPMAP_LINEAR :
minFilter == ETMINF_BILINEAR ? GL_LINEAR_MIPMAP_NEAREST : minFilter == ETMINF_BILINEAR ? GL_LINEAR_MIPMAP_NEAREST :
@ -2735,10 +2735,10 @@ void COpenGLDriver::setTextureRenderStates(const SMaterial& material, bool reset
} }
else else
{ {
if (!statesCache.IsCached || material.TextureLayer[i].MinFilter != statesCache.MinFilter || if (!statesCache.IsCached || material.TextureLayers[i].MinFilter != statesCache.MinFilter ||
statesCache.MipMapStatus) statesCache.MipMapStatus)
{ {
E_TEXTURE_MIN_FILTER minFilter = material.TextureLayer[i].MinFilter; E_TEXTURE_MIN_FILTER minFilter = material.TextureLayers[i].MinFilter;
glTexParameteri(tmpType, GL_TEXTURE_MIN_FILTER, glTexParameteri(tmpType, GL_TEXTURE_MIN_FILTER,
(minFilter == ETMINF_TRILINEAR || minFilter == ETMINF_BILINEAR) ? GL_LINEAR : GL_NEAREST); (minFilter == ETMINF_TRILINEAR || minFilter == ETMINF_BILINEAR) ? GL_LINEAR : GL_NEAREST);
@ -2749,31 +2749,31 @@ void COpenGLDriver::setTextureRenderStates(const SMaterial& material, bool reset
#ifdef GL_EXT_texture_filter_anisotropic #ifdef GL_EXT_texture_filter_anisotropic
if (FeatureAvailable[IRR_EXT_texture_filter_anisotropic] && if (FeatureAvailable[IRR_EXT_texture_filter_anisotropic] &&
(!statesCache.IsCached || material.TextureLayer[i].AnisotropicFilter != statesCache.AnisotropicFilter)) (!statesCache.IsCached || material.TextureLayers[i].AnisotropicFilter != statesCache.AnisotropicFilter))
{ {
glTexParameteri(tmpType, GL_TEXTURE_MAX_ANISOTROPY_EXT, glTexParameteri(tmpType, GL_TEXTURE_MAX_ANISOTROPY_EXT,
material.TextureLayer[i].AnisotropicFilter > 1 ? core::min_(MaxAnisotropy, material.TextureLayer[i].AnisotropicFilter) : 1); material.TextureLayers[i].AnisotropicFilter > 1 ? core::min_(MaxAnisotropy, material.TextureLayers[i].AnisotropicFilter) : 1);
statesCache.AnisotropicFilter = material.TextureLayer[i].AnisotropicFilter; statesCache.AnisotropicFilter = material.TextureLayers[i].AnisotropicFilter;
} }
#endif #endif
if (!statesCache.IsCached || material.TextureLayer[i].TextureWrapU != statesCache.WrapU) if (!statesCache.IsCached || material.TextureLayers[i].TextureWrapU != statesCache.WrapU)
{ {
glTexParameteri(tmpType, GL_TEXTURE_WRAP_S, getTextureWrapMode(material.TextureLayer[i].TextureWrapU)); glTexParameteri(tmpType, GL_TEXTURE_WRAP_S, getTextureWrapMode(material.TextureLayers[i].TextureWrapU));
statesCache.WrapU = material.TextureLayer[i].TextureWrapU; statesCache.WrapU = material.TextureLayers[i].TextureWrapU;
} }
if (!statesCache.IsCached || material.TextureLayer[i].TextureWrapV != statesCache.WrapV) if (!statesCache.IsCached || material.TextureLayers[i].TextureWrapV != statesCache.WrapV)
{ {
glTexParameteri(tmpType, GL_TEXTURE_WRAP_T, getTextureWrapMode(material.TextureLayer[i].TextureWrapV)); glTexParameteri(tmpType, GL_TEXTURE_WRAP_T, getTextureWrapMode(material.TextureLayers[i].TextureWrapV));
statesCache.WrapV = material.TextureLayer[i].TextureWrapV; statesCache.WrapV = material.TextureLayers[i].TextureWrapV;
} }
if (!statesCache.IsCached || material.TextureLayer[i].TextureWrapW != statesCache.WrapW) if (!statesCache.IsCached || material.TextureLayers[i].TextureWrapW != statesCache.WrapW)
{ {
glTexParameteri(tmpType, GL_TEXTURE_WRAP_R, getTextureWrapMode(material.TextureLayer[i].TextureWrapW)); glTexParameteri(tmpType, GL_TEXTURE_WRAP_R, getTextureWrapMode(material.TextureLayers[i].TextureWrapW));
statesCache.WrapW = material.TextureLayer[i].TextureWrapW; statesCache.WrapW = material.TextureLayers[i].TextureWrapW;
} }
statesCache.IsCached = true; statesCache.IsCached = true;

View File

@ -402,7 +402,7 @@ COpenGL3DriverBase::~COpenGL3DriverBase()
bool COpenGL3DriverBase::setMaterialTexture(irr::u32 layerIdx, const irr::video::ITexture* texture) bool COpenGL3DriverBase::setMaterialTexture(irr::u32 layerIdx, const irr::video::ITexture* texture)
{ {
Material.TextureLayer[layerIdx].Texture = const_cast<ITexture*>(texture); // function uses const-pointer for texture because all draw functions use const-pointers already Material.TextureLayers[layerIdx].Texture = const_cast<ITexture*>(texture); // function uses const-pointer for texture because all draw functions use const-pointers already
return CacheHandler->getTextureCache().set(0, texture); return CacheHandler->getTextureCache().set(0, texture);
} }
@ -1456,9 +1456,9 @@ COpenGL3DriverBase::~COpenGL3DriverBase()
if (resetAllRenderstates) if (resetAllRenderstates)
tmpTexture->getStatesCache().IsCached = false; tmpTexture->getStatesCache().IsCached = false;
if (!tmpTexture->getStatesCache().IsCached || material.TextureLayer[i].MagFilter != tmpTexture->getStatesCache().MagFilter) if (!tmpTexture->getStatesCache().IsCached || material.TextureLayers[i].MagFilter != tmpTexture->getStatesCache().MagFilter)
{ {
E_TEXTURE_MAG_FILTER magFilter = material.TextureLayer[i].MagFilter; E_TEXTURE_MAG_FILTER magFilter = material.TextureLayers[i].MagFilter;
glTexParameteri(tmpTextureType, GL_TEXTURE_MAG_FILTER, glTexParameteri(tmpTextureType, GL_TEXTURE_MAG_FILTER,
magFilter == ETMAGF_BILINEAR ? GL_LINEAR : GL_NEAREST); magFilter == ETMAGF_BILINEAR ? GL_LINEAR : GL_NEAREST);
@ -1467,10 +1467,10 @@ COpenGL3DriverBase::~COpenGL3DriverBase()
if (material.UseMipMaps && tmpTexture->hasMipMaps()) if (material.UseMipMaps && tmpTexture->hasMipMaps())
{ {
if (!tmpTexture->getStatesCache().IsCached || material.TextureLayer[i].MinFilter != tmpTexture->getStatesCache().MinFilter || if (!tmpTexture->getStatesCache().IsCached || material.TextureLayers[i].MinFilter != tmpTexture->getStatesCache().MinFilter ||
!tmpTexture->getStatesCache().MipMapStatus) !tmpTexture->getStatesCache().MipMapStatus)
{ {
E_TEXTURE_MIN_FILTER minFilter = material.TextureLayer[i].MinFilter; E_TEXTURE_MIN_FILTER minFilter = material.TextureLayers[i].MinFilter;
glTexParameteri(tmpTextureType, GL_TEXTURE_MIN_FILTER, glTexParameteri(tmpTextureType, GL_TEXTURE_MIN_FILTER,
minFilter == ETMINF_TRILINEAR ? GL_LINEAR_MIPMAP_LINEAR : minFilter == ETMINF_TRILINEAR ? GL_LINEAR_MIPMAP_LINEAR :
minFilter == ETMINF_BILINEAR ? GL_LINEAR_MIPMAP_NEAREST : minFilter == ETMINF_BILINEAR ? GL_LINEAR_MIPMAP_NEAREST :
@ -1482,10 +1482,10 @@ COpenGL3DriverBase::~COpenGL3DriverBase()
} }
else else
{ {
if (!tmpTexture->getStatesCache().IsCached || material.TextureLayer[i].MinFilter != tmpTexture->getStatesCache().MinFilter || if (!tmpTexture->getStatesCache().IsCached || material.TextureLayers[i].MinFilter != tmpTexture->getStatesCache().MinFilter ||
tmpTexture->getStatesCache().MipMapStatus) tmpTexture->getStatesCache().MipMapStatus)
{ {
E_TEXTURE_MIN_FILTER minFilter = material.TextureLayer[i].MinFilter; E_TEXTURE_MIN_FILTER minFilter = material.TextureLayers[i].MinFilter;
glTexParameteri(tmpTextureType, GL_TEXTURE_MIN_FILTER, glTexParameteri(tmpTextureType, GL_TEXTURE_MIN_FILTER,
(minFilter == ETMINF_TRILINEAR || minFilter == ETMINF_BILINEAR) ? GL_LINEAR : GL_NEAREST); (minFilter == ETMINF_TRILINEAR || minFilter == ETMINF_BILINEAR) ? GL_LINEAR : GL_NEAREST);
@ -1495,24 +1495,24 @@ COpenGL3DriverBase::~COpenGL3DriverBase()
} }
if (AnisotropicFilterSupported && if (AnisotropicFilterSupported &&
(!tmpTexture->getStatesCache().IsCached || material.TextureLayer[i].AnisotropicFilter != tmpTexture->getStatesCache().AnisotropicFilter)) (!tmpTexture->getStatesCache().IsCached || material.TextureLayers[i].AnisotropicFilter != tmpTexture->getStatesCache().AnisotropicFilter))
{ {
glTexParameteri(tmpTextureType, GL.TEXTURE_MAX_ANISOTROPY, glTexParameteri(tmpTextureType, GL.TEXTURE_MAX_ANISOTROPY,
material.TextureLayer[i].AnisotropicFilter>1 ? core::min_(MaxAnisotropy, material.TextureLayer[i].AnisotropicFilter) : 1); material.TextureLayers[i].AnisotropicFilter>1 ? core::min_(MaxAnisotropy, material.TextureLayers[i].AnisotropicFilter) : 1);
tmpTexture->getStatesCache().AnisotropicFilter = material.TextureLayer[i].AnisotropicFilter; tmpTexture->getStatesCache().AnisotropicFilter = material.TextureLayers[i].AnisotropicFilter;
} }
if (!tmpTexture->getStatesCache().IsCached || material.TextureLayer[i].TextureWrapU != tmpTexture->getStatesCache().WrapU) if (!tmpTexture->getStatesCache().IsCached || material.TextureLayers[i].TextureWrapU != tmpTexture->getStatesCache().WrapU)
{ {
glTexParameteri(tmpTextureType, GL_TEXTURE_WRAP_S, getTextureWrapMode(material.TextureLayer[i].TextureWrapU)); glTexParameteri(tmpTextureType, GL_TEXTURE_WRAP_S, getTextureWrapMode(material.TextureLayers[i].TextureWrapU));
tmpTexture->getStatesCache().WrapU = material.TextureLayer[i].TextureWrapU; tmpTexture->getStatesCache().WrapU = material.TextureLayers[i].TextureWrapU;
} }
if (!tmpTexture->getStatesCache().IsCached || material.TextureLayer[i].TextureWrapV != tmpTexture->getStatesCache().WrapV) if (!tmpTexture->getStatesCache().IsCached || material.TextureLayers[i].TextureWrapV != tmpTexture->getStatesCache().WrapV)
{ {
glTexParameteri(tmpTextureType, GL_TEXTURE_WRAP_T, getTextureWrapMode(material.TextureLayer[i].TextureWrapV)); glTexParameteri(tmpTextureType, GL_TEXTURE_WRAP_T, getTextureWrapMode(material.TextureLayers[i].TextureWrapV));
tmpTexture->getStatesCache().WrapV = material.TextureLayer[i].TextureWrapV; tmpTexture->getStatesCache().WrapV = material.TextureLayers[i].TextureWrapV;
} }
tmpTexture->getStatesCache().IsCached = true; tmpTexture->getStatesCache().IsCached = true;

View File

@ -106,7 +106,7 @@ void COpenGL3MaterialSolidCB::OnSetMaterial(const SMaterial& material)
COpenGL3MaterialBaseCB::OnSetMaterial(material); COpenGL3MaterialBaseCB::OnSetMaterial(material);
AlphaRef = material.MaterialTypeParam; AlphaRef = material.MaterialTypeParam;
TextureUsage0 = (material.TextureLayer[0].Texture) ? 1 : 0; TextureUsage0 = (material.TextureLayers[0].Texture) ? 1 : 0;
} }
void COpenGL3MaterialSolidCB::OnSetConstants(IMaterialRendererServices* services, s32 userData) void COpenGL3MaterialSolidCB::OnSetConstants(IMaterialRendererServices* services, s32 userData)
@ -163,7 +163,7 @@ void COpenGL3MaterialOneTextureBlendCB::OnSetMaterial(const SMaterial& material)
} }
} }
TextureUsage0 = (material.TextureLayer[0].Texture) ? 1 : 0; TextureUsage0 = (material.TextureLayers[0].Texture) ? 1 : 0;
} }
void COpenGL3MaterialOneTextureBlendCB::OnSetConstants(IMaterialRendererServices* services, s32 userData) void COpenGL3MaterialOneTextureBlendCB::OnSetConstants(IMaterialRendererServices* services, s32 userData)

View File

@ -69,7 +69,7 @@ void COpenGL3Renderer2D::OnSetMaterial(const video::SMaterial& material,
if ( WithTexture ) if ( WithTexture )
{ {
s32 TextureUsage = material.TextureLayer[0].Texture ? 1 : 0; s32 TextureUsage = material.TextureLayers[0].Texture ? 1 : 0;
setPixelShaderConstant(TextureUsageID, &TextureUsage, 1); setPixelShaderConstant(TextureUsageID, &TextureUsage, 1);
} }
} }