ОК, поэтому я создал библиотеку, которая обрабатывает основной рендеринг OpenGL. Он содержит три буфера, один для вершин, uv и нормалей. В основной функции рендеринга используется привязка буферов, включение атрибутов вершин, а затем вызов glDrawArrays(). Но я столкнулся с непредвиденной проблемой, которая является более основанной на инженерии основанной на коде, которая заключается в том, что я могу привязывать только одну текстуру за раз. Таким образом, все вершины будут иметь одинаковые текстуры, когда я их нарисую. Как я могу обойти это? Если вам нужен какой-то другой источник, я отправлю его.OpenGL Texture Загрузка Predicament
Главная Рендер Номер функции
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER,this->_VBO);
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER,this->_TBO);
glEnableVertexAttribArray(2);
glBindBuffer(GL_ARRAY_BUFFER,this->_NBO);
glDrawArrays(GL_TRIANGLES,0,this->polyCount);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(2);
Буферы:
//Designated Vertex Buffer
std::array<GLfloat,BUFFER_SIZE> BUFFER_1;
UINT bufferIndex1;
//Designated Normal Buffers
std::array<GLfloat,BUFFER_SIZE> BUFFER_2;
UINT bufferIndex2;
//Designated UV Buffer
std::array<GLfloat,BUFFER_SIZE> BUFFER_3;
UINT bufferIndex3;
Вы можете связать столько же текстур 'GL_MAX_TEXTURE_UNITS' сразу. Однако, да - состояние не может быть изменено в течение одного вызова ничьей (и это вся идея, что такое «пакет»). Либо возьмите, например. (или любой другой атрибут) в качестве индекса текстуры и вынимать одну текстуру из многих на основе (может быть медленной, в зависимости от фактических данных) или разделить ее на отдельные призывы рисования. – keltar