• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright 2015 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 package org.webrtc;
12 
13 import android.opengl.GLES20;
14 
15 import java.nio.ByteBuffer;
16 import java.nio.ByteOrder;
17 import java.nio.FloatBuffer;
18 
19 /**
20  * Some OpenGL static utility functions.
21  */
22 public class GlUtil {
GlUtil()23   private GlUtil() {}
24 
25   public static class GlOutOfMemoryException extends RuntimeException {
GlOutOfMemoryException(String msg)26     public GlOutOfMemoryException(String msg) {
27       super(msg);
28     }
29   }
30 
31   // Assert that no OpenGL ES 2.0 error has been raised.
checkNoGLES2Error(String msg)32   public static void checkNoGLES2Error(String msg) {
33     int error = GLES20.glGetError();
34     if (error != GLES20.GL_NO_ERROR) {
35       throw error == GLES20.GL_OUT_OF_MEMORY
36           ? new GlOutOfMemoryException(msg)
37           : new RuntimeException(msg + ": GLES20 error: " + error);
38     }
39   }
40 
createFloatBuffer(float[] coords)41   public static FloatBuffer createFloatBuffer(float[] coords) {
42     // Allocate a direct ByteBuffer, using 4 bytes per float, and copy coords into it.
43     ByteBuffer bb = ByteBuffer.allocateDirect(coords.length * 4);
44     bb.order(ByteOrder.nativeOrder());
45     FloatBuffer fb = bb.asFloatBuffer();
46     fb.put(coords);
47     fb.position(0);
48     return fb;
49   }
50 
51   /**
52    * Generate texture with standard parameters.
53    */
generateTexture(int target)54   public static int generateTexture(int target) {
55     final int textureArray[] = new int[1];
56     GLES20.glGenTextures(1, textureArray, 0);
57     final int textureId = textureArray[0];
58     GLES20.glBindTexture(target, textureId);
59     GLES20.glTexParameterf(target, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
60     GLES20.glTexParameterf(target, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
61     GLES20.glTexParameterf(target, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
62     GLES20.glTexParameterf(target, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
63     checkNoGLES2Error("generateTexture");
64     return textureId;
65   }
66 }
67