package org.andengine.opengl.shader.source;
import org.andengine.opengl.shader.exception.ShaderProgramException;
import org.andengine.opengl.util.GLState;
import org.andengine.opengl.util.criteria.IGLCriteria;
/**
* (c) Zynga 2011
*
* @author Nicolas Gramlich <ngramlich@zynga.com>
* @since 16:30:12 - 10.10.2011
*/
public class CriteriaShaderSource implements IShaderSource {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private final CriteriaShaderSourceEntry[] mCriteriaShaderSourceEntries;
// ===========================================================
// Constructors
// ===========================================================
public CriteriaShaderSource(final CriteriaShaderSourceEntry ... pCriteriaShaderSourceEntries) {
this.mCriteriaShaderSourceEntries = pCriteriaShaderSourceEntries;
}
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
public String getShaderSource(final GLState pGLState) {
for(int i = 0; i < this.mCriteriaShaderSourceEntries.length; i++) {
final CriteriaShaderSourceEntry criteriaShaderSourceEntry = this.mCriteriaShaderSourceEntries[i];
if(criteriaShaderSourceEntry.isMet(pGLState)) {
return criteriaShaderSourceEntry.getShaderSource();
}
}
throw new ShaderProgramException("No " + CriteriaShaderSourceEntry.class.getSimpleName() + " met!");
}
// ===========================================================
// Methods
// ===========================================================
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
public static class CriteriaShaderSourceEntry {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private final String mShaderSource;
private final IGLCriteria[] mGLCriterias;
// ===========================================================
// Constructors
// ===========================================================
public CriteriaShaderSourceEntry(final String pShaderSource) {
this(pShaderSource, (IGLCriteria[]) null);
}
public CriteriaShaderSourceEntry(final String pShaderSource, final IGLCriteria ... pCriterias) {
this.mGLCriterias = pCriterias;
this.mShaderSource = pShaderSource;
}
// ===========================================================
// Getter & Setter
// ===========================================================
public String getShaderSource() {
return this.mShaderSource;
}
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
// ===========================================================
// Methods
// ===========================================================
public boolean isMet(final GLState pGLState) {
if(this.mGLCriterias != null) {
for(IGLCriteria gLCriteria : this.mGLCriterias) {
if(!gLCriteria.isMet(pGLState)) {
return false;
}
}
}
return true;
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}
}