Jump to content
  • Advertisement
Sign in to follow this  

OpenGL GLSL shader not compiling, any thoughts why?[solved]

This topic is 3040 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi all, I have been trying to learn OpenGL to use for game programming (eventually). I started with the book "Beginning OpenGL Game Programming". I went through and compiled the examples, and in the last chapter where everything is put together, the program seems to compile fine. But when I run it, I get the following error: Could not compile shader: 9 GLSL Shader: Shader contains errors, please validate this shader! 0(12) : err Could not compile the shaders, they are invalid Could not initialize the terrain's shader So I went into the data/shaders/glsl.30 directory and opened up the terrain.vert and terrain.frag shader programs. They are terrain.vert
#version 130

uniform mat4 projection_matrix;
uniform mat4 modelview_matrix;
uniform mat3 normal_matrix;

uniform vec4 material_ambient;
uniform vec4 material_diffuse;
uniform vec4 material_specular;
uniform vec4 material_emissive;
uniform float material_shininess;

struct light {
	vec4 position;
	vec4 diffuse;
	vec4 specular;
	vec4 ambient;

uniform light light0;

//invariant in vec3 a_Vertex;
//const in vec3 a_Vertex;
in vec3 a_Vertex;
in vec2 a_TexCoord0;
in float a_TexCoord1;

in vec3 a_Normal;

out vec4 color;
out vec2 texCoord0;
out float texCoord1;

void main(void) 
	vec3 N = normalize(normal_matrix * a_Normal);	
	vec3 L = normalize(modelview_matrix * light0.position).xyz;
	float NdotL = max(dot(N, L.xyz), 0.0);

	vec4 finalColor = material_ambient * light0.ambient;
	vec4 pos = modelview_matrix * vec4(a_Vertex, 1.0);	
	vec3 E = -pos.xyz;

	if (NdotL > 0.0) 
		vec3 HV = normalize(L + E);
		finalColor += material_diffuse * light0.diffuse * NdotL;

		float NdotHV = max(dot(N, HV), 0.0);
		color += material_specular * light0.specular * pow(NdotHV, material_shininess);	

	color = finalColor;
	texCoord0 = a_TexCoord0;
	texCoord1 = a_TexCoord1;

	gl_Position = projection_matrix * pos;	

and terrain.frag
#version 130

uniform sampler2D texture0;
uniform sampler1D texture1;

in vec4 color;
in vec2 texCoord0;
in float texCoord1;
out vec4 outColor;

void main(void) {
	outColor = color * texture(texture0, texCoord0.st) * texture(texture1, texCoord1.s);	// 

I can't see anything wrong, but then I may not know what to look for. These are for GL3.0 / GLSL 1.3. My graphics card is NVIDIA GTS 8800, GL3.2, GLX 1.4, Shader v 1.5. I tried compiling this a while back and it worked, but I am sure I have updated since then. I know things are getting deprecated and what not, but I thought that it should be backwards compatible. MAybe not... Does anyone have any ideas? I looked around for suggestions on debugging, but I couldn't find anything really useful, and I don't see a web page listed for this book or I would ask there first. Thanks in advance for any help / suggestions. [Edited by - tenspd137 on March 20, 2010 2:39:19 AM]

Share this post

Link to post
Share on other sites
Thanks for the suggestion. I tried that. No luck. Just curious - what version nvidia drivers are you using? Maybe it is a driver issue?

Mine are 195.30.

Share this post

Link to post
Share on other sites
Do you have enough understanding of the program to see where those error messages are being generated from? Usually if there is some kind of error you can get a message with glGetShaderiv.

At the very least you should be able to narrow it down to either the frag or the vert shader, as they are compiled separately and each have their own error logs.

Share this post

Link to post
Share on other sites
I found the problem:

outColor = color * texture(texture0, texCoord0.st) * texture(texture1, texCoord1.s);

texCoord1.s should be just texCoord1

The .s implies it is a vector of some sort. Since it a float, it has no .s

Works great now.

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!