【发布时间】:2014-07-27 19:17:05
【问题描述】:
我有一个这样的统一块:
layout(shared) uniform ProjectionMatrices {
mat4 model_camera_xform;
mat4 camera_clip_xform;
};
我想查询这个块中制服的大小和偏移量。为此,我首先需要使用glGetUniformIndices 函数获取其成员的索引,但我不知道如何使用它。
这是我的尝试:
import ctypes as c
from OpenGL import GL
import numpy
name_array = c.c_char_p * len(uniform_names)
c_uniform_names = name_array(*[c.c_char_p(name.encode()) for name in uniform_names])
c_uniform_names = c.cast(c_uniform_names, c.POINTER(c.POINTER(c.c_char)))
uniform_indices = numpy.zeros(len(uniform_names), dtype='int32')
uniform_indices += 42
r = GL.glGetUniformIndices(program, len(uniform_names), c_uniform_names, uniform_indices)
err = GL.glGetError()
但是,这样做的结果是:
>>> print(uniform_names) # looks good.
['ProjectionMatrices.model_camera_xform', 'ProjectionMatrices.camera_clip_xform']
>>> print(err == GL.GL_NO_ERROR) # No error occurred
True
>>> print(r) # GL.GL_INVALID_INDEX, not sure what this refers to
4294967295
>>> print(uniform_indices) # Nothing has been set
[42 42]
【问题讨论】:
-
将
uniform_indices的dtype更改为'uint32'有帮助,但uniform_names也必须更改(以排除块名称)。当我完全解决这个问题时会发布答案。