Ваш код в старом GL имеет серьезные проблемы:
- вычисление координат внутри
glBegin/glEnd
- смешивание
double
и int
, что вызывает дорогостоящее преобразование между типами - без использования векторов
- дорогой примитив
- с использованием
double
Намного быстрее было бы использовать glVertex2dv
и предварительно вычислить координаты один раз в некоторой таблице (к сожалению, ваш текущий API не поддерживает таблицу stati c, которая потребует изменений в архитектуре вашего приложения). От этого его простой небольшой скачок в использовании VBO кстати. Также doubles
обычно тратятся впустую в старом GL, поскольку интерполяторы в любом случае 32-битные (даже на новом HW). Поэтому для оптимизации я бы преобразовал ваш код во что-то вроде этого (извините, не кодирую кодер JAVA на C ++, так что это может быть некорректно синтаксически):
private static void renderTile(float x, float y, float size)
{
const float a = 0.5*size;
const float p[4*2]=
{
x-a,y-a,
x+a,y-a,
x+a,y+a,
x-a,y+a,
};
glBegin(GL_QUADS);
glVertex2fv(p); p+=2;
glVertex2fv(p); p+=2;
glVertex2fv(p); p+=2;
glVertex2fv(p); p+=2;
glEnd();
}
Однако, если вы хотите истинную мощность, используйте VBO , См.