Add option for geometry shader in initial pass
This commit is contained in:
parent
2f4de89791
commit
294c2f3c85
|
@ -7,6 +7,7 @@ GLuint InitShader( const char* computeShaderFile);
|
||||||
GLuint InitShader( const char* vertexShaderFile, const char* fragmentShaderFile );
|
GLuint InitShader( const char* vertexShaderFile, const char* fragmentShaderFile );
|
||||||
GLuint InitShader( const char* vertexShaderFile, const char* geometryShader, const char* fragmentShaderFile );
|
GLuint InitShader( const char* vertexShaderFile, const char* geometryShader, const char* fragmentShaderFile );
|
||||||
GLuint InitShader( const char* vShaderFile, const char* tcShader, const char* teShader, const char* fShaderFile );
|
GLuint InitShader( const char* vShaderFile, const char* tcShader, const char* teShader, const char* fShaderFile );
|
||||||
|
GLuint InitShader( const char* vShaderFile, const char* tcShader, const char* teShader, const char* gShaderFile, const char* fShaderFile );
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -336,5 +336,75 @@ GLuint InitShader( const char* vShaderFile, const char* tcShader, const char* te
|
||||||
/* use program object */
|
/* use program object */
|
||||||
glUseProgram(program);
|
glUseProgram(program);
|
||||||
|
|
||||||
|
return program;
|
||||||
|
}
|
||||||
|
|
||||||
|
GLuint InitShader( const char* vShaderFile, const char* tcShader, const char* teShader, const char* gShaderFile, const char* fShaderFile )
|
||||||
|
{
|
||||||
|
bool error = false;
|
||||||
|
struct Shader
|
||||||
|
{
|
||||||
|
const char* filename;
|
||||||
|
GLenum type;
|
||||||
|
std::string source;
|
||||||
|
} shaders[5] =
|
||||||
|
{
|
||||||
|
{ vShaderFile, GL_VERTEX_SHADER, "" },
|
||||||
|
{ tcShader, GL_TESS_CONTROL_SHADER, "" },
|
||||||
|
{ teShader, GL_TESS_EVALUATION_SHADER, "" },
|
||||||
|
{ gShaderFile, GL_GEOMETRY_SHADER, "" },
|
||||||
|
{ fShaderFile, GL_FRAGMENT_SHADER, "" }
|
||||||
|
};
|
||||||
|
|
||||||
|
GLuint program = glCreateProgram();
|
||||||
|
|
||||||
|
for ( int i = 0; i < 5; ++i )
|
||||||
|
{
|
||||||
|
Shader& s = shaders[i];
|
||||||
|
s.source = readShaderSource(s.filename);
|
||||||
|
if ( shaders[i].source.length() == 0 )
|
||||||
|
{
|
||||||
|
std::cerr << "Failed to read " << s.filename << std::endl;
|
||||||
|
error = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
GLuint shader = glCreateShader( s.type );
|
||||||
|
const char *c_str = s.source.c_str();
|
||||||
|
glShaderSource( shader, 1, (const GLchar**) &c_str, NULL );
|
||||||
|
glCompileShader( shader );
|
||||||
|
|
||||||
|
GLint compiled;
|
||||||
|
glGetShaderiv( shader, GL_COMPILE_STATUS, &compiled );
|
||||||
|
if ( !compiled )
|
||||||
|
{
|
||||||
|
std::cerr << s.filename << " failed to compile:" << std::endl;
|
||||||
|
printShaderCompileError(shader);
|
||||||
|
error = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
glAttachShader( program, shader );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* link and error check */
|
||||||
|
glLinkProgram(program);
|
||||||
|
|
||||||
|
GLint linked;
|
||||||
|
glGetProgramiv( program, GL_LINK_STATUS, &linked );
|
||||||
|
if ( !linked )
|
||||||
|
{
|
||||||
|
std::cerr << "Shader program failed to link" << std::endl;
|
||||||
|
printProgramLinkError(program);
|
||||||
|
|
||||||
|
error = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(error == true)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* use program object */
|
||||||
|
glUseProgram(program);
|
||||||
|
|
||||||
return program;
|
return program;
|
||||||
}
|
}
|
Loading…
Reference in New Issue