Project

General

Profile

« Previous | Next » 

Revision 41a81a14

Added by Leszek Koltunski over 7 years ago

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!)

View differences:

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