瀏覽代碼

Restore custom material in Drawable2D.

aster2013 11 年之前
父節點
當前提交
3f3fb2a7dc
共有 2 個文件被更改,包括 24 次插入3 次删除
  1. 16 1
      Source/Engine/Urho2D/Drawable2D.cpp
  2. 8 2
      Source/Engine/Urho2D/Drawable2D.h

+ 16 - 1
Source/Engine/Urho2D/Drawable2D.cpp

@@ -104,11 +104,26 @@ void Drawable2D::SetBlendMode(BlendMode blendMode)
     MarkNetworkUpdate();
     MarkNetworkUpdate();
 }
 }
 
 
+void Drawable2D::SetCustomMaterial(Material* customMaterial)
+{
+    if (customMaterial == customMaterial_)
+        return;
+
+    customMaterial_ = customMaterial;
+    material_ = 0;
+    MarkNetworkUpdate();
+}
+
 Texture2D* Drawable2D::GetTexture() const
 Texture2D* Drawable2D::GetTexture() const
 {
 {
     return texture_;
     return texture_;
 }
 }
 
 
+Material* Drawable2D::GetCustomMaterial() const
+{
+    return customMaterial_;
+}
+
 void Drawable2D::SetMaterial(Material* material)
 void Drawable2D::SetMaterial(Material* material)
 {
 {
     material_ = material;
     material_ = material;
@@ -116,7 +131,7 @@ void Drawable2D::SetMaterial(Material* material)
 
 
 Material* Drawable2D::GetMaterial() const
 Material* Drawable2D::GetMaterial() const
 {
 {
-    return material_;
+    return customMaterial_ ? customMaterial_ : material_;
 }
 }
 
 
 const Vector<Vertex2D>& Drawable2D::GetVertices()
 const Vector<Vertex2D>& Drawable2D::GetVertices()

+ 8 - 2
Source/Engine/Urho2D/Drawable2D.h

@@ -69,6 +69,8 @@ public:
     void SetTexture(Texture2D* texture);
     void SetTexture(Texture2D* texture);
     /// Set blend mode.
     /// Set blend mode.
     void SetBlendMode(BlendMode mode);
     void SetBlendMode(BlendMode mode);
+    /// Set custom material. 
+    void SetCustomMaterial(Material* customMaterial);
     
     
     /// Return layer.
     /// Return layer.
     int GetLayer() const { return layer_; }
     int GetLayer() const { return layer_; }
@@ -78,10 +80,12 @@ public:
     Texture2D* GetTexture() const;
     Texture2D* GetTexture() const;
     /// Return blend mode.
     /// Return blend mode.
     BlendMode GetBlendMode() const { return blendMode_; }
     BlendMode GetBlendMode() const { return blendMode_; }
+    /// Return custom material.
+    Material* GetCustomMaterial() const;
 
 
     /// Set material (called by Renderer2D).
     /// Set material (called by Renderer2D).
     void SetMaterial(Material* material);
     void SetMaterial(Material* material);
-    /// Return material (called by Renderer2D).
+    /// Return custom material or material (called by Renderer2D).
     Material* GetMaterial() const;
     Material* GetMaterial() const;
     /// Set visibility (called by Renderer2D).
     /// Set visibility (called by Renderer2D).
     void SetVisibility(bool visibility) { visibility_ = visibility; }
     void SetVisibility(bool visibility) { visibility_ = visibility; }
@@ -97,7 +101,7 @@ protected:
     virtual void OnMarkedDirty(Node* node);
     virtual void OnMarkedDirty(Node* node);
     /// Update vertices.
     /// Update vertices.
     virtual void UpdateVertices() = 0;
     virtual void UpdateVertices() = 0;
-    
+
     /// Layer.
     /// Layer.
     int layer_;
     int layer_;
     /// Order in layer.
     /// Order in layer.
@@ -106,6 +110,8 @@ protected:
     SharedPtr<Texture2D> texture_;
     SharedPtr<Texture2D> texture_;
     /// Blend mode.
     /// Blend mode.
     BlendMode blendMode_;
     BlendMode blendMode_;
+    /// Custom material.
+    SharedPtr<Material> customMaterial_;
 
 
     /// Vertices.
     /// Vertices.
     Vector<Vertex2D> vertices_;
     Vector<Vertex2D> vertices_;