Sounds like your vertex shader *asset* or fragment shader asset has an 
error in it.

On Thursday, November 1, 2012 4:12:44 PM UTC-5, Braindrool wrote:
>
> 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

Reply via email to