【问题标题】:Having and error with my shaders and don't know how to fix [closed]我的着色器有错误,不知道如何修复[关闭]
【发布时间】:2019-08-13 11:58:24
【问题描述】:

我正在尝试在我的代码中设置我的着色器并且没有运行

我在我的 Mac 上,我的伙伴可以完美运行它但我不能,我有 OpenGL 3.3

这是我发生错误的代码的一部分,我尝试更改着色器的版本,在不同的环境中运行它,使用 PyCharm、idle、Jupyter notebook...

if __name__ == "__main__":

    # Initialize glfw
    if not glfw.init():
        sys.exit()

    width = 800
    height = 600

    window = glfw.create_window(width, height, "Window name", None, None)

    if not window:
        glfw.terminate()
        sys.exit()

    glfw.make_context_current(window)

    # Connecting the callback function 'on_key' to handle keyboard events
    glfw.set_key_callback(window, on_key)


    # Defining shaders for our pipeline
    vertex_shader = """
    #version 330
    in vec3 position;
    in vec3 color;

    out vec3 fragColor;

    void main()
    {
        fragColor = color;
        gl_Position = vec4(position, 1.0f);
    }
    """

    fragment_shader = """
    #version 330

    in vec3 fragColor;
    out vec4 outColor;

    void main()
    {
        outColor = vec4(fragColor, 1.0f);
    }
    """

    vertex_shader2 = """
    #version 330
    in vec3 position;
    in vec3 color;

    out vec3 fragColor;

    void main()
    {
        fragColor = color;
        gl_Position = vec4(2 * position, 1.0f);
    }
    """

    fragment_shader2 = """
    #version 330

    in vec3 fragColor;
    out vec4 outColor;

    void main()
    {
        float meanColor = (fragColor.r + fragColor.g + fragColor.b) / 3;
        outColor = vec4(meanColor, meanColor, meanColor,  1.0f);
    }
    """

# Assembling the shader program (pipeline) with both shaders
shaderProgram = OpenGL.GL.shaders.compileProgram(
    OpenGL.GL.shaders.compileShader(vertex_shader, GL_VERTEX_SHADER),
    OpenGL.GL.shaders.compileShader(fragment_shader, GL_FRAGMENT_SHADER))

shaderProgram2 = OpenGL.GL.shaders.compileProgram(
    OpenGL.GL.shaders.compileShader(vertex_shader2, GL_VERTEX_SHADER),
    OpenGL.GL.shaders.compileShader(fragment_shader2, GL_FRAGMENT_SHADER))

它应该画一个三角形,但显示以下错误:

Traceback (most recent call last):
 File "/Users/gustavo/PycharmProjects/untitled1/oli.py", line 186, in <module>
   OpenGL.GL.shaders.compileShader(vertex_shader, GL_VERTEX_SHADER),  
 File "/Users/gustavo/PycharmProjects/untitled1/venv/lib/python3.7/site-packages/OpenGL/GL/shaders.py", line 226, in compileShader
   shaderType,  
RuntimeError: ('Shader compile failure (0): b'ERROR: 0:2: '' :  version '130' is not supported\n ERROR: 0:11: 'f' : syntax error: syntax error\n '', [b'
   #version 130
   in vec3 position;
   in vec3 color;

   out vec3 fragColor;

   void main()
   {
       fragColor = color;
       gl_Position = vec4(position, 1.0f);
   }
   '], GL_VERTEX_SHADER)

【问题讨论】:

  • 这是您确定运行的代码吗?它在错误中抱怨版本130,但您的代码使用330。该错误还显示使用130 而不是330 的代码。
  • 我都试过了,同样的错误出现:(
  • 由于大多数有经验的 GL 用户都选择了“130”和“330”,我认为关闭这个问题是懒惰的 - 正如下面的答案所示,这似乎是一个真正的混淆关于 GL 和特定于系统的上下文创建之间的边界。对新用户非常懒惰,应该稍微松懈一下。

标签: python-3.x macos opengl glsl glfw


【解决方案1】:

MacOS 使用 Legacy Profile 作为所有创建的 OpenGL 上下文的默认设置。因此默认情况下仅支持最高 2.1 的 OpenGL 和最高 1.20 的 GLSL。

要使用 OpenGL 3.2+,您需要切换到核心配置文件。那里的命名有点混乱,因为它仅统计 3.2Core 配置文件,但实际上是 3.2 或更高版本(系统/驱动程序支持的每个 OpenGL 配置文件都向后兼容 3.2)

对于 glut(取决于 glut 的版本是否有效),MacOS 上的命令是:

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

对不起,我不知道python版本,但应该是类似的功能。

【讨论】:

    猜你喜欢
    • 2021-06-19
    • 2023-03-20
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多