gpt4 book ai didi

java - LWJGL Opengl 着色器错误

转载 作者:行者123 更新时间:2023-12-01 10:59:54 28 4
gpt4 key购买 nike

在 glLinkProgram(pID) 和 glValidateProgram(pID) 之后我的 createShaderProgram 方法中有一些简单的错误检查。

int errorCheckValue = glGetError();
if(errorCheckValue != GL_NO_ERROR)
{
System.err.println("Could not create shaders " + GLU.gluErrorString(errorCheckValue));
//System.exit(-1);
}

此和平代码会引发错误消息 --> 无法创建着色器 无效操作。因为我评论了 System.exit(-1) 一切正常,但我不知道为什么会发生此错误。有没有什么方法可以编写一些关于错误更具体的错误处理函数 - 比无效操作更具体的东西?

编辑:这是其余的代码

private static int createShader(String source, int shaderType)
{
int shaderID = 0;
shaderID = glCreateShader(shaderType);
glShaderSource(shaderID, source);
glCompileShader(shaderID);

if(glGetShaderi(shaderID, GL_COMPILE_STATUS) == GL_FALSE)
{
System.err.println("Shader failed to compile!");
System.err.println(glGetShaderInfoLog(shaderID, 2048));
System.exit(-1);
}

return shaderID;
}

public static int[] createShaderProgram(String vertFilename, String fragFilename, Attribute locations[])
{
int pID, vertID, fragID = 0;
pID = glCreateProgram();
vertID = createShader(FileUtils.loadFileAsString(vertFilename), GL_VERTEX_SHADER);
fragID = createShader(FileUtils.loadFileAsString(fragFilename), GL_FRAGMENT_SHADER);
glAttachShader(pID, vertID);
glAttachShader(pID, fragID);
for(int i = 0; i < locations.length; i++){locations[i].bindAttribute(pID);}
glLinkProgram(pID);
glValidateProgram(pID);
int errorCheckValue = glGetError();
if(errorCheckValue != GL_NO_ERROR)
{
System.err.println("Could not create shaders " + GLU.gluErrorString(errorCheckValue));
//System.exit(-1);
}

int[] result = new int[] {pID, vertID, fragID};

return result;
}

最佳答案

您可以检查链接/验证状态并打印程序信息日志,类似于使用着色器的方式。

glLinkProgram(pID);
if (glGetProgrami(pID, GL_LINK_STATUS) == GL_FALSE) {
System.err.println("Program failed to link");
System.err.println(glGetProgramInfoLog(pID, glGetProgrami(pID, GL_INFO_LOG_LENGTH)));
}

(与 GL_VALIDATE_STATUS 相同。)

<小时/>

如果您使用的是 LWJGL 3(最新的夜间版本),您可以使用以下命令设置 OpenGL 调试消息回调

GLUtil.setupDebugMessageCallback();

这将自动选择正确的 OpenGL 扩展(或核心功能)来设置回调,每次发生 OpenGL 错误时都会打印错误消息(因此无需再调用 glGetError()) .

您可以查看GLUtil's source code如果您想对输出进行更多控制,请了解如何手动设置调试回调。

关于java - LWJGL Opengl 着色器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33426621/

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