Revision d425545a
Added by Leszek Koltunski over 9 years ago
| src/main/java/org/distorted/library/DistortedObject.java | ||
|---|---|---|
| 28 | 28 |
import org.distorted.library.type.Data2D; |
| 29 | 29 |
import org.distorted.library.type.Data3D; |
| 30 | 30 |
import org.distorted.library.type.Data4D; |
| 31 |
import org.distorted.library.type.Dynamic; |
|
| 32 |
import org.distorted.library.type.Dynamic1D; |
|
| 33 |
import org.distorted.library.type.Dynamic2D; |
|
| 34 |
import org.distorted.library.type.Dynamic3D; |
|
| 35 |
import org.distorted.library.type.Dynamic4D; |
|
| 36 |
import org.distorted.library.type.Static1D; |
|
| 37 | 31 |
import org.distorted.library.type.Static2D; |
| 38 | 32 |
import org.distorted.library.type.Static3D; |
| 39 |
import org.distorted.library.type.Static4D; |
|
| 40 |
import org.distorted.library.type.DynamicQuat; |
|
| 41 | 33 |
|
| 42 | 34 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 43 | 35 |
/** |
| 44 | 36 |
* All Objects to which Distorted Graphics effects can be applied need to be extended from here. |
| 45 | 37 |
*/ |
| 46 | 38 |
public abstract class DistortedObject |
| 47 |
{
|
|
| 48 |
private static final Static2D mZero2D = new Static2D(0,0); |
|
| 49 |
private static final Static3D mZero3D = new Static3D(0,0,0); |
|
| 50 |
|
|
| 51 |
private static float[] mViewMatrix = new float[16]; |
|
| 39 |
{
|
|
| 40 |
private static float[] mViewMatrix = new float[16]; |
|
| 52 | 41 |
|
| 53 |
protected EffectQueueMatrix mM;
|
|
| 54 |
protected EffectQueueFragment mF;
|
|
| 55 |
protected EffectQueueVertex mV;
|
|
| 42 |
protected EffectQueueMatrix mM; |
|
| 43 |
protected EffectQueueFragment mF; |
|
| 44 |
protected EffectQueueVertex mV; |
|
| 56 | 45 |
|
| 57 |
protected boolean matrixCloned, vertexCloned, fragmentCloned;
|
|
| 46 |
protected boolean matrixCloned, vertexCloned, fragmentCloned; |
|
| 58 | 47 |
|
| 59 |
protected DistortedObjectGrid mGrid = null;
|
|
| 60 |
protected long mID;
|
|
| 61 |
protected int mSizeX, mSizeY, mSizeZ, mSize; // in screen space
|
|
| 48 |
protected DistortedObjectGrid mGrid = null; |
|
| 49 |
protected long mID; |
|
| 50 |
protected int mSizeX, mSizeY, mSizeZ, mSize; // in screen space |
|
| 62 | 51 |
|
| 63 |
protected Bitmap[] mBmp= null; //
|
|
| 64 |
int[] mTextureDataH; // have to be shared among all the cloned Objects
|
|
| 65 |
boolean[] mBitmapSet; //
|
|
| 52 |
protected Bitmap[] mBmp= null; //
|
|
| 53 |
int[] mTextureDataH; // have to be shared among all the cloned Objects |
|
| 54 |
boolean[] mBitmapSet; //
|
|
| 66 | 55 |
|
| 67 | 56 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 68 | 57 |
|
| 69 |
protected abstract DistortedObject deepCopy(int flags);
|
|
| 58 |
protected abstract DistortedObject deepCopy(int flags); |
|
| 70 | 59 |
|
| 71 | 60 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 72 | 61 |
|
| 73 |
protected void initializeData(int size)
|
|
| 74 |
{
|
|
| 75 |
mID = DistortedObjectList.add(this);
|
|
| 76 |
mSize = size;
|
|
| 77 |
mTextureDataH = new int[1];
|
|
| 78 |
mTextureDataH[0]= 0;
|
|
| 79 |
mBmp = new Bitmap[1];
|
|
| 80 |
mBmp[0] = null;
|
|
| 81 |
mBitmapSet = new boolean[1];
|
|
| 82 |
mBitmapSet[0] = false;
|
|
| 62 |
protected void initializeData(int size) |
|
| 63 |
{
|
|
| 64 |
mID = DistortedObjectList.add(this); |
|
| 65 |
mSize = size; |
|
| 66 |
mTextureDataH = new int[1]; |
|
| 67 |
mTextureDataH[0]= 0; |
|
| 68 |
mBmp = new Bitmap[1]; |
|
| 69 |
mBmp[0] = null; |
|
| 70 |
mBitmapSet = new boolean[1]; |
|
| 71 |
mBitmapSet[0] = false; |
|
| 83 | 72 |
|
| 84 |
initializeEffectLists(this,0);
|
|
| 73 |
initializeEffectLists(this,0); |
|
| 85 | 74 |
|
| 86 |
if( Distorted.isInitialized() ) resetTexture();
|
|
| 87 |
}
|
|
| 75 |
if( Distorted.isInitialized() ) resetTexture();
|
|
| 76 |
} |
|
| 88 | 77 |
|
| 89 | 78 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 90 | 79 |
|
| 91 |
protected void initializeEffectLists(DistortedObject d, int flags) |
|
| 80 |
protected void initializeEffectLists(DistortedObject d, int flags) |
|
| 81 |
{
|
|
| 82 |
if( (flags & Distorted.CLONE_PRESHADER) != 0 ) |
|
| 92 | 83 |
{
|
| 93 |
if( (flags & Distorted.CLONE_PRESHADER) != 0 ) |
|
| 94 |
{
|
|
| 95 |
mM = d.mM; |
|
| 96 |
matrixCloned = true; |
|
| 97 |
} |
|
| 98 |
else |
|
| 99 |
{
|
|
| 100 |
mM = new EffectQueueMatrix(d); |
|
| 101 |
matrixCloned = false; |
|
| 102 |
} |
|
| 84 |
mM = d.mM; |
|
| 85 |
matrixCloned = true; |
|
| 86 |
} |
|
| 87 |
else |
|
| 88 |
{
|
|
| 89 |
mM = new EffectQueueMatrix(d); |
|
| 90 |
matrixCloned = false; |
|
| 91 |
} |
|
| 103 | 92 |
|
| 104 |
if( (flags & Distorted.CLONE_VERTEX) != 0 )
|
|
| 105 |
{
|
|
| 106 |
mV = d.mV;
|
|
| 107 |
vertexCloned = true;
|
|
| 108 |
}
|
|
| 109 |
else
|
|
| 110 |
{
|
|
| 111 |
mV = new EffectQueueVertex(d);
|
|
| 112 |
vertexCloned = false;
|
|
| 113 |
}
|
|
| 93 |
if( (flags & Distorted.CLONE_VERTEX) != 0 ) |
|
| 94 |
{
|
|
| 95 |
mV = d.mV; |
|
| 96 |
vertexCloned = true; |
|
| 97 |
}
|
|
| 98 |
else |
|
| 99 |
{
|
|
| 100 |
mV = new EffectQueueVertex(d); |
|
| 101 |
vertexCloned = false;
|
|
| 102 |
} |
|
| 114 | 103 |
|
| 115 |
if( (flags & Distorted.CLONE_FRAGMENT) != 0 ) |
|
| 116 |
{
|
|
| 117 |
mF = d.mF; |
|
| 118 |
fragmentCloned = true; |
|
| 119 |
} |
|
| 120 |
else |
|
| 121 |
{
|
|
| 122 |
mF = new EffectQueueFragment(d); |
|
| 123 |
fragmentCloned = false; |
|
| 124 |
} |
|
| 104 |
if( (flags & Distorted.CLONE_FRAGMENT) != 0 ) |
|
| 105 |
{
|
|
| 106 |
mF = d.mF; |
|
| 107 |
fragmentCloned = true; |
|
| 125 | 108 |
} |
| 109 |
else |
|
| 110 |
{
|
|
| 111 |
mF = new EffectQueueFragment(d); |
|
| 112 |
fragmentCloned = false; |
|
| 113 |
} |
|
| 114 |
} |
|
| 126 | 115 |
|
| 127 | 116 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 128 | 117 |
// this will be called on startup and every time OpenGL context has been lost |
| 129 | 118 |
// also call this from the constructor if the OpenGL context has been created already. |
| 130 | 119 |
|
| 131 |
void resetTexture() |
|
| 120 |
void resetTexture() |
|
| 121 |
{
|
|
| 122 |
if( mTextureDataH!=null ) |
|
| 132 | 123 |
{
|
| 133 |
if( mTextureDataH!=null ) |
|
| 134 |
{
|
|
| 135 |
if( mTextureDataH[0]==0 ) GLES20.glGenTextures(1, mTextureDataH, 0); |
|
| 124 |
if( mTextureDataH[0]==0 ) GLES20.glGenTextures(1, mTextureDataH, 0); |
|
| 136 | 125 |
|
| 137 |
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureDataH[0]);
|
|
| 138 |
GLES20.glTexParameteri ( GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR );
|
|
| 139 |
GLES20.glTexParameteri ( GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR );
|
|
| 140 |
GLES20.glTexParameteri ( GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE );
|
|
| 141 |
GLES20.glTexParameteri ( GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE );
|
|
| 126 |
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureDataH[0]);
|
|
| 127 |
GLES20.glTexParameteri ( GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR ); |
|
| 128 |
GLES20.glTexParameteri ( GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR ); |
|
| 129 |
GLES20.glTexParameteri ( GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE ); |
|
| 130 |
GLES20.glTexParameteri ( GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE ); |
|
| 142 | 131 |
|
| 143 |
if( mBmp!=null && mBmp[0]!=null) |
|
| 144 |
{
|
|
| 145 |
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, mBmp[0], 0); |
|
| 146 |
mBmp[0] = null; |
|
| 147 |
} |
|
| 132 |
if( mBmp!=null && mBmp[0]!=null) |
|
| 133 |
{
|
|
| 134 |
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, mBmp[0], 0); |
|
| 135 |
mBmp[0] = null; |
|
| 148 | 136 |
} |
| 149 | 137 |
} |
| 138 |
} |
|
| 150 | 139 |
|
| 151 | 140 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 152 | 141 |
|
| 153 |
void drawPriv(long currTime, DistortedProjection dp)
|
|
| 154 |
{
|
|
| 155 |
GLES20.glViewport(0, 0, dp.width, dp.height);
|
|
| 142 |
void drawPriv(long currTime, DistortedProjection dp) |
|
| 143 |
{
|
|
| 144 |
GLES20.glViewport(0, 0, dp.width, dp.height);
|
|
| 156 | 145 |
|
| 157 |
mM.compute(currTime);
|
|
| 158 |
mM.send(mViewMatrix, dp);
|
|
| 146 |
mM.compute(currTime); |
|
| 147 |
mM.send(mViewMatrix, dp); |
|
| 159 | 148 |
|
| 160 |
mV.compute(currTime);
|
|
| 161 |
mV.postprocess();
|
|
| 162 |
mV.send();
|
|
| 149 |
mV.compute(currTime); |
|
| 150 |
mV.postprocess(); |
|
| 151 |
mV.send(); |
|
| 163 | 152 |
|
| 164 |
mF.compute(currTime);
|
|
| 165 |
mF.postprocess(mViewMatrix);
|
|
| 166 |
mF.send();
|
|
| 153 |
mF.compute(currTime); |
|
| 154 |
mF.postprocess(mViewMatrix); |
|
| 155 |
mF.send(); |
|
| 167 | 156 |
|
| 168 |
mGrid.draw();
|
|
| 169 |
}
|
|
| 157 |
mGrid.draw(); |
|
| 158 |
} |
|
| 170 | 159 |
|
| 171 | 160 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 172 | 161 |
|
| 173 |
void drawNoEffectsPriv(DistortedProjection dp)
|
|
| 174 |
{
|
|
| 175 |
GLES20.glViewport(0, 0, dp.width, dp.height);
|
|
| 176 |
mM.sendNoEffects(dp);
|
|
| 177 |
mV.sendZero();
|
|
| 178 |
mF.sendZero();
|
|
| 179 |
mGrid.draw();
|
|
| 180 |
}
|
|
| 162 |
void drawNoEffectsPriv(DistortedProjection dp) |
|
| 163 |
{
|
|
| 164 |
GLES20.glViewport(0, 0, dp.width, dp.height); |
|
| 165 |
mM.sendNoEffects(dp); |
|
| 166 |
mV.sendZero(); |
|
| 167 |
mF.sendZero(); |
|
| 168 |
mGrid.draw(); |
|
| 169 |
} |
|
| 181 | 170 |
|
| 182 | 171 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 183 | 172 |
|
| 184 |
void releasePriv()
|
|
| 185 |
{
|
|
| 186 |
if( matrixCloned ==false) mM.abortAll();
|
|
| 187 |
if( vertexCloned ==false) mV.abortAll();
|
|
| 188 |
if( fragmentCloned==false) mF.abortAll();
|
|
| 189 |
|
|
| 190 |
mBmp = null;
|
|
| 191 |
mGrid = null;
|
|
| 192 |
mM = null;
|
|
| 193 |
mV = null;
|
|
| 194 |
mF = null;
|
|
| 195 |
mTextureDataH = null;
|
|
| 196 |
}
|
|
| 173 |
void releasePriv() |
|
| 174 |
{
|
|
| 175 |
if( matrixCloned ==false) mM.abortAll(); |
|
| 176 |
if( vertexCloned ==false) mV.abortAll(); |
|
| 177 |
if( fragmentCloned==false) mF.abortAll(); |
|
| 178 |
|
|
| 179 |
mBmp = null; |
|
| 180 |
mGrid = null; |
|
| 181 |
mM = null; |
|
| 182 |
mV = null; |
|
| 183 |
mF = null; |
|
| 184 |
mTextureDataH = null; |
|
| 185 |
} |
|
| 197 | 186 |
|
| 198 | 187 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 199 | 188 |
|
| 200 |
long getBitmapID()
|
|
| 189 |
long getBitmapID() |
|
| 201 | 190 |
{
|
| 202 | 191 |
return mBmp==null ? 0 : mBmp.hashCode(); |
| 203 | 192 |
} |
| 204 | 193 |
|
| 205 | 194 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 195 |
/** |
|
| 196 |
* Default empty constructor so that derived classes can call it |
|
| 197 |
*/ |
|
| 198 |
public DistortedObject() |
|
| 199 |
{
|
|
| 206 | 200 |
|
| 207 |
/** |
|
| 208 |
* Default empty constructor so that derived classes can call it |
|
| 209 |
*/ |
|
| 210 |
public DistortedObject() |
|
| 211 |
{
|
|
| 212 |
|
|
| 213 |
} |
|
| 201 |
} |
|
| 214 | 202 |
|
| 215 | 203 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 216 |
/**
|
|
| 217 |
* Copy constructor used to create a DistortedObject based on various parts of another object.
|
|
| 218 |
* <p>
|
|
| 219 |
* Whatever we do not clone gets created just like in the default constructor.
|
|
| 220 |
* We only call this from the descendant's classes' constructors where we have to pay attention
|
|
| 221 |
* to give it the appropriate type of a DistortedObject!
|
|
| 222 |
*
|
|
| 223 |
* @param dc Source object to create our object from
|
|
| 224 |
* @param flags A bitmask of values specifying what to copy.
|
|
| 225 |
* For example, CLONE_BITMAP | CLONE_MATRIX.
|
|
| 226 |
*/
|
|
| 227 |
public DistortedObject(DistortedObject dc, int flags)
|
|
| 228 |
{
|
|
| 229 |
initializeEffectLists(dc,flags);
|
|
| 204 |
/** |
|
| 205 |
* Copy constructor used to create a DistortedObject based on various parts of another object. |
|
| 206 |
* <p> |
|
| 207 |
* Whatever we do not clone gets created just like in the default constructor. |
|
| 208 |
* We only call this from the descendant's classes' constructors where we have to pay attention |
|
| 209 |
* to give it the appropriate type of a DistortedObject! |
|
| 210 |
* |
|
| 211 |
* @param dc Source object to create our object from |
|
| 212 |
* @param flags A bitmask of values specifying what to copy. |
|
| 213 |
* For example, CLONE_BITMAP | CLONE_MATRIX. |
|
| 214 |
*/ |
|
| 215 |
public DistortedObject(DistortedObject dc, int flags) |
|
| 216 |
{
|
|
| 217 |
initializeEffectLists(dc,flags); |
|
| 230 | 218 |
|
| 231 |
mID = DistortedObjectList.add(this);
|
|
| 219 |
mID = DistortedObjectList.add(this); |
|
| 232 | 220 |
|
| 233 |
mSizeX = dc.mSizeX;
|
|
| 234 |
mSizeY = dc.mSizeY;
|
|
| 235 |
mSizeZ = dc.mSizeZ;
|
|
| 236 |
mSize = dc.mSize;
|
|
| 237 |
mGrid = dc.mGrid;
|
|
| 221 |
mSizeX = dc.mSizeX; |
|
| 222 |
mSizeY = dc.mSizeY; |
|
| 223 |
mSizeZ = dc.mSizeZ; |
|
| 224 |
mSize = dc.mSize; |
|
| 225 |
mGrid = dc.mGrid; |
|
| 238 | 226 |
|
| 239 |
if( (flags & Distorted.CLONE_BITMAP) != 0 ) |
|
| 240 |
{
|
|
| 241 |
mTextureDataH = dc.mTextureDataH; |
|
| 242 |
mBmp = dc.mBmp; |
|
| 243 |
mBitmapSet = dc.mBitmapSet; |
|
| 244 |
} |
|
| 245 |
else |
|
| 246 |
{
|
|
| 247 |
mTextureDataH = new int[1]; |
|
| 248 |
mTextureDataH[0]= 0; |
|
| 249 |
mBitmapSet = new boolean[1]; |
|
| 250 |
mBitmapSet[0] = false; |
|
| 251 |
mBmp = new Bitmap[1]; |
|
| 252 |
mBmp[0] = null; |
|
| 253 |
|
|
| 254 |
if( Distorted.isInitialized() ) resetTexture(); |
|
| 255 |
} |
|
| 227 |
if( (flags & Distorted.CLONE_BITMAP) != 0 ) |
|
| 228 |
{
|
|
| 229 |
mTextureDataH = dc.mTextureDataH; |
|
| 230 |
mBmp = dc.mBmp; |
|
| 231 |
mBitmapSet = dc.mBitmapSet; |
|
| 256 | 232 |
} |
| 233 |
else |
|
| 234 |
{
|
|
| 235 |
mTextureDataH = new int[1]; |
|
| 236 |
mTextureDataH[0]= 0; |
|
| 237 |
mBitmapSet = new boolean[1]; |
|
| 238 |
mBitmapSet[0] = false; |
|
| 239 |
mBmp = new Bitmap[1]; |
|
| 240 |
mBmp[0] = null; |
|
| 241 |
|
|
| 242 |
if( Distorted.isInitialized() ) resetTexture(); |
|
| 243 |
} |
|
| 244 |
} |
|
| 257 | 245 |
|
| 258 | 246 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 259 | 247 |
/** |
| ... | ... | |
| 263 | 251 |
* This gets passed on to Interpolators inside the Effects that are currently applied to the |
| 264 | 252 |
* Object. |
| 265 | 253 |
*/ |
| 266 |
public void draw(long currTime)
|
|
| 267 |
{
|
|
| 268 |
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
|
|
| 269 |
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0);
|
|
| 270 |
GLES20.glUniform1i(Distorted.mTextureUniformH, 0);
|
|
| 271 |
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureDataH[0]);
|
|
| 254 |
public void draw(long currTime) |
|
| 255 |
{
|
|
| 256 |
GLES20.glActiveTexture(GLES20.GL_TEXTURE0); |
|
| 257 |
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); |
|
| 258 |
GLES20.glUniform1i(Distorted.mTextureUniformH, 0);
|
|
| 259 |
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureDataH[0]);
|
|
| 272 | 260 |
|
| 273 |
drawPriv(currTime, Distorted.mProjection);
|
|
| 274 |
}
|
|
| 261 |
drawPriv(currTime, Distorted.mProjection); |
|
| 262 |
} |
|
| 275 | 263 |
|
| 276 | 264 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 277 | 265 |
/** |
| 278 | 266 |
* Releases all resources. |
| 279 | 267 |
*/ |
| 280 |
public synchronized void release()
|
|
| 281 |
{
|
|
| 282 |
releasePriv();
|
|
| 283 |
DistortedObjectList.remove(this);
|
|
| 284 |
}
|
|
| 268 |
public synchronized void release() |
|
| 269 |
{
|
|
| 270 |
releasePriv();
|
|
| 271 |
DistortedObjectList.remove(this); |
|
| 272 |
} |
|
| 285 | 273 |
|
| 286 | 274 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 287 | 275 |
/** |
| ... | ... | |
| 293 | 281 |
* @param bmp The android.graphics.Bitmap object to apply effects to and display. |
| 294 | 282 |
*/ |
| 295 | 283 |
|
| 296 |
public void setBitmap(Bitmap bmp)
|
|
| 297 |
{
|
|
| 298 |
mBitmapSet[0] = true;
|
|
| 284 |
public void setBitmap(Bitmap bmp) |
|
| 285 |
{
|
|
| 286 |
mBitmapSet[0] = true;
|
|
| 299 | 287 |
|
| 300 |
if( Distorted.isInitialized() )
|
|
| 301 |
{
|
|
| 302 |
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
|
|
| 303 |
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureDataH[0]);
|
|
| 304 |
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bmp, 0);
|
|
| 305 |
}
|
|
| 306 |
else
|
|
| 307 |
{
|
|
| 308 |
mBmp[0] = bmp;
|
|
| 309 |
}
|
|
| 310 |
}
|
|
| 288 |
if( Distorted.isInitialized() ) |
|
| 289 |
{
|
|
| 290 |
GLES20.glActiveTexture(GLES20.GL_TEXTURE0); |
|
| 291 |
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureDataH[0]);
|
|
| 292 |
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bmp, 0); |
|
| 293 |
} |
|
| 294 |
else |
|
| 295 |
{
|
|
| 296 |
mBmp[0] = bmp;
|
|
| 297 |
} |
|
| 298 |
} |
|
| 311 | 299 |
|
| 312 | 300 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 313 | 301 |
/** |
| ... | ... | |
| 316 | 304 |
* |
| 317 | 305 |
* @param el A class implementing the EffectListener interface that wants to get notifications. |
| 318 | 306 |
*/ |
| 319 |
public void addEventListener(EffectListener el)
|
|
| 320 |
{
|
|
| 321 |
mV.addListener(el);
|
|
| 322 |
mF.addListener(el);
|
|
| 323 |
mM.addListener(el);
|
|
| 324 |
}
|
|
| 307 |
public void addEventListener(EffectListener el) |
|
| 308 |
{
|
|
| 309 |
mV.addListener(el); |
|
| 310 |
mF.addListener(el); |
|
| 311 |
mM.addListener(el); |
|
| 312 |
} |
|
| 325 | 313 |
|
| 326 | 314 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 327 | 315 |
/** |
| ... | ... | |
| 329 | 317 |
* |
| 330 | 318 |
* @param el A class implementing the EffectListener interface that no longer wants to get notifications. |
| 331 | 319 |
*/ |
| 332 |
public void removeEventListener(EffectListener el)
|
|
| 333 |
{
|
|
| 334 |
mV.removeListener(el);
|
|
| 335 |
mF.removeListener(el);
|
|
| 336 |
mM.removeListener(el);
|
|
| 337 |
}
|
|
| 320 |
public void removeEventListener(EffectListener el) |
|
| 321 |
{
|
|
| 322 |
mV.removeListener(el); |
|
| 323 |
mF.removeListener(el); |
|
| 324 |
mM.removeListener(el); |
|
| 325 |
} |
|
| 338 | 326 |
|
| 339 | 327 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 340 | 328 |
/** |
| ... | ... | |
| 342 | 330 |
* |
| 343 | 331 |
* @return height of the object, in pixels. |
| 344 | 332 |
*/ |
| 345 |
public int getWidth()
|
|
| 333 |
public int getWidth() |
|
| 346 | 334 |
{
|
| 347 | 335 |
return mSizeX; |
| 348 | 336 |
} |
| ... | ... | |
| 353 | 341 |
* |
| 354 | 342 |
* @return width of the Object, in pixels. |
| 355 | 343 |
*/ |
| 356 |
public int getHeight()
|
|
| 344 |
public int getHeight() |
|
| 357 | 345 |
{
|
| 358 | 346 |
return mSizeY; |
| 359 | 347 |
} |
| ... | ... | |
| 364 | 352 |
* |
| 365 | 353 |
* @return depth of the Object, in pixels. |
| 366 | 354 |
*/ |
| 367 |
public int getDepth()
|
|
| 355 |
public int getDepth() |
|
| 368 | 356 |
{
|
| 369 | 357 |
return mSizeZ; |
| 370 | 358 |
} |
| ... | ... | |
| 375 | 363 |
* |
| 376 | 364 |
* @return ID of the object. |
| 377 | 365 |
*/ |
| 378 |
public long getID()
|
|
| 366 |
public long getID() |
|
| 379 | 367 |
{
|
| 380 | 368 |
return mID; |
| 381 | 369 |
} |
| ... | ... | |
| 385 | 373 |
* Aborts all Effects. |
| 386 | 374 |
* @return Number of effects aborted. |
| 387 | 375 |
*/ |
| 388 |
public int abortAllEffects()
|
|
| 376 |
public int abortAllEffects() |
|
| 389 | 377 |
{
|
| 390 | 378 |
return mM.abortAll() + mV.abortAll() + mF.abortAll(); |
| 391 | 379 |
} |
| ... | ... | |
| 397 | 385 |
* @param type one of the constants defined in {@link EffectTypes}
|
| 398 | 386 |
* @return Number of effects aborted. |
| 399 | 387 |
*/ |
| 400 |
public int abortEffects(EffectTypes type) |
|
| 388 |
public int abortEffects(EffectTypes type) |
|
| 389 |
{
|
|
| 390 |
switch(type) |
|
| 401 | 391 |
{
|
| 402 |
switch(type) |
|
| 403 |
{
|
|
| 404 |
case MATRIX : return mM.abortAll(); |
|
| 405 |
case VERTEX : return mV.abortAll(); |
|
| 406 |
case FRAGMENT: return mF.abortAll(); |
|
| 407 |
default : return 0; |
|
| 408 |
} |
|
| 392 |
case MATRIX : return mM.abortAll(); |
|
| 393 |
case VERTEX : return mV.abortAll(); |
|
| 394 |
case FRAGMENT: return mF.abortAll(); |
|
| 395 |
default : return 0; |
|
| 409 | 396 |
} |
| 397 |
} |
|
| 410 | 398 |
|
| 411 | 399 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 412 | 400 |
/** |
| ... | ... | |
| 415 | 403 |
* @param id ID of the Effect we want to abort. |
| 416 | 404 |
* @return number of Effects aborted. Always either 0 or 1. |
| 417 | 405 |
*/ |
| 418 |
public int abortEffect(long id)
|
|
| 419 |
{
|
|
| 420 |
int type = (int)(id&EffectTypes.MASK);
|
|
| 406 |
public int abortEffect(long id) |
|
| 407 |
{
|
|
| 408 |
int type = (int)(id&EffectTypes.MASK); |
|
| 421 | 409 |
|
| 422 |
if( type==EffectTypes.MATRIX.type ) return mM.removeByID(id>>EffectTypes.LENGTH);
|
|
| 423 |
if( type==EffectTypes.VERTEX.type ) return mV.removeByID(id>>EffectTypes.LENGTH);
|
|
| 424 |
if( type==EffectTypes.FRAGMENT.type ) return mF.removeByID(id>>EffectTypes.LENGTH);
|
|
| 410 |
if( type==EffectTypes.MATRIX.type ) return mM.removeByID(id>>EffectTypes.LENGTH); |
|
| 411 |
if( type==EffectTypes.VERTEX.type ) return mV.removeByID(id>>EffectTypes.LENGTH); |
|
| 412 |
if( type==EffectTypes.FRAGMENT.type ) return mF.removeByID(id>>EffectTypes.LENGTH); |
|
| 425 | 413 |
|
| 426 |
return 0;
|
|
| 427 |
}
|
|
| 414 |
return 0; |
|
| 415 |
} |
|
| 428 | 416 |
|
| 429 | 417 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 430 | 418 |
/** |
| ... | ... | |
| 433 | 421 |
* @param name one of the constants defined in {@link EffectNames}
|
| 434 | 422 |
* @return number of Effects aborted. |
| 435 | 423 |
*/ |
| 436 |
public int abortEffects(EffectNames name) |
|
| 424 |
public int abortEffects(EffectNames name) |
|
| 425 |
{
|
|
| 426 |
switch(name.getType()) |
|
| 437 | 427 |
{
|
| 438 |
switch(name.getType()) |
|
| 439 |
{
|
|
| 440 |
case MATRIX : return mM.removeByType(name); |
|
| 441 |
case VERTEX : return mV.removeByType(name); |
|
| 442 |
case FRAGMENT: return mF.removeByType(name); |
|
| 443 |
default : return 0; |
|
| 444 |
} |
|
| 428 |
case MATRIX : return mM.removeByType(name); |
|
| 429 |
case VERTEX : return mV.removeByType(name); |
|
| 430 |
case FRAGMENT: return mF.removeByType(name); |
|
| 431 |
default : return 0; |
|
| 445 | 432 |
} |
| 433 |
} |
|
| 446 | 434 |
|
| 447 | 435 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 448 | 436 |
/** |
| ... | ... | |
| 452 | 440 |
* @return <code>true</code> if a single Effect of type effectType has been found. |
| 453 | 441 |
*/ |
| 454 | 442 |
|
| 455 |
public boolean printEffect(long id)
|
|
| 456 |
{
|
|
| 457 |
int type = (int)(id&EffectTypes.MASK);
|
|
| 443 |
public boolean printEffect(long id) |
|
| 444 |
{
|
|
| 445 |
int type = (int)(id&EffectTypes.MASK); |
|
| 458 | 446 |
|
| 459 |
if( type==EffectTypes.MATRIX.type ) return mM.printByID(id>>EffectTypes.LENGTH);
|
|
| 460 |
if( type==EffectTypes.VERTEX.type ) return mV.printByID(id>>EffectTypes.LENGTH);
|
|
| 461 |
if( type==EffectTypes.FRAGMENT.type ) return mF.printByID(id>>EffectTypes.LENGTH);
|
|
| 447 |
if( type==EffectTypes.MATRIX.type ) return mM.printByID(id>>EffectTypes.LENGTH); |
|
| 448 |
if( type==EffectTypes.VERTEX.type ) return mV.printByID(id>>EffectTypes.LENGTH); |
|
| 449 |
if( type==EffectTypes.FRAGMENT.type ) return mF.printByID(id>>EffectTypes.LENGTH); |
|
| 462 | 450 |
|
| 463 |
return false;
|
|
| 464 |
}
|
|
| 451 |
return false; |
|
| 452 |
} |
|
| 465 | 453 |
|
| 466 | 454 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 467 | 455 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 501 | 489 |
* @param scale The factor to scale all 3 dimensions with. |
| 502 | 490 |
* @return ID of the effect added, or -1 if we failed to add one. |
| 503 | 491 |
*/ |
| 504 |
public long scale(float scale) |
|
| 505 |
{
|
|
| 506 |
return mM.add(EffectNames.SCALE, new Static3D(scale,scale,scale)); |
|
| 507 |
} |
|
| 492 |
public long scale(float scale)
|
|
| 493 |
{
|
|
| 494 |
return mM.add(EffectNames.SCALE, new Static3D(scale,scale,scale));
|
|
| 495 |
}
|
|
| 508 | 496 |
|
| 509 | 497 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 510 | 498 |
/** |
| ... | ... | |
| 765 | 753 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 766 | 754 |
/** |
| 767 | 755 |
* Distort a (possibly changing in time) part of the Object by a (possibly changing in time) vector of force. |
| 768 |
* <p> |
|
| 769 |
* Only at most one of the 'center' and 'region' can be a Dynamic! |
|
| 770 | 756 |
* |
| 771 | 757 |
* @param vector 3-dimensional Vector which represents the force the Center of the Effect is |
| 772 | 758 |
* currently being dragged with. |
| ... | ... | |
| 788 | 774 |
* @param center 2-dimensional Data that, at any given time, returns the Center of the Effect. |
| 789 | 775 |
* @return ID of the effect added, or -1 if we failed to add one. |
| 790 | 776 |
*/ |
| 791 |
public long distort(Data3D vector, Data2D center) |
|
| 792 |
{
|
|
| 793 |
return mV.add(EffectNames.DISTORT, vector, center); |
|
| 794 |
} |
|
| 777 |
public long distort(Data3D vector, Data2D center)
|
|
| 778 |
{
|
|
| 779 |
return mV.add(EffectNames.DISTORT, vector, center);
|
|
| 780 |
}
|
|
| 795 | 781 |
|
| 796 | 782 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 797 | 783 |
/** |
| ... | ... | |
| 811 | 797 |
/** |
| 812 | 798 |
* Pull all points around the center of the Effect towards the center (if degree>=1) or push them |
| 813 | 799 |
* away from the center (degree<=1) |
| 814 |
* <p> |
|
| 815 |
* Only at most one of the 'center' and 'region' can be a Dynamic! |
|
| 816 | 800 |
* |
| 817 | 801 |
* @param sink The current degree of the Effect. |
| 818 | 802 |
* @param center 2-dimensional Data that, at any given time, returns the Center of the Effect. |
| ... | ... | |
| 833 | 817 |
* @param center 2-dimensional Data that, at any given time, returns the Center of the Effect. |
| 834 | 818 |
* @return ID of the effect added, or -1 if we failed to add one. |
| 835 | 819 |
*/ |
| 836 |
public long sink(Data1D sink, Data2D center) |
|
| 837 |
{
|
|
| 838 |
return mV.add(EffectNames.SINK, sink, center); |
|
| 839 |
} |
|
| 820 |
public long sink(Data1D sink, Data2D center)
|
|
| 821 |
{
|
|
| 822 |
return mV.add(EffectNames.SINK, sink, center);
|
|
| 823 |
}
|
|
| 840 | 824 |
|
| 841 | 825 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 842 | 826 |
/** |
| 843 | 827 |
* Rotate part of the Object around the Center of the Effect by a certain angle. |
| 844 |
* <p> |
|
| 845 |
* Only at most one of the 'center' and 'region' can be a Dynamic! |
|
| 846 | 828 |
* |
| 847 | 829 |
* @param swirl The degree of Swirl. Positive values swirl clockwise. |
| 848 | 830 |
* @param center 2-dimensional Data that, at any given time, returns the Center of the Effect. |
| ... | ... | |
| 862 | 844 |
* @param center 2-dimensional Data that, at any given time, returns the Center of the Effect. |
| 863 | 845 |
* @return ID of the effect added, or -1 if we failed to add one. |
| 864 | 846 |
*/ |
| 865 |
public long swirl(Data1D swirl, Data2D center) |
|
| 866 |
{
|
|
| 867 |
return mV.add(EffectNames.SWIRL, swirl, center); |
|
| 847 |
public long swirl(Data1D swirl, Data2D center) |
|
| 848 |
{
|
|
| 849 |
return mV.add(EffectNames.SWIRL, swirl, center); |
|
| 850 |
} |
|
| 868 | 851 |
} |
| 869 |
} |
|
| src/main/java/org/distorted/library/EffectQueue.java | ||
|---|---|---|
| 22 | 22 |
import org.distorted.library.message.EffectListener; |
| 23 | 23 |
import org.distorted.library.message.EffectMessage; |
| 24 | 24 |
import org.distorted.library.type.Dynamic; |
| 25 |
import org.distorted.library.type.Dynamic2D; |
|
| 26 | 25 |
|
| 27 | 26 |
import java.util.Vector; |
| 28 | 27 |
|
| ... | ... | |
| 35 | 34 |
|
| 36 | 35 |
protected int[] mType; |
| 37 | 36 |
protected float[] mUniforms; |
| 38 |
protected Dynamic[] mInterP; // center of the effect |
|
| 39 |
protected Dynamic[] mInterI; // all other interpolated values |
|
| 37 |
protected Dynamic[][] mInter; // center of the effect |
|
| 40 | 38 |
protected long[] mCurrentDuration; |
| 41 | 39 |
protected byte[] mFreeIndexes; |
| 42 | 40 |
protected byte[] mIDIndex; |
| ... | ... | |
| 80 | 78 |
{
|
| 81 | 79 |
mType = new int[mMax[mMaxIndex]]; |
| 82 | 80 |
mUniforms = new float[numUniforms*mMax[mMaxIndex]]; |
| 83 |
mInterI = new Dynamic[mMax[mMaxIndex]]; |
|
| 84 |
mInterP = new Dynamic[mMax[mMaxIndex]]; |
|
| 81 |
mInter = new Dynamic[3][mMax[mMaxIndex]]; |
|
| 85 | 82 |
mCurrentDuration = new long[mMax[mMaxIndex]]; |
| 86 | 83 |
mID = new long[mMax[mMaxIndex]]; |
| 87 | 84 |
mIDIndex = new byte[mMax[mMaxIndex]]; |
| ... | ... | |
| 205 | 202 |
|
| 206 | 203 |
for(int i=0; i<ret; i++ ) |
| 207 | 204 |
{
|
| 208 |
mInterI[i] = null; |
|
| 209 |
mInterP[i] = null; |
|
| 205 |
mInter[0][i] = null; |
|
| 206 |
mInter[1][i] = null; |
|
| 207 |
mInter[2][i] = null; |
|
| 210 | 208 |
} |
| 211 | 209 |
|
| 212 | 210 |
mNumEffects= 0; |
| ... | ... | |
| 236 | 234 |
for(int j=effect; j<mNumEffects; j++ ) |
| 237 | 235 |
{
|
| 238 | 236 |
mType[j] = mType[j+1]; |
| 239 |
mInterI[j] = mInterI[j+1]; |
|
| 240 |
mInterP[j] = mInterP[j+1]; |
|
| 237 |
mInter[0][j] = mInter[0][j+1]; |
|
| 238 |
mInter[1][j] = mInter[1][j+1]; |
|
| 239 |
mInter[2][j] = mInter[2][j+1]; |
|
| 241 | 240 |
mCurrentDuration[j] = mCurrentDuration[j+1]; |
| 242 | 241 |
mID[j] = mID[j+1]; |
| 243 | 242 |
|
| 244 | 243 |
moveEffect(j); |
| 245 | 244 |
} |
| 246 | 245 |
|
| 247 |
mInterI[mNumEffects] = null; |
|
| 248 |
mInterP[mNumEffects] = null; |
|
| 249 |
|
|
| 246 |
mInter[0][mNumEffects] = null; |
|
| 247 |
mInter[1][mNumEffects] = null; |
|
| 248 |
mInter[2][mNumEffects] = null; |
|
| 249 |
|
|
| 250 | 250 |
for(int i=0; i<mNumListeners; i++) |
| 251 | 251 |
EffectMessageSender.newMessage( mListeners.elementAt(i), |
| 252 | 252 |
EffectMessage.EFFECT_REMOVED, |
| ... | ... | |
| 314 | 314 |
|
| 315 | 315 |
if( index>=0 ) |
| 316 | 316 |
{
|
| 317 |
boolean interI = mInterI[index]==null; |
|
| 318 |
boolean interP = mInterP[index]==null; |
|
| 319 |
|
|
| 320 |
android.util.Log.e("EffectQueue", "numEffects="+mNumEffects+" effect id="+id+" index="+index+" duration="+mCurrentDuration[index]+" interI null="+interI+" interP null="+interP);
|
|
| 317 |
boolean inter0 = mInter[0][index]==null; |
|
| 318 |
boolean inter1 = mInter[1][index]==null; |
|
| 319 |
boolean inter2 = mInter[2][index]==null; |
|
| 320 |
|
|
| 321 |
android.util.Log.e("EffectQueue", "numEffects="+mNumEffects+" effect id="+id+" index="+index+
|
|
| 322 |
" duration="+mCurrentDuration[index]+" inter[0] null="+inter0+" inter[1] null="+inter1+" inter[2] null="+inter2); |
|
| 321 | 323 |
|
| 322 |
if( interI==false )
|
|
| 324 |
if( inter0==false )
|
|
| 323 | 325 |
{
|
| 324 |
android.util.Log.e("EffectQueue","interI: "+mInterI[index].print());
|
|
| 326 |
android.util.Log.e("EffectQueue","inter[0]: "+mInter[0][index].print());
|
|
| 325 | 327 |
} |
| 326 |
if( interP==false )
|
|
| 328 |
if( inter1==false )
|
|
| 327 | 329 |
{
|
| 328 |
android.util.Log.e("EffectQueue","interP: "+mInterP[index].print());
|
|
| 330 |
android.util.Log.e("EffectQueue","inter[1]: "+mInter[1][index].print());
|
|
| 329 | 331 |
} |
| 330 |
|
|
| 332 |
if( inter2==false ) |
|
| 333 |
{
|
|
| 334 |
android.util.Log.e("EffectQueue","inter[2]: "+mInter[2][index].print());
|
|
| 335 |
} |
|
| 336 |
|
|
| 331 | 337 |
return true; |
| 332 | 338 |
} |
| 333 | 339 |
|
| src/main/java/org/distorted/library/EffectQueueFragment.java | ||
|---|---|---|
| 27 | 27 |
import org.distorted.library.type.Dynamic1D; |
| 28 | 28 |
import org.distorted.library.type.Dynamic4D; |
| 29 | 29 |
import org.distorted.library.type.Static1D; |
| 30 |
import org.distorted.library.type.Static2D; |
|
| 31 | 30 |
import org.distorted.library.type.Static3D; |
| 32 | 31 |
import org.distorted.library.type.Static4D; |
| 33 |
import org.distorted.library.type.Dynamic; |
|
| 34 |
import org.distorted.library.type.Dynamic2D; |
|
| 35 | 32 |
|
| 36 | 33 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 37 | 34 |
|
| ... | ... | |
| 75 | 72 |
|
| 76 | 73 |
for(int i=0; i<mNumEffects; i++) |
| 77 | 74 |
{
|
| 78 |
if( mInterI[i]==null ) continue;
|
|
| 75 |
if( mInter[0][i]==null ) continue;
|
|
| 79 | 76 |
|
| 80 |
if( mInterP[i]!=null ) mInterP[i].interpolateMain(mBuf, 4*i, mCurrentDuration[i]);
|
|
| 77 |
if( mInter[1][i]!=null ) mInter[1][i].interpolateMain(mBuf, 4*i, mCurrentDuration[i]);
|
|
| 81 | 78 |
|
| 82 |
if( mInterI[i].interpolateMain(mUniforms ,NUM_UNIFORMS*i, mCurrentDuration[i], step) )
|
|
| 79 |
if( mInter[0][i].interpolateMain(mUniforms ,NUM_UNIFORMS*i, mCurrentDuration[i], step) )
|
|
| 83 | 80 |
{
|
| 84 | 81 |
for(int j=0; j<mNumListeners; j++) |
| 85 | 82 |
EffectMessageSender.newMessage( mListeners.elementAt(j), |
| ... | ... | |
| 180 | 177 |
EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects); |
| 181 | 178 |
|
| 182 | 179 |
if( data instanceof Dynamic1D) |
| 183 |
mInterI[mNumEffects] = (Dynamic1D)data;
|
|
| 180 |
mInter[0][mNumEffects] = (Dynamic1D)data;
|
|
| 184 | 181 |
else if( data instanceof Static1D ) |
| 185 | 182 |
{
|
| 186 |
mInterI[mNumEffects] = null;
|
|
| 183 |
mInter[0][mNumEffects] = null;
|
|
| 187 | 184 |
mUniforms[NUM_UNIFORMS*mNumEffects] = ((Static1D)data).getX(); |
| 188 | 185 |
} |
| 189 | 186 |
else return -1; |
| 190 | 187 |
|
| 191 |
mInterP[mNumEffects] = null;
|
|
| 188 |
mInter[1][mNumEffects] = null;
|
|
| 192 | 189 |
mBuf[4*mNumEffects+2] = 1000*mObjHalfX; |
| 193 | 190 |
mBuf[4*mNumEffects+3] = 1000*mObjHalfY; |
| 194 | 191 |
|
| ... | ... | |
| 208 | 205 |
EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects); |
| 209 | 206 |
|
| 210 | 207 |
if( data instanceof Dynamic1D) |
| 211 |
mInterI[mNumEffects] = (Dynamic1D)data;
|
|
| 208 |
mInter[0][mNumEffects] = (Dynamic1D)data;
|
|
| 212 | 209 |
else if( data instanceof Static1D ) |
| 213 | 210 |
{
|
| 214 |
mInterI[mNumEffects] = null;
|
|
| 211 |
mInter[0][mNumEffects] = null;
|
|
| 215 | 212 |
mUniforms[NUM_UNIFORMS*mNumEffects] = ((Static1D)data).getX(); |
| 216 | 213 |
} |
| 217 | 214 |
else return -1; |
| 218 | 215 |
|
| 219 | 216 |
if( region instanceof Dynamic4D) |
| 220 |
mInterP[mNumEffects] = (Dynamic4D)region;
|
|
| 217 |
mInter[1][mNumEffects] = (Dynamic4D)region;
|
|
| 221 | 218 |
else if( region instanceof Static4D ) |
| 222 | 219 |
{
|
| 223 |
mInterP[mNumEffects] = null;
|
|
| 220 |
mInter[1][mNumEffects] = null;
|
|
| 224 | 221 |
mBuf[4*mNumEffects ] = ((Static4D)region).getX(); |
| 225 | 222 |
mBuf[4*mNumEffects+1] = ((Static4D)region).getY(); |
| 226 | 223 |
mBuf[4*mNumEffects+2] = ((Static4D)region).getZ(); |
| ... | ... | |
| 244 | 241 |
EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects); |
| 245 | 242 |
|
| 246 | 243 |
if( level instanceof Dynamic1D) |
| 247 |
mInterI[mNumEffects] = (Dynamic1D)level;
|
|
| 244 |
mInter[0][mNumEffects] = (Dynamic1D)level;
|
|
| 248 | 245 |
else if( level instanceof Static1D ) |
| 249 | 246 |
{
|
| 250 |
mInterI[mNumEffects] = null;
|
|
| 247 |
mInter[0][mNumEffects] = null;
|
|
| 251 | 248 |
mUniforms[NUM_UNIFORMS*mNumEffects] = ((Static1D)level).getX(); |
| 252 | 249 |
} |
| 253 | 250 |
else return -1; |
| ... | ... | |
| 257 | 254 |
mUniforms[NUM_UNIFORMS*mNumEffects+3] = color.getZ(); |
| 258 | 255 |
|
| 259 | 256 |
if( region instanceof Dynamic4D) |
| 260 |
mInterP[mNumEffects] = (Dynamic4D)region;
|
|
| 257 |
mInter[1][mNumEffects] = (Dynamic4D)region;
|
|
| 261 | 258 |
else if( region instanceof Static4D ) |
| 262 | 259 |
{
|
| 263 |
mInterP[mNumEffects] = null;
|
|
| 260 |
mInter[1][mNumEffects] = null;
|
|
| 264 | 261 |
mBuf[4*mNumEffects ] = ((Static4D)region).getX(); |
| 265 | 262 |
mBuf[4*mNumEffects+1] = ((Static4D)region).getY(); |
| 266 | 263 |
mBuf[4*mNumEffects+2] = ((Static4D)region).getZ(); |
| ... | ... | |
| 284 | 281 |
EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects); |
| 285 | 282 |
|
| 286 | 283 |
if( level instanceof Dynamic1D) |
| 287 |
mInterI[mNumEffects] = (Dynamic1D)level;
|
|
| 284 |
mInter[0][mNumEffects] = (Dynamic1D)level;
|
|
| 288 | 285 |
else if( level instanceof Static1D ) |
| 289 | 286 |
{
|
| 290 |
mInterI[mNumEffects] = null;
|
|
| 287 |
mInter[0][mNumEffects] = null;
|
|
| 291 | 288 |
mUniforms[NUM_UNIFORMS*mNumEffects] = ((Static1D)level).getX(); |
| 292 | 289 |
} |
| 293 | 290 |
else return -1; |
| ... | ... | |
| 296 | 293 |
mUniforms[NUM_UNIFORMS*mNumEffects+2] = color.getY(); |
| 297 | 294 |
mUniforms[NUM_UNIFORMS*mNumEffects+3] = color.getZ(); |
| 298 | 295 |
|
| 299 |
mInterP[mNumEffects] = null; //
|
|
| 296 |
mInter[1][mNumEffects] = null; //
|
|
| 300 | 297 |
mBuf[4*mNumEffects+2] = 1000*mObjHalfX; // i.e. null region |
| 301 | 298 |
mBuf[4*mNumEffects+3] = 1000*mObjHalfY; // |
| 302 | 299 |
|
| ... | ... | |
| 316 | 313 |
EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects); |
| 317 | 314 |
|
| 318 | 315 |
if( chroma instanceof Dynamic4D) |
| 319 |
mInterI[mNumEffects] = (Dynamic4D)chroma;
|
|
| 316 |
mInter[0][mNumEffects] = (Dynamic4D)chroma;
|
|
| 320 | 317 |
else if( chroma instanceof Static4D ) |
| 321 | 318 |
{
|
| 322 |
mInterI[mNumEffects] = null;
|
|
| 319 |
mInter[0][mNumEffects] = null;
|
|
| 323 | 320 |
mUniforms[NUM_UNIFORMS*mNumEffects ] = ((Static4D)chroma).getX(); |
| 324 | 321 |
mUniforms[NUM_UNIFORMS*mNumEffects+1] = ((Static4D)chroma).getY(); |
| 325 | 322 |
mUniforms[NUM_UNIFORMS*mNumEffects+2] = ((Static4D)chroma).getZ(); |
| ... | ... | |
| 328 | 325 |
else return -1; |
| 329 | 326 |
|
| 330 | 327 |
if( region instanceof Dynamic4D) |
| 331 |
mInterP[mNumEffects] = (Dynamic4D)region;
|
|
| 328 |
mInter[1][mNumEffects] = (Dynamic4D)region;
|
|
| 332 | 329 |
else if( region instanceof Static4D ) |
| 333 | 330 |
{
|
| 334 |
mInterP[mNumEffects] = null;
|
|
| 331 |
mInter[1][mNumEffects] = null;
|
|
| 335 | 332 |
mBuf[4*mNumEffects ] = ((Static4D)region).getX(); |
| 336 | 333 |
mBuf[4*mNumEffects+1] = ((Static4D)region).getY(); |
| 337 | 334 |
mBuf[4*mNumEffects+2] = ((Static4D)region).getZ(); |
| ... | ... | |
| 355 | 352 |
EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects); |
| 356 | 353 |
|
| 357 | 354 |
if( chroma instanceof Dynamic4D) |
| 358 |
mInterI[mNumEffects] = (Dynamic4D)chroma;
|
|
| 355 |
mInter[0][mNumEffects] = (Dynamic4D)chroma;
|
|
| 359 | 356 |
else if( chroma instanceof Static4D ) |
| 360 | 357 |
{
|
| 361 |
mInterI[mNumEffects] = null;
|
|
| 358 |
mInter[0][mNumEffects] = null;
|
|
| 362 | 359 |
mUniforms[NUM_UNIFORMS*mNumEffects ] = ((Static4D)chroma).getX(); |
| 363 | 360 |
mUniforms[NUM_UNIFORMS*mNumEffects+1] = ((Static4D)chroma).getY(); |
| 364 | 361 |
mUniforms[NUM_UNIFORMS*mNumEffects+2] = ((Static4D)chroma).getZ(); |
| ... | ... | |
| 366 | 363 |
} |
| 367 | 364 |
else return -1; |
| 368 | 365 |
|
| 369 |
mInterP[mNumEffects] = null; //
|
|
| 366 |
mInter[1][mNumEffects] = null; //
|
|
| 370 | 367 |
mBuf[4*mNumEffects+2] = 1000*mObjHalfX; // i.e. null region |
| 371 | 368 |
mBuf[4*mNumEffects+3] = 1000*mObjHalfY; // |
| 372 | 369 |
|
| src/main/java/org/distorted/library/EffectQueueMatrix.java | ||
|---|---|---|
| 32 | 32 |
import org.distorted.library.type.DynamicQuat; |
| 33 | 33 |
import org.distorted.library.type.Static1D; |
| 34 | 34 |
import org.distorted.library.type.Static3D; |
| 35 |
import org.distorted.library.type.Dynamic; |
|
| 36 | 35 |
import org.distorted.library.type.Static4D; |
| 37 | 36 |
|
| 38 | 37 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 106 | 105 |
|
| 107 | 106 |
for(int i=0; i<mNumEffects; i++) |
| 108 | 107 |
{
|
| 109 |
if( mInterI[i]==null ) continue;
|
|
| 108 |
if( mInter[0][i]==null ) continue;
|
|
| 110 | 109 |
|
| 111 |
if( mInterP[i]!=null )
|
|
| 110 |
if( mInter[1][i]!=null )
|
|
| 112 | 111 |
{
|
| 113 |
mInterP[i].interpolateMain(mUniforms, NUM_UNIFORMS*i, mCurrentDuration[i]);
|
|
| 112 |
mInter[1][i].interpolateMain(mUniforms, NUM_UNIFORMS*i, mCurrentDuration[i]);
|
|
| 114 | 113 |
} |
| 115 | 114 |
|
| 116 |
if( mInterI[i].interpolateMain(mUniforms ,NUM_UNIFORMS*i+3, mCurrentDuration[i], step) )
|
|
| 115 |
if( mInter[0][i].interpolateMain(mUniforms ,NUM_UNIFORMS*i+3, mCurrentDuration[i], step) )
|
|
| 117 | 116 |
{
|
| 118 | 117 |
for(int j=0; j<mNumListeners; j++) |
| 119 | 118 |
EffectMessageSender.newMessage( mListeners.elementAt(j), |
| ... | ... | |
| 257 | 256 |
{
|
| 258 | 257 |
if( mMax[INDEX]>mNumEffects ) |
| 259 | 258 |
{
|
| 260 |
mInterP[mNumEffects] = null;
|
|
| 259 |
mInter[1][mNumEffects] = null;
|
|
| 261 | 260 |
|
| 262 |
if( vector instanceof Dynamic3D) mInterI[mNumEffects] = (Dynamic3D)vector;
|
|
| 261 |
if( vector instanceof Dynamic3D) mInter[0][mNumEffects] = (Dynamic3D)vector;
|
|
| 263 | 262 |
else if( vector instanceof Static3D ) |
| 264 | 263 |
{
|
| 265 |
mInterI[mNumEffects] = null;
|
|
| 264 |
mInter[0][mNumEffects] = null;
|
|
| 266 | 265 |
mUniforms[NUM_UNIFORMS*mNumEffects+3] = ((Static3D)vector).getX(); |
| 267 | 266 |
mUniforms[NUM_UNIFORMS*mNumEffects+4] = ((Static3D)vector).getY(); |
| 268 | 267 |
mUniforms[NUM_UNIFORMS*mNumEffects+5] = ((Static3D)vector).getZ(); |
| ... | ... | |
| 282 | 281 |
{
|
| 283 | 282 |
if( mMax[INDEX]>mNumEffects ) |
| 284 | 283 |
{
|
| 285 |
if( center instanceof Dynamic3D) mInterP[mNumEffects] = (Dynamic3D)center;
|
|
| 284 |
if( center instanceof Dynamic3D) mInter[1][mNumEffects] = (Dynamic3D)center;
|
|
| 286 | 285 |
else if( center instanceof Static3D ) |
| 287 | 286 |
{
|
| 288 |
mInterP[mNumEffects] = null;
|
|
| 287 |
mInter[1][mNumEffects] = null;
|
|
| 289 | 288 |
mUniforms[NUM_UNIFORMS*mNumEffects ] = ((Static3D)center).getX(); |
| 290 | 289 |
mUniforms[NUM_UNIFORMS*mNumEffects+1] = ((Static3D)center).getY(); |
| 291 | 290 |
mUniforms[NUM_UNIFORMS*mNumEffects+2] = ((Static3D)center).getZ(); |
| 292 | 291 |
} |
| 293 | 292 |
else return -1; |
| 294 | 293 |
|
| 295 |
if( angle instanceof Dynamic1D) mInterI[mNumEffects] = (Dynamic1D)angle;
|
|
| 294 |
if( angle instanceof Dynamic1D) mInter[0][mNumEffects] = (Dynamic1D)angle;
|
|
| 296 | 295 |
else if( angle instanceof Static1D) |
| 297 | 296 |
{
|
| 298 |
mInterI[mNumEffects] = null;
|
|
| 297 |
mInter[0][mNumEffects] = null;
|
|
| 299 | 298 |
mUniforms[NUM_UNIFORMS*mNumEffects+3] = ((Static1D)angle).getX(); |
| 300 | 299 |
} |
| 301 | 300 |
else return -1; |
| ... | ... | |
| 317 | 316 |
{
|
| 318 | 317 |
if( mMax[INDEX]>mNumEffects ) |
| 319 | 318 |
{
|
| 320 |
if( center instanceof Dynamic3D) mInterP[mNumEffects] = (Dynamic3D)center;
|
|
| 319 |
if( center instanceof Dynamic3D) mInter[1][mNumEffects] = (Dynamic3D)center;
|
|
| 321 | 320 |
else if( center instanceof Static3D ) |
| 322 | 321 |
{
|
| 323 |
mInterP[mNumEffects] = null;
|
|
| 322 |
mInter[1][mNumEffects] = null;
|
|
| 324 | 323 |
mUniforms[NUM_UNIFORMS*mNumEffects ] = ((Static3D)center).getX(); |
| 325 | 324 |
mUniforms[NUM_UNIFORMS*mNumEffects+1] = ((Static3D)center).getY(); |
| 326 | 325 |
mUniforms[NUM_UNIFORMS*mNumEffects+2] = ((Static3D)center).getZ(); |
| 327 | 326 |
} |
| 328 | 327 |
else return -1; |
| 329 | 328 |
|
| 330 |
if( data instanceof Dynamic4D ) mInterI[mNumEffects] = (Dynamic4D)data;
|
|
| 331 |
else if( data instanceof DynamicQuat) mInterI[mNumEffects] = (DynamicQuat)data;
|
|
| 329 |
if( data instanceof Dynamic4D ) mInter[0][mNumEffects] = (Dynamic4D)data;
|
|
| 330 |
else if( data instanceof DynamicQuat) mInter[0][mNumEffects] = (DynamicQuat)data;
|
|
| 332 | 331 |
else if( data instanceof Static4D ) |
| 333 | 332 |
{
|
| 334 |
mInterI[mNumEffects] = null;
|
|
| 333 |
mInter[0][mNumEffects] = null;
|
|
| 335 | 334 |
mUniforms[NUM_UNIFORMS*mNumEffects+3] = ((Static4D)data).getX(); |
| 336 | 335 |
mUniforms[NUM_UNIFORMS*mNumEffects+4] = ((Static4D)data).getY(); |
| 337 | 336 |
mUniforms[NUM_UNIFORMS*mNumEffects+5] = ((Static4D)data).getZ(); |
| ... | ... | |
| 352 | 351 |
{
|
| 353 | 352 |
if( mMax[INDEX]>mNumEffects ) |
| 354 | 353 |
{
|
| 355 |
if( center instanceof Dynamic3D) mInterP[mNumEffects] = (Dynamic3D)center;
|
|
| 354 |
if( center instanceof Dynamic3D) mInter[1][mNumEffects] = (Dynamic3D)center;
|
|
| 356 | 355 |
else if( center instanceof Static3D ) |
| 357 | 356 |
{
|
| 358 |
mInterP[mNumEffects] = null;
|
|
| 357 |
mInter[1][mNumEffects] = null;
|
|
| 359 | 358 |
mUniforms[NUM_UNIFORMS*mNumEffects ] = ((Static3D)center).getX(); |
| 360 | 359 |
mUniforms[NUM_UNIFORMS*mNumEffects+1] = ((Static3D)center).getY(); |
| 361 | 360 |
mUniforms[NUM_UNIFORMS*mNumEffects+2] = ((Static3D)center).getZ(); |
| 362 | 361 |
} |
| 363 | 362 |
else return -1; |
| 364 | 363 |
|
| 365 |
if( shear instanceof Dynamic3D) mInterI[mNumEffects] = (Dynamic3D)shear;
|
|
| 364 |
if( shear instanceof Dynamic3D) mInter[0][mNumEffects] = (Dynamic3D)shear;
|
|
| 366 | 365 |
else if( shear instanceof Static3D ) |
| 367 | 366 |
{
|
| 368 |
mInterI[mNumEffects] = null;
|
|
| 367 |
mInter[0][mNumEffects] = null;
|
|
| 369 | 368 |
mUniforms[NUM_UNIFORMS*mNumEffects+3] = ((Static3D)shear).getX(); |
| 370 | 369 |
mUniforms[NUM_UNIFORMS*mNumEffects+4] = ((Static3D)shear).getY(); |
| 371 | 370 |
mUniforms[NUM_UNIFORMS*mNumEffects+5] = ((Static3D)shear).getZ(); |
| src/main/java/org/distorted/library/EffectQueueVertex.java | ||
|---|---|---|
| 26 | 26 |
import org.distorted.library.type.Data2D; |
| 27 | 27 |
import org.distorted.library.type.Data3D; |
| 28 | 28 |
import org.distorted.library.type.Data4D; |
| 29 |
import org.distorted.library.type.Dynamic; |
|
| 30 | 29 |
import org.distorted.library.type.Dynamic1D; |
| 31 | 30 |
import org.distorted.library.type.Dynamic2D; |
| 31 |
import org.distorted.library.type.Dynamic3D; |
|
| 32 | 32 |
import org.distorted.library.type.Dynamic4D; |
| 33 | 33 |
import org.distorted.library.type.Static1D; |
| 34 | 34 |
import org.distorted.library.type.Static2D; |
| 35 |
import org.distorted.library.type.Static3D; |
|
| 35 | 36 |
import org.distorted.library.type.Static4D; |
| 36 | 37 |
|
| 37 | 38 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 70 | 71 |
|
| 71 | 72 |
for(int i=0; i<mNumEffects; i++) |
| 72 | 73 |
{
|
| 73 |
if( mInterI[i]==null ) continue;
|
|
| 74 |
if( mInter[0][i]==null ) continue;
|
|
| 74 | 75 |
|
| 75 |
if( mInterP[i]!=null )
|
|
| 76 |
if( mInter[1][i]!=null )
|
|
| 76 | 77 |
{
|
| 77 |
mInterP[i].interpolateMain(mUniforms, NUM_UNIFORMS*i+7, mCurrentDuration[i]);
|
|
| 78 |
mInter[1][i].interpolateMain(mUniforms, NUM_UNIFORMS*i+7, mCurrentDuration[i]);
|
|
| 78 | 79 |
|
| 79 | 80 |
mUniforms[NUM_UNIFORMS*i+7] = mUniforms[NUM_UNIFORMS*i+7]-mObjHalfX; |
| 80 | 81 |
mUniforms[NUM_UNIFORMS*i+8] =-mUniforms[NUM_UNIFORMS*i+8]+mObjHalfY; |
| 81 | 82 |
} |
| 82 |
|
|
| 83 |
if( mInterI[i].interpolateMain(mUniforms ,NUM_UNIFORMS*i, mCurrentDuration[i], step) ) |
|
| 83 |
|
|
| 84 |
if( mInter[2][i]!=null ) |
|
| 85 |
{
|
|
| 86 |
mInter[2][i].interpolateMain(mUniforms, NUM_UNIFORMS*i+3, mCurrentDuration[i]); |
|
| 87 |
} |
|
| 88 |
|
|
| 89 |
if( mInter[0][i].interpolateMain(mUniforms ,NUM_UNIFORMS*i, mCurrentDuration[i], step) ) |
|
| 84 | 90 |
{
|
| 85 | 91 |
for(int j=0; j<mNumListeners; j++) |
| 86 | 92 |
EffectMessageSender.newMessage( mListeners.elementAt(j), |
| ... | ... | |
| 160 | 166 |
} |
| 161 | 167 |
|
| 162 | 168 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 163 |
|
|
| 169 |
// distort |
|
| 170 |
|
|
| 164 | 171 |
synchronized long add(EffectNames eln, Data3D data, Data2D center, Data4D region) |
| 165 | 172 |
{
|
| 166 | 173 |
if( mMax[INDEX]>mNumEffects ) |
| 167 | 174 |
{
|
| 168 | 175 |
EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects); |
| 169 |
|
|
| 170 |
mInterI[mNumEffects] = inter; |
|
| 171 |
mInterP[mNumEffects] = point; |
|
| 172 | 176 |
|
| 173 |
return addPriv(eln,region); |
|
| 177 |
if( data instanceof Dynamic3D) |
|
| 178 |
mInter[0][mNumEffects] = (Dynamic3D)data; |
|
| 179 |
else if( data instanceof Static3D) |
|
| 180 |
{
|
|
| 181 |
mInter[0][mNumEffects] = null; |
|
| 182 |
mUniforms[NUM_UNIFORMS*mNumEffects ] = ((Static3D)data).getX(); |
|
| 183 |
mUniforms[NUM_UNIFORMS*mNumEffects+1] = ((Static3D)data).getY(); |
|
| 184 |
mUniforms[NUM_UNIFORMS*mNumEffects+2] = ((Static3D)data).getZ(); |
|
| 185 |
} |
|
| 186 |
|
|
| 187 |
return addPriv(eln,center,region); |
|
| 174 | 188 |
} |
| 175 | 189 |
|
| 176 | 190 |
return -1; |
| 177 | 191 |
} |
| 178 | 192 |
|
| 179 | 193 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 180 |
|
|
| 194 |
// deform, distort |
|
| 195 |
|
|
| 181 | 196 |
synchronized long add(EffectNames eln, Data3D data, Data2D center) |
| 182 | 197 |
{
|
| 183 | 198 |
if( mMax[INDEX]>mNumEffects ) |
| 184 | 199 |
{
|
| 185 | 200 |
EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects); |
| 186 |
|
|
| 187 |
mInterI[mNumEffects] = inter; |
|
| 188 |
mInterP[mNumEffects] = null; |
|
| 189 |
mUniforms[NUM_UNIFORMS*mNumEffects+7] = point.getX()-mObjHalfX; |
|
| 190 |
mUniforms[NUM_UNIFORMS*mNumEffects+8] =-point.getY()+mObjHalfY; |
|
| 191 |
|
|
| 192 |
return addPriv(eln,null); |
|
| 201 |
|
|
| 202 |
if( data instanceof Dynamic3D) |
|
| 203 |
mInter[0][mNumEffects] = (Dynamic3D)data; |
|
| 204 |
else if( data instanceof Static3D) |
|
| 205 |
{
|
|
| 206 |
mInter[0][mNumEffects] = null; |
|
| 207 |
mUniforms[NUM_UNIFORMS*mNumEffects ] = ((Static3D)data).getX(); |
|
| 208 |
mUniforms[NUM_UNIFORMS*mNumEffects+1] = ((Static3D)data).getY(); |
|
| 209 |
mUniforms[NUM_UNIFORMS*mNumEffects+2] = ((Static3D)data).getZ(); |
|
| 210 |
} |
|
| 211 |
|
|
| 212 |
return addPriv(eln,center,null); |
|
| 193 | 213 |
} |
| 194 | 214 |
|
| 195 | 215 |
return -1; |
| 196 | 216 |
} |
| 197 | 217 |
|
| 198 | 218 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 199 |
|
|
| 219 |
// sink, swirl |
|
| 220 |
|
|
| 200 | 221 |
synchronized long add(EffectNames eln, Data1D data, Data2D center, Data4D region) |
| 201 | 222 |
{
|
| 202 | 223 |
if( mMax[INDEX]>mNumEffects ) |
| 203 | 224 |
{
|
| 204 |
EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects);
|
|
| 205 |
mUniforms[NUM_UNIFORMS*mNumEffects ] = v1; |
|
| 206 |
mUniforms[NUM_UNIFORMS*mNumEffects+1] = v2;
|
|
| 207 |
mUniforms[NUM_UNIFORMS*mNumEffects+2] = v3;
|
|
| 208 |
|
|
| 209 |
mInterI[mNumEffects] = null;
|
|
| 210 |
mInterP[mNumEffects] = null;
|
|
| 211 |
mUniforms[NUM_UNIFORMS*mNumEffects+7] = point.getX()-mObjHalfX;
|
|
| 212 |
mUniforms[NUM_UNIFORMS*mNumEffects+8] =-point.getY()+mObjHalfY;
|
|
| 213 |
|
|
| 214 |
return addPriv(eln,region);
|
|
| 225 |
EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects); |
|
| 226 |
|
|
| 227 |
if( data instanceof Dynamic1D)
|
|
| 228 |
mInter[0][mNumEffects] = (Dynamic1D)data;
|
|
| 229 |
else if( data instanceof Static1D) |
|
| 230 |
{
|
|
| 231 |
mInter[0][mNumEffects] = null;
|
|
| 232 |
mUniforms[NUM_UNIFORMS*mNumEffects] = ((Static1D)data).getX();
|
|
| 233 |
}
|
|
| 234 |
|
|
| 235 |
return addPriv(eln,center,region);
|
|
| 215 | 236 |
} |
| 216 | 237 |
|
| 217 | 238 |
return -1; |
| ... | ... | |
| 227 | 248 |
EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects); |
| 228 | 249 |
|
| 229 | 250 |
if( data instanceof Dynamic1D) |
| 230 |
mInterI[mNumEffects] = (Dynamic1D)data;
|
|
| 251 |
mInter[0][mNumEffects] = (Dynamic1D)data;
|
|
| 231 | 252 |
else if( data instanceof Static1D) |
| 232 | 253 |
{
|
| 233 |
mInterI[mNumEffects] = null;
|
|
| 254 |
mInter[0][mNumEffects] = null;
|
|
| 234 | 255 |
mUniforms[NUM_UNIFORMS*mNumEffects] = ((Static1D)data).getX(); |
| 235 | 256 |
} |
| 236 | 257 |
|
| 237 |
mUniforms[NUM_UNIFORMS*mNumEffects+7] = point.getX()-mObjHalfX; |
|
| 238 |
mUniforms[NUM_UNIFORMS*mNumEffects+8] =-point.getY()+mObjHalfY; |
|
| 239 |
|
|
| 240 |
return addPriv(eln,null); |
|
| 258 |
return addPriv(eln,center,null); |
|
| 241 | 259 |
} |
| 242 | 260 |
|
| 243 | 261 |
return -1; |
| ... | ... | |
| 245 | 263 |
|
| 246 | 264 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 247 | 265 |
|
| 248 |
private long addPriv(EffectNames eln, Data4D region) |
|
| 249 |
{
|
|
| 266 |
private long addPriv(EffectNames eln, Data2D center, Data4D region) |
|
| 267 |
{
|
|
| 268 |
if( center instanceof Dynamic2D) |
|
| 269 |
mInter[1][mNumEffects] = (Dynamic2D)center; |
|
| 270 |
else if( center instanceof Static2D) |
|
| 271 |
{
|
|
| 272 |
mInter[1][mNumEffects] = null; |
|
| 273 |
mUniforms[NUM_UNIFORMS*mNumEffects+7] = ((Static2D)center).getX()-mObjHalfX; |
|
| 274 |
mUniforms[NUM_UNIFORMS*mNumEffects+8] =-((Static2D)center).getY()+mObjHalfY; |
|
| 275 |
} |
|
| 276 |
|
|
| 250 | 277 |
if( region!=null ) |
| 251 | 278 |
{
|
| 252 | 279 |
if( region instanceof Dynamic4D) |
| 253 | 280 |
{
|
| 254 |
mInterP[mNumEffects] = (Dynamic4D)region;
|
|
| 281 |
mInter[2][mNumEffects] = (Dynamic4D)region;
|
|
| 255 | 282 |
} |
| 256 | 283 |
else if ( region instanceof Static4D) |
| 257 | 284 |
{
|
| ... | ... | |
| 263 | 290 |
mUniforms[NUM_UNIFORMS*mNumEffects+4] =-tmp.getY(); // invert y already |
| 264 | 291 |
mUniforms[NUM_UNIFORMS*mNumEffects+5] = z<=0.0f ? 1000*mObjHalfX : z; |
| 265 | 292 |
mUniforms[NUM_UNIFORMS*mNumEffects+6] = tmp.getW(); |
| 293 |
mInter[2][mNumEffects] = null; |
|
| 266 | 294 |
} |
| 267 | 295 |
else return -1; |
| 268 | 296 |
} |
| ... | ... | |
| 272 | 300 |
mUniforms[NUM_UNIFORMS*mNumEffects+4] = 0.0f; |
| 273 | 301 |
mUniforms[NUM_UNIFORMS*mNumEffects+5] = 1000*mObjHalfX; |
| 274 | 302 |
mUniforms[NUM_UNIFORMS*mNumEffects+6] = 0.0f; |
| 303 |
mInter[2][mNumEffects] = null; |
|
| 275 | 304 |
} |
| 276 | 305 |
|
| 277 | 306 |
return addBase(eln); |
Also available in: Unified diff
Some more progress with porting apps to new VERTEX API.