C++ OpenGL查询GL\u编译\u状态返回不正确的值
我在编译GLSL代码时遇到问题。当我尝试使用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
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::cerrgetline
将\n
剪辑下来。这意味着您的整个文件将不会有任何换行符。它都在一行上,因此看起来像这样:
#version 410 void main() { }
这是不合法的
请停止逐行读取文件。如果要读取整个文件,则。1)是否fileText
确实包含与文件完全相同的内容(包括换行符)?对我来说,着色器加载程序似乎会放弃换行符。2)如果出现错误,为什么不检查编译器抱怨的问题?这这是我的问题的一部分。我还遇到了字符串末尾拖尾垃圾的问题,我可以使用中的代码修复该问题。谢谢。
#version 410 void main() { }