Hi,
as mentioned above, I’m facing a problem debugging a Windows-application containing GLSL-shaders with gdb. In normal operation everything is ok.
glGetShaderiv(handle, GL_INFO_LOG_LENGTH , &loglength);
returns a loglength of 0 and everythinkg looks like I’ve exptected.
When I’m trying to start my app within gdb, I’m receveing compilation errors:
ERROR: 0:16: '<' : syntax error parse error
ERROR: 0:29: '<' : syntax error parse error
Here is the code I’m using to load my vertex/fragment-shaders from an external file:
enum ShaderType {VERTEX, FRAGMENT};
[...]
void Shader::loadShaderFromFile(const char* path, ShaderType t, int shaderLen)
{
char *program = new char[shaderLen];
const GLcharARB **programPtr=(const GLcharARB **)&program;
char *ptr = program;
int len = 0;
std::ifstream input(path);
while (!input.eof())
{
input.getline(ptr,255);
len=strlen(ptr);
ptr[len]='
';
ptr+=len+1;
}
if(t == VERTEX)
{
shaderObjects.push_back(glCreateShader(GL_VERTEX_SHADER));
glShaderSource(shaderObjects.back(), 1, programPtr, NULL);
}
else
{
shaderObjects.push_back(glCreateShader(GL_FRAGMENT_SHADER));
glShaderSource(shaderObjects.back(), 1, programPtr, NULL);
}
}
The content of the char-array containing the shader-sourcecode seems fine within the debugging-session.
My vertex shader:
uniform float timeIndex;
varying vec3 Position;
varying vec3 Normal;
void main()
{
Position = vec3(gl_ModelViewMatrix * gl_Vertex);
Normal = gl_NormalMatrix * gl_Normal;
gl_TexCoord[0] = gl_MultiTexCoord0 - vec4(0.01,0.0,0.0,0.0) * timeIndex;
gl_TexCoord[1] = gl_MultiTexCoord0 - vec4(0.012,0.0,0.0,0.0) * timeIndex;
gl_Position = ftransform();
}
My fragment shader:
uniform sampler2D earth_clouds;
uniform sampler2D earth_day;
uniform sampler2D earth_night;
uniform sampler2D earth_specular;
uniform vec3 LightPosition;
varying vec3 Normal;
varying vec3 Position;
void main()
{
vec4 TexLayer = texture2D(earth_day, vec2(gl_TexCoord[0]));
vec4 CloudLayer = texture2D(earth_clouds, vec2(gl_TexCoord[1]));
vec3 nNormal = normalize(Normal);
vec3 nLight = normalize(LightPosition - Position);
float Diffuse = max(dot(nNormal, nLight), 0.0);
TexLayer = mix(texture2D(earth_night, vec2(gl_TexCoord[0])), texture2D(earth_day, vec2(gl_TexCoord[0])), Diffuse);
vec4 SpecularLayer = vec4(.0, 0.0, 1.0, 0.0) * mix(0.0, 1.0, texture2D(earth_specular, vec2(gl_TexCoord[0])).r);
gl_FragColor = mix(TexLayer + SpecularLayer, CloudLayer, CloudLayer * (Diffuse * 0.95 + 0.05));
}
Any ideas?
Thank you!