Revision 0a046359
Added by Leszek Koltunski about 8 years ago
src/main/java/org/distorted/library/DistortedObject.java | ||
---|---|---|
71 | 71 |
private boolean matrixCloned, vertexCloned, fragmentCloned; |
72 | 72 |
private long mID; |
73 | 73 |
private int mSizeX, mSizeY, mSizeZ; // in screen space |
74 |
private int mHalfX, mHalfY, mHalfZ; // halfs of the above |
|
74 | 75 |
|
75 | 76 |
protected DistortedObjectGrid mGrid = null; |
76 | 77 |
|
... | ... | |
104 | 105 |
|
105 | 106 |
protected void initializeData(int x, int y, int z) |
106 | 107 |
{ |
107 |
mSizeX= x; |
|
108 |
mSizeY= y; |
|
109 |
mSizeZ= z; |
|
108 |
mSizeX= x; mHalfX = x/2;
|
|
109 |
mSizeY= y; mHalfY = y/2;
|
|
110 |
mSizeZ= z; mHalfZ = z/2;
|
|
110 | 111 |
|
111 | 112 |
mID = mNextID++; |
112 | 113 |
mObjects.put(mID,this); |
... | ... | |
127 | 128 |
|
128 | 129 |
private void initializeEffectLists(DistortedObject d, int flags) |
129 | 130 |
{ |
131 |
long objID = d.getID(); |
|
132 |
|
|
130 | 133 |
if( (flags & Distorted.CLONE_MATRIX) != 0 ) |
131 | 134 |
{ |
132 | 135 |
mM = d.mM; |
... | ... | |
134 | 137 |
} |
135 | 138 |
else |
136 | 139 |
{ |
137 |
mM = new EffectQueueMatrix(d);
|
|
140 |
mM = new EffectQueueMatrix(objID);
|
|
138 | 141 |
matrixCloned = false; |
139 | 142 |
} |
140 | 143 |
|
... | ... | |
145 | 148 |
} |
146 | 149 |
else |
147 | 150 |
{ |
148 |
mV = new EffectQueueVertex(d);
|
|
151 |
mV = new EffectQueueVertex(objID);
|
|
149 | 152 |
vertexCloned = false; |
150 | 153 |
} |
151 | 154 |
|
... | ... | |
156 | 159 |
} |
157 | 160 |
else |
158 | 161 |
{ |
159 |
mF = new EffectQueueFragment(d);
|
|
162 |
mF = new EffectQueueFragment(objID);
|
|
160 | 163 |
fragmentCloned = false; |
161 | 164 |
} |
162 | 165 |
} |
... | ... | |
192 | 195 |
DistortedFramebuffer.deleteAllMarked(); |
193 | 196 |
|
194 | 197 |
GLES20.glViewport(0, 0, df.mWidth, df.mHeight); |
195 |
|
|
198 |
|
|
196 | 199 |
mM.compute(currTime); |
197 |
mM.send(df); |
|
200 |
mM.send(df,mHalfX,mHalfY,mHalfZ);
|
|
198 | 201 |
|
199 | 202 |
mV.compute(currTime); |
200 |
mV.send(); |
|
203 |
mV.send(mHalfX,mHalfY,mHalfZ);
|
|
201 | 204 |
|
202 | 205 |
mF.compute(currTime); |
203 |
mF.send(); |
|
206 |
mF.send(mHalfX,mHalfY);
|
|
204 | 207 |
|
205 | 208 |
mGrid.draw(); |
206 | 209 |
} |
... | ... | |
210 | 213 |
void drawNoEffectsPriv(DistortedFramebuffer df) |
211 | 214 |
{ |
212 | 215 |
GLES20.glViewport(0, 0, df.mWidth, df.mHeight); |
213 |
mM.sendZero(df); |
|
216 |
|
|
217 |
mM.sendZero(df,mHalfX,mHalfY,mHalfZ); |
|
214 | 218 |
mV.sendZero(); |
215 | 219 |
mF.sendZero(); |
216 | 220 |
mGrid.draw(); |
... | ... | |
295 | 299 |
mSizeX = dc.mSizeX; |
296 | 300 |
mSizeY = dc.mSizeY; |
297 | 301 |
mSizeZ = dc.mSizeZ; |
302 |
mHalfX = dc.mHalfX; |
|
303 |
mHalfY = dc.mHalfY; |
|
304 |
mHalfZ = dc.mHalfZ; |
|
298 | 305 |
mGrid = dc.mGrid; |
299 | 306 |
|
300 | 307 |
if( (flags & Distorted.CLONE_BITMAP) != 0 ) |
... | ... | |
368 | 375 |
public void setBitmap(Bitmap bmp) |
369 | 376 |
{ |
370 | 377 |
mBitmapSet[0] = true; |
371 |
|
|
378 |
|
|
379 |
mSizeX= bmp.getWidth() ; mHalfX = mSizeX/2; |
|
380 |
mSizeY= bmp.getHeight(); mHalfY = mSizeY/2; |
|
381 |
|
|
372 | 382 |
if( Distorted.isInitialized() ) |
373 | 383 |
{ |
374 | 384 |
GLES20.glActiveTexture(GLES20.GL_TEXTURE0); |
src/main/java/org/distorted/library/EffectQueue.java | ||
---|---|---|
31 | 31 |
{ |
32 | 32 |
protected byte mNumEffects; // number of effects at the moment |
33 | 33 |
protected long mTotalEffects; // total number of effects ever created |
34 |
|
|
35 | 34 |
protected int[] mName; |
36 | 35 |
protected float[] mUniforms; |
36 |
protected float[] mCache; |
|
37 | 37 |
protected Dynamic[][] mInter; |
38 | 38 |
protected long[] mCurrentDuration; |
39 | 39 |
protected byte[] mFreeIndexes; |
40 | 40 |
protected byte[] mIDIndex; |
41 | 41 |
protected long[] mID; |
42 |
|
|
43 | 42 |
protected long mTime=0; |
44 |
protected float mObjHalfX, mObjHalfY, mObjHalfZ; |
|
45 |
|
|
46 | 43 |
protected static int[] mMax = new int[EffectTypes.LENGTH]; |
47 | 44 |
protected int mMaxIndex; |
48 |
|
|
49 | 45 |
protected Vector<EffectListener> mListeners =null; |
50 | 46 |
protected int mNumListeners=0; // ==mListeners.length(), but we only create mListeners if the first one gets added |
51 | 47 |
protected long mObjectID; |
... | ... | |
59 | 55 |
|
60 | 56 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
61 | 57 |
|
62 |
EffectQueue(DistortedObject obj, int numUniforms, int index)
|
|
58 |
EffectQueue(long id, int numUniforms, int numCache, int index)
|
|
63 | 59 |
{ |
64 | 60 |
mNumEffects = 0; |
65 | 61 |
mTotalEffects = 0; |
66 | 62 |
mMaxIndex = index; |
67 |
|
|
68 |
if( obj!=null ) |
|
69 |
{ |
|
70 |
mObjHalfX = obj.getWidth() / 2.0f; |
|
71 |
mObjHalfY = obj.getHeight()/ 2.0f; |
|
72 |
mObjHalfZ = obj.getDepth() / 2.0f; |
|
73 |
mObjectID = obj.getID(); |
|
74 |
} |
|
63 |
mObjectID = id; |
|
75 | 64 |
|
76 | 65 |
if( mMax[mMaxIndex]>0 ) |
77 | 66 |
{ |
... | ... | |
84 | 73 |
mFreeIndexes = new byte[mMax[mMaxIndex]]; |
85 | 74 |
|
86 | 75 |
for(byte i=0; i<mMax[mMaxIndex]; i++) mFreeIndexes[i] = i; |
76 |
|
|
77 |
if( numCache>0 ) |
|
78 |
{ |
|
79 |
mCache = new float[numCache*mMax[mMaxIndex]]; |
|
80 |
} |
|
87 | 81 |
} |
88 | 82 |
|
89 | 83 |
mCreated = true; |
src/main/java/org/distorted/library/EffectQueueFragment.java | ||
---|---|---|
37 | 37 |
class EffectQueueFragment extends EffectQueue |
38 | 38 |
{ |
39 | 39 |
private static final int NUM_UNIFORMS = 8; |
40 |
private static final int NUM_CACHE = 4; |
|
40 | 41 |
private static final int INDEX = EffectTypes.FRAGMENT.ordinal(); |
41 | 42 |
private static int mNumEffectsH; |
42 | 43 |
private static int mTypeH; |
... | ... | |
44 | 45 |
|
45 | 46 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
46 | 47 |
|
47 |
EffectQueueFragment(DistortedObject obj)
|
|
48 |
EffectQueueFragment(long id)
|
|
48 | 49 |
{ |
49 |
super(obj,NUM_UNIFORMS,INDEX);
|
|
50 |
super(id,NUM_UNIFORMS,NUM_CACHE,INDEX);
|
|
50 | 51 |
} |
51 | 52 |
|
52 | 53 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
87 | 88 |
else mInter[0][i] = null; |
88 | 89 |
} |
89 | 90 |
|
90 |
if( mInter[1][i]!=null ) |
|
91 |
{ |
|
92 |
mInter[1][i].interpolateMain( mUniforms, NUM_UNIFORMS*i+4, mCurrentDuration[i], step); |
|
93 |
|
|
94 |
mUniforms[NUM_UNIFORMS*i+4] = mUniforms[NUM_UNIFORMS*i+4]-mObjHalfX; |
|
95 |
mUniforms[NUM_UNIFORMS*i+5] =-mUniforms[NUM_UNIFORMS*i+5]+mObjHalfY; |
|
96 |
} |
|
97 |
|
|
98 |
if( mInter[2][i]!=null ) mInter[2][i].interpolateMain(mUniforms, NUM_UNIFORMS*i+1, mCurrentDuration[i], step); |
|
91 |
if( mInter[1][i]!=null ) mInter[1][i].interpolateMain( mCache , NUM_CACHE*i , mCurrentDuration[i], step); |
|
92 |
if( mInter[2][i]!=null ) mInter[2][i].interpolateMain( mUniforms, NUM_UNIFORMS*i+1, mCurrentDuration[i], step); |
|
99 | 93 |
|
100 | 94 |
mCurrentDuration[i] += step; |
101 | 95 |
} |
... | ... | |
112 | 106 |
mUniforms[NUM_UNIFORMS*index+2] = mUniforms[NUM_UNIFORMS*(index+1)+2]; |
113 | 107 |
mUniforms[NUM_UNIFORMS*index+3] = mUniforms[NUM_UNIFORMS*(index+1)+3]; |
114 | 108 |
|
115 |
if( mInter[1][index]==null ) |
|
116 |
{ |
|
117 |
mUniforms[NUM_UNIFORMS*index+4] = mUniforms[NUM_UNIFORMS*(index+1)+4]; |
|
118 |
mUniforms[NUM_UNIFORMS*index+5] = mUniforms[NUM_UNIFORMS*(index+1)+5]; |
|
119 |
mUniforms[NUM_UNIFORMS*index+6] = mUniforms[NUM_UNIFORMS*(index+1)+6]; |
|
120 |
mUniforms[NUM_UNIFORMS*index+7] = mUniforms[NUM_UNIFORMS*(index+1)+7]; |
|
121 |
} |
|
109 |
mCache[NUM_CACHE*index ] = mCache[NUM_CACHE*(index+1) ]; |
|
110 |
mCache[NUM_CACHE*index+1] = mCache[NUM_CACHE*(index+1)+1]; |
|
111 |
mCache[NUM_CACHE*index+2] = mCache[NUM_CACHE*(index+1)+2]; |
|
112 |
mCache[NUM_CACHE*index+3] = mCache[NUM_CACHE*(index+1)+3]; |
|
122 | 113 |
} |
123 | 114 |
|
124 | 115 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
125 | 116 |
|
126 |
synchronized void send()
|
|
117 |
synchronized void send(int halfX, int halfY)
|
|
127 | 118 |
{ |
128 | 119 |
GLES20.glUniform1i( mNumEffectsH, mNumEffects); |
129 |
|
|
120 |
|
|
130 | 121 |
if( mNumEffects>0 ) |
131 |
{ |
|
122 |
{ |
|
123 |
for(int i=0; i<mNumEffects; i++) |
|
124 |
{ |
|
125 |
mUniforms[NUM_UNIFORMS*i+4] = mCache[NUM_CACHE*i ]-halfX; |
|
126 |
mUniforms[NUM_UNIFORMS*i+5] =-mCache[NUM_CACHE*i+1]+halfY; |
|
127 |
mUniforms[NUM_UNIFORMS*i+6] = mCache[NUM_CACHE*i+2]; |
|
128 |
mUniforms[NUM_UNIFORMS*i+7] = mCache[NUM_CACHE*i+3]; |
|
129 |
} |
|
130 |
|
|
132 | 131 |
GLES20.glUniform1iv( mTypeH , mNumEffects, mName ,0); |
133 | 132 |
GLES20.glUniform4fv( mUniformsH,2*mNumEffects, mUniforms,0); |
134 | 133 |
} |
... | ... | |
162 | 161 |
else return -1; |
163 | 162 |
|
164 | 163 |
mInter[1][mNumEffects] = null; |
165 |
mUniforms[NUM_UNIFORMS*mNumEffects+6] = Float.MAX_VALUE;
|
|
166 |
mUniforms[NUM_UNIFORMS*mNumEffects+7] = Float.MAX_VALUE;
|
|
164 |
mCache[NUM_CACHE*mNumEffects+2] = Float.MAX_VALUE;
|
|
165 |
mCache[NUM_CACHE*mNumEffects+3] = Float.MAX_VALUE;
|
|
167 | 166 |
|
168 | 167 |
mInter[2][mNumEffects] = null; |
169 | 168 |
|
... | ... | |
200 | 199 |
else if( region instanceof Static4D ) |
201 | 200 |
{ |
202 | 201 |
mInter[1][mNumEffects] = null; |
203 |
mUniforms[NUM_UNIFORMS*mNumEffects+4] = ((Static4D)region).getX()-mObjHalfX;
|
|
204 |
mUniforms[NUM_UNIFORMS*mNumEffects+5] =-((Static4D)region).getY()+mObjHalfY;
|
|
205 |
mUniforms[NUM_UNIFORMS*mNumEffects+6] = ((Static4D)region).getZ();
|
|
206 |
mUniforms[NUM_UNIFORMS*mNumEffects+7] = ((Static4D)region).getW();
|
|
202 |
mCache[NUM_CACHE*mNumEffects ] = ((Static4D)region).getX();
|
|
203 |
mCache[NUM_CACHE*mNumEffects+1] = ((Static4D)region).getY();
|
|
204 |
mCache[NUM_CACHE*mNumEffects+2] = ((Static4D)region).getZ();
|
|
205 |
mCache[NUM_CACHE*mNumEffects+3] = ((Static4D)region).getW();
|
|
207 | 206 |
} |
208 | 207 |
else return -1; |
209 | 208 |
|
... | ... | |
255 | 254 |
else if( region instanceof Static4D ) |
256 | 255 |
{ |
257 | 256 |
mInter[1][mNumEffects] = null; |
258 |
mUniforms[NUM_UNIFORMS*mNumEffects+4] = ((Static4D)region).getX()-mObjHalfX;
|
|
259 |
mUniforms[NUM_UNIFORMS*mNumEffects+5] =-((Static4D)region).getY()+mObjHalfY;
|
|
260 |
mUniforms[NUM_UNIFORMS*mNumEffects+6] = ((Static4D)region).getZ();
|
|
261 |
mUniforms[NUM_UNIFORMS*mNumEffects+7] = ((Static4D)region).getW();
|
|
257 |
mCache[NUM_CACHE*mNumEffects ] = ((Static4D)region).getX();
|
|
258 |
mCache[NUM_CACHE*mNumEffects+1] = ((Static4D)region).getY();
|
|
259 |
mCache[NUM_CACHE*mNumEffects+2] = ((Static4D)region).getZ();
|
|
260 |
mCache[NUM_CACHE*mNumEffects+3] = ((Static4D)region).getW();
|
|
262 | 261 |
} |
263 | 262 |
else return -1; |
264 | 263 |
|
... | ... | |
302 | 301 |
else return -1; |
303 | 302 |
|
304 | 303 |
mInter[1][mNumEffects] = null; |
305 |
mUniforms[NUM_UNIFORMS*mNumEffects+6] = Float.MAX_VALUE;
|
|
306 |
mUniforms[NUM_UNIFORMS*mNumEffects+7] = Float.MAX_VALUE;
|
|
304 |
mCache[NUM_CACHE*mNumEffects+2] = Float.MAX_VALUE;
|
|
305 |
mCache[NUM_CACHE*mNumEffects+3] = Float.MAX_VALUE;
|
|
307 | 306 |
|
308 | 307 |
return addBase(eln); |
309 | 308 |
} |
src/main/java/org/distorted/library/EffectQueueMatrix.java | ||
---|---|---|
39 | 39 |
class EffectQueueMatrix extends EffectQueue |
40 | 40 |
{ |
41 | 41 |
private static final int NUM_UNIFORMS = 7; |
42 |
private static final int NUM_CACHE = 0; |
|
42 | 43 |
private static final int INDEX = EffectTypes.MATRIX.ordinal(); |
43 | 44 |
|
44 | 45 |
private static float[] mMVPMatrix = new float[16]; |
... | ... | |
52 | 53 |
|
53 | 54 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
54 | 55 |
|
55 |
EffectQueueMatrix(DistortedObject obj)
|
|
56 |
EffectQueueMatrix(long id)
|
|
56 | 57 |
{ |
57 |
super(obj,NUM_UNIFORMS, INDEX );
|
|
58 |
super(id,NUM_UNIFORMS,NUM_CACHE,INDEX );
|
|
58 | 59 |
} |
59 | 60 |
|
60 | 61 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
153 | 154 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
154 | 155 |
// here construct the ModelView Matrix |
155 | 156 |
|
156 |
synchronized void send(DistortedFramebuffer df) |
|
157 |
synchronized void send(DistortedFramebuffer df, int halfX, int halfY, int halfZ)
|
|
157 | 158 |
{ |
158 | 159 |
Matrix.setIdentityM(mViewMatrix, 0); |
159 | 160 |
Matrix.translateM(mViewMatrix, 0, -df.mWidth/2, df.mHeight/2, -df.mDistance); |
... | ... | |
229 | 230 |
} |
230 | 231 |
} |
231 | 232 |
|
232 |
Matrix.translateM(mViewMatrix, 0, mObjHalfX,-mObjHalfY, 0);
|
|
233 |
Matrix.translateM(mViewMatrix, 0, halfX,-halfY, 0);
|
|
233 | 234 |
Matrix.multiplyMM(mMVPMatrix, 0, df.mProjectionMatrix, 0, mViewMatrix, 0); |
234 | 235 |
|
235 |
GLES20.glUniform3f( mObjDH , mObjHalfX, mObjHalfY, mObjHalfZ);
|
|
236 |
GLES20.glUniform3f( mObjDH , halfX, halfY, halfZ);
|
|
236 | 237 |
GLES20.glUniform1f( mDepthH, df.mDepth); |
237 | 238 |
GLES20.glUniformMatrix4fv(mMVMatrixH , 1, false, mViewMatrix, 0); |
238 | 239 |
GLES20.glUniformMatrix4fv(mMVPMatrixH, 1, false, mMVPMatrix , 0); |
... | ... | |
241 | 242 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
242 | 243 |
// here construct the ModelView Matrix, but without any effects |
243 | 244 |
|
244 |
synchronized void sendZero(DistortedFramebuffer df) |
|
245 |
synchronized void sendZero(DistortedFramebuffer df, int halfX, int halfY, int halfZ)
|
|
245 | 246 |
{ |
246 | 247 |
Matrix.setIdentityM(mTmpMatrix, 0); |
247 |
Matrix.translateM(mTmpMatrix, 0, mObjHalfX-df.mWidth/2, df.mHeight/2-mObjHalfY, -df.mDistance);
|
|
248 |
Matrix.translateM(mTmpMatrix, 0, halfX-df.mWidth/2, df.mHeight/2-halfY, -df.mDistance);
|
|
248 | 249 |
Matrix.multiplyMM(mMVPMatrix, 0, df.mProjectionMatrix, 0, mTmpMatrix, 0); |
249 | 250 |
|
250 |
GLES20.glUniform3f( mObjDH , mObjHalfX, mObjHalfY, mObjHalfZ);
|
|
251 |
GLES20.glUniform3f( mObjDH , halfX, halfY, halfZ);
|
|
251 | 252 |
GLES20.glUniform1f( mDepthH, df.mDepth); |
252 | 253 |
GLES20.glUniformMatrix4fv(mMVMatrixH , 1, false, mTmpMatrix, 0); |
253 | 254 |
GLES20.glUniformMatrix4fv(mMVPMatrixH, 1, false, mMVPMatrix, 0); |
src/main/java/org/distorted/library/EffectQueueVertex.java | ||
---|---|---|
43 | 43 |
class EffectQueueVertex extends EffectQueue |
44 | 44 |
{ |
45 | 45 |
private static final int NUM_UNIFORMS = 12; |
46 |
private static final int NUM_CACHE = 3; |
|
46 | 47 |
private static final int INDEX = EffectTypes.VERTEX.ordinal(); |
47 | 48 |
private static int mNumEffectsH; |
48 | 49 |
private static int mTypeH; |
... | ... | |
50 | 51 |
|
51 | 52 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
52 | 53 |
|
53 |
EffectQueueVertex(DistortedObject obj)
|
|
54 |
EffectQueueVertex(long id)
|
|
54 | 55 |
{ |
55 |
super(obj,NUM_UNIFORMS,INDEX);
|
|
56 |
super(id,NUM_UNIFORMS,NUM_CACHE,INDEX);
|
|
56 | 57 |
} |
57 | 58 |
|
58 | 59 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
102 | 103 |
} |
103 | 104 |
} |
104 | 105 |
|
105 |
if( mInter[1][i]!=null ) // region |
|
106 |
{ |
|
107 |
mInter[1][i].interpolateMain(mUniforms, NUM_UNIFORMS*i+8, mCurrentDuration[i], step); |
|
108 |
} |
|
109 |
|
|
110 |
if( mInter[2][i]!=null ) // center |
|
111 |
{ |
|
112 |
mInter[2][i].interpolateMain(mUniforms, NUM_UNIFORMS*i+5, mCurrentDuration[i], step); |
|
113 |
|
|
114 |
mUniforms[NUM_UNIFORMS*i+5] = mUniforms[NUM_UNIFORMS*i+5]-mObjHalfX; |
|
115 |
mUniforms[NUM_UNIFORMS*i+6] =-mUniforms[NUM_UNIFORMS*i+6]+mObjHalfY; |
|
116 |
mUniforms[NUM_UNIFORMS*i+7] = mUniforms[NUM_UNIFORMS*i+7]-mObjHalfZ; |
|
117 |
} |
|
106 |
if( mInter[1][i]!=null ) mInter[1][i].interpolateMain(mUniforms, NUM_UNIFORMS*i+8, mCurrentDuration[i], step); |
|
107 |
if( mInter[2][i]!=null ) mInter[2][i].interpolateMain(mCache , NUM_CACHE*i , mCurrentDuration[i], step); |
|
118 | 108 |
|
119 | 109 |
mCurrentDuration[i] += step; |
120 | 110 |
} |
... | ... | |
131 | 121 |
mUniforms[NUM_UNIFORMS*index+ 2] = mUniforms[NUM_UNIFORMS*(index+1)+ 2]; |
132 | 122 |
mUniforms[NUM_UNIFORMS*index+ 3] = mUniforms[NUM_UNIFORMS*(index+1)+ 3]; |
133 | 123 |
mUniforms[NUM_UNIFORMS*index+ 4] = mUniforms[NUM_UNIFORMS*(index+1)+ 4]; |
134 |
mUniforms[NUM_UNIFORMS*index+ 5] = mUniforms[NUM_UNIFORMS*(index+1)+ 5]; |
|
135 |
mUniforms[NUM_UNIFORMS*index+ 6] = mUniforms[NUM_UNIFORMS*(index+1)+ 6]; |
|
136 |
mUniforms[NUM_UNIFORMS*index+ 7] = mUniforms[NUM_UNIFORMS*(index+1)+ 7]; |
|
124 |
|
|
125 |
mCache[NUM_CACHE*index ] = mCache[NUM_CACHE*(index+1) ]; |
|
126 |
mCache[NUM_CACHE*index+1] = mCache[NUM_CACHE*(index+1)+1]; |
|
127 |
mCache[NUM_CACHE*index+2] = mCache[NUM_CACHE*(index+1)+2]; |
|
128 |
|
|
137 | 129 |
mUniforms[NUM_UNIFORMS*index+ 8] = mUniforms[NUM_UNIFORMS*(index+1)+ 8]; |
138 | 130 |
mUniforms[NUM_UNIFORMS*index+ 9] = mUniforms[NUM_UNIFORMS*(index+1)+ 9]; |
139 | 131 |
mUniforms[NUM_UNIFORMS*index+10] = mUniforms[NUM_UNIFORMS*(index+1)+10]; |
... | ... | |
142 | 134 |
|
143 | 135 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
144 | 136 |
|
145 |
synchronized void send()
|
|
137 |
synchronized void send(int halfX, int halfY, int halfZ)
|
|
146 | 138 |
{ |
147 | 139 |
GLES20.glUniform1i( mNumEffectsH, mNumEffects); |
148 | 140 |
|
149 | 141 |
if( mNumEffects>0 ) |
150 |
{ |
|
142 |
{ |
|
143 |
for(int i=0; i<mNumEffects; i++) |
|
144 |
{ |
|
145 |
mUniforms[NUM_UNIFORMS*i+5] = mCache[NUM_CACHE*i ]-halfX; |
|
146 |
mUniforms[NUM_UNIFORMS*i+6] =-mCache[NUM_CACHE*i+1]+halfY; |
|
147 |
mUniforms[NUM_UNIFORMS*i+7] = mCache[NUM_CACHE*i+2]-halfZ; |
|
148 |
} |
|
149 |
|
|
151 | 150 |
GLES20.glUniform1iv( mTypeH , mNumEffects, mName ,0); |
152 | 151 |
GLES20.glUniform4fv( mUniformsH,3*mNumEffects, mUniforms,0); |
153 | 152 |
} |
... | ... | |
391 | 390 |
else if( center instanceof Static3D) |
392 | 391 |
{ |
393 | 392 |
mInter[2][mNumEffects] = null; |
394 |
mUniforms[NUM_UNIFORMS*mNumEffects+5] = ((Static3D)center).getX()-mObjHalfX;
|
|
395 |
mUniforms[NUM_UNIFORMS*mNumEffects+6] =-((Static3D)center).getY()+mObjHalfY;
|
|
396 |
mUniforms[NUM_UNIFORMS*mNumEffects+7] = ((Static3D)center).getZ()-mObjHalfZ;
|
|
393 |
mCache[NUM_CACHE*mNumEffects ] = ((Static3D)center).getX();
|
|
394 |
mCache[NUM_CACHE*mNumEffects+1] = ((Static3D)center).getY();
|
|
395 |
mCache[NUM_CACHE*mNumEffects+2] = ((Static3D)center).getZ();
|
|
397 | 396 |
} |
398 | 397 |
|
399 | 398 |
long ret= addBase(eln); |
Also available in: Unified diff
The EffectQueues are now totally independent of the size of the underlying Bitmap.