Есть ли способ отправить VBO для шейдера в массиве? (Напр., Float [2] [100]) - PullRequest
0 голосов
/ 29 мая 2019

Обычно, при отправке информации о вершине, почти люди будут использовать float или vec2 ~ 4 тип.

Однако GL_MAX_VERTEX_ATTRIBS (макет (расположение = X)) равен 16 на многих графических процессорах.

Если вы хотите использовать много разметок в GLSL, это показывает, что существуют ограничения до 16.

Можно ли отправить вершины в виде массива для решения этой проблемы?

Но, думаю, я не смогу это сделать. Если хотите сделать это, может быть, необходимо разделить вершины.

Потому что есть много проблем, если написать код, как показано ниже.


// C++ main.cpp

float ExVertices[2][100] = {
    {
        0.123456... ,
        0.123456... ,
        0.123456... ,
        0.123456... ,
        // ...more...
    },
    {
        0.123456... ,
        0.123456... ,
        0.123456... ,
        0.123456... ,
        // ...more...
    },
};

glGenBuffers(1, &ExVBO);
glBindBuffer(GL_ARRAY_BUFFER, ExVBO);
glBufferData(GL_ARRAY_BUFFER, ????ExVertices????, ????&ExVertices????, GL_STATIC_DRAW); // How should I write ????

glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, ExVBO);
glVertexAttribPointer(
                      0,
                      1,
                      GL_FLOAT, // How should I write here? Probably an array of floats?
                      GL_FALSE,
                      0,
                      (void*)0
                      );



// GLSL Vertex Shader

layout(location = 0) in float[????] in_vertices; // How should I write here?

...