当前位置: 首页 > 知识库问答 >
问题:

MacOs上的PyOpenGL OpenGL版本

唐涛
2023-03-14

我被告知从其他stackoverflow帖子将遗留配置文件切换到核心配置文件,但我似乎找不到这样做的方法。所以我假设一个更新的错误帖子来帮助我找到一个方法。

代码:

import glfw, numpy
from OpenGL.GL import *
import OpenGL.GL.shaders


def main():
    if not glfw.init():
        return

    window = glfw.create_window(800,600,"My OpenGL Window", None, None)

    if not window:
        glfw.terminate()
        return

    glfw.make_context_current(window)

    triangle = [-0.5, -0.5, 0.0,
                0.5, -0.5, 0.0,
                0.0, 0.5, 0.0]

    triangle = numpy.array(triangle, dtype = numpy.float32)

    vertex_shader = """
    #version 460
    in vec3 position;

    void main()
    {
        gl_Position = position;
    }

    """

    fragment_shader = """
    #version 460
    void main()
    {
        gl_FragColor = vec4(1.0f,0.0f,0.0f,1.0f);
    }
    """

    shader = OpenGL.GL.shaders.compileProgram(OpenGL.GL.shaders.compileShader(vertex_shader, GL_VERTEX_SHADER),
                                              OpenGL.GL.shaders.compileShader(fragment_shader,GL_FRAGMENT_SHADER))

    VBO = glGenBuffers(1)
    glBindBuffer(GL_ARRAY_BUFFER, VBO)
    glBufferData(GL_ARRAY_BUFFER, 36, triangle, GL_STATIC_DRAW)

    position = glGetAttribLocation(shader, "position")
    glVertexAttribPoint(position, 3, GL_FLOAT, GL_FALSE, 0, None)
    glEnableVertexAttribArray(position)

    glUseProgram(shader)



    glClearColor(0.2, 0.3, 0.2, 1.0)
    while not glfw.window_should_close(window):
        glfw.poll_events()

        glClear(GL_COLOR_BUFFER_BIT)

        glDrawArrays(GL_TRIANGLES, 0, 3)

        glfw.swap_buffers(window)

    glfw.terminate()

if __name__ == "__main__":
    main()

我一直收到这个错误

回溯(最近一次调用):

File "/Users/Datboi/Desktop/Python/Opengl/main.py", line 71, in <module>
    main()
File "/Users/Datboi/Desktop/Python/Opengl/main.py", line 43, in main
    shader = OpenGL.GL.shaders.compileProgram(OpenGL.GL.shaders.compileShader(vertex_shader, GL_VERTEX_SHADER),
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/OpenGL/GL/shaders.py", line 226, in compileShader
    shaderType,
RuntimeError: ('Shader compile failure (0): b"ERROR: 0:2: \'\' :  version \'460\' is not supported\\n"', [b'\n    #version 460\n    in vec3 position;\n    \n    void main()\n    {\n        gl_Position = position;\n    }\n\n    '], GL_VERTEX_SHADER)

我似乎找不到任何方法来解决这个问题。我是OpenGL/PyOpenGL新手,找不到任何提出大致相同问题的帖子

共有1个答案

陆文康
2023-03-14

错误:0:2:\'\:不支持版本“460”

是因为在创建窗口之前未指定OpenGL版本。由于您的系统只支持OpenGL verison 4.1,因此必须添加以下代码行。另请参见OS X上的OpenGL开发:

glfw.window_hint(glfw.CONTEXT_VERSION_MAJOR, 4)
glfw.window_hint(glfw.CONTEXT_VERSION_MINOR, 1)
glfw.window_hint(glfw.OPENGL_FORWARD_COMPAT, GL_TRUE)
glfw.window_hint(glfw.OPENGL_PROFILE, glfw.OPENGL_CORE_PROFILE)
window = glfw.create_window(800,600,"My OpenGL Window", None, None)

如果你解决了这个问题,那么你将面临下一个问题:

虽然gl_Position是一个同质化坐标,但顶点着色器输入变量位置的类型是vec3

分配gl\U位置=位置会导致错误:

不兼容类型的分配

您可以通过更改顶点着色器来解决此问题。要么更改赋值

#version 410 core
in vec3 position;

void main()
{
    gl_Position = vec4(position, 1.0);
}

或更改输入变量的类型:

#version 410 core
in vec4 position;

void main()
{
    gl_Position = position;
}

由于gl_FragColor在核心版本4.60中已弃用,因此您必须声明一个片段着色器输出变量,而不是使用已弃用的内置输出变量gl_FragColor

 #version 410 core

 out vec4 frag_color; 

 void main()
 {
    frag_color = vec4(1.0f,0.0f,0.0f,1.0f);
 }

此外,您的程序中还有一个错字。它必须是glVertexAttribPointer而不是glVertexAttribPoint

注意,在核心概要文件OpenGL上下文中,必须使用顶点数组对象,因为默认顶点数组对象0在核心概要文件中无效。

好的,我现在收到这个错误

kages/OpenGL/GL/着色器。py”,第108行,在check\u validate glGetProgramInfoLog(self)中,RuntimeError:验证失败(0):b'Validation失败:没有顶点数组对象绑定。\n'

在OpenGL上下文成为当前上下文后创建并绑定顶点数组对象:

glfw.make_context_current(window)

VAO = glGenVertexArrays(1)
glBindVertexArray(VAO)

shader = OpenGL.GL.shaders.compileProgram(OpenGL.GL.shaders.compileShader(vertex_shader, GL_VERTEX_SHADER),
                                          OpenGL.GL.shaders.compileShader(fragment_shader,GL_FRAGMENT_SHADER))
 类似资料:
  • 我对mac相当陌生,并尝试通过玩来学习一些东西。目前,我正在尝试在我的macbook上运行XAMPP上的新PHP版本。我为此阅读了不同的线程和教程(例如,有没有办法在XAMPP中使用两个PHP版本?)但我被卡住了。这是我得到的: macOS Mojave with XAMPP 5.6.31-0 with PHP version 5.6.31 PHP

  • 我在MacOS Big Sur(当我有Catalina时,问题也存在)和MAMP下有一台Mac电脑 我想创建一个虚拟主机 以下是我所做的: 在Application/MAMP/conf/apache/httpd中。conf,我取消了对Include/Applications/MAMP/conf/apache/extra/httpd vhosts行的注释。形态 这是我的应用程序/MAMP/conf/

  • 据我所知Java的最新版本是Java 14,仍然支持Java 8。在macOS上,系统首选项最底部窗格中的Java控制面板会导致一个“Java控制面板”窗口,其中的版本信息是Java版本8,但是当我在终端java - version中键入Java 14.0.1时,甚至/usr/libexec/java_home -V也没有显示我的Java 8版本。如何在Mac上查看所有Java版本?谢谢你。 终端

  • > 操作系统版本:macOs Mojave 10.14.2 gdb:8.2.1(使用brew安装安装gdb) 我已成功地与 协同设计--应享权利gdb-entitlement.xml-fs gdb-cert$(which gdb) 我有这样的简单代码: int main(int argc,char*argv[]){std::cout<<“hello,world”< 那么广发挂吧 zhifandem

  • 我能做什么来解决这个问题?我要尽快处理这件事。 谢谢

  • 如何在Mac上更改Java的默认版本?