gpt4 book ai didi

c++ - 使用 wprintf 打印 opengl 着色器编译日志

转载 作者:行者123 更新时间:2023-11-28 01:31:57 25 4
gpt4 key购买 nike

按照 opengl-tutorial.org 上的教程进行操作,意识到我不能直接用 printf 打印着色器编译日志,因为我是在 Windows 桌面应用程序中这样做的。我尝试使用此方法将其转换为 LPWSTR:

//compile the shader
glShaderSource(fShader, 1, &pFsCode, NULL);
glCompileShader(fShader);

//check shader compilation
glGetShaderiv(fShader, GL_COMPILE_STATUS, &result);
glGetShaderiv(fShader, GL_INFO_LOG_LENGTH, &logLen);
if (logLen > 0) {
//get compile log
vector<char> fErr(logLen + 1);
glGetShaderInfoLog(fShader, logLen, NULL, &fErr[0]);

//try to convert log to LPWSTR
wchar_t msg[100];
swprintf(msg, sizeof(msg) / sizeof(*msg), L"%s\n", &fErr[0]);

//print it
wprintf(msg);
}

出于某种原因,我得到了这个输出:

⤱㨠剥肉素匠㄰ㄲ›瘣剥楳汤〰洠猎⁴敢映池潾敷⁤祭剥ੳ⠰⤲㨠剥肉素匠㄰㄰›湖畳灰整整⁤整获透〳ਰ⠰⤲㨠拔牙纯匠〰〰›祳瑮硖拔牙纯湖泥数琴摥✠✨蜡数琴湖㨢∺感⁴潴敫⠢ਢ ⠰⤴㨠扒肉䌠㔷㈳

有人能告诉我为什么我得到这个损坏的输出吗?

感谢所有帮助。

最佳答案

您没有转换 char s 至 wchar_t使用 swprintf(..., "%s\n", ...)因为,根据 https://msdn.microsoft.com/en-us/library/hf4y5e3w.aspx %s意思如下:

When used with printf functions, specifies a single-byte or multi-byte character string; when used with wprintf functions, specifies a wide-character string. Characters are displayed up to the first null character or until the precision value is reached.

因为您确实在使用 *wprintf在这里发挥作用,%s已经期望一个宽字符串,但你给它一个非宽字符串。因此,ascii 文本(在本例中为 1) : error C0121: #version 300 must be followed by ...)被解释为宽字符串,从而导致垃圾。

根据同一网页,%S可能是解决您问题的最快方法(“与 wprintf 函数一起使用时,指定单字节或多字节字符串”- %s 是普通 printf 的意思)。

关于c++ - 使用 wprintf 打印 opengl 着色器编译日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51117395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com