Revision b7074bc6
Added by Leszek Koltunski about 4 years ago
src/main/java/org/distorted/library/effectqueue/EffectQueuePostprocess.java | ||
---|---|---|
20 | 20 |
package org.distorted.library.effectqueue; |
21 | 21 |
|
22 | 22 |
import android.content.res.Resources; |
23 |
import android.opengl.GLES31;
|
|
23 |
import android.opengl.GLES30;
|
|
24 | 24 |
import android.util.Log; |
25 | 25 |
|
26 | 26 |
import org.distorted.library.R; |
... | ... | |
108 | 108 |
|
109 | 109 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
110 | 110 |
|
111 |
public static void createPrograms(Resources resources) |
|
111 |
public static void createPrograms(Resources resources, int GLSL)
|
|
112 | 112 |
{ |
113 | 113 |
final InputStream mainVertStream = resources.openRawResource(R.raw.main_vertex_shader); |
114 | 114 |
final InputStream mainFragStream = resources.openRawResource(R.raw.preprocess_fragment_shader); |
115 | 115 |
|
116 | 116 |
int numV = VertexEffect.getNumEnabled(); |
117 | 117 |
|
118 |
String mainVertHeader= DistortedLibrary.GLSL_VERSION + ("#define NUM_VERTEX " + ( numV>0 ? DistortedLibrary.getMax(EffectType.VERTEX ) : 0 ) + "\n"); |
|
119 |
String mainFragHeader= DistortedLibrary.GLSL_VERSION + "\n"; |
|
118 |
String version = "#version "+GLSL+" es\n"; |
|
119 |
String mainVertHeader= version + ("#define NUM_VERTEX " + ( numV>0 ? DistortedLibrary.getMax(EffectType.VERTEX ) : 0 ) + "\n"); |
|
120 |
String mainFragHeader= version + "\n"; |
|
120 | 121 |
|
121 | 122 |
String enabledEffectV= VertexEffect.getGLSL(); |
122 | 123 |
|
123 | 124 |
try |
124 | 125 |
{ |
125 | 126 |
mPreProgram = new DistortedProgram(mainVertStream, mainFragStream, mainVertHeader, mainFragHeader, |
126 |
enabledEffectV, null, DistortedLibrary.GLSL, null);
|
|
127 |
enabledEffectV, null, GLSL, null); |
|
127 | 128 |
} |
128 | 129 |
catch(Exception e) |
129 | 130 |
{ |
... | ... | |
134 | 135 |
int preProgramH = mPreProgram.getProgramHandle(); |
135 | 136 |
EffectQueueVertex.getUniforms( preProgramH,2 ); |
136 | 137 |
EffectQueueMatrix.getUniforms( preProgramH,2 ); |
137 |
mPreColorH = GLES31.glGetUniformLocation( preProgramH, "u_Color" );
|
|
138 |
mPreTextureH= GLES31.glGetUniformLocation( preProgramH, "u_Texture");
|
|
138 |
mPreColorH = GLES30.glGetUniformLocation( preProgramH, "u_Color" );
|
|
139 |
mPreTextureH= GLES30.glGetUniformLocation( preProgramH, "u_Texture");
|
|
139 | 140 |
} |
140 | 141 |
|
141 | 142 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
167 | 168 |
InternalRenderState.setUpStencilMark(mA!=0.0f); |
168 | 169 |
InternalRenderState.disableBlending(); |
169 | 170 |
|
170 |
GLES31.glViewport(0, 0, width, height );
|
|
171 |
GLES30.glViewport(0, 0, width, height );
|
|
171 | 172 |
|
172 | 173 |
mPreProgram.useProgram(); |
173 | 174 |
|
... | ... | |
190 | 191 |
|
191 | 192 |
if( mA!=0.0f ) |
192 | 193 |
{ |
193 |
GLES31.glUniform4f(mPreColorH, mR, mG, mB, mA);
|
|
194 |
GLES31.glUniform1i(mPreTextureH, 0);
|
|
194 |
GLES30.glUniform4f(mPreColorH, mR, mG, mB, mA);
|
|
195 |
GLES30.glUniform1i(mPreTextureH, 0);
|
|
195 | 196 |
} |
196 | 197 |
|
197 |
GLES31.glDrawArrays(GLES31.GL_TRIANGLE_STRIP, 0, mesh.getNumVertices() );
|
|
198 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, mesh.getNumVertices() );
|
|
198 | 199 |
|
199 | 200 |
InternalRenderState.restoreBlending(); |
200 | 201 |
InternalRenderState.unsetUpStencilMark(); |
... | ... | |
208 | 209 |
{ |
209 | 210 |
int numRenders = 0; |
210 | 211 |
|
211 |
GLES31.glDisable(GLES31.GL_BLEND);
|
|
212 |
GLES30.glDisable(GLES30.GL_BLEND);
|
|
212 | 213 |
|
213 | 214 |
for(int i=0; i<mNumEffects; i++) |
214 | 215 |
{ |
215 | 216 |
numRenders += ((PostprocessEffect)mEffects[i]).apply(mUniforms,NUM_UNIFORMS*i, buffer); |
216 | 217 |
} |
217 | 218 |
|
218 |
GLES31.glEnable(GLES31.GL_BLEND);
|
|
219 |
GLES30.glEnable(GLES30.GL_BLEND);
|
|
219 | 220 |
|
220 | 221 |
return numRenders; |
221 | 222 |
} |
Also available in: Unified diff
Lower requirements - now only OpenGL ES 3.0 is required; if running on such platform, OIT part of the API ( which is the only one which actually requires 3.1) is switched off.