Skip to content

Commit

Permalink
UPBGE: Use KX_BlenderMaterial instead of RAS_IPolyMaterial in KX_Blen…
Browse files Browse the repository at this point in the history
…der[Scene]Converter.
  • Loading branch information
panzergame committed Jun 6, 2017
1 parent 59d653c commit a0aa88e
Show file tree
Hide file tree
Showing 10 changed files with 34 additions and 45 deletions.
10 changes: 5 additions & 5 deletions source/gameengine/Converter/BL_BlenderDataConversion.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -457,18 +457,18 @@ static void uvsRgbFromMesh(Material *ma, MFace *mface, MTFace *tface, const RAS_

static RAS_MaterialBucket *material_from_mesh(Material *ma, int lightlayer, KX_Scene *scene, KX_BlenderSceneConverter& converter)
{
RAS_IPolyMaterial* polymat = converter.FindPolyMaterial(ma);
KX_BlenderMaterial* mat = converter.FindMaterial(ma);

if (!polymat) {
polymat = ConvertMaterial(ma, lightlayer, scene);
if (!mat) {
mat = ConvertMaterial(ma, lightlayer, scene);
// this is needed to free up memory afterwards.
converter.RegisterPolyMaterial(polymat, ma);
converter.RegisterMaterial(mat, ma);
}

// see if a bucket was reused or a new one was created
// this way only one KX_BlenderMaterial object has to exist per bucket
bool bucketCreated;
RAS_MaterialBucket* bucket = scene->FindBucket(polymat, bucketCreated);
RAS_MaterialBucket* bucket = scene->FindBucket(mat, bucketCreated);

return bucket;
}
Expand Down
30 changes: 15 additions & 15 deletions source/gameengine/Converter/KX_BlenderConverter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@
#include "KX_GameObject.h"
#include "KX_WorldInfo.h"
#include "RAS_MeshObject.h"
#include "RAS_IPolygonMaterial.h"
#include "RAS_BucketManager.h"
#include "KX_PhysicsEngineEnums.h"
#include "KX_KetsjiEngine.h"
Expand All @@ -48,6 +47,7 @@
#include "KX_BlenderSceneConverter.h"
#include "BL_BlenderDataConversion.h"
#include "BL_ActionActuator.h"
#include "KX_BlenderMaterial.h"

#include "LA_SystemCommandLine.h"

Expand Down Expand Up @@ -98,9 +98,9 @@ void KX_BlenderConverter::SceneSlot::Merge(KX_BlenderConverter::SceneSlot& other
m_interpolators.insert(m_interpolators.begin(),
std::make_move_iterator(other.m_interpolators.begin()),
std::make_move_iterator(other.m_interpolators.end()));
m_polymaterials.insert(m_polymaterials.begin(),
std::make_move_iterator(other.m_polymaterials.begin()),
std::make_move_iterator(other.m_polymaterials.end()));
m_materials.insert(m_materials.begin(),
std::make_move_iterator(other.m_materials.begin()),
std::make_move_iterator(other.m_materials.end()));
m_meshobjects.insert(m_meshobjects.begin(),
std::make_move_iterator(other.m_meshobjects.begin()),
std::make_move_iterator(other.m_meshobjects.end()));
Expand All @@ -109,8 +109,8 @@ void KX_BlenderConverter::SceneSlot::Merge(KX_BlenderConverter::SceneSlot& other

void KX_BlenderConverter::SceneSlot::Merge(const KX_BlenderSceneConverter& converter)
{
for (RAS_IPolyMaterial *polymat : converter.m_polymaterials) {
m_polymaterials.emplace_back(polymat);
for (KX_BlenderMaterial *mat : converter.m_materials) {
m_materials.emplace_back(mat);
}
for (RAS_MeshObject *meshobj : converter.m_meshobjects) {
m_meshobjects.emplace_back(meshobj);
Expand Down Expand Up @@ -673,12 +673,12 @@ bool KX_BlenderConverter::FreeBlendFile(Main *maggie)
KX_Scene *scene = sit->first;
SceneSlot& sceneSlot = sit->second;

for (UniquePtrList<RAS_IPolyMaterial>::iterator it = sceneSlot.m_polymaterials.begin(); it != sceneSlot.m_polymaterials.end(); ) {
RAS_IPolyMaterial *polymat = (*it).get();
Material *bmat = polymat->GetBlenderMaterial();
for (UniquePtrList<KX_BlenderMaterial>::iterator it = sceneSlot.m_materials.begin(); it != sceneSlot.m_materials.end(); ) {
KX_BlenderMaterial *mat = (*it).get();
Material *bmat = mat->GetBlenderMaterial();
if (IS_TAGGED(bmat)) {
scene->GetBucketManager()->RemoveMaterial(polymat);
it = sceneSlot.m_polymaterials.erase(it);
scene->GetBucketManager()->RemoveMaterial(mat);
it = sceneSlot.m_materials.erase(it);
}
else {
++it;
Expand Down Expand Up @@ -734,8 +734,8 @@ void KX_BlenderConverter::MergeScene(KX_Scene *to, KX_Scene *from)
{
SceneSlot& sceneSlotFrom = m_sceneSlots[from];

for (std::unique_ptr<RAS_IPolyMaterial>& polymat : sceneSlotFrom.m_polymaterials) {
polymat->Replace_IScene(to);
for (std::unique_ptr<KX_BlenderMaterial>& mat : sceneSlotFrom.m_materials) {
mat->ReplaceScene(to);
}
for (std::unique_ptr<RAS_MeshObject>& meshobj : sceneSlotFrom.m_meshobjects) {
// Generate mesh to material attribute's layers since the materials are constructed now.
Expand Down Expand Up @@ -848,12 +848,12 @@ void KX_BlenderConverter::PrintStats()
KX_Scene *scene = pair.first;
const SceneSlot& sceneSlot = pair.second;

nummat += sceneSlot.m_polymaterials.size();
nummat += sceneSlot.m_materials.size();
nummesh += sceneSlot.m_meshobjects.size();
numinter += sceneSlot.m_interpolators.size();

CM_Message("\tscene: " << scene->GetName())
CM_Message("\t\t materials: " << sceneSlot.m_polymaterials.size());
CM_Message("\t\t materials: " << sceneSlot.m_materials.size());
CM_Message("\t\t meshes: " << sceneSlot.m_meshobjects.size());
CM_Message("\t\t interpolators: " << sceneSlot.m_interpolators.size());
}
Expand Down
5 changes: 3 additions & 2 deletions source/gameengine/Converter/KX_BlenderConverter.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
#include <vector>

#ifdef _MSC_VER // MSVC doesn't support incomplete type in std::unique_ptr.
# include "RAS_IPolygonMaterial.h"
# include "KX_BlenderMaterial.h"
# include "RAS_MeshObject.h"

# include "KX_BlenderScalarInterpolator.h"
Expand All @@ -47,6 +47,7 @@
class KX_BlenderSceneConverter;
class KX_KetsjiEngine;
class KX_LibLoadStatus;
class KX_BlenderMaterial;
class BL_InterpolatorList;
class SCA_IActuator;
class SCA_IController;
Expand All @@ -71,7 +72,7 @@ class KX_BlenderConverter
class SceneSlot
{
public:
UniquePtrList<RAS_IPolyMaterial> m_polymaterials;
UniquePtrList<KX_BlenderMaterial> m_materials;
UniquePtrList<RAS_MeshObject> m_meshobjects;
UniquePtrList<BL_InterpolatorList> m_interpolators;

Expand Down
8 changes: 4 additions & 4 deletions source/gameengine/Converter/KX_BlenderSceneConverter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,15 +72,15 @@ RAS_MeshObject *KX_BlenderSceneConverter::FindGameMesh(Mesh *for_blendermesh)
return m_map_mesh_to_gamemesh[for_blendermesh];
}

void KX_BlenderSceneConverter::RegisterPolyMaterial(RAS_IPolyMaterial *polymat, Material *mat)
void KX_BlenderSceneConverter::RegisterMaterial(KX_BlenderMaterial *blmat, Material *mat)
{
if (mat) {
m_map_mesh_to_polyaterial[mat] = polymat;
m_map_mesh_to_polyaterial[mat] = blmat;
}
m_polymaterials.push_back(polymat);
m_materials.push_back(blmat);
}

RAS_IPolyMaterial *KX_BlenderSceneConverter::FindPolyMaterial(Material *mat)
KX_BlenderMaterial *KX_BlenderSceneConverter::FindMaterial(Material *mat)
{
return m_map_mesh_to_polyaterial[mat];
}
Expand Down
10 changes: 5 additions & 5 deletions source/gameengine/Converter/KX_BlenderSceneConverter.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
class SCA_IActuator;
class SCA_IController;
class RAS_MeshObject;
class RAS_IPolyMaterial;
class KX_BlenderMaterial;
class KX_BlenderConverter;
class KX_GameObject;
class KX_Scene;
Expand All @@ -59,12 +59,12 @@ class KX_BlenderSceneConverter
friend KX_BlenderConverter;

private:
std::vector<RAS_IPolyMaterial *> m_polymaterials;
std::vector<KX_BlenderMaterial *> m_materials;
std::vector<RAS_MeshObject *> m_meshobjects;

std::map<Object *, KX_GameObject *> m_map_blender_to_gameobject;
std::map<Mesh *, RAS_MeshObject *> m_map_mesh_to_gamemesh;
std::map<Material *, RAS_IPolyMaterial *> m_map_mesh_to_polyaterial;
std::map<Material *, KX_BlenderMaterial *> m_map_mesh_to_polyaterial;
std::map<bActuator *, SCA_IActuator *> m_map_blender_to_gameactuator;
std::map<bController *, SCA_IController *> m_map_blender_to_gamecontroller;

Expand All @@ -82,8 +82,8 @@ class KX_BlenderSceneConverter
void RegisterGameMesh(RAS_MeshObject *gamemesh, Mesh *for_blendermesh);
RAS_MeshObject *FindGameMesh(Mesh *for_blendermesh);

void RegisterPolyMaterial(RAS_IPolyMaterial *polymat, Material *mat);
RAS_IPolyMaterial *FindPolyMaterial(Material *mat);
void RegisterMaterial(KX_BlenderMaterial *blmat, Material *mat);
KX_BlenderMaterial *FindMaterial(Material *mat);

void RegisterGameActuator(SCA_IActuator *act, bActuator *for_actuator);
SCA_IActuator *FindGameActuator(bActuator *for_actuator);
Expand Down
4 changes: 1 addition & 3 deletions source/gameengine/Ketsji/KX_BlenderMaterial.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -412,10 +412,8 @@ const RAS_Rasterizer::AttribLayerList KX_BlenderMaterial::GetAttribLayers(const
return attribLayers;
}

void KX_BlenderMaterial::Replace_IScene(SCA_IScene *val)
void KX_BlenderMaterial::ReplaceScene(KX_Scene *scene)
{
m_scene = static_cast<KX_Scene *>(val);

OnConstruction();
}

Expand Down
2 changes: 1 addition & 1 deletion source/gameengine/Ketsji/KX_BlenderMaterial.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ class KX_BlenderMaterial : public CValue, public RAS_IPolyMaterial

virtual const RAS_Rasterizer::AttribLayerList GetAttribLayers(const RAS_MeshObject::LayersInfo& layersInfo) const;

virtual void Replace_IScene(SCA_IScene *val);
void ReplaceScene(KX_Scene *scene);

// Stuff for cvalue related things.
virtual std::string GetName();
Expand Down
4 changes: 0 additions & 4 deletions source/gameengine/Ketsji/KX_TextMaterial.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,10 +107,6 @@ const RAS_Rasterizer::AttribLayerList KX_TextMaterial::GetAttribLayers(const RAS
return attribLayers;
}

void KX_TextMaterial::Replace_IScene(SCA_IScene *val)
{
}

void KX_TextMaterial::OnConstruction()
{
}
2 changes: 0 additions & 2 deletions source/gameengine/Ketsji/KX_TextMaterial.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,6 @@ class KX_TextMaterial : public RAS_IPolyMaterial

virtual const RAS_Rasterizer::AttribLayerList GetAttribLayers(const RAS_MeshObject::LayersInfo& layersInfo) const;

virtual void Replace_IScene(SCA_IScene *val);

virtual void OnConstruction();
};

Expand Down
4 changes: 0 additions & 4 deletions source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@

struct Material;
struct Scene;
class SCA_IScene;
struct GameSettings;

enum MaterialProps
Expand Down Expand Up @@ -132,9 +131,6 @@ class RAS_IPolyMaterial

virtual const RAS_Rasterizer::AttribLayerList GetAttribLayers(const RAS_MeshObject::LayersInfo& layersInfo) const = 0;

/// Overridden by KX_BlenderMaterial
virtual void Replace_IScene(SCA_IScene *val) = 0;

/**
* \return the equivalent drawing mode for the material settings (equivalent to old TexFace tface->mode).
*/
Expand Down

0 comments on commit a0aa88e

Please sign in to comment.