我将此顶点信息用作 GL_POINTS 几何着色器的输入。
struct Vertex
{
glm::mat4 transform;
glm::vec3 colour;
};
Vertex points [] = {...};
设置颜色属性时,以下代码有效(使用m_location = glGetAttribLocation(...)
):
void Attribute::point_to_vec3 (GLsizei stride, const void * offset)
{
glVertexAttribPointer (
m_location,
3,
GL_FLOAT,
GL_FALSE,
stride,
offset);
}
glEnableVertexAttribArray (m_location);
a 的幼稚版本mat4
不起作用,因为显然它必须作为 4 组 4 个浮点数发送。我写了这个
void Attribute::point_to_mat4 (GLsizei size, const void * offset)
{
auto o = static_cast <const std::uint8_t *> (offset);
for (int i = 0; i < 4; ++i)
{
glVertexAttribPointer (
m_location + i,
4,
GL_FLOAT,
GL_FALSE,
size,
o + (4 * i * sizeof (GLfloat)));
glEnableVertexAttribArray (m_location + i);
glVertexAttribDivisor (m_location + i, 1);
}
}
这是改编自其他人的代码,并且在阅读了 API 文档后,我仍然不确定我是否正确地执行了此操作。矩阵在着色器中表现异常。
有人可以澄清一下多个地点的情况glVertexAttribDivisor
吗?
上面的代码正确吗?