I’m testing out OpenGL shader programming, and am having trouble linking my shader program.
When I run my program, which compiles and links a simple shader program, checking for errors and outputting any resulting log messages, I get this output on the console:
Ç─2X¨æ☻
Edit: removed code tags around the above that were mangling it /Edit
This seems to be coming from the linking step, as slightly modifying the shader code to give a compile error gets me this:
ERROR: 0:1: 'q' : syntax error parse error
Ç─6X¨ø☻:1: 'q' : syntax error parse error
The relevant source code in C++ is included below.
Any ideas what I’m doing wrong? I’m not sure what to search for, since I’m not getting a usable error message. Searching for the various gl commands just gives me examples on how to use them, which I’m attempting to follow.
Thanks.
GLuint fragment_shader = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
const char* shader_string =
"void main() {"
" gl_FragColor = vec4(0.4, 0.4, 0.8, 1.0);"
"}";
glShaderSourceARB(fragment_shader, 1, &shader_string, NULL);
glCompileShader(fragment_shader);
GLint fragment_shader_compiled = 0;
glGetObjectParameterivARB(fragment_shader, GL_OBJECT_COMPILE_STATUS_ARB, &fragment_shader_compiled);
if (!fragment_shader_compiled) {
boost::scoped_array<char> fragment_compile_output(new char[512]);
glGetInfoLogARB(fragment_shader, 512., NULL, fragment_compile_output.get());
std::cerr << fragment_compile_output.get() << std::endl;
}
glAttachObjectARB(blur_program, fragment_shader);
glLinkProgramARB(blur_program);
GLint fragment_shader_linked = 0;
glGetObjectParameterivARB(blur_program, GL_OBJECT_LINK_STATUS_ARB, &fragment_shader_linked);
if (!fragment_shader_linked) {
boost::scoped_array<char> fragment_link_output(new char[512]);
glGetInfoLogARB(blur_program, 512, NULL, fragment_link_output.get());
std::cerr << fragment_link_output.get() << std::endl;
}