Browse Source

Reference Counting weiter angepasst

kolja 5 years ago
parent
commit
96ea670b4a
16 changed files with 44 additions and 106 deletions
  1. 1 17
      Bild.cpp
  2. 0 7
      Bild.h
  3. 0 10
      Cube.cpp
  4. 0 3
      Cube.h
  5. 2 2
      M2DVorschau.cpp
  6. 0 17
      Model2D.cpp
  7. 0 7
      Model2D.h
  8. 0 19
      Model3D.cpp
  9. 0 7
      Model3D.h
  10. 0 10
      TexturModel.cpp
  11. 0 3
      TexturModel.h
  12. 1 1
      Welt2D.h
  13. 13 1
      Welt3D.cpp
  14. 2 2
      Welt3D.h
  15. 17 0
      Zeichnung3D.cpp
  16. 8 0
      Zeichnung3D.h

+ 1 - 17
Bild.cpp

@@ -2235,8 +2235,7 @@ Bild *Bild::release()
 // Konstruktor 
 BildZ::BildZ()
     : ZeichnungHintergrund(),
-    bild( 0 ),
-    ref( 1 )
+    bild( 0 )
 {
     style = 0;
     mak = _ret1ME;
@@ -2432,21 +2431,6 @@ Zeichnung *BildZ::dublizieren() const // erstellt eine Kopie des Zeichnungs
     return obj;
 }
 
-// Reference Counting 
-BildZ *BildZ::getThis()
-{
-    ++ref;
-    return this;
-}
-
-BildZ *BildZ::release()
-{
-    --ref;
-    if( !ref )
-        delete this;
-    return 0;
-}
-
 #ifdef WIN32
 Bild *Framework::ladeBild( char *pfad, Text *zError )
 {

+ 0 - 7
Bild.h

@@ -367,7 +367,6 @@ namespace Framework
         };
     private:
         Bild *bild;
-        int ref;
 
     public:
         // Konstruktor 
@@ -396,12 +395,6 @@ namespace Framework
         __declspec( dllexport ) Bild *zBild() const;
         // Kopiert die Komplette Zeichnung, so dass sie ohne Effekt auf das Original verändert werden kann
         __declspec( dllexport ) Zeichnung *dublizieren() const override;
-        // Erhöht den Reference Counting Zähler.
-        //  return: this.
-        __declspec( dllexport ) BildZ *getThis();
-        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
-        //  return: 0.
-        __declspec( dllexport ) BildZ *release();
     };
 
 #ifdef WIN32

+ 0 - 10
Cube.cpp

@@ -224,14 +224,4 @@ void Cube::setTextur( int id, CubeSeite s )
         return;
     this->textur->setPolygonTextur( s, t );
     rend = 1;
-}
-
-// Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
-//  return: 0.
-Model3D *Cube::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }

+ 0 - 3
Cube.h

@@ -37,8 +37,5 @@ namespace Framework
         //  id: Die id der Textur. Sie muss im Textur Register des Frameworks registriert sein
         //  s: Die Seite, die gesetzt werden soll
         __declspec( dllexport ) void setTextur( int id, CubeSeite s );
-        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
-        //  return: 0.
-        __declspec( dllexport ) Model3D *release() override;
     };
 }

+ 2 - 2
M2DVorschau.cpp

@@ -148,7 +148,7 @@ void M2DVorschau::render( Bild &rb )
     removeStyle( Style::VScroll | Style::HScroll );
     if( hatStyleNicht( Style::Sichtbar ) )
         return;
-	ZeichnungHintergrund::render( rb );
+    ZeichnungHintergrund::render( rb );
     if( !rb.setDrawOptions( innenPosition, innenSize ) )
         return;
     if( mdl )
@@ -168,7 +168,7 @@ Model2D *M2DVorschau::zModel() const
 
 Model2D *M2DVorschau::getModel() const
 {
-    return mdl ? mdl->getThis() : 0;
+    return mdl ? (Model2D*)mdl->getThis() : 0;
 }
 
 Zeichnung *M2DVorschau::dublizieren() const

+ 0 - 17
Model2D.cpp

@@ -693,7 +693,6 @@ Model2DObject::Model2DObject()
 {
     rData = 0;
     textur = new RCArray< Textur2D >();
-    ref = 1;
 }
 
 // Destruktor
@@ -1060,7 +1059,6 @@ Model2D::Model2D()
     drehung = 0;
     size = 1;
     textur = new RCArray< Textur2D >;
-    ref = 1;
 }
 
 // Destruktor
@@ -1378,19 +1376,4 @@ Model2DData *Model2D::getModel() const
 Model2DData *Model2D::zModel() const
 {
     return rData;
-}
-
-// Reference Counting
-Model2D *Model2D::getThis()
-{
-    ++ref;
-    return this;
-}
-
-Model2D *Model2D::release()
-{
-    --ref;
-    if( !ref )
-        delete this;
-    return 0;
 }

+ 0 - 7
Model2D.h

@@ -163,7 +163,6 @@ namespace Framework
         Model2DData *rData;
         float drehung;
         float size;
-        int ref;
         int farbe;
         RCArray< Textur2D > *textur;
 
@@ -225,12 +224,6 @@ namespace Framework
         __declspec( dllexport ) Model2DData *getModel() const;
         // Gibt die Model Daten ohne erhöhten Reference Counter zurück
         __declspec( dllexport ) Model2DData *zModel() const;
-        // Erhöht den Reference Counting Zähler.
-        //  return: this.
-        __declspec( dllexport ) Model2D *getThis();
-        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
-        //  return: 0.
-        __declspec( dllexport ) Model2D *release();
     };
 }
 #endif

+ 0 - 19
Model3D.cpp

@@ -536,7 +536,6 @@ Model3D::Model3D()
     textur = 0;
     skelett = 0;
     animations = new RCArray< AnimationData >();
-    ref = 1;
 }
 
 // Destruktor
@@ -660,22 +659,4 @@ int Model3D::getDatenId() const
 const DXVertexBuffer *Model3D::zVertexBuffer() const
 {
     return model ? model->zVertexBuffer() : 0;
-}
-
-// Erhöht den Reference Counting Zähler.
-//  return: this.
-Model3D *Model3D::getThis()
-{
-    ref++;
-    return this;
-}
-
-// Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
-//  return: 0.
-Model3D *Model3D::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }

+ 0 - 7
Model3D.h

@@ -244,7 +244,6 @@ namespace Framework
         Skelett *skelett;
         Model3DTextur *textur;
         RCArray< AnimationData > *animations;
-        int ref;
 
     public:
         // Konstruktor
@@ -282,11 +281,5 @@ namespace Framework
         __declspec( dllexport ) int getDatenId() const;
         // Gibt einen Buffer mit allen Vertecies des Models zurück
         __declspec( dllexport ) const DXVertexBuffer *zVertexBuffer() const;
-        // Erhöht den Reference Counting Zähler.
-        //  return: this.
-        __declspec( dllexport ) Model3D *getThis();
-        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
-        //  return: 0.
-        __declspec( dllexport ) virtual Model3D *release();
     };
 }

+ 0 - 10
TexturModel.cpp

@@ -101,14 +101,4 @@ void TexturModel::setSize( float b, float h )
     vertecies[ 3 ].pos = Vec3<float >( b, -h, 0.f );
     vertecies[ 3 ].tPos = Vec2< float >( 1.f, 1.f );
     model->setVertecies( vertecies, 4 );
-}
-
-// Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
-//  return: 0.
-Model3D *TexturModel::release()
-{
-    ref--;
-    if( !ref )
-        delete this;
-    return 0;
 }

+ 0 - 3
TexturModel.h

@@ -25,8 +25,5 @@ namespace Framework
         //  b: Die Breite, in der die Textur angezeigt wird
         //  h: Die Höhe, in der die Textur angezeigt wird
         __declspec( dllexport ) void setSize( float b, float h );
-        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
-        //  return: 0.
-        __declspec( dllexport ) Model3D *release() override;
     };
 }

+ 1 - 1
Welt2D.h

@@ -31,7 +31,7 @@ namespace Framework
 
     public:
         __declspec( dllexport ) Object2D();
-        virtual __declspec( dllexport ) ~Object2D();
+        __declspec( dllexport ) virtual ~Object2D();
         // Fügt einen Schub in die ausbreitungsrichtung der Explusion zur Bewegung des Objektes hinzu
         //  worldPos: Die Position des Explusionsuhrsprungs
         //  intensity: Die Intensität der Explusion

+ 13 - 1
Welt3D.cpp

@@ -31,7 +31,17 @@ Welt3D::Welt3D()
 // Destruktor
 Welt3D::~Welt3D()
 {
+    for( int i = 0; i < arraySize; i++ )
+    {
+        if( members[ i ] )
+            members[ i ]->release();
+    }
     delete[] members;
+    for( int i = 0; i < arraySizeAlpha; i++ )
+    {
+        if( membersAlpha[ i ] )
+            membersAlpha[ i ]->release();
+    }
     delete[] membersAlpha;
     delete[] distSq;
     delete[] distSqSort;
@@ -76,7 +86,7 @@ void Welt3D::addZeichnung( Zeichnung3D *obj )
         delete[] alphaVS;
         delete[] elementsSort;
         distSq = new float[ arraySizeAlpha + arraySize ];
-        distSqSort= new float[ arraySizeAlpha + arraySize ];
+        distSqSort = new float[ arraySizeAlpha + arraySize ];
         alphaVS = new Zeichnung3D*[ arraySizeAlpha + arraySize ];
         elementsSort = new Zeichnung3D*[ arraySizeAlpha + arraySize ];
         cs.unlock();
@@ -112,6 +122,7 @@ void Welt3D::removeZeichnung( Zeichnung3D *obj )
         {
             if( *i == obj )
             {
+                ( *i )->release();
                 *i = 0;
                 rend = 1;
                 cs.unlock();
@@ -125,6 +136,7 @@ void Welt3D::removeZeichnung( Zeichnung3D *obj )
     {
         if( *i == obj )
         {
+            ( *i )->release();
             *i = 0;
             rend = 1;
             cs.unlock();

+ 2 - 2
Welt3D.h

@@ -35,8 +35,8 @@ namespace Framework
         //  obj: Das Objekt, was hinzugefügt werden soll
         __declspec( dllexport ) void addZeichnung( Zeichnung3D *obj );
         // Entfernt ein Objekt aus der Welt
-        //  obj: Das Objekt, das entwernt werden soll
-        __declspec( dllexport ) void removeZeichnung( Zeichnung3D *obj );
+        //  obj: Das Objekt, das entwernt werden soll (ohne erhöhten reference Counter)
+        __declspec( dllexport ) void removeZeichnung( Zeichnung3D *zObj );
         // Verarbeitet ein Mausereignis
         //  me: Das Mausereignis, das verarbeitet werden soll
         __declspec( dllexport ) void doMausEreignis( MausEreignis3D &me );

+ 17 - 0
Zeichnung3D.cpp

@@ -12,8 +12,12 @@ Zeichnung3D::Zeichnung3D()
     rend = 0;
     alpha = 0;
     radius = 0;
+    ref = 1;
 }
 
+Zeichnung3D::~Zeichnung3D()
+{}
+
 // Setzt die Position der Zeichnung in der Welt
 //  p: Die Position
 void Zeichnung3D::setPosition( Vec3< float > &p )
@@ -213,4 +217,17 @@ float Zeichnung3D::getZDrehung() const
 const Mat4< float > &Zeichnung3D::getMatrix() const
 {
     return welt;
+}
+
+Zeichnung3D *Zeichnung3D::getThis()
+{
+    ref++;
+    return this;
+}
+
+Zeichnung3D *Zeichnung3D::release()
+{
+    if( !--ref )
+        delete this;
+    return 0;
 }

+ 8 - 0
Zeichnung3D.h

@@ -18,10 +18,12 @@ namespace Framework
         float radius; // Der radius einer Kugel, der das gesamte Objekt umschließt
         bool alpha; // Speichert ob das Objekt teilweise oder ganz transparente stellen enthält
         bool rend;
+        int ref;
 
     public:
         // Konstruktor
         __declspec( dllexport ) Zeichnung3D();
+        __declspec( dllexport ) virtual ~Zeichnung3D();
         // Setzt die Position der Zeichnung in der Welt
         //  p: Die Position
         __declspec( dllexport ) void setPosition( Vec3< float > &p );
@@ -99,5 +101,11 @@ namespace Framework
         __declspec( dllexport ) float getZDrehung() const;
         // Gibt die Matrix zurück, die die Zeichnung in den Welt Raum übersetzt
         __declspec( dllexport ) const Mat4< float > &getMatrix() const;
+        // Erhöht den Reference Counting Zähler.
+        //  return: this.
+        __declspec( dllexport ) Zeichnung3D *getThis();
+        // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
+        //  return: 0.
+        __declspec( dllexport ) virtual Zeichnung3D *release();
     };
 }