0
我正在處理我的圖形程序。我正在嘗試從Shaders中將特徵抽象爲一個類。我測試了常規繪圖代碼,它工作。着色器也可以運行,但只要我開始使用這些OpenGL着色器功能,就會停止工作。着色器附件錯誤。無論是無效的程序或着色器
Shader::Shader(char c)
{
//program = int(0);
if (program!=0 || glIsProgram(program))
glDeleteProgram(program);
uniforms.clear();
program = glCreateProgram();
}
void Shader::compileProgram()
{
GLint Result = GL_FALSE;
int InfoLogLength;
glLinkProgram(program);
glValidateProgram(program);
glGetProgramiv(program, GL_LINK_STATUS, &Result);
glGetProgramiv(program, GL_INFO_LOG_LENGTH, &InfoLogLength);
std::string ProgramErrorMessage = std::string();
ProgramErrorMessage.resize(glm::max(InfoLogLength, int(1)));
glGetProgramInfoLog(program, InfoLogLength, NULL, &ProgramErrorMessage[0]);
std::cout << ProgramErrorMessage.c_str() << std::endl;
}
void Shader::addToProgram(std::string File, GLenum type)
{
std::cout << glGetError() << std::endl;
GLuint shader = glCreateShader(type);
std::cout << glewGetErrorString(glGetError()) << std::endl;
std::string ShaderCode;
std::ifstream ShaderStream(File, std::ios::in);
if(ShaderStream.is_open())
{
std::string Line = "";
while(getline(ShaderStream, Line))
ShaderCode += Line + "\n";
ShaderStream.close();
}
GLint Result = GL_FALSE;
int InfoLogLength;
// Compile Vertex Shader
std::cout << "Compiling shader : " << File<< std::endl;
const char * SourcePointer = ShaderCode.c_str();
std::cout << SourcePointer << std::endl;
int length = ShaderCode.size();
glShaderSource(shader, 1, &SourcePointer , &length);
glCompileShader(shader);
// Check Vertex Shader
glGetShaderiv(shader, GL_COMPILE_STATUS, &Result);
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &InfoLogLength);
std::vector<char> ShaderErrorMessage(InfoLogLength);
glGetShaderInfoLog(shader, InfoLogLength, NULL, &ShaderErrorMessage[0]);
printf("%s\n", &ShaderErrorMessage[0]);
glAttachShader(program, shader); //Invalid Operation, eighter Program or shader invalid
std::cout << glGetError() << std::endl;
}
您是否收到編譯器錯誤?您查詢着色器是否編譯正確,但不在某處使用「結果」。 – BDL 2014-11-22 13:41:58
問題是我沒有得到任何信息輸出。但結果是0(GL_FALSE)。 我真的解決了它的程序是由於某種原因無效 – Deathlymad 2014-11-23 06:55:22