@@ -27,6 +27,28 @@ namespace vsg
2727 class VSG_DECLSPEC ArrayState : public Inherit<ConstVisitor, ArrayState>
2828 {
2929 public:
30+ template <class ParentClass , class Subclass >
31+ class InheritExtras : public ParentClass
32+ {
33+ public:
34+ using ParentClass::ParentClass;
35+
36+ explicit InheritExtras (const ArrayState& rhs, const CopyOp& copyop = {}) :
37+ ParentClass(rhs, copyop)
38+ {
39+ }
40+
41+ ref_ptr<ArrayState> cloneArrayState () override
42+ {
43+ return Subclass::create (static_cast <Subclass&>(*this ));
44+ }
45+
46+ ref_ptr<ArrayState> cloneArrayState (ref_ptr<ArrayState> arrayState) override
47+ {
48+ return Subclass::create (static_cast <Subclass&>(*arrayState));
49+ }
50+ };
51+
3052 ArrayState () = default ;
3153 ArrayState (const ArrayState& rhs, const CopyOp& copyop = {});
3254
@@ -106,9 +128,6 @@ namespace vsg
106128 NullArrayState ();
107129 explicit NullArrayState (const ArrayState& as);
108130
109- ref_ptr<ArrayState> cloneArrayState () override ;
110- ref_ptr<ArrayState> cloneArrayState (ref_ptr<ArrayState> arrayState) override ;
111-
112131 using ArrayState::apply;
113132
114133 void apply (const vec3Array&) override ;
@@ -124,9 +143,6 @@ namespace vsg
124143 TranslationArrayState (const TranslationArrayState& rhs);
125144 explicit TranslationArrayState (const ArrayState& rhs);
126145
127- ref_ptr<ArrayState> cloneArrayState () override ;
128- ref_ptr<ArrayState> cloneArrayState (ref_ptr<ArrayState> arrayState) override ;
129-
130146 uint32_t translation_attribute_location = 7 ;
131147 AttributeDetails translationAttribute;
132148
@@ -145,9 +161,6 @@ namespace vsg
145161 TranslationRotationScaleArrayState (const TranslationRotationScaleArrayState& rhs);
146162 explicit TranslationRotationScaleArrayState (const ArrayState& rhs);
147163
148- ref_ptr<ArrayState> cloneArrayState () override ;
149- ref_ptr<ArrayState> cloneArrayState (ref_ptr<ArrayState> arrayState) override ;
150-
151164 uint32_t translation_attribute_location = 7 ;
152165 uint32_t rotation_attribute_location = 8 ;
153166 uint32_t scale_attribute_location = 9 ;
@@ -168,10 +181,7 @@ namespace vsg
168181 public:
169182 DisplacementMapArrayState ();
170183 DisplacementMapArrayState (const DisplacementMapArrayState& rhs);
171- explicit DisplacementMapArrayState (const ArrayState& rhs);
172-
173- ref_ptr<ArrayState> cloneArrayState () override ;
174- ref_ptr<ArrayState> cloneArrayState (ref_ptr<ArrayState> arrayState) override ;
184+ explicit DisplacementMapArrayState (const ArrayState& rhs, const CopyOp& copyop = {});
175185
176186 // binding of displacement map
177187 uint32_t normal_attribute_location = 1 ;
@@ -207,9 +217,6 @@ namespace vsg
207217 uint32_t translation_attribute_location = 7 ;
208218 AttributeDetails translationAttribute;
209219
210- ref_ptr<ArrayState> cloneArrayState () override ;
211- ref_ptr<ArrayState> cloneArrayState (ref_ptr<ArrayState> arrayState) override ;
212-
213220 void apply (const VertexInputState& vas) override ;
214221 ref_ptr<const vec3Array> vertexArray (uint32_t instanceIndex) override ;
215222 };
@@ -223,9 +230,6 @@ namespace vsg
223230 BillboardArrayState (const BillboardArrayState& rhs);
224231 explicit BillboardArrayState (const ArrayState& rhs);
225232
226- ref_ptr<ArrayState> cloneArrayState () override ;
227- ref_ptr<ArrayState> cloneArrayState (ref_ptr<ArrayState> arrayState) override ;
228-
229233 uint32_t translation_attribute_location = 7 ;
230234 AttributeDetails translationAttribute;
231235
0 commit comments