【发布时间】: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() 工作
【问题讨论】:
-
调用函数时,需要设置其
argtypes和restype,否则默认为int。 -
如果你做类似
glUniform1fv(uniform_texture, 1, numpy.array(texture, dtype="float"))的事情会发生什么
标签: python shader ctypes pyopengl