Project

General

Profile

« Previous | Next » 

Revision e3a72781

Added by Leszek Koltunski about 5 years ago

Fixes for memory leak problems uncovered by the 'Rubik' app. (mainly: new method DistortedNode.markForDeletion)

View differences:

src/main/java/org/distorted/examples/rubik/RubikRenderer.java
45 45
    private Static4D mQuatCurrent, mQuatAccumulated;
46 46
    private Static4D mTempCurrent, mTempAccumulated;
47 47
    private float mCubeSizeInScreenSpace;
48
    private int mNextCubeSize;
48 49
    private boolean mFinishRotation, mRemoveRotation, mFinishDragCurrent, mFinishDragAccumulated;
49 50
    private boolean mCanRotate;
50 51
    private RubikCube mCube;
......
74 75
      mFinishDragCurrent     = false;
75 76
      mFinishDragAccumulated = false;
76 77

  
78
      mNextCubeSize= 0;
79

  
77 80
      mCanRotate = true;
78 81
      }
79 82

  
......
101 104
        {
102 105
        mCanRotate = false;
103 106
        mFinishRotation=false;
104
        mCube.finishRotationCalledOnNextRender(this);
107
        mCube.finishRotationNow(this);
105 108
        }
106 109

  
107 110
      if( mRemoveRotation )
108 111
        {
109 112
        mRemoveRotation=false;
110
        mCube.removeRotationCalledOnNextRender(this);
113
        mCube.removeRotationNow(this);
111 114
        mCanRotate = true;
112 115
        }
116

  
117
      if( mNextCubeSize!=0 )
118
        {
119
        createCubeNow(mNextCubeSize);
120
        mScreen.detachAll();
121
        mCube.attachToScreen(mScreen);
122
        mNextCubeSize = 0;
123
        }
113 124
      }
114 125

  
115 126
///////////////////////////////////////////////////////////////////////////////////////////////////
......
180 191
///////////////////////////////////////////////////////////////////////////////////////////////////
181 192

  
182 193
   void createCube(int newSize)
194
     {
195
     mNextCubeSize = newSize;
196
     }
197

  
198
///////////////////////////////////////////////////////////////////////////////////////////////////
199

  
200
   void createCubeNow(int newSize)
183 201
     {
184 202
     int oldSize = mCube==null ? 0 : mCube.getSize();
185 203

  
186 204
     if( oldSize!=newSize )
187 205
       {
206
       if( mCube!=null ) mCube.releaseResources();
188 207
       mCube = new RubikCube(newSize, mMove, mScale, mQuatCurrent, mQuatAccumulated);
189 208
       mCube.createTexture();
190 209

  
......
192 211
         {
193 212
         recomputeScaleFactor(mScreenWidth,mScreenHeight);
194 213
         }
195

  
196
       mScreen.detachAll();
197
       mCube.attachToScreen(mScreen);
198 214
       }
199 215
     }
200 216

  
201 217
///////////////////////////////////////////////////////////////////////////////////////////////////
202 218

  
203
   void recomputeScaleFactor(int screenWidth, int screenHeight)
219
   private void recomputeScaleFactor(int screenWidth, int screenHeight)
204 220
     {
205 221
     mCubeSizeInScreenSpace = CUBE_SCREEN_RATIO*(screenWidth>screenHeight ? screenHeight:screenWidth);
206 222
     float texSize = mCube.getTextureSize();

Also available in: Unified diff