content[0][2]必须是一个属性,而不是NoneType moderngl



我正在尝试测试下面的简单示例,其中我将一些东西传递给顶点着色器并读取其输出以进行打印。

import moderngl
import numpy as np
import struct
vertex_shader_source = '''
#version 330

in vec3 attPosition;
out vec2 varScreenCoord;

void main ()
{
varScreenCoord = vec2(1.0, 1.5);
}
'''
ctx = moderngl.create_standalone_context()
prog = ctx.program(vertex_shader=vertex_shader_source, varyings=['varScreenCoord'])
# input
verts = np.array([[0.0, 0.0, 0.0],
[1.0,  0.0, 0.0],
[1.0,  1.0, 0.0]], dtype='f4')
verts_buf = ctx.buffer(verts.tobytes())
# output
n, c = verts.shape
varScreenCoord = np.zeros((n, c-1)).astype(np.float32)
varScreenCoord_buf = ctx.buffer(varScreenCoord.tobytes())
vao = ctx.vertex_array(prog, content=[
(verts_buf, '3f', 'attPosition')
])
vao.transform(varScreenCoord_buf, vertices=n)
data = struct.unpack("{}f".format(n*2), varScreenCoord_buf.read())
for i in range(0, n*2):
print("value = {}".format(data[i]))

当我运行这个时,我得到了以下错误

Traceback (most recent call last):
File "/somepath/moderngl_sample.py", line 32, in <module>
vao = ctx.vertex_array(prog, content=[
File "/somepath/lib/python3.9/site-packages/moderngl/context.py", line 1140, in vertex_array
return self._vertex_array(*args, **kwargs)
File "/somepath/lib/python3.9/site-packages/moderngl/context.py", line 1169, in _vertex_array
res.mglo, res._glo = self.mglo.vertex_array(program.mglo, content, index_buffer_mglo,
moderngl.error.Error: content[0][2] must be an attribute not NoneType

我已经检查了这里的缓冲区格式,它似乎是正确的。这表示该名称可能未在着色器中引用,但我的着色器显然具有该顶点属性。

是什么原因导致了这个问题?

谢谢。

在着色器中使用attPosition值后,此问题已修复。例如,着色器必须按以下进行更改

#version 330

in vec3 attPosition;
out vec2 varScreenCoord;

void main ()
{
varScreenCoord = vec2(1.0, 1.5) * attPosition.xy;
}

最新更新