Jelajahi Sumber

- Bug fixing

AnKi after long long time shows something in the window. New materials are over, for now
Panagiotis Christopoulos Charitos 14 tahun lalu
induk
melakukan
be02fc2ab8

+ 13 - 0
anki/resource/Material.cpp

@@ -434,6 +434,16 @@ void Material::populateVariables(const boost::property_tree::ptree& pt)
 					v = new MaterialVariable(name.c_str(), eSProgs,
 						Vec4(), false);
 					break;
+				// mat3
+				case GL_FLOAT_MAT3:
+					v = new MaterialVariable(name.c_str(), eSProgs,
+						Mat3(), false);
+					break;
+				// mat4
+				case GL_FLOAT_MAT4:
+					v = new MaterialVariable(name.c_str(), eSProgs,
+						Mat4(), false);
+					break;
 				// default is error
 				default:
 					ANKI_ASSERT(0);
@@ -478,6 +488,9 @@ void Material::populateVariables(const boost::property_tree::ptree& pt)
 					ANKI_ASSERT(0);
 			}
 		}
+
+		vars.push_back(v);
+		nameToVar[v->getName().c_str()] = v;
 	}
 }
 

+ 7 - 4
anki/resource/Model.cpp

@@ -55,8 +55,11 @@ Vao* ModelPatch::createVao(const Material& mtl,
 	const PassLevelKey& key)
 {
 	Vao* vao = new Vao;
+	vao->create();
 
-	if(mtl.getShaderProgram(key).uniformVariableExists("position"))
+	std::cout << mtl.getShaderProgram(key) << std::endl;
+
+	if(mtl.getShaderProgram(key).attributeVariableExists("position"))
 	{
 		ANKI_ASSERT(vbos[Mesh::VBO_VERT_POSITIONS] != NULL);
 
@@ -64,7 +67,7 @@ Vao* ModelPatch::createVao(const Material& mtl,
 			0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
 	}
 
-	if(mtl.getShaderProgram(key).uniformVariableExists("normal"))
+	if(mtl.getShaderProgram(key).attributeVariableExists("normal"))
 	{
 		ANKI_ASSERT(vbos[Mesh::VBO_VERT_NORMALS] != NULL);
 
@@ -72,7 +75,7 @@ Vao* ModelPatch::createVao(const Material& mtl,
 			1, 3, GL_FLOAT, GL_FALSE, 0, NULL);
 	}
 
-	if(mtl.getShaderProgram(key).uniformVariableExists("tangent"))
+	if(mtl.getShaderProgram(key).attributeVariableExists("tangent"))
 	{
 		ANKI_ASSERT(vbos[Mesh::VBO_VERT_TANGENTS] != NULL);
 
@@ -80,7 +83,7 @@ Vao* ModelPatch::createVao(const Material& mtl,
 			2, 4, GL_FLOAT, GL_FALSE, 0, NULL);
 	}
 
-	if(mtl.getShaderProgram(key).uniformVariableExists("texCoords"))
+	if(mtl.getShaderProgram(key).attributeVariableExists("texCoords"))
 	{
 		vao->attachArrayBufferVbo(*vbos[Mesh::VBO_TEX_COORDS],
 			3, 2, GL_FLOAT, GL_FALSE, 0, NULL);

+ 4 - 2
anki/resource/ShaderProgram.cpp

@@ -455,18 +455,20 @@ std::string ShaderProgram::createSrcCodeToCache(const char* sProgFPathName,
 //==============================================================================
 std::ostream& operator<<(std::ostream& s, const ShaderProgram& x)
 {
+	s << "ShaderProgram (" << x.rsrcFilename << ")\n";
 	s << "Variables:\n";
 	BOOST_FOREACH(const ShaderProgramVariable& var, x.getVariables())
 	{
 		s << var.getName() << " " << var.getLocation() << " ";
 		if(var.getType() == ShaderProgramVariable::T_ATTRIBUTE)
 		{
-			s << "attribute";
+			s << "[A]";
 		}
 		else
 		{
-			s << "uniform";
+			s << "[U]";
 		}
+		s << '\n';
 	}
 	return s;
 }

+ 1 - 1
anki/resource/ShaderProgram.h

@@ -33,7 +33,7 @@ public:
 	ShaderProgramVariable(GLint loc_, const char* name_,
 		GLenum glDataType_, Type type_, const ShaderProgram& fatherSProg_)
 		: loc(loc_), name(name_), glDataType(glDataType_), type(type_),
-			fatherSProg(fatherSProg)
+			fatherSProg(fatherSProg_)
 	{}
 
 	virtual ~ShaderProgramVariable()

+ 5 - 3
anki/util/Assert.h

@@ -8,14 +8,16 @@
 #	define ANKI_ASSERT(x) ((void)0)
 #else
 
+namespace anki {
+
 /// Its separate so we will not include iostream
 extern void akassert(bool expr, const char* exprTxt, const char* file,
 	int line, const char* func);
 
-#	define ANKI_ASSERT(x) \
-	akassert((x), #x, __FILE__, __LINE__, __func__)
+} // end namespace
 
-#endif
+#	define ANKI_ASSERT(x) akassert((x), #x, __FILE__, __LINE__, __func__)
 
+#endif
 
 #endif

+ 3 - 3
shaders/MaterialVertex.glsl

@@ -5,7 +5,7 @@
 /// @{
 layout(location = 0) in vec3 position;
 layout(location = 3) in vec2 texCoords;
-#if defined(COLOR_PASS)
+#if defined(PASS_COLOR)
 layout(location = 1) in vec3 normal;
 layout(location = 2) in vec4 tangent;
 #endif
@@ -21,7 +21,7 @@ uniform mat4 modelViewMat;
 /// @name Varyings
 /// @{
 out vec2 vTexCoords;
-#if defined(COLOR_PASS)
+#if defined(PASS_COLOR)
 out vec3 vNormal;
 out vec3 vTangent;
 out float vTangentW;
@@ -33,7 +33,7 @@ out vec3 vVertPosViewSpace; ///< For env mapping. AKA view vector
 /// Calculate the position and the varyings
 void doVertex()
 {
-#if defined(COLOR_PASS)
+#if defined(PASS_COLOR)
 	vNormal = normalMat * normal;
 	vTangent = normalMat * vec3(tangent);
 	vTangentW = tangent.w;