Skip to content

Commit

Permalink
Refactor|Materials: Minor material system cleanup refactorings
Browse files Browse the repository at this point in the history
  • Loading branch information
danij-deng committed Jan 10, 2013
1 parent 62fc413 commit f36e0c6
Show file tree
Hide file tree
Showing 9 changed files with 56 additions and 70 deletions.
6 changes: 0 additions & 6 deletions doomsday/engine/include/resource/materials.h
Expand Up @@ -274,12 +274,6 @@ class Materials

void updateTextureLinks(MaterialManifest &manifest);

/// @return (Particle) Generator definition associated with @a material else @c NULL.
ded_ptcgen_t const *ptcGenDef(material_t &material);

/// @return Decoration defintion associated with @a material else @c NULL.
ded_decor_t const *decorationDef(material_t &material);

/**
* Create a new Material unless an existing Material is found at the path
* (and within the same scheme) as that specified in @a def, in which case
Expand Down
2 changes: 1 addition & 1 deletion doomsday/engine/src/map/p_particle.cpp
Expand Up @@ -190,7 +190,7 @@ void P_MapSpawnPlaneParticleGens()
Plane *plane = sector->SP_plane(j);
if(!plane->PS_material) continue;

ded_ptcgen_t const *def = App_Materials()->ptcGenDef(*plane->PS_material);
ded_ptcgen_t const *def = Material_Manifest(plane->PS_material).ptcGenDef();
P_SpawnPlaneParticleGen(def, plane);
}
}
Expand Down
6 changes: 3 additions & 3 deletions doomsday/engine/src/map/r_world.cpp
Expand Up @@ -1055,7 +1055,7 @@ boolean R_MiddleMaterialCoversOpening(int lineFlags, Sector *frontSec, Sector *b

// Ensure we have up to date info about the material.
MaterialSnapshot const &ms =
App_Materials()->prepare(*material, Rend_MapSurfaceMaterialSpec(), true);
App_Materials()->prepare(*material, Rend_MapSurfaceMaterialSpec());

if(ignoreOpacity || (ms.isOpaque() && !frontDef->SW_middleblendmode && frontDef->SW_middlergba[3] >= 1))
{
Expand Down Expand Up @@ -1464,7 +1464,7 @@ boolean R_IsGlowingPlane(Plane const *pln)
if(mat)
{
MaterialSnapshot const &ms =
App_Materials()->prepare(*mat, Rend_MapSurfaceMaterialSpec(), true);
App_Materials()->prepare(*mat, Rend_MapSurfaceMaterialSpec());

if(!Material_IsDrawable(mat) || ms.glowStrength() > 0) return true;
}
Expand All @@ -1485,7 +1485,7 @@ float R_GlowStrength(Plane const *pln)
{
/// @todo We should not need to prepare to determine this.
MaterialSnapshot const &ms =
App_Materials()->prepare(*mat, Rend_MapSurfaceMaterialSpec(), true);
App_Materials()->prepare(*mat, Rend_MapSurfaceMaterialSpec());

return ms.glowStrength();
}
Expand Down
2 changes: 1 addition & 1 deletion doomsday/engine/src/map/surface.cpp
Expand Up @@ -89,7 +89,7 @@ boolean Surface_SetMaterial(Surface *suf, material_t *mat)

if(DMU_GetType(suf->owner) == DMU_PLANE)
{
ded_ptcgen_t const *def = App_Materials()->ptcGenDef(*mat);
ded_ptcgen_t const *def = Material_Manifest(mat).ptcGenDef();
P_SpawnPlaneParticleGen(def, (Plane *)suf->owner);
}
}
Expand Down
4 changes: 2 additions & 2 deletions doomsday/engine/src/render/lumobj.cpp
Expand Up @@ -749,7 +749,7 @@ static void addLuminous(mobj_t *mo)

// Ensure we have up-to-date information about the material.
MaterialSnapshot const &ms =
App_Materials()->prepare(*mat, Rend_SpriteMaterialSpec(), true);
App_Materials()->prepare(*mat, Rend_SpriteMaterialSpec());
if(!ms.hasTexture(MTU_PRIMARY)) return; // An invalid sprite texture.

pl = (pointlight_analysis_t const *) ms.texture(MTU_PRIMARY).generalCase().analysisDataPointer(TA_SPRITE_AUTOLIGHT);
Expand Down Expand Up @@ -964,7 +964,7 @@ static boolean createGlowLightForSurface(Surface *suf, void * /*parameters*/)

// Are we glowing at this moment in time?
MaterialSnapshot const &ms =
App_Materials()->prepare(*suf->material, Rend_MapSurfaceMaterialSpec(), true);
App_Materials()->prepare(*suf->material, Rend_MapSurfaceMaterialSpec());
if(!(ms.glowStrength() > .001f)) return true; // Continue iteration.

averagecolor_analysis_t const *avgColorAmplified = (averagecolor_analysis_t const *) ms.texture(MTU_PRIMARY).generalCase().analysisDataPointer(TA_COLOR_AMPLIFIED);
Expand Down
55 changes: 24 additions & 31 deletions doomsday/engine/src/render/rend_decor.cpp
Expand Up @@ -462,44 +462,37 @@ static uint generateDecorLights(ded_decorlight_t const *def, Surface *suf,
static void updateSurfaceDecorations2(Surface *suf, float offsetS, float offsetT,
vec3d_t v1, vec3d_t v2, Sector *sec, boolean visible)
{
vec3d_t delta;
if(!visible) return;

ded_decor_t const *def = Material_Manifest(suf->material).decorationDef();
if(!def) return;

vec3d_t delta;
V3d_Subtract(delta, v2, v1);

if(visible &&
(delta[VX] * delta[VY] != 0 ||
delta[VX] * delta[VZ] != 0 ||
delta[VY] * delta[VZ] != 0))
if(delta[VX] * delta[VY] != 0 || delta[VX] * delta[VZ] != 0 || delta[VY] * delta[VZ] != 0)
{
// Ensure we've prepared a variant of this material.
App_Materials()->prepare(*suf->material, Rend_MapSurfaceMaterialSpec(),
true /*smooth*/, true /*do-create*/);

ded_decor_t const *def = App_Materials()->decorationDef(*suf->material);
if(def)
int const axis = V3f_MajorAxis(suf->normal);
coord_t width, height;
if(axis == VX || axis == VY)
{
int const axis = V3f_MajorAxis(suf->normal);
coord_t width, height;
if(axis == VX || axis == VY)
{
width = sqrt(delta[VX] * delta[VX] + delta[VY] * delta[VY]);
height = delta[VZ];
}
else
{
width = sqrt(delta[VX] * delta[VX]);
height = delta[VY];
}
width = sqrt(delta[VX] * delta[VX] + delta[VY] * delta[VY]);
height = delta[VZ];
}
else
{
width = sqrt(delta[VX] * delta[VX]);
height = delta[VY];
}

if(width < 0) width = -width;
if(height < 0) height = -height;
if(width < 0) width = -width;
if(height < 0) height = -height;

// Generate a number of lights.
for(uint i = 0; i < DED_DECOR_NUM_LIGHTS; ++i)
{
generateDecorLights(&def->lights[i], suf, suf->material, v1, v2, width, height,
delta, axis, offsetS, offsetT, sec);
}
// Generate a number of lights.
for(uint i = 0; i < DED_DECOR_NUM_LIGHTS; ++i)
{
generateDecorLights(&def->lights[i], suf, suf->material, v1, v2, width, height,
delta, axis, offsetS, offsetT, sec);
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions doomsday/engine/src/resource/material.cpp
Expand Up @@ -452,7 +452,7 @@ boolean Material_HasGlow(material_t *mat)

/// @todo We should not need to prepare to determine this.
MaterialSnapshot const &ms =
App_Materials()->prepare(*mat, Rend_MapSurfaceMaterialSpec(), true);
App_Materials()->prepare(*mat, Rend_MapSurfaceMaterialSpec());

return (ms.glowStrength() > .0001f);
}
Expand Down Expand Up @@ -704,7 +704,7 @@ boolean Material_HasDecorations(material_t *mat)
/// @todo We should not need to prepare to determine this.
if(!mat->prepared)
{
App_Materials()->prepare(*mat, Rend_MapSurfaceMaterialSpec(), false);
App_Materials()->prepare(*mat, Rend_MapSurfaceMaterialSpec());
}
MaterialManifest &manifest = Material_Manifest(mat);
if(manifest.decorationDef()) return true;
Expand Down
27 changes: 23 additions & 4 deletions doomsday/engine/src/resource/materialmanifest.cpp
Expand Up @@ -21,8 +21,10 @@
#include "de_defs.h"
#include <de/memory.h>

#include "uri.hh"
#include "render/rend_main.h"
#include "resource/materials.h"
#include "uri.hh"

#include "resource/materialmanifest.h"

namespace de {
Expand Down Expand Up @@ -164,6 +166,11 @@ ded_detailtexture_t *MaterialManifest::detailTextureDef() const
throw MissingMaterialError("MaterialManifest::detailTextureDef", "Missing required material");
}

if(isDedicated) return 0;

// We must prepare a variant before we can determine which definition is in effect.
materials().prepare(*d->material, Rend_MapSurfaceMaterialSpec());

// We must prepare to determine which definition is in effect.
byte prepared = Material_Prepared(d->material);
if(prepared) return d->defs.detailtextures[prepared - 1];
Expand All @@ -178,7 +185,11 @@ ded_decor_t *MaterialManifest::decorationDef() const
throw MissingMaterialError("MaterialManifest::decorationTextureDef", "Missing required material");
}

// We must prepare to determine which definition is in effect.
if(isDedicated) return 0;

// We must prepare a variant before we can determine which definition is in effect.
materials().prepare(*d->material, Rend_MapSurfaceMaterialSpec());

byte prepared = Material_Prepared(d->material);
if(prepared) return d->defs.decors[prepared - 1];
return 0;
Expand All @@ -192,7 +203,11 @@ ded_ptcgen_t *MaterialManifest::ptcGenDef() const
throw MissingMaterialError("MaterialManifest::ptcGenDef", "Missing required material");
}

// We must prepare to determine which definition is in effect.
if(isDedicated) return 0;

// We must prepare a variant before we can determine which definition is in effect.
materials().prepare(*d->material, Rend_MapSurfaceMaterialSpec());

byte prepared = Material_Prepared(d->material);
if(prepared) return d->defs.ptcgens[prepared - 1];
return 0;
Expand All @@ -206,7 +221,11 @@ ded_reflection_t *MaterialManifest::reflectionDef() const
throw MissingMaterialError("MaterialManifest::reflectionDef", "Missing required material");
}

// We must prepare to determine which definition is in effect.
if(isDedicated) return 0;

// We must prepare a variant before we can determine which definition is in effect.
materials().prepare(*d->material, Rend_MapSurfaceMaterialSpec());

byte prepared = Material_Prepared(d->material);
if(prepared) return d->defs.reflections[prepared - 1];
return 0;
Expand Down
20 changes: 0 additions & 20 deletions doomsday/engine/src/resource/materials.cpp
Expand Up @@ -750,25 +750,6 @@ MaterialSnapshot const &Materials::prepare(MaterialVariant &variant,
return *snapshot;
}

ded_decor_t const *Materials::decorationDef(material_t &mat)
{
if(!Material_Prepared(&mat))
{
prepare(mat, Rend_MapSurfaceMaterialSpec(), false);
}
return Material_Manifest(&mat).decorationDef();
}

ded_ptcgen_t const *Materials::ptcGenDef(material_t &mat)
{
if(isDedicated) return 0;
if(!Material_Prepared(&mat))
{
prepare(mat, Rend_MapSurfaceMaterialSpec(), false);
}
return Material_Manifest(&mat).ptcGenDef();
}

uint Materials::size() const
{
return d->materials.size();
Expand Down Expand Up @@ -884,7 +865,6 @@ static void printVariantInfo(MaterialVariant &variant, int variantIdx)
MaterialVariant *next = variant.translationNext();
float inter = variant.translationPoint();

/// @todo kludge: Should not use App_Materials() here.
QByteArray curPath = Material_Manifest(&cur->generalCase()).composeUri().asText().toUtf8();
QByteArray nextPath = Material_Manifest(&next->generalCase()).composeUri().asText().toUtf8();

Expand Down

0 comments on commit f36e0c6

Please sign in to comment.