C++ OpenGL查询GL\u编译\u状态返回不正确的值

C++ OpenGL查询GL\u编译\u状态返回不正确的值,c++,opengl,compilation,shader,C++,Opengl,Compilation,Shader,我在编译GLSL代码时遇到问题。当我尝试使用glGetShaderiv()打印着色器是否正确编译时,我的程序有时打印出错误的结果。例如,使用此着色器(test.vert): 并使用以下代码: #include <GL\glew.h> #include <GLFW\glfw3.h> #include <iostream> #include <fstream> #include <string> int main() { glf

我在编译GLSL代码时遇到问题。当我尝试使用
glGetShaderiv()
打印着色器是否正确编译时,我的程序有时打印出错误的结果。例如,使用此着色器(test.vert):

并使用以下代码:

#include <GL\glew.h>
#include <GLFW\glfw3.h>

#include <iostream>
#include <fstream>
#include <string>

int main() {
    glfwInit();
    GLFWwindow* window = glfwCreateWindow(200, 200, "OpenGL", nullptr, nullptr);
    glfwMakeContextCurrent(window);

    glewInit();

    std::string fileText = "";
    std::string textBuffer = "";
    std::ifstream fileStream{ "test.vert" };
    while (fileStream.good()) {
        getline(fileStream, textBuffer);
        fileText += textBuffer;
    }

    GLuint vertShaderID = glCreateShader(GL_VERTEX_SHADER);
    const char* vertShaderText = fileText.c_str();
    glShaderSource(vertShaderID, 1, &vertShaderText, NULL);
    glCompileShader(vertShaderID);

    GLint vertCompiled;
    glGetShaderiv(vertShaderID, GL_COMPILE_STATUS, &vertCompiled);
    if (vertCompiled != GL_TRUE) {
        std::cerr << "vert shader did not compile." << std::endl;
    }

    glfwTerminate();

    system("PAUSE");

    return 0;
}
#包括
#包括
#包括
#包括
#包括
int main(){
glfwInit();
GLFWwindow*window=glfwCreateWindow(200200,“OpenGL”,nullptr,nullptr);
glfwMakeContextCurrent(窗口);
glewInit();
std::string fileText=“”;
std::string textBuffer=“”;
std::ifstream fileStream{“test.vert”};
while(fileStream.good()){
getline(fileStream、textBuffer);
fileText+=textBuffer;
}
GLuint vertShaderID=glCreateShader(GL_VERTEX_着色器);
const char*vertShaderText=fileText.c_str();
glShaderSource(vertShaderID,1和vertShaderText,NULL);
glCompileShader(vertShaderID);
闪烁的光;
glGetShaderiv(vertShaderID、GL_编译状态和vertCompiled);
如果(vertCompiled!=GL_TRUE){

std::cerr
getline
\n
剪辑下来。这意味着您的整个文件将不会有任何换行符。它都在一行上,因此看起来像这样:

#version 410 void main() { }
这是不合法的


请停止逐行读取文件。如果要读取整个文件,则。

1)是否
fileText
确实包含与文件完全相同的内容(包括换行符)?对我来说,着色器加载程序似乎会放弃换行符。2)如果出现错误,为什么不检查编译器抱怨的问题?这这是我的问题的一部分。我还遇到了字符串末尾拖尾垃圾的问题,我可以使用中的代码修复该问题。谢谢。
#version 410 void main() { }