Revision e3a72781
Added by Leszek Koltunski about 5 years ago
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
Fixes for memory leak problems uncovered by the 'Rubik' app. (mainly: new method DistortedNode.markForDeletion)