[Bf-blender-cvs] [2da9a39] master: BGE : Fix black material on meshes without materials in blenderplayer.
Porteries Tristan
noreply at git.blender.org
Sun May 24 11:49:03 CEST 2015
Commit: 2da9a39418379ffd286a195188bcfba78eb4bf38
Author: Porteries Tristan
Date: Sat May 23 12:12:43 2015 +0200
Branches: master
https://developer.blender.org/rB2da9a39418379ffd286a195188bcfba78eb4bf38
BGE : Fix black material on meshes without materials in blenderplayer.
Blenderplayer forgot to initialize the default material (defmaterail) with function init_def_material().
This reverts also the plumber commit 2fa4a48bcef05671890fafc3fe50a8fa619f0259.
Reviewers: campbellbarton
===================================================================
M source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
M source/gameengine/Ketsji/KX_BlenderMaterial.cpp
===================================================================
diff --git a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
index 9e5b146..faa29e1 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
+++ b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
@@ -74,6 +74,7 @@ extern "C"
#include "BKE_report.h"
#include "BKE_library.h"
#include "BKE_modifier.h"
+#include "BKE_material.h"
#include "BKE_text.h"
#include "BKE_sound.h"
@@ -519,6 +520,9 @@ int main(int argc, char** argv)
BKE_sound_init_once();
+ // Initialize a default material for meshes without materials.
+ init_def_material();
+
BKE_library_callback_free_window_manager_set(wm_free);
/* if running blenderplayer the last argument can't be parsed since it has to be the filename. else it is bundled */
diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
index 8e534ee..7ec2673 100644
--- a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
+++ b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
@@ -96,20 +96,18 @@ void KX_BlenderMaterial::Initialize(
);
Material *ma = data->material;
- if (ma) {
- // Save material data to restore on exit
- mSavedData.r = ma->r;
- mSavedData.g = ma->g;
- mSavedData.b = ma->b;
- mSavedData.a = ma->alpha;
- mSavedData.specr = ma->specr;
- mSavedData.specg = ma->specg;
- mSavedData.specb = ma->specb;
- mSavedData.spec = ma->spec;
- mSavedData.ref = ma->ref;
- mSavedData.hardness = ma->har;
- mSavedData.emit = ma->emit;
- }
+ // Save material data to restore on exit
+ mSavedData.r = ma->r;
+ mSavedData.g = ma->g;
+ mSavedData.b = ma->b;
+ mSavedData.a = ma->alpha;
+ mSavedData.specr = ma->specr;
+ mSavedData.specg = ma->specg;
+ mSavedData.specb = ma->specb;
+ mSavedData.spec = ma->spec;
+ mSavedData.ref = ma->ref;
+ mSavedData.hardness = ma->har;
+ mSavedData.emit = ma->emit;
mMaterial = data;
mShader = 0;
@@ -142,21 +140,18 @@ void KX_BlenderMaterial::Initialize(
KX_BlenderMaterial::~KX_BlenderMaterial()
{
Material *ma = mMaterial->material;
-
- if (ma) {
- // Restore Blender material data
- ma->r = mSavedData.r;
- ma->g = mSavedData.g;
- ma->b = mSavedData.b;
- ma->alpha = mSavedData.a;
- ma->specr = mSavedData.specr;
- ma->specg = mSavedData.specg;
- ma->specb = mSavedData.specb;
- ma->spec = mSavedData.spec;
- ma->ref = mSavedData.ref;
- ma->har = mSavedData.hardness;
- ma->emit = mSavedData.emit;
- }
+ // Restore Blender material data
+ ma->r = mSavedData.r;
+ ma->g = mSavedData.g;
+ ma->b = mSavedData.b;
+ ma->alpha = mSavedData.a;
+ ma->specr = mSavedData.specr;
+ ma->specg = mSavedData.specg;
+ ma->specb = mSavedData.specb;
+ ma->spec = mSavedData.spec;
+ ma->ref = mSavedData.ref;
+ ma->har = mSavedData.hardness;
+ ma->emit = mSavedData.emit;
// cleanup work
if (mConstructed)
@@ -828,34 +823,18 @@ void KX_BlenderMaterial::UpdateIPO(
{
// only works one deep now
- // Multitexture Input
- mMaterial->speccolor[0] = (float)(specrgb)[0];
- mMaterial->speccolor[1] = (float)(specrgb)[1];
- mMaterial->speccolor[2] = (float)(specrgb)[2];
- mMaterial->matcolor[0] = (float)(rgba[0]);
- mMaterial->matcolor[1] = (float)(rgba[1]);
- mMaterial->matcolor[2] = (float)(rgba[2]);
- mMaterial->alpha = (float)(rgba[3]);
- mMaterial->hard = (float)(hard);
- mMaterial->emit = (float)(emit);
- mMaterial->spec_f = (float)(spec);
- mMaterial->ref = (float)(ref);
-
- Material *ma = mMaterial->material;
- if (ma) {
- // GLSL Input
- ma->specr = (float)(specrgb)[0];
- ma->specg = (float)(specrgb)[1];
- ma->specb = (float)(specrgb)[2];
- ma->r = (float)(rgba[0]);
- ma->g = (float)(rgba[1]);
- ma->b = (float)(rgba[2]);
- ma->alpha = (float)(rgba[3]);
- ma->har = (float)(hard);
- ma->emit = (float)(emit);
- ma->spec = (float)(spec);
- ma->ref = (float)(ref);
- }
+ // GLSL Multitexture Input
+ mMaterial->material->specr = mMaterial->speccolor[0] = (float)(specrgb)[0];
+ mMaterial->material->specg = mMaterial->speccolor[1] = (float)(specrgb)[1];
+ mMaterial->material->specb = mMaterial->speccolor[2] = (float)(specrgb)[2];
+ mMaterial->material->r = mMaterial->matcolor[0] = (float)(rgba[0]);
+ mMaterial->material->g = mMaterial->matcolor[1] = (float)(rgba[1]);
+ mMaterial->material->b = mMaterial->matcolor[2] = (float)(rgba[2]);
+ mMaterial->material->alpha = mMaterial->alpha = (float)(rgba[3]);
+ mMaterial->material->har = mMaterial->hard = (float)(hard);
+ mMaterial->material->emit = mMaterial->emit = (float)(emit);
+ mMaterial->material->spec = mMaterial->spec_f = (float)(spec);
+ mMaterial->material->ref = mMaterial->ref = (float)(ref);
}
void KX_BlenderMaterial::Replace_IScene(SCA_IScene *val)
More information about the Bf-blender-cvs
mailing list