GLSL: getUniformLocation

Started by xindon, March 23, 2010, 14:04:31

Previous topic - Next topic

xindon

Hey, I just can't get my shader location queries working  :-\

Update:
ARGHS! :D  Everything works fine, just didn't expect the GLSL compiler to ignore unused declarations... :-P



Shader files are loaded, compiled and linked without errors (syntax errors on purpose cause compilation errors, so I'm pretty sure).

My test vertex shader looks like this:
uniform float testUniform;

void main()
{
	gl_Position = ftransform();
}


I'm trying to get the uniform location using this:
int location = GL20.glGetUniformLocation(program, BufferUtils.createByteString("testUniform", true));


Where createByteString:
public static ByteBuffer createByteString(String s, boolean nullTerminated) {
		int length = s.length() + (nullTerminated ? 1 : 0);

		ByteBuffer buff = BufferUtils.createByteBuffer(length);
		buff.put(s.getBytes());

		if (nullTerminated)
			buff.put((byte) 0);

		buff.flip();
		return buff;
	}


The program ID is valid (checked), the program is linked and in use, and the the uniform name is obviously correct.

Nevertheless the query always returns -1.

I have absolutely NO idea what's going on.

I thought maybe an encoding issue, but first loading the shader sources into a String and creating a ByteBuffer from the String the same way as in getUniformLocation works perfectly well aswell, the shaders are compiled and linked successfully.

I'm using Mac OS X Snow Leopard.

Thank you very much in advance!