292 const std::string& _vertexShader,
293 const std::string& _fragmentShader,
294 std::string _pickVertexShader,
295 std::string _pickFragmentShader) {
298 std::cerr <<
"Shaders not supported with OpenGL Version less than 2.0" << std::endl;
302 if ( shaderDir_ ==
"" ) {
303 std::cerr <<
"No shader dir set for shadernode. Unable to load shaders!" << std::endl;
308 std::cerr <<
"setShader: Error, draw mode not atomic!" << std::endl;
313 size_t index = _drawmode.
getIndex();
315 shaders[index].vertexShaderFile = shaderDir_ + _vertexShader;
316 shaders[index].fragmentShaderFile = shaderDir_ + _fragmentShader;
318 const char* vertexShaderFilePath = shaders[index].vertexShaderFile.c_str();
319 const char* fragmentShaderFilePath = shaders[index].fragmentShaderFile.c_str();
324 if ( (shaders[index].vertexShader == 0) ||
325 (shaders[index].fragmentShader == 0) ||
326 (shaders[index].program == 0) ) {
327 std::cerr <<
"Unable to load shaders" << shaders[index].vertexShaderFile <<
328 " or " << shaders[index].fragmentShaderFile << std::endl;
329 shaders[index].vertexShader = 0;
330 shaders[index].fragmentShader = 0;
331 shaders[index].program = 0;
332 shaders[index].initialized =
false;
336 shaders[index].program->attach(shaders[index].vertexShader);
337 shaders[index].program->attach(shaders[index].fragmentShader);
338 shaders[index].program->link();
340 shaders[index].initialized =
true;
344 if ( pickShaders[index].initialized ) {
345 if ( pickShaders[index].program != 0 )
346 delete pickShaders[index].program;
348 if ( pickShaders[index].vertexShader != 0 )
349 delete pickShaders[index].vertexShader;
351 if ( pickShaders[index].fragmentShader != 0 )
352 delete pickShaders[index].fragmentShader;
354 pickShaders[index].initialized =
false;
357 if (_pickVertexShader.length () > 0 && _pickFragmentShader.length () > 0)
359 pickShaders[index].vertexShaderFile = shaderDir_ + _pickVertexShader;
360 pickShaders[index].fragmentShaderFile = shaderDir_ + _pickFragmentShader;
362 const char* vertexShaderFilePath2 = pickShaders[index].vertexShaderFile.c_str();
363 const char* fragmentShaderFilePath2 = pickShaders[index].fragmentShaderFile.c_str();
368 if ( (pickShaders[index].vertexShader == 0) ||
369 (pickShaders[index].fragmentShader == 0) ||
370 (pickShaders[index].program == 0) ) {
371 std::cerr <<
"Unable to load pick shaders" << pickShaders[index].vertexShaderFile <<
372 " or " << pickShaders[index].fragmentShaderFile << std::endl;
373 pickShaders[index].vertexShader = 0;
374 pickShaders[index].fragmentShader = 0;
375 pickShaders[index].program = 0;
376 pickShaders[index].initialized =
false;
380 pickShaders[index].program->attach(pickShaders[index].vertexShader);
381 pickShaders[index].program->attach(pickShaders[index].fragmentShader);
382 pickShaders[index].program->link();
384 pickShaders[index].initialized =
true;