| /* | |
| * Copyright 2015 The WebRTC project authors. All Rights Reserved. | |
| * | |
| * Use of this source code is governed by a BSD-style license | |
| * that can be found in the LICENSE file in the root of the source | |
| * tree. An additional intellectual property rights grant can be found | |
| * in the file PATENTS. All contributing project authors may | |
| * be found in the AUTHORS file in the root of the source tree. | |
| */ | |
| package org.webrtc; | |
| import android.opengl.GLES20; | |
| import android.opengl.GLException; | |
| import java.nio.ByteBuffer; | |
| import java.nio.ByteOrder; | |
| import java.nio.FloatBuffer; | |
| /** | |
| * Some OpenGL static utility functions. | |
| */ | |
| public class GlUtil { | |
| private GlUtil() {} | |
| public static class GlOutOfMemoryException extends GLException { | |
| public GlOutOfMemoryException(int error, String msg) { | |
| super(error, msg); | |
| } | |
| } | |
| // Assert that no OpenGL ES 2.0 error has been raised. | |
| public static void checkNoGLES2Error(String msg) { | |
| int error = GLES20.glGetError(); | |
| if (error != GLES20.GL_NO_ERROR) { | |
| throw error == GLES20.GL_OUT_OF_MEMORY | |
| ? new GlOutOfMemoryException(error, msg) | |
| : new GLException(error, msg + ": GLES20 error: " + error); | |
| } | |
| } | |
| public static FloatBuffer createFloatBuffer(float[] coords) { | |
| // Allocate a direct ByteBuffer, using 4 bytes per float, and copy coords into it. | |
| ByteBuffer bb = ByteBuffer.allocateDirect(coords.length * 4); | |
| bb.order(ByteOrder.nativeOrder()); | |
| FloatBuffer fb = bb.asFloatBuffer(); | |
| fb.put(coords); | |
| fb.position(0); | |
| return fb; | |
| } | |
| /** | |
| * Generate texture with standard parameters. | |
| */ | |
| public static int generateTexture(int target) { | |
| final int textureArray[] = new int[1]; | |
| GLES20.glGenTextures(1, textureArray, 0); | |
| final int textureId = textureArray[0]; | |
| GLES20.glBindTexture(target, textureId); | |
| GLES20.glTexParameterf(target, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); | |
| GLES20.glTexParameterf(target, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); | |
| GLES20.glTexParameterf(target, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); | |
| GLES20.glTexParameterf(target, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); | |
| checkNoGLES2Error("generateTexture"); | |
| return textureId; | |
| } | |
| } |