Revision 41a81a14
Added by Leszek Koltunski over 7 years ago
src/main/java/org/distorted/examples/aroundtheworld/AroundTheWorldRendererPicker.java | ||
---|---|---|
26 | 26 |
import javax.microedition.khronos.egl.EGLConfig; |
27 | 27 |
import javax.microedition.khronos.opengles.GL10; |
28 | 28 |
|
29 |
import android.opengl.GLES20;
|
|
29 |
import android.opengl.GLES30;
|
|
30 | 30 |
import android.opengl.GLSurfaceView; |
31 | 31 |
import android.opengl.Matrix; |
32 | 32 |
|
... | ... | |
105 | 105 |
|
106 | 106 |
@Override public void onSurfaceCreated(GL10 glUnused, EGLConfig config) |
107 | 107 |
{ |
108 |
GLES20.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
|
|
108 |
GLES30.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
|
|
109 | 109 |
|
110 | 110 |
final float eyeX = 0.0f; |
111 | 111 |
final float eyeY = 0.0f; |
... | ... | |
142 | 142 |
+ " gl_FragColor = v_Color; \n" |
143 | 143 |
+ " } \n"; |
144 | 144 |
|
145 |
int vertexShaderHandle = GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER);
|
|
145 |
int vertexShaderHandle = GLES30.glCreateShader(GLES30.GL_VERTEX_SHADER);
|
|
146 | 146 |
|
147 | 147 |
if (vertexShaderHandle != 0) |
148 | 148 |
{ |
149 |
GLES20.glShaderSource(vertexShaderHandle, vertexShader);
|
|
150 |
GLES20.glCompileShader(vertexShaderHandle);
|
|
149 |
GLES30.glShaderSource(vertexShaderHandle, vertexShader);
|
|
150 |
GLES30.glCompileShader(vertexShaderHandle);
|
|
151 | 151 |
|
152 | 152 |
final int[] compileStatus = new int[1]; |
153 |
GLES20.glGetShaderiv(vertexShaderHandle, GLES20.GL_COMPILE_STATUS, compileStatus, 0);
|
|
153 |
GLES30.glGetShaderiv(vertexShaderHandle, GLES30.GL_COMPILE_STATUS, compileStatus, 0);
|
|
154 | 154 |
|
155 | 155 |
if (compileStatus[0] == 0) |
156 | 156 |
{ |
157 |
GLES20.glDeleteShader(vertexShaderHandle);
|
|
157 |
GLES30.glDeleteShader(vertexShaderHandle);
|
|
158 | 158 |
vertexShaderHandle = 0; |
159 | 159 |
} |
160 | 160 |
} |
... | ... | |
164 | 164 |
throw new RuntimeException("Error creating vertex shader."); |
165 | 165 |
} |
166 | 166 |
|
167 |
int fragmentShaderHandle = GLES20.glCreateShader(GLES20.GL_FRAGMENT_SHADER);
|
|
167 |
int fragmentShaderHandle = GLES30.glCreateShader(GLES30.GL_FRAGMENT_SHADER);
|
|
168 | 168 |
|
169 | 169 |
if (fragmentShaderHandle != 0) |
170 | 170 |
{ |
171 |
GLES20.glShaderSource(fragmentShaderHandle, fragmentShader);
|
|
172 |
GLES20.glCompileShader(fragmentShaderHandle);
|
|
171 |
GLES30.glShaderSource(fragmentShaderHandle, fragmentShader);
|
|
172 |
GLES30.glCompileShader(fragmentShaderHandle);
|
|
173 | 173 |
|
174 | 174 |
final int[] compileStatus = new int[1]; |
175 |
GLES20.glGetShaderiv(fragmentShaderHandle, GLES20.GL_COMPILE_STATUS, compileStatus, 0);
|
|
175 |
GLES30.glGetShaderiv(fragmentShaderHandle, GLES30.GL_COMPILE_STATUS, compileStatus, 0);
|
|
176 | 176 |
|
177 | 177 |
if (compileStatus[0] == 0) |
178 | 178 |
{ |
179 |
GLES20.glDeleteShader(fragmentShaderHandle);
|
|
179 |
GLES30.glDeleteShader(fragmentShaderHandle);
|
|
180 | 180 |
fragmentShaderHandle = 0; |
181 | 181 |
} |
182 | 182 |
} |
... | ... | |
186 | 186 |
throw new RuntimeException("Error creating fragment shader."); |
187 | 187 |
} |
188 | 188 |
|
189 |
int programHandle = GLES20.glCreateProgram();
|
|
189 |
int programHandle = GLES30.glCreateProgram();
|
|
190 | 190 |
|
191 | 191 |
if (programHandle != 0) |
192 | 192 |
{ |
193 |
GLES20.glAttachShader(programHandle, vertexShaderHandle);
|
|
194 |
GLES20.glAttachShader(programHandle, fragmentShaderHandle);
|
|
195 |
GLES20.glBindAttribLocation(programHandle, 0, "a_Position");
|
|
196 |
GLES20.glBindAttribLocation(programHandle, 1, "a_Color");
|
|
197 |
GLES20.glLinkProgram(programHandle);
|
|
193 |
GLES30.glAttachShader(programHandle, vertexShaderHandle);
|
|
194 |
GLES30.glAttachShader(programHandle, fragmentShaderHandle);
|
|
195 |
GLES30.glBindAttribLocation(programHandle, 0, "a_Position");
|
|
196 |
GLES30.glBindAttribLocation(programHandle, 1, "a_Color");
|
|
197 |
GLES30.glLinkProgram(programHandle);
|
|
198 | 198 |
|
199 | 199 |
final int[] linkStatus = new int[1]; |
200 |
GLES20.glGetProgramiv(programHandle, GLES20.GL_LINK_STATUS, linkStatus, 0);
|
|
200 |
GLES30.glGetProgramiv(programHandle, GLES30.GL_LINK_STATUS, linkStatus, 0);
|
|
201 | 201 |
|
202 | 202 |
if (linkStatus[0] == 0) |
203 | 203 |
{ |
204 |
GLES20.glDeleteProgram(programHandle);
|
|
204 |
GLES30.glDeleteProgram(programHandle);
|
|
205 | 205 |
programHandle = 0; |
206 | 206 |
} |
207 | 207 |
} |
... | ... | |
211 | 211 |
throw new RuntimeException("Error creating program."); |
212 | 212 |
} |
213 | 213 |
|
214 |
mMVPMatrixH = GLES20.glGetUniformLocation(programHandle, "u_MVPMatrix");
|
|
215 |
mPositionH = GLES20.glGetAttribLocation(programHandle, "a_Position");
|
|
216 |
mColorH = GLES20.glGetAttribLocation(programHandle, "a_Color");
|
|
214 |
mMVPMatrixH = GLES30.glGetUniformLocation(programHandle, "u_MVPMatrix");
|
|
215 |
mPositionH = GLES30.glGetAttribLocation(programHandle, "a_Position");
|
|
216 |
mColorH = GLES30.glGetAttribLocation(programHandle, "a_Color");
|
|
217 | 217 |
|
218 |
GLES20.glUseProgram(programHandle);
|
|
218 |
GLES30.glUseProgram(programHandle);
|
|
219 | 219 |
} |
220 | 220 |
|
221 | 221 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
225 | 225 |
mHeight = height; |
226 | 226 |
mWidth = width; |
227 | 227 |
|
228 |
GLES20.glViewport(0, 0, width, height);
|
|
228 |
GLES30.glViewport(0, 0, width, height);
|
|
229 | 229 |
|
230 | 230 |
final float ratio = (float) width / height; |
231 | 231 |
final float left =-ratio; |
... | ... | |
243 | 243 |
|
244 | 244 |
@Override public void onDrawFrame(GL10 glUnused) |
245 | 245 |
{ |
246 |
GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
|
|
247 |
GLES20.glUniformMatrix4fv(mMVPMatrixH, 1, false, mMVPTriangleMatrix, 0);
|
|
246 |
GLES30.glClear(GLES30.GL_DEPTH_BUFFER_BIT | GLES30.GL_COLOR_BUFFER_BIT);
|
|
247 |
GLES30.glUniformMatrix4fv(mMVPMatrixH, 1, false, mMVPTriangleMatrix, 0);
|
|
248 | 248 |
|
249 | 249 |
///////// 'white-black-yellow' triangle ////// |
250 | 250 |
mTriangleVert.position(POSITION_OFFSET); |
251 |
GLES20.glVertexAttribPointer(mPositionH, POSITION_DATA_SIZE, GLES20.GL_FLOAT, false, STRIDE_BYTES, mTriangleVert);
|
|
252 |
GLES20.glEnableVertexAttribArray(mPositionH);
|
|
251 |
GLES30.glVertexAttribPointer(mPositionH, POSITION_DATA_SIZE, GLES30.GL_FLOAT, false, STRIDE_BYTES, mTriangleVert);
|
|
252 |
GLES30.glEnableVertexAttribArray(mPositionH);
|
|
253 | 253 |
mTriangleVert.position(COLOR_OFFSET); |
254 |
GLES20.glVertexAttribPointer(mColorH, COLOR_DATA_SIZE, GLES20.GL_FLOAT, false, STRIDE_BYTES, mTriangleVert);
|
|
255 |
GLES20.glEnableVertexAttribArray(mColorH);
|
|
254 |
GLES30.glVertexAttribPointer(mColorH, COLOR_DATA_SIZE, GLES30.GL_FLOAT, false, STRIDE_BYTES, mTriangleVert);
|
|
255 |
GLES30.glEnableVertexAttribArray(mColorH);
|
|
256 | 256 |
|
257 |
GLES20.glUniformMatrix4fv(mMVPMatrixH, 1, false, mMVPTriangleMatrix, 0);
|
|
258 |
GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3);
|
|
257 |
GLES30.glUniformMatrix4fv(mMVPMatrixH, 1, false, mMVPTriangleMatrix, 0);
|
|
258 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLES, 0, 3);
|
|
259 | 259 |
|
260 | 260 |
//////// 'current position' square /////////// |
261 | 261 |
mSquareVert.position(POSITION_OFFSET); |
262 |
GLES20.glVertexAttribPointer(mPositionH, POSITION_DATA_SIZE, GLES20.GL_FLOAT, false, STRIDE_BYTES, mSquareVert);
|
|
263 |
GLES20.glEnableVertexAttribArray(mPositionH);
|
|
262 |
GLES30.glVertexAttribPointer(mPositionH, POSITION_DATA_SIZE, GLES30.GL_FLOAT, false, STRIDE_BYTES, mSquareVert);
|
|
263 |
GLES30.glEnableVertexAttribArray(mPositionH);
|
|
264 | 264 |
mSquareVert.position(COLOR_OFFSET); |
265 |
GLES20.glVertexAttribPointer(mColorH, COLOR_DATA_SIZE, GLES20.GL_FLOAT, false, STRIDE_BYTES, mSquareVert);
|
|
266 |
GLES20.glEnableVertexAttribArray(mColorH);
|
|
265 |
GLES30.glVertexAttribPointer(mColorH, COLOR_DATA_SIZE, GLES30.GL_FLOAT, false, STRIDE_BYTES, mSquareVert);
|
|
266 |
GLES30.glEnableVertexAttribArray(mColorH);
|
|
267 | 267 |
|
268 | 268 |
Matrix.multiplyMM(mMVPSquareMatrix, 0, mViewMatrix, 0, mModelMatrix, 0); |
269 | 269 |
Matrix.multiplyMM(mMVPSquareMatrix, 0, mProjectionMatrix, 0, mMVPSquareMatrix, 0); |
270 | 270 |
|
271 |
GLES20.glUniformMatrix4fv(mMVPMatrixH, 1, false, mMVPSquareMatrix, 0);
|
|
272 |
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0,4);
|
|
271 |
GLES30.glUniformMatrix4fv(mMVPMatrixH, 1, false, mMVPSquareMatrix, 0);
|
|
272 |
GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0,4);
|
|
273 | 273 |
} |
274 | 274 |
} |
Also available in: Unified diff
Try using OpenGL ES 3.0 everywhere (but if device does not support it, try creating 2.0 context - this is important because of the emulator!)