0

我将此顶点信息用作 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吗?

上面的代码正确吗?

4

0 回答 0