Example #1
0
void GLSLProgram::createFromSourceStrings
(
  GLSLProgram & prog,
  const std::string &shader,
  unsigned int shaderType,
  const GLuint & geomIn ,
  const GLuint & geomOut
)
{
  prog.clear();

  prog.handle_ = glCreateProgram();

  prog._geomIn  = geomIn;
  prog._geomOut = geomOut;

  switch ( shaderType )
  {

    case GL_VERTEX_SHADER_ARB:
      prog.vertex_ = new GLSLShader ( shader, shaderType );
      prog.attach ( prog.vertex_ );
      break;

    case GL_GEOMETRY_SHADER_EXT:
      prog.geometry_ = new GLSLShader ( shader, shaderType );
      prog.attach ( prog.geometry_ );

      if ( ( prog._geomIn == 0 ) || ( prog._geomOut == 0 ) )
      {
        _ERROR ( "invalid geomin/geomout" );
        throw "invalid geomin/geomout at ";
      }

      break;

    case GL_FRAGMENT_SHADER_ARB:
      prog.fragment_ = new GLSLShader ( shader, shaderType );
      prog.attach ( prog.fragment_ );
      break;

  }


  prog.link();

}
Example #2
0
void GLSLProgram::createFromSourceStrings
( GLSLProgram &prog,
  const std::string &vertexShader,
  const std::string &geometryShader,
  const std::string &fragmentShader,
  const GLuint &geomIn,
  const GLuint &geomOut

)
{
  prog.clear();

  prog.handle_ = glCreateProgram();

  prog._geomIn  = geomIn;
  prog._geomOut = geomOut;

  if ( vertexShader.size() != 0 )
  {
    prog.vertex_ = new GLSLShader (  GL_VERTEX_SHADER_ARB );  
    prog.vertex_->setShaderSource ( vertexShader );
    prog.vertex_->compile();
    prog.attach ( prog.vertex_ );
  }

  if ( geometryShader.size() != 0 )
  {
    prog.geometry_ = new GLSLShader (  GL_GEOMETRY_SHADER_EXT );  
    prog.geometry_->setShaderSource ( geometryShader );
    prog.geometry_->compile();
    prog.attach ( prog.geometry_ );
  }

  if ( fragmentShader.size() != 0 )
  {
    prog.fragment_ = new GLSLShader (  GL_FRAGMENT_SHADER_ARB );  
    prog.fragment_->setShaderSource ( fragmentShader );
    prog.fragment_->compile();
    prog.attach ( prog.fragment_ );
  }

  prog.link();

}