Title pretty much says it all. This would be so much easier if I were to
just use a single class for this. But I have been trying to take advantage
of Java's class system. To the point I get the Error creating shader.
package com.braindrool.game;
import android.opengl.GLES20;
public class Shader {
public Shader(String vertexShader, String fragmentShader) {
int vertexShaderHandle = GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER);
if (vertexShaderHandle != 0) {
GLES20.glShaderSource(vertexShaderHandle, vertexShader);
GLES20.glCompileShader(vertexShaderHandle);
final int[] vertexCompileStatus = new int[1];
GLES20.glGetShaderiv(vertexShaderHandle, GLES20.GL_COMPILE_STATUS,
vertexCompileStatus, 0);
if (vertexCompileStatus[0] == 0) {
GLES20.glDeleteShader(vertexShaderHandle);
System.err.println(Deleting vertex shader);
vertexShaderHandle = 0;
}
}
if (vertexShaderHandle == 0) {
}
int fragmentShaderHandle = GLES20
.glCreateShader(GLES20.GL_FRAGMENT_SHADER);
if (fragmentShaderHandle != 0) {
System.out.println(Fragmentshaderhandle success);
GLES20.glShaderSource(fragmentShaderHandle, fragmentShader);
GLES20.glCompileShader(fragmentShaderHandle);
final int[] fragmentCompileStatus = new int[1];
GLES20.glGetShaderiv(fragmentShaderHandle,
GLES20.GL_COMPILE_STATUS, fragmentCompileStatus, 0);
if (fragmentCompileStatus[0] == 0) {
GLES20.glDeleteShader(fragmentShaderHandle);
fragmentShaderHandle = 0;
}
}
if (fragmentShaderHandle == 0) {
System.err.println(Error creating fragment shader.);
}
System.out
.println(linkShaders(vertexShaderHandle, fragmentShaderHandle));
}
private int linkShaders(int vertexHandle, int fragmentHandle) {
int programHandle = GLES20.glCreateProgram();
if (programHandle != 0) {
GLES20.glAttachShader(programHandle, vertexHandle);
GLES20.glAttachShader(programHandle, fragmentHandle);
GLES20.glBindAttribLocation(programHandle, 0, a_Position);
GLES20.glBindAttribLocation(programHandle, 1, a_Color);
GLES20.glLinkProgram(programHandle);
final int[] linkStatus = new int[1];
GLES20.glGetProgramiv(programHandle, GLES20.GL_LINK_STATUS,
linkStatus, 0);
if (linkStatus[0] == 0) {
GLES20.glDeleteProgram(programHandle);
programHandle = 0;
}
}
if (programHandle == 0) {
System.err.println(Error creating program.);
}
return programHandle;
}
}
And the call to that function / class:
private void finishLoading() {
mGLView.queueEvent(new Runnable() {
public void run() {
shader = new Shader(asset(shaders/vertex/default),
asset(shaders/fragment/default));
}
});
Questions and help greatly appreciated!
--
You received this message because you are subscribed to the Google
Groups Android Developers group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en