Explorar el Código

Materials & SceneDrawer

Panagiotis Christopoulos Charitos hace 15 años
padre
commit
6e2d1e12d2

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 3 - 4
build/release/Makefile


+ 3 - 3
build/release/gen.cfg.py

@@ -7,8 +7,8 @@ includePaths.extend(["../../extern/include", "../../extern/include/bullet", "/us
 
 executableName = "anki"
 
-compiler = "g++"
+compiler = "g++-4.5"
 
-compilerFlags = "-DDEBUG_ENABLED=0 -DPLATFORM_LINUX -DMATH_INTEL_SIMD -DNDEBUG -DBOOST_DISABLE_ASSERTS -DREVISION=\\\"`svnversion -c ../..`\\\" -c -pedantic-errors -pedantic -ansi -Wall -Wextra -W -Wno-long-long -pipe -fsingle-precision-constant -msse4 -O3 -mtune=core2 -ffast-math"
+compilerFlags = "-DDEBUG_ENABLED=0 -DPLATFORM_LINUX -DMATH_INTEL_SIMD -DNDEBUG -DBOOST_DISABLE_ASSERTS -DREVISION=\\\"`svnversion -c ../..`\\\" -c -pedantic-errors -pedantic -ansi -Wall -Wextra -W -Wno-long-long -pipe -fsingle-precision-constant -msse4 -O3 -mtune=core2 -ffast-math -flto"
 
-linkerFlags = "-rdynamic -pg -L../../extern/lib-x86-64-linux -Wl,-Bstatic -lBulletSoftBody -lBulletDynamics -lBulletCollision -lLinearMath -lGLEW -lGLU -Wl,-Bdynamic -lGL -ljpeg -lSDL -lpng -lpython2.6 -lboost_system -lboost_python -lboost_filesystem -lboost_thread"
+linkerFlags = "-rdynamic -flto -L../../extern/lib-x86-64-linux -Wl,-Bstatic -lBulletSoftBody -lBulletDynamics -lBulletCollision -lLinearMath -lGLEW -lGLU -Wl,-Bdynamic -lGL -ljpeg -lSDL -lpng -lpython2.6 -lboost_system -lboost_python -lboost_filesystem -lboost_thread"

+ 1 - 2
shaders/GaussianBlurGeneric.glsl

@@ -8,8 +8,7 @@
 
 #pragma anki vertShaderBegins
 
-#pragma anki attribute position 0
-attribute vec2 position;
+layout(location = 0) in vec2 position;
 
 uniform float imgDimension = 0.0; ///< the img width for hspass or the img height for vpass
 

+ 1 - 2
shaders/IsSmo.glsl

@@ -4,8 +4,7 @@
 
 #pragma anki vertShaderBegins
 
-#pragma anki attribute position 0
-attribute vec3 position;
+layout(location = 0) in vec3 position;
 
 uniform mat4 modelViewProjectionMat;
 

+ 1 - 3
src/Core/App.h

@@ -49,9 +49,7 @@ class App
 		Camera* getActiveCam() {return activeCam;}
 		void setActiveCam(Camera* cam) {activeCam = cam;}
 
-		uint getTimerTick() const {return timerTick;}
-		uint& getTimerTick() {return timerTick;}
-		void setTimerTick(uint t) {timerTick = t;}
+		GETTER_SETTER(uint, timerTick, getTimerTick, setTimerTick)
 		/// @}
 
 		/// @return Returns the number of milliseconds since SDL library initialization

+ 11 - 1
src/Main.cpp

@@ -366,7 +366,17 @@ void mainLoop()
 
 		AppSingleton::getInstance().swapBuffers();
 
-		uint timeToSpendForRsrcPostProcess = AppSingleton::getInstance().getTimerTick() - timer.getElapsedTime();
+		uint a = timer.getElapsedTime();
+		uint b = AppSingleton::getInstance().getTimerTick();
+		uint timeToSpendForRsrcPostProcess;
+		if(a < b)
+		{
+			timeToSpendForRsrcPostProcess = b - a;
+		}
+		else
+		{
+			timeToSpendForRsrcPostProcess = 1;
+		}
 		ResourceManagerSingleton::getInstance().postProcessFinishedLoadingRequests(timeToSpendForRsrcPostProcess);
 
 		if(1)

+ 3 - 3
src/Misc/skybox.cpp

@@ -7,7 +7,7 @@
 #include "MainRenderer.h"
 
 
-static float coords [][4][3] =
+/*static float coords [][4][3] =
 {
 	// front
 	{ { 1,  1, -1}, {-1,  1, -1}, {-1, -1, -1}, { 1, -1, -1} },
@@ -21,7 +21,7 @@ static float coords [][4][3] =
 	{ { 1,  1,  1}, {-1,  1,  1}, {-1,  1, -1}, { 1,  1, -1} },
 	//
 	{ { 1, -1, -1}, {-1, -1, -1}, {-1, -1,  1}, { 1, -1,  1} }
-};
+};*/
 
 
 
@@ -51,7 +51,7 @@ bool Skybox::load(const char* filenames[6])
 render                                                                                                                 =
 =======================================================================================================================================
 */
-void Skybox::Render(const Mat3& rotation)
+void Skybox::Render(const Mat3& /*rotation*/)
 {
 	/*glDisable(GL_DEPTH_TEST);
 	glDisable(GL_BLEND);

+ 81 - 8
src/Renderer/Drawers/SceneDrawer.cpp

@@ -8,6 +8,71 @@
 #include "Scene.h"
 
 
+//======================================================================================================================
+// Constructor                                                                                                         =
+//======================================================================================================================
+SceneDrawer::UsrDefVarVisitor::UsrDefVarVisitor(const MtlUserDefinedVar& udv_, const Renderer& r_, uint& texUnit_):
+	udv(udv_),
+	r(r_),
+	texUnit(texUnit_)
+{}
+
+
+//======================================================================================================================
+// Visitor functors                                                                                                    =
+//======================================================================================================================
+
+void SceneDrawer::UsrDefVarVisitor::operator()(float x) const
+{
+	udv.getUniVar().setFloat(x);
+}
+
+void SceneDrawer::UsrDefVarVisitor::operator()(const Vec2& x) const
+{
+	udv.getUniVar().setVec2(&x);
+}
+
+void SceneDrawer::UsrDefVarVisitor::operator()(const Vec3& x) const
+{
+	udv.getUniVar().setVec3(&x);
+}
+
+void SceneDrawer::UsrDefVarVisitor::operator()(const Vec4& x) const
+{
+	udv.getUniVar().setVec4(&x);
+}
+
+void SceneDrawer::UsrDefVarVisitor::operator()(const RsrcPtr<Texture>& x) const
+{
+	x->setRepeat(true);
+	udv.getUniVar().setTexture(*x, texUnit);
+	++texUnit;
+}
+
+void SceneDrawer::UsrDefVarVisitor::operator()(MtlUserDefinedVar::Fai x) const
+{
+	switch(x)
+	{
+		case MtlUserDefinedVar::MS_DEPTH_FAI:
+			udv.getUniVar().setTexture(r.getMs().getDepthFai(), texUnit);
+			break;
+		case MtlUserDefinedVar::IS_FAI:
+			udv.getUniVar().setTexture(r.getIs().getFai(), texUnit);
+			break;
+		case MtlUserDefinedVar::PPS_PRE_PASS_FAI:
+			udv.getUniVar().setTexture(r.getPps().getPrePassFai(), texUnit);
+			break;
+		case MtlUserDefinedVar::PPS_POST_PASS_FAI:
+			udv.getUniVar().setTexture(r.getPps().getPostPassFai(), texUnit);
+			break;
+		default:
+			ASSERT(0);
+	}
+	++texUnit;
+}
+
+
+
 //======================================================================================================================
 // setupShaderProg                                                                                                     =
 //======================================================================================================================
@@ -167,7 +232,12 @@ void SceneDrawer::setupShaderProg(const Material& mtl, const Transform& nodeWorl
 	//
 	// set user defined vars
 	//
-	boost::ptr_vector<MtlUserDefinedVar>::const_iterator it = mtl.getUserDefinedVars().begin();
+	BOOST_FOREACH(const MtlUserDefinedVar& udv, mtl.getUserDefinedVars())
+	{
+		boost::apply_visitor(UsrDefVarVisitor(udv, r, textureUnit), udv.getDataVariant());
+	}
+
+	/*boost::ptr_vector<MtlUserDefinedVar>::const_iterator it = mtl.getUserDefinedVars().begin();
 	for(; it !=  mtl.getUserDefinedVars().end(); it++)
 	{
 		const MtlUserDefinedVar& udv = *it;
@@ -176,12 +246,15 @@ void SceneDrawer::setupShaderProg(const Material& mtl, const Transform& nodeWorl
 		{
 			// texture or FAI
 			case GL_SAMPLER_2D:
-				if(udv.getTexture() != NULL)
+				RsrcPtr<Texture>* tex;
+				MtlUserDefinedVar::Fai* fai;
+
+				if(fai = udv.get<RsrcPtr<Texture> >())
 				{
 					udv.getTexture()->setRepeat(true);
 					udv.getUniVar().setTexture(*udv.getTexture(), textureUnit);
 				}
-				else
+				else if(fai = udv.get< >())
 				{
 					switch(udv.getFai())
 					{
@@ -205,22 +278,22 @@ void SceneDrawer::setupShaderProg(const Material& mtl, const Transform& nodeWorl
 				break;
 			// float
 			case GL_FLOAT:
-				udv.getUniVar().setFloat(udv.getFloat());
+				udv.getUniVar().setFloat(udv.get<float>());
 				break;
 			// vec2
 			case GL_FLOAT_VEC2:
-				udv.getUniVar().setVec2(&udv.getVec2());
+				udv.getUniVar().setVec2(&udv.get<Vec2>());
 				break;
 			// vec3
 			case GL_FLOAT_VEC3:
-				udv.getUniVar().setVec3(&udv.getVec3());
+				udv.getUniVar().setVec3(&udv.get<Vec3>());
 				break;
 			// vec4
 			case GL_FLOAT_VEC4:
-				udv.getUniVar().setVec4(&udv.getVec4());
+				udv.getUniVar().setVec4(&udv.get<Vec4>());
 				break;
 		}
-	}
+	}*/
 
 	ON_GL_FAIL_THROW_EXCEPTION();
 }

+ 20 - 0
src/Renderer/Drawers/SceneDrawer.h

@@ -1,7 +1,9 @@
 #ifndef SCENE_DRAWER_H
 #define SCENE_DRAWER_H
 
+#include <boost/variant.hpp>
 #include "Math.h"
+#include "MtlUserDefinedVar.h"
 
 
 class RenderableNode;
@@ -26,6 +28,24 @@ class SceneDrawer
 		void renderRenderableNode(const RenderableNode& renderable, const Camera& cam, RenderingPassType rtype) const;
 
 	private:
+		/// @todo
+		class UsrDefVarVisitor: public boost::static_visitor<void>
+		{
+			public:
+				const MtlUserDefinedVar& udv;
+				const Renderer& r;
+				mutable uint& texUnit;
+
+				UsrDefVarVisitor(const MtlUserDefinedVar& udv, const Renderer& r, uint& texUnit);
+
+				void operator()(float x) const;
+				void operator()(const Vec2& x) const;
+				void operator()(const Vec3& x) const;
+				void operator()(const Vec4& x) const;
+				void operator()(const RsrcPtr<Texture>& x) const;
+				void operator()(MtlUserDefinedVar::Fai x) const;
+		};
+
 		const Renderer& r; ///< Keep it here cause the class wants a few stuff from it
 
 		/// This function:

+ 5 - 5
src/Resources/Extension.cpp

@@ -6,9 +6,9 @@
 //======================================================================================================================
 // load                                                                                                                =
 //======================================================================================================================
-void Extension::load(const char* filename)
+void Extension::load(const char* /*filename*/)
 {
-	// load libary
+	/*// load libary
 	libHandle = dlopen(filename, RTLD_LAZY);
 	if(libHandle == NULL)
 	{
@@ -20,7 +20,7 @@ void Extension::load(const char* filename)
 	if(foobarPtr == NULL)
 	{
 		throw EXCEPTION("File \"" + filename + "\": \"FooBar\" entry symbol not found: " + dlerror());
-	}
+	}*/
 }
 
 
@@ -29,8 +29,8 @@ void Extension::load(const char* filename)
 //======================================================================================================================
 Extension::~Extension()
 {
-	//DEBUG_ERR(libHandle==NULL || foobarPtr==NULL);
+	/*//DEBUG_ERR(libHandle==NULL || foobarPtr==NULL);
 	dlclose(libHandle);
 	libHandle = NULL;
-	foobarPtr = NULL;
+	foobarPtr = NULL;*/
 }

+ 2 - 1
src/Resources/Material/MtlUserDefinedVar.cpp

@@ -9,5 +9,6 @@ MtlUserDefinedVar::MtlUserDefinedVar(const SProgUniVar& sProgVar, const char* te
 	sProgVar(sProgVar)
 {
 	ASSERT(sProgVar.getGlDataType() == GL_SAMPLER_2D);
-	data.texture.loadRsrc(texFilename);
+	data = RsrcPtr<Texture>();
+	boost::get<RsrcPtr<Texture> >(data).loadRsrc(texFilename);
 }

+ 11 - 22
src/Resources/Material/MtlUserDefinedVar.h

@@ -37,26 +37,15 @@ class MtlUserDefinedVar
 		/// @name Accessors
 		/// @{
 		const SProgUniVar& getUniVar() const {return sProgVar;}
-		const Texture* getTexture() const {return data.texture.get();}
-		GETTER_R(float, data.float_, getFloat)
-		GETTER_R(Vec2, data.vec2, getVec2)
-		GETTER_R(Vec3, data.vec3, getVec3)
-		GETTER_R(Vec4, data.vec4, getVec4)
-		GETTER_R(Fai, data.fai, getFai)
+
+		const DataVariant& getDataVariant() const {return data;}
+
+		template<typename Type>
+		const Type& get() const {return boost::get<Type>(data);}
 		/// @}
 
 	private:
-		/// @note If you change this change the runtime as well
-		struct
-		{
-			RsrcPtr<Texture> texture;
-			float float_;
-			Vec2 vec2;
-			Vec3 vec3;
-			Vec4 vec4;
-			Fai fai;
-		} data;
-
+		DataVariant data;
 		const SProgUniVar& sProgVar; ///< Know the other resource
 };
 
@@ -65,7 +54,7 @@ inline MtlUserDefinedVar::MtlUserDefinedVar(const SProgUniVar& sProgVar, Fai fai
 	sProgVar(sProgVar)
 {
 	ASSERT(sProgVar.getGlDataType() == GL_SAMPLER_2D);
-	data.fai = fai_;
+	data = fai_;
 }
 
 
@@ -73,7 +62,7 @@ inline MtlUserDefinedVar::MtlUserDefinedVar(const SProgUniVar& sProgVar, float f
 	sProgVar(sProgVar)
 {
 	ASSERT(sProgVar.getGlDataType() == GL_FLOAT);
-	data.float_ = f;
+	data = f;
 }
 
 
@@ -81,7 +70,7 @@ inline MtlUserDefinedVar::MtlUserDefinedVar(const SProgUniVar& sProgVar, const V
 	sProgVar(sProgVar)
 {
 	ASSERT(sProgVar.getGlDataType() == GL_FLOAT_VEC2);
-	data.vec2 = v;
+	data = v;
 }
 
 
@@ -89,7 +78,7 @@ inline MtlUserDefinedVar::MtlUserDefinedVar(const SProgUniVar& sProgVar, const V
 	sProgVar(sProgVar)
 {
 	ASSERT(sProgVar.getGlDataType() == GL_FLOAT_VEC3);
-	data.vec3 = v;
+	data = v;
 }
 
 
@@ -97,7 +86,7 @@ inline MtlUserDefinedVar::MtlUserDefinedVar(const SProgUniVar& sProgVar, const V
 	sProgVar(sProgVar)
 {
 	ASSERT(sProgVar.getGlDataType() == GL_FLOAT_VEC4);
-	data.vec4 = v;
+	data = v;
 }
 
 

+ 2 - 0
src/Resources/ShaderProg/ShaderPrePreprocessor.cpp

@@ -282,6 +282,8 @@ void ShaderPrePreprocessor::parseFileForPragmas(const std::string& filename, int
 					else if(token->getCode() == Scanner::TC_IDENTIFIER &&
 					        strcmp(token->getValue().getString(), "attribute") == 0)
 					{
+						throw EXCEPTION("Deprecated feature");
+
 						token = &scanner.getNextToken();
 						if(token->getCode() == Scanner::TC_IDENTIFIER)
 						{

+ 13 - 12
src/Resources/ShaderProg/ShaderPrePreprocessor.h

@@ -25,9 +25,9 @@
 /// @note The order of the *ShaderBegins is important
 class ShaderPrePreprocessor
 {
-	//====================================================================================================================
-	// Nested                                                                                                            =
-	//====================================================================================================================
+	//==================================================================================================================
+	// Nested                                                                                                          =
+	//==================================================================================================================
 	protected:
 		/// The pragma base class
 		struct Pragma
@@ -48,7 +48,8 @@ class ShaderPrePreprocessor
 			std::string name;
 			uint customLoc;
 
-			ShaderVarPragma(const std::string& definedInFile_, int definedInLine_, const std::string& name_, uint customLoc_);
+			ShaderVarPragma(const std::string& definedInFile_, int definedInLine_, const std::string& name_,
+			                uint customLoc_);
 		};
 
 		struct TrffbVaryingPragma: Pragma
@@ -86,9 +87,9 @@ class ShaderPrePreprocessor
 		};
 		
 
-	//====================================================================================================================
-	// Public                                                                                                            =
-	//====================================================================================================================
+	//==================================================================================================================
+	// Public                                                                                                          =
+	//==================================================================================================================
 	public:
 		/// It loads a file and parses it
 		/// @param[in] filename The file to load
@@ -100,9 +101,9 @@ class ShaderPrePreprocessor
 		
 		GETTER_R(Output, output, getOutput)
 
-	//====================================================================================================================
-	// Protected                                                                                                         =
-	//====================================================================================================================
+	//==================================================================================================================
+	// Protected                                                                                                       =
+	//==================================================================================================================
 	protected:
 		Output output; ///< The most important variable
 		Vec<std::string> sourceLines;  ///< The parseFileForPragmas fills this
@@ -117,8 +118,8 @@ class ShaderPrePreprocessor
 
 		/// A recursive function that parses a file for pragmas and updates the output
 		/// @param filename The file to parse
-		/// @param depth The #line in GLSL does not support filename so an depth it being used. It also tracks the includance
-		/// depth
+		/// @param depth The #line in GLSL does not support filename so an depth it being used. It also tracks the
+		/// includance depth
 		/// @exception Ecxeption
 		void parseFileForPragmas(const std::string& filename, int depth = 0);
 

+ 1 - 1
src/Scene/VisibilityTester.h

@@ -39,7 +39,7 @@ class VisibilityTester
 		struct CmpDistanceFromOrigin
 		{
 			Vec3 o; ///< The camera origin
-			CmpDistanceFromOrigin(Vec3 o_): o(o_) {}
+			CmpDistanceFromOrigin(const Vec3& o_): o(o_) {}
 			bool operator()(const SceneNode* a, const SceneNode* b) const;
 		};
 

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio