【问题标题】:PyOpenGL: glUniform1f gives TypeErrorPyOpenGL:glUniform1f 给出 TypeError
【发布时间】:2019-01-06 21:57:37
【问题描述】:

我的问题是,当我想调用 glUniform1f() 时会出现以下错误:

ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type

我就是不知道是什么原因造成的。

我的代码:

# initialization
glutInit()  # initialize glut
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE)
glutInitWindowSize(width, height)  # set window size
glutInitWindowPosition(0, 0)  # set window position
window = glutCreateWindow(b"window")  # create window with title


def make_shader(type, shader_src):
    shader = glCreateShader(type)
    glShaderSource(shader, shader_src)
    glCompileShader(shader)
    shader_ok = None
    #show_info_log(shader,glGetShaderiv, glGetShaderInfoLog)
    glGetShaderiv(shader, GL_COMPILE_STATUS, shader_ok)
    if(not shader_ok):                                  ####shader_ok is still None
        glGetShaderInfoLog(shader)
        print("failed to compile shader")
    return shader



program = make_program(vertex_shader, fragment_shader)
texture = 0.33
uniform_texture = glGetUniformLocation(program, b"alpha[0]")

glViewport(0, 0, width, height)
glUseProgram(program)

glUniform1f(uniform_texture, texture)      ####Fails with TypeError: Wrong type

我也无法从中获取任何日志:

glGetShaderInfoLog(shader)

或者这个

log = ctypes.ARRAY(ctypes.c_char, 100)
leng = ctypes.c_int(1)
glGetProgramiv(program, GL_INFO_LOG_LENGTH, leng)
glGetProgramInfoLog(program, leng, leng, log)

带有着色器的代码示例,但不使用 glUniform1f() 工作

【问题讨论】:

  • 调用函数时,需要设置其argtypesrestype,否则默认为int
  • 如果你做类似glUniform1fv(uniform_texture, 1, numpy.array(texture, dtype="float"))的事情会发生什么

标签: python shader ctypes pyopengl


【解决方案1】:

CristiFati 是对的,我必须指定 glUniform1f 方法的 argtypes。

【讨论】:

    猜你喜欢
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2021-05-16
    • 2013-03-06
    相关资源
    最近更新 更多