为什么我的GLSL着色器无法编译而没有错误消息?

格里梅里奥斯

我正在使用OpenGL和C ++构建游戏。我正在使用GLFW和GLAD。我目前正在设置简单的着色器,但是我完全被编译问题所困扰。简而言之,着色器编译失败,没有错误消息

这是我的顶点着色器(用于绘制2D图像和文本):

#version 330 core

layout (location = 0) in vec2 vPosition;
layout (location = 1) in vec2 vTexCoords;
layout (location = 2) in vec4 vColor;

out vec4 fColor;
out vec2 fTexCoords;

uniform mat4 mvp;

void main()
{
    vec4 position = mvp * vec4(vPosition, 0, 1);
    position.y *= -1;

    gl_Position = position;
    fColor = vColor;
    fTexCoords = vTexCoords;
}

这是创建着色器,加载着色器源,编译着色器以及检查错误的相关代码。

GLuint shaderId = glCreateShader(GL_VERTEX_SHADER);

std::string source = FileUtilities::ReadAllText(Paths::Shaders + filename);

GLchar const* file = source.c_str();
GLint length = static_cast<GLint>(source.size());

glShaderSource(shaderId, 0, &file, &length);
glCompileShader(shaderId);

GLint status;

glGetShaderiv(shaderId, GL_COMPILE_STATUS, &status);

if (status == GL_FALSE)
{
    GLint logSize = 0;

    glGetShaderiv(shaderId, GL_INFO_LOG_LENGTH, &logSize);

    std::vector<GLchar> message = std::vector<GLchar>(logSize);

    glGetShaderInfoLog(shaderId, logSize, nullptr, &message[0]);
    glDeleteShader(shaderId);

    std::cout << std::string(message.begin(), message.end());
}

使用该代码logSize返回为1,这意味着我无法访问GL提供的错误消息。据我所知,该消息根本不存在。我已经看过这里发布的问题,其中的问题是缺少对的呼叫glCompileShader如您所见,我的代码确实调用了该函数。

在尝试解决此问题时,我已经确认了几件事。

  • 我的着色器源(字符串)正在正确读取。据我所知,源是一个字符串,与实际的着色器文件完全匹配。
  • 从字符串源到GLchar const*or GLint(变量fileand length没有转换问题两者看起来都正确。
  • 如果我人为地将()的值logSize增加到(1000),那么生成的消息就是零。没有错误消息存在。
  • glfwInit()在代码中达到这一点之前,我正在调用和相关函数。查询glGetString(GL_VERSION)不会正确返回目标版本(3.3.0)。

有谁知道如何解决这一问题?如我所说,我的进度被完全阻止了,因为如果没有有效的着色器就无法渲染任何东西(2D或3D)。

谢谢!

BDL

问题是您永远不会将任何着色器源上载到着色器。

这行的第二个参数:

glShaderSource(shaderId, 0, &file, &length);

告诉OpenGL将0代码字符串加载到着色器(什么都没有)。将其更改为1,它应该可以工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么没有错误的接收器被阻塞?

为什么尽管链接和验证成功,着色器程序仍无法编译?

为什么下面的代码编译没有错误?

为什么“ std :: string(blablabla());” 编译没有错误?

为什么我的GLSL着色器呈现裂痕?

为什么OpenGL着色器无法正确编译?

OpenGL着色器无法编译

WebGL着色器编译错误消息中的数字是什么意思?

为什么我的几何着色器“过载”?

为什么使用OpenGL编译顶点着色器时出现着色器编译器错误#143,#160和#216?

片段着色器中所有顶点的变体,没有插值。为什么不?

着色器进行编译和链接时没有错误,但是纹理仍然不可见

为什么使用glsl或在SceneKit着色器修改器中定义函数只会产生错误?

为什么有些像素在片段着色器中采样了错误的纹理?

为什么不编译opengl着色器?

没有glfw上下文无法编译着色器

GLSL着色器-片段着色器无法编译

编译时没有错误代码,但屏幕上没有数据表,我无法弄清为什么

LWJGL无法编译着色器

编译问题,简单的GLSL着色器

为什么此GLSL着色器产生语法错误?

为什么Firefox无法在没有错误消息的情况下启动Css?

OpenGL着色器链接错误,没有错误消息

为什么 router.navigate 将我留在空白页面而没有错误消息?

为什么我的模型没有在 LWJGL 中使用着色器和 VBO 渲染任何内容

GLSL 着色器即使没有明显的错误也无法编译

为什么我会在 GLSL 着色器中看到这些混合伪影?

我无法更改材质的 alpha 值。着色器错误

为什么这个着色器变量没有改变?(dx12,hlsl)