计算着色器编译失败,但信息日志为空

bvk5enib  于 2022-10-18  发布在  其他
关注(0)|答案(1)|浏览(169)

我试图让OpenGL计算着色器工作,但当我编译它,但编译失败,OpenGL没有给我任何信息日志。
着色器非常简单(我想找出错误所在,所以我将其更改为应该可以工作的超级简单版本)


# version 460 core

// for nvidia cards this should be 32 or a multiple of it
layout(local_size_x = 8, local_size_y = 4) in;

void main() {
    int x = 1;
}

和CPP代码:

compute = glCreateShader(GL_COMPUTE_SHADER);
glShaderSource(compute, 1, &code, NULL);
glCompileShader(compute);

glGetShaderiv(compute, GL_COMPILE_STATUS, &success);
if(!success)
{
    glGetShaderInfoLog(compute, 512, NULL, infoLog);
    std::cout << "ERROR::SHADER::COMPUTE::COMPILATION_FAILED\n" << infoLog << std::endl;
    return 1;
};

ID = glCreateProgram();
glAttachShader(ID, compute);
glLinkProgram(ID);

glGetProgramiv(ID, GL_LINK_STATUS, &success);
if(!success)
{
    glGetProgramInfoLog(ID, 512, NULL, infoLog);
    std::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n" << infoLog << std::endl;
    return 1;
}
glDeleteShader(compute);

我确信着色器是从文件中正确读取的(我之前已经说过了)。此外,我注意到,当我使用glCreateShader(GL_VERTEX_SHADER)而不是计算着色器时,我确实获得了信息日志:

0:4(1) : error: input layout qualifiers only valid in geometry, tessellation, fragment and compute shaders
0:4(1) : error: invalid input lavout qualifiers used

但由于更改为glCreateShader(GL_COMPUTE_SHADER),我没有得到任何日志(即使我将布局中的变量名更改为明显错误的名称)
我在Windows 11、WSL2 Ubuntu 20.04和NVIDIA RTX 3080TI上工作,
我的OpenGL版本是:

server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
    Max core profile version: 4.6
    Max compat profile version: 4.6
    Max GLES1 profile version: 1.1
    Max GLES [23] profile version: 3.0
OpenGL core profile version string: 4.6 (Core Profile) Mesa 21.2.6
OpenGL core profile shading language version string: 4.60
OpenGL version string: 4.6 (Compatibility Profile) Mesa 21.2.6
OpenGL shading language version string: 4.60
OpenGL ES profile version string: OpenGL ES 3.0 Mesa 21.2.6
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00

我的OpenGL上下文初始化如下所示:

glutInit(&argc, argv);
// we need opengl 4.6 context for compute shaders
glutInitContextVersion( 4, 6 );
glutInitContextProfile( GLUT_CORE_PROFILE );
glutInitDisplayMode(GLUT_SINGLE);
glutInitWindowSize(WORLD_WIDTH, WORLD_HEIGHT);
glutInitWindowPosition(100, 100);
glutCreateWindow("Hello World!");
glutDisplayFunc(renderScreen);
glutMotionFunc(motion);
glutIdleFunc(tick);

GLenum err = glewInit();
if (GLEW_OK != err)
{
    fprintf(stderr, "error with initialising glew: %s\n", glewGetErrorString(err));
}

有谁知道为什么会出现这种情况,以及如何解决这个问题?

dl5txlt9

dl5txlt91#

compute的值是多少?有什么变化是零吗?如果是,在调用glCreateShader()之后立即返回什么glGetError()?如果它返回GL_INVALID_ENUM,则由于某些原因,您的设置可能不支持计算着色器。
https://registry.khronos.org/OpenGL-Refpages/gl4/html/glCreateShader.xhtml

相关问题