Я пишу простой графический движок, который рисует текстуры на экране, используя OpenGL и C ++.То, как я рисую текстуры, использует приведенный ниже исходный код - рисование выполняется методом, который содержится в написанном мною классе «Sprite», который вызывается игровым циклом основной сцены.
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, m_textureID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glColor3f(1.0f, 1.0f, 1.0f);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
glVertex2f(m_pos.x, m_pos.y);
glTexCoord2f(1.0f, 0.0f);
glVertex2f(m_pos.x + m_size.x, m_pos.y);
glTexCoord2f(1.0f, 1.0f);
glVertex2f(m_pos.x + m_size.x, m_pos.y + m_size.y);
glTexCoord2f(0.0f, 1.0f);
glVertex2f(m_pos.x, m_pos.y + m_size.y);
glEnd();
glDisable(GL_TEXTURE_2D);
m_textureID - это идентификатор текстуры, которая уже была загружена в OpenGL, а m_pos - это вектор, в котором хранятся позиции спрайта по x и y, а в m_size хранится размер спрайта.
Причина, по которойЯ пишу это потому, что слышал от кого-то, кто знаком с OpenGL, что это неправильный способ рисовать много разных текстур на экране.По-видимому, использование glBegin (GL_QUADS) и glEnd () для вызовов glVertex может быть медленным, если на экране одновременно много графиков, и что правильный способ сделать это - использовать указатели вершин.
Может кто-нибудьДайте мне какие-нибудь советы (без каламбура) о том, как повысить производительность этого метода, используя мою реализацию, которую я описал выше?Есть что-то еще, что я могу делать не так?(Я относительно новичок в OpenGL и графическом программировании.)
Заранее спасибо!