41 lines
1.2 KiB
Java
41 lines
1.2 KiB
Java
|
|
package com.xscm.moduleutil.widget;
|
||
|
|
|
||
|
|
import java.nio.ByteBuffer;
|
||
|
|
import java.nio.ByteOrder;
|
||
|
|
import java.nio.FloatBuffer;
|
||
|
|
|
||
|
|
import android.opengl.GLES20;
|
||
|
|
import android.util.Log;
|
||
|
|
|
||
|
|
public class ShaderUtils {
|
||
|
|
|
||
|
|
private static final String TAG = "ShaderUtils";
|
||
|
|
|
||
|
|
// 创建并编译着色器
|
||
|
|
public static int loadShader(int type, String shaderCode) {
|
||
|
|
int shader = GLES20.glCreateShader(type);
|
||
|
|
GLES20.glShaderSource(shader, shaderCode);
|
||
|
|
GLES20.glCompileShader(shader);
|
||
|
|
|
||
|
|
int[] compiled = new int[1];
|
||
|
|
GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, compiled, 0);
|
||
|
|
if (compiled[0] == 0) {
|
||
|
|
Log.e(TAG, "Could NOT compile shader: " + GLES20.glGetShaderInfoLog(shader));
|
||
|
|
GLES20.glDeleteShader(shader);
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
return shader;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 创建 FloatBuffer
|
||
|
|
public static FloatBuffer createFloatBuffer(float[] array) {
|
||
|
|
ByteBuffer bb = ByteBuffer.allocateDirect(array.length * 4);
|
||
|
|
bb.order(ByteOrder.nativeOrder());
|
||
|
|
FloatBuffer buffer = bb.asFloatBuffer();
|
||
|
|
buffer.put(array);
|
||
|
|
buffer.position(0);
|
||
|
|
return buffer;
|
||
|
|
}
|
||
|
|
}
|