[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