Альтернатива OpenGL для рисования текстур в немедленном режиме?

Я пишу простой графический движок, который рисует текстуры на экране с помощью 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 может быть медленным, если на экране одновременно отображается много графики, и что правильный способ сделать это - использовать указатели вершин.

Кто-нибудь может дать мне какой-нибудь указатели (без каламбура) о том, как ускорить работу этого метода, используя мою реализацию, которую я описал выше? Что еще я делаю не так? (Я' m относительно новичок в OpenGL и графическом программировании.)

Заранее спасибо!

5
задан dkaranovich 17 December 2011 в 21:14
поделиться