c++ - GLSL 着色器编译调试器导致控制台上出现大量字符 \x00
问题描述
我正在尝试调试我的 OpenGL 着色器编译,但我有一些与空字符相关的奇怪输出我相信,我的调试器控制台充满了很多\x00字符,我试图了解它来自哪里以及如何摆脱它。这是我的功能:
void DebugShader(GLuint shader) { //debug shader
GLint isComp = 0;
GLint maxLength;
std::vector<GLchar> errorLog(maxLength);
std::string log;
glGetShaderiv(shader, GL_COMPILE_STATUS, &isComp);
if(isComp!=GL_TRUE) {
glGetShaderiv(shader,GL_INFO_LOG_LENGTH,&maxLength);
glGetShaderInfoLog(shader, maxLength, &maxLength,&errorLog[0]);
std::cout << "Shader compilation Failed." << std::endl;
}
for (int i = 0; i<maxLength; i++){
log.push_back(errorLog.at(i));
std::cout << log;
}
if (isComp==GL_TRUE){
std::cout << "Shader compilation successful." << std::endl;
glDeleteShader(shader);
}
}
这是我得到的输出:
"\x00\x00\x00\x00\ ........ \x00\x00\x00\x00"
如果我弄乱了着色器代码,只是为了检查错误输出是否正常,我可以在这些字符中找到错误消息
解决方案
您正在使用maxLength
uninitialized 来设置vector
errorLog
. 初始化errorLog
后需要调整大小maxLength
。
代码应该更符合(未经测试)...
void DebugShader(GLuint shader)
{
GLint isComp = 0;
glGetShaderiv(shader, GL_COMPILE_STATUS, &isComp);
if(isComp!=GL_TRUE) {
GLint maxLength;
glGetShaderiv(shader,GL_INFO_LOG_LENGTH,&maxLength);
std::vector<GLchar> errorLog(maxLength);
glGetShaderInfoLog(shader, maxLength, &maxLength,&errorLog[0]);
std::cout << "Shader compilation Failed." << std::endl;
}
.
.
.
推荐阅读
- saml - 如何在不使用 OneLogin UI 的情况下实现 OneLogin SSO/SLO
- c++ - 在 Boost::Hana 中使用 BOOST_HANA_DEFINE_STRUCT 定义具有 40 多个字段的结构
- oop - 为了找到 DAG 的所有拓扑排序,需要私下定义入度向量吗?
- c# - 命令行参数的编码 C#
- python - 在模板中自动将 None 呈现为 null?
- angular - 如何使用 Angular 7 和 asp.net web api 实现 ValidateAntiForgeryToken
- python - 使用 asyncio aiofiles 解析大量 HTML 文件并在 pandas DataFrame 中解析它们
- google-sheets - 谷歌表格条件格式
- audio - 根据 FFMPEG 中的音频信息进行缩放和移动
- c++ - 通过c++ tensorflow接口获取模型的输入输出节点信息