最后隔离了我的着色器无法使用它无法编译的问题。
这是我的着色器加载例程。第一部分在着色器中读取:
void GLSLShader::LoadFromFile(GLenum whichShader, const string filename)
{
ifstream fp;
// Attempt to open the shader
fp.open(filename.c_str(), ios_base::in);
// If the file exists, load it
if(fp)
{
// Copy the shader into the buffer
string buffer(std::istreambuf_iterator<char>(fp), (std::istreambuf_iterator<char>()));
// Debug output to show full text of shader
errorLog.writeSuccess("Shader debug: %s", buffer.c_str());
LoadFromString(whichShader, buffer);
}
else
{
errorLog.writeError("Could not load the shader %s", filename.c_str());
}
}
将其加载到字符串中后,将其发送以进行加载:
void GLSLShader::LoadFromString(GLenum type, const string source)
{
// Create the shader
GLuint shader = glCreateShader(type);
// Convert the string
const char * ptmp = source.c_str();
glShaderSource(shader, 1, &ptmp, NULL);
// Compile the shader
glCompileShader(shader);
// Check to see if the shader has loaded
GLint status;
glGetShaderiv (shader, GL_COMPILE_STATUS, &status);
if (status == GL_FALSE) {
GLint infoLogLength;
glGetShaderiv (shader, GL_INFO_LOG_LENGTH, &infoLogLength);
GLchar *infoLog= new GLchar[infoLogLength];
glGetShaderInfoLog (shader, infoLogLength, NULL, infoLog);
errorLog.writeError("could not compile: %s", infoLog);
delete [] infoLog;
}
_shaders[_totalShaders++]=shader;
}
我得到调试输出“无法编译:”并且错误缓冲区似乎是空的。在过去的 3 天里,这一直让我发疯。有人看到我的错误吗?
以下是非常简单的着色器:
#version 330
layout (location = 0) in vec4 position;
layout (location = 1) in vec4 color;
smooth out vec4 theColor;
void main()
{
gl_Position = position;
theColor = color;
}
#version 330
smooth in vec4 theColor;
out vec4 outputColor;
void main()
{
outputColor = theColor;
}
更新
看起来由于某种原因,内存中着色器的末尾添加了废话。我不确定为什么。我已经尝试将它读入一个 char* 和一个字符串。这是输出:
<-!-> Shader: #version 330
layout (location = 0) in vec4 position;
layout (location = 1) in vec4 color;
smooth out vec4 theColor;
void main()
{
gl_Position = position;
theColor = color;
}
n
<-!-> Shader: #version 330
smooth in vec4 theColor;
out vec4 outputColor;
void main()
{
outputColor = theColor;
}
nts/Resources
注意第一个着色器末尾的“n”和第二个着色器末尾的“nts/Resources”。知道为什么吗?
另一个更新
最后的废话是由最后的一条额外的线引起的。我删除了它,它又恢复了输出正确的着色器文本。编译仍然没有运气。
我在这里不知所措。Superbible 有大量未优化的库,我不需要。Mac 似乎没有一个该死的像样的着色器编译器。我真的不介意它有多简单。它只需要与着色器一起工作。有人有例子吗?