我在编译着色器时遇到了问题。我非常确定问题出在我的文件加载代码上。
以下是相关的功能:
char* loadShader(char* filename){
char* buffer = 0;
long length;
FILE* f = fopen (filename, "rb");
if(!f){
// error reading file
printf("failed to open file\n");
}
if (f){
fseek (f, 0, SEEK_END);
length = ftell (f);
fseek (f, 0, SEEK_SET);
buffer = malloc (length+1);
if (buffer){
fread (buffer, 1, length, f);
}
fclose (f);
}
return buffer;
}
Renderer* initRenderer(){
Renderer* renderer = malloc(sizeof(Renderer));
//renderer->vertices[0] = -0.5f;
float verts[] = {
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f
};
for(int i = 0; i < 9; i++){
renderer->vertices[i] = verts[i];
}
glGenBuffers(1, &renderer->VBO);
glBindBuffer(GL_ARRAY_BUFFER, renderer->VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(renderer->vertices), renderer->vertices, GL_STATIC_DRAW);
GLchar* vst = (GLchar*)loadShader("game_data/assets/shaders/simple_vert.glsl");
GLchar* fst = (GLchar*)loadShader("game_data/assets/shaders/simple_frag.glsl");
const GLchar* vertexShaderSource = vst;
const GLchar* fragmentShaderSource = fst;
if(vst){free(vst);}
if(fst){free(fst);}
int success;
char infoLog[512];
unsigned int vertexShader;
vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
glCompileShader(vertexShader);
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
if(!success)
{
glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
printf("ERROR::SHADER::VERTEX::COMPILATION_FAILED\n");
printf("%s\n", infoLog);
//std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl;
}
unsigned int fragmentShader;
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
glCompileShader(fragmentShader);
glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);
if(!success)
{
glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog);
printf("ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n");
printf("%s\n", infoLog);
//std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n" << infoLog << std::endl;
}
return renderer;
}
顶点明暗器:
# version 330 core
layout (location = 0) in vec3 aPos;
void main()
{
gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);
}
片段着色器:
# version 330 core
out vec4 FragColor;
void main()
{
FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);
}
最后是错误消息:
ERROR::SHADER::VERTEX::COMPILATION_FAILED
0:1(1): error: syntax error, unexpected $end
ERROR::SHADER::FRAGMENT::COMPILATION_FAILED
0:1(1): error: syntax error, unexpected $end
我肯定我遗漏了一些简单的弦乐。我看了this的答案,也有类似的问题,但我无法从其中收集到任何东西。
1条答案
按热度按时间uwopmtnx1#
不是打开文件的Maven,但你在RB(读取二进制)模式下打开它,也许可以尝试在R(读取)模式下打开它。