Revision 03cb451d
Added by Leszek Koltunski about 7 years ago
src/main/java/org/distorted/library/DistortedEffects.java | ||
---|---|---|
55 | 55 |
private static final int TEX_DATA_SIZE = 2; // Main Program: size of the texture coordinate data in elements. |
56 | 56 |
|
57 | 57 |
private static DistortedProgram mProgram; |
58 |
private static boolean[] mEffectEnabled = new boolean[EffectNames.size()]; |
|
59 |
|
|
60 |
static |
|
61 |
{ |
|
62 |
int len = EffectNames.size(); |
|
63 |
|
|
64 |
for(int i=0; i<len; i++) |
|
65 |
{ |
|
66 |
mEffectEnabled[i] = false; |
|
67 |
} |
|
68 |
} |
|
58 | 69 |
|
59 | 70 |
/// DEBUG ONLY ///// |
60 | 71 |
private static DistortedProgram mDebugProgram; |
... | ... | |
91 | 102 |
static void createProgram(Resources resources) |
92 | 103 |
throws FragmentCompilationException,VertexCompilationException,VertexUniformsException,FragmentUniformsException,LinkingException |
93 | 104 |
{ |
94 |
final InputStream mainVertexStream = resources.openRawResource(R.raw.main_vertex_shader); |
|
95 |
final InputStream mainFragmentStream = resources.openRawResource(R.raw.main_fragment_shader); |
|
105 |
final InputStream mainVertStream = resources.openRawResource(R.raw.main_vertex_shader); |
|
106 |
final InputStream mainFragStream = resources.openRawResource(R.raw.main_fragment_shader); |
|
107 |
|
|
108 |
String mainVertHeader= ("#version 100\n"); |
|
109 |
String mainFragHeader= ("#version 100\n"); |
|
96 | 110 |
|
97 |
String mainVertexHeader= ("#version 100\n#define NUM_VERTEX " + getMaxVertex()+"\n"); |
|
111 |
EffectNames name; |
|
112 |
EffectTypes type; |
|
113 |
boolean foundF = false; |
|
114 |
boolean foundV = false; |
|
98 | 115 |
|
99 |
for(EffectNames name: EffectNames.values() )
|
|
116 |
for(int i=0; i<mEffectEnabled.length; i++)
|
|
100 | 117 |
{ |
101 |
if( name.getType()== EffectTypes.VERTEX) |
|
102 |
mainVertexHeader += ("#define "+name.name()+" "+name.ordinal()+"\n"); |
|
118 |
if( mEffectEnabled[i] ) |
|
119 |
{ |
|
120 |
name = EffectNames.getName(i); |
|
121 |
type = EffectNames.getType(i); |
|
122 |
|
|
123 |
if( type == EffectTypes.VERTEX ) |
|
124 |
{ |
|
125 |
mainVertHeader += ("#define "+name.name()+" "+name.ordinal()+"\n"); |
|
126 |
foundV = true; |
|
127 |
} |
|
128 |
else if( type == EffectTypes.FRAGMENT ) |
|
129 |
{ |
|
130 |
mainFragHeader += ("#define "+name.name()+" "+name.ordinal()+"\n"); |
|
131 |
foundF = true; |
|
132 |
} |
|
133 |
} |
|
103 | 134 |
} |
104 | 135 |
|
105 |
String mainFragmentHeader= ("#version 100\n#define NUM_FRAGMENT " + getMaxFragment()+"\n"); |
|
136 |
mainVertHeader += ("#define NUM_VERTEX " + ( foundV ? getMaxVertex() : 0 ) + "\n"); |
|
137 |
mainFragHeader += ("#define NUM_FRAGMENT " + ( foundF ? getMaxFragment() : 0 ) + "\n"); |
|
106 | 138 |
|
107 |
for(EffectNames name: EffectNames.values() ) |
|
108 |
{ |
|
109 |
if( name.getType()== EffectTypes.FRAGMENT) |
|
110 |
mainFragmentHeader += ("#define "+name.name()+" "+name.ordinal()+"\n"); |
|
111 |
} |
|
139 |
//android.util.Log.e("Effects", "vertHeader= "+mainVertHeader); |
|
140 |
//android.util.Log.e("Effects", "fragHeader= "+mainFragHeader); |
|
112 | 141 |
|
113 |
mProgram = new DistortedProgram(mainVertexStream,mainFragmentStream, mainVertexHeader, mainFragmentHeader);
|
|
142 |
mProgram = new DistortedProgram(mainVertStream,mainFragStream, mainVertHeader, mainFragHeader);
|
|
114 | 143 |
|
115 | 144 |
int mainProgramH = mProgram.getProgramHandle(); |
116 | 145 |
EffectQueueFragment.getUniforms(mainProgramH); |
... | ... | |
332 | 361 |
static void onDestroy() |
333 | 362 |
{ |
334 | 363 |
mNextID = 0; |
364 |
|
|
365 |
int len = EffectNames.size(); |
|
366 |
|
|
367 |
for(int i=0; i<len; i++) |
|
368 |
{ |
|
369 |
mEffectEnabled[i] = false; |
|
370 |
} |
|
335 | 371 |
} |
336 | 372 |
|
337 | 373 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
498 | 534 |
return false; |
499 | 535 |
} |
500 | 536 |
|
537 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
538 |
/** |
|
539 |
* Enables a given Effect. |
|
540 |
* <p> |
|
541 |
* By default, all effects are disabled. One has to explicitly enable each effect one intends to use. |
|
542 |
* This needs to be called BEFORE shaders get compiled, i.e. before the call to Distorted.onCreate(). |
|
543 |
* The point: by enabling only the effects we need, we can optimize the shaders. |
|
544 |
* |
|
545 |
* @param name Name of the Effect to enable. |
|
546 |
*/ |
|
547 |
public static void enableEffect(EffectNames name) |
|
548 |
{ |
|
549 |
mEffectEnabled[name.ordinal()] = true; |
|
550 |
} |
|
551 |
|
|
501 | 552 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
502 | 553 |
/** |
503 | 554 |
* Returns the maximum number of Matrix effects. |
Also available in: Unified diff
Speed up shaders (both compilation and execution) by explicitly enabling only the needed effects.