Java GLSL链接信息日志(中文)

Java GLSL链接信息日志(中文),java,opengl,logging,glsl,shader,Java,Opengl,Logging,Glsl,Shader,我在测试glsl,shader没有做我想做的事情。我有这段代码来检索日志(我正在使用JOGL) 我从“bb”中得到字符串,并找到了奇妙的问号。 我调试后发现了这个 在我对中国的无限了解中,谷歌告诉我: 唠叨违反几条⁳ 放射状汤居水立方列岛艾格什松⁣延吉朔朗湖⁲ 亩 曲曼水芳 正如你所看到的,这对我很有帮助 我可以更改日志语言吗。。。还是什么 谢谢 日志输出不是由OpenGL生成的,而是由着色器本身生成的。我猜你没有写着色器,所以不管是谁写的日志消息都是中文的 有两种可能:要么着色器实际上是用

我在测试glsl,shader没有做我想做的事情。我有这段代码来检索日志(我正在使用JOGL)

我从“bb”中得到字符串,并找到了奇妙的问号。 我调试后发现了这个

在我对中国的无限了解中,谷歌告诉我:

唠叨违反几条⁳ 放射状汤居水立方列岛艾格什松⁣延吉朔朗湖⁲ 亩 曲曼水芳

正如你所看到的,这对我很有帮助

我可以更改日志语言吗。。。还是什么


谢谢

日志输出不是由OpenGL生成的,而是由着色器本身生成的。我猜你没有写着色器,所以不管是谁写的日志消息都是中文的

有两种可能:要么着色器实际上是用中文编写的日志,我不知道他们为什么要告诉你关于不规范的违规行为,要么(根据那里有空框字符的事实判断),它实际上不是中文,只是一些随机字节输出,着色器中有一个bug


无论哪种方式,问题都在着色器中,而不是在OpenGL的某些设置中。

看起来您正在将一些随机二进制数据作为字符串进行处理;Windows内部使用宽字符(即16位字符),因此任何高字节中非零的数据最终都会呈现一些亚洲脚本

EDIT:(这是一个Java程序,没有先注意到)
Java的ByteBuffer asCharBuffer将缓冲区中的数据解释为宽字符串(即每个字符两个字节),而OpenGL将为每个字符串返回一个字节。我不是一个Java向导,所以如果我在这里尝试一个解决方案,我可能会产生很多编码的自助餐。您需要找到一个函数,该函数可以正确地将每个字符串的8位转换为Java CharBuffer,或者手动将每个返回的字节前置一个零字节。

这些着色器是我的1行测试着色器。我只是搞乱了属性和其他东西。首先是main和gl_Position=gl_ProjectionMatrix*gl_ModelViewMatrix*gl_Vertex;哦那么,我错了,我不知道问题出在哪里很抱歉顶点具有main和gl_位置=gl_投影矩阵*gl_模型视图矩阵*gl_顶点;片段有main和gl_FragColor=vec4(1.0,0.6,1.0,1.0);我测试了着色器的链接状态,opengl告诉我有问题,当我读取日志时会出现该消息。嘿,伙计,这是Java,bb是一个完全初始化的ByteBuffer。这里还有更多:我有两个着色器日志检索和一个程序日志检索,每个日志都有不同的长度:/You's right man,我创建了一个带有字符“w”、“o”、“t”的byte[],并将字节传递给ByteBuffer,CharBuffer的输出为“?”,谢谢!
gl.glGetShaderInfoLog(vertexShader, INFO_LOG_SIZE, charsWritten, bb);