Przeglądaj źródła

Added some convenience methods for manual material creation

Ivan Safrin 9 lat temu
rodzic
commit
5ef4358101

+ 2 - 0
include/polycode/core/PolyMaterial.h

@@ -56,9 +56,11 @@ namespace Polycode {
 	class _PolyExport Material : public Resource {
 		public:
 			explicit Material(const String& name);
+			explicit Material(const String& name, std::shared_ptr<Shader> shader);
 			virtual ~Material();
 
 			void addShaderPass(const ShaderPass &pass);
+			void addShaderPassForShader(std::shared_ptr<Shader> shader);
 			void addShaderPassAtIndex(const ShaderPass &pass, unsigned int shaderIndex);	
 			unsigned int getNumShaderPasses() const;
 		

+ 1 - 0
include/polycode/core/PolyShader.h

@@ -87,6 +87,7 @@ namespace Polycode {
 	class _PolyExport ShaderProgram : public Resource {
 		public:
 			explicit ShaderProgram(const String &fileName);
+			explicit ShaderProgram(const String &fileName, int type);
 			virtual ~ShaderProgram();
 			
 			virtual void reloadProgram() {}

+ 17 - 5
src/core/PolyMaterial.cpp

@@ -65,13 +65,16 @@ std::shared_ptr<ShaderBinding> ShaderPass::getShaderBinding() {
 }
 
 
-Material::Material(const String& name) : Resource(Resource::RESOURCE_MATERIAL) {
-	this->name = name;
-	fp16RenderTargets = false;
-	blendingMode = Renderer::BLEND_MODE_NORMAL;
-	screenMaterial = false;
+Material::Material(const String& name) : Resource(Resource::RESOURCE_MATERIAL), name(name), fp16RenderTargets(false), blendingMode(Renderer::BLEND_MODE_NORMAL), screenMaterial(false)
+{
+}
+
+Material::Material(const String& name, std::shared_ptr<Shader> shader) : Resource(Resource::RESOURCE_MATERIAL), name(name), fp16RenderTargets(false), blendingMode(Renderer::BLEND_MODE_NORMAL), screenMaterial(false)
+{
+	addShaderPassForShader(shader);
 }
 
+
 Material::~Material() {
 	
 	Logger::log("deleting material (%s)\n", name.c_str());
@@ -167,6 +170,15 @@ void Material::addShaderPass(const ShaderPass &pass) {
 	pass.shader->addEventListener(this, Event::RESOURCE_RELOAD_EVENT);
 }
 
+void Material::addShaderPassForShader(std::shared_ptr<Shader> shader) {
+	ShaderPass shaderPass;
+	shaderPass.shader = shader;
+	shaderPass.shaderBinding = std::make_shared<ShaderBinding>();
+	shaderPass.shaderBinding->targetShader = shaderPass.shader;
+	shaderPass.blendingMode = Renderer::BLEND_MODE_NORMAL;
+	addShaderPass(shaderPass);
+}
+
 void Material::addShaderPassAtIndex(const ShaderPass &pass, unsigned int shaderIndex) {
 	shaderPasses.insert(shaderPasses.begin()+shaderIndex, pass);
 	pass.shader->addEventListener(this, Event::RESOURCE_RELOAD_EVENT);

+ 9 - 0
src/core/PolyShader.cpp

@@ -30,6 +30,9 @@
 
 using namespace Polycode;
 
+const int ShaderProgram::TYPE_VERT;
+const int ShaderProgram::TYPE_FRAG;
+
 ShaderRenderTarget::ShaderRenderTarget() : PolyBase() {
 	buffer = NULL;
 }
@@ -97,6 +100,12 @@ ShaderProgram::ShaderProgram(const String &fileName) : Resource(Resource::RESOUR
 	setResourceName(fileName);
 }
 
+ShaderProgram::ShaderProgram(const String &fileName, int type) : Resource(Resource::RESOURCE_PROGRAM), type(type) {
+	setResourcePath(fileName);
+	setResourceName(fileName);
+}
+
+
 ShaderProgram::~ShaderProgram() {
 }