![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
низкие фпс в opengl
Zo © (2006-08-14 18:45:00)День добрый, есть такая проблема с FPS в OGL приложении. Рисую 300 квадратов так:
glActiveTextureARB(GL_TEXTURE0);
t.Enable;
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glActiveTextureARB(GL_TEXTURE1);
t2.Enable;
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
for I := 0 to 299 do
begin
glLoadIdentity();
glTranslated(ogl.Resolution.Width/2-640/2,ogl.Resolution.Height/2-480/2,-0);
DrawQuad(640,480,1,1);
end;
glActiveTextureARB(GL_TEXTURE1);
t.Disable;
glActiveTextureARB(GL_TEXTURE0);
t.Disable;
где t и t2 : TTexture;
procedure TTexture.Enable;
begin
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, Texture_pointer);
end;
procedure TTexture.Disable;
begin
glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);
end;
а вывод квадрата такой:
procedure DrawQuad(Width,Height : Single; TextureScaleX, TextureScaleY: Single);
begin
tc[0] := 0;
tc[1] := 0;
tc2[0] := TextureScaleY;
tc2[1] := 0;
tc3[0] := TextureScaleY;
tc3[1] := TextureScaleX;
tc4[0] := 0;
tc4[1] := TextureScaleX;
glBegin(GL_QUADS);
glcolor4f(1.0,1.0,1.0,1.0);
glMultiTexCoord2fvARB(GL_TEXTURE0, @tc4);
glMultiTexCoord2fvARB(GL_TEXTURE1, @tc4);
glVertex2f(0,0);
glcolor4f(1.0,1.0,1.0,1.0);
glMultiTexCoord2fvARB(GL_TEXTURE0, @tc);
glMultiTexCoord2fvARB(GL_TEXTURE1, @tc);
glVertex2f(0,Height);
glcolor4f(1.0,1.0,1.0,1.0);
glMultiTexCoord2fvARB(GL_TEXTURE0, @tc2);
glMultiTexCoord2fvARB(GL_TEXTURE1, @tc2);
glVertex2f(Width,Height);
glcolor4f(1.0,1.0,1.0,1.0);
glMultiTexCoord2fvARB(GL_TEXTURE0, @tc3);
glMultiTexCoord2fvARB(GL_TEXTURE1, @tc3);
glVertex2f(Width,0);
glEnd;
end;
Трабла в низких ФПС ~ 2-6, такие фпс сохраняются даже если отключить текстурирование вовсе. В чём может быть проблема?
p.s. драйвера последней версии
Zo (2006-08-16 17:55:00) [1]
> Tsmar (15.08.06 16:14) [15]
Нет, может пару фпс из сотни и выйграл, но при 6-8 фсах прироста нету
Zo (2006-08-16 09:53:00) [2]
> Tsmar (15.08.06 16:13) [14]
Спасибо, попробую
> XProger © (15.08.06 18:09) [16]
Но при пустом экране, в минимальном opengl приложении, с малым разрешением (100*100) выходит и по несколько тысяч фпс
XProger (2006-08-15 18:09:00) [3]Tsmar, а если ещё и работу с матрицами вынесет за пределы цикла... ;)
Zo, FPS будет ниже частоты монитора до тех пор, пока не отключишь вертикальную синхронизацию (wglSwapIntervalEXT(0)). Низкий в твоём коде будет всегда, шустрее оно работать не будет.
Tsmar (2006-08-15 16:14:00) [4]сори. граматика ни мой канек.
Tsmar (2006-08-15 16:13:00) [5]Дружище, ты сможешь реально поднять скорость если воспользуешся такой схемой:
glBegin(GL_QUADS); //удали из DrawQuad
for I := 0 to 299 do
begin
glLoadIdentity();
glTranslated(ogl.Resolution.Width/2-640/2,ogl.Resolution.Height/2-480/2,-0);
DrawQuad(640,480,1,1);
end;
glEnd; //удали из DrawQuad
Zo (2006-08-15 13:19:00) [6]
> А где к стати у тебя BEGIN и END
Выше и ниже соответсвенно кода, я просто не стал и копировать
Я бы выложил, но мне некуда =(
> XProger © (15.08.06 01:14) [11]
Не на всё, окно 1024*768 в оконном режиме, если прямоугольники уменьшать то ФПС конечно прирастает, но всё равно держится в рамках <100 ФПС :(
TButton (2006-08-15 05:14:00) [7]ну, если помножить 300 заполнений окна на 2-6 (в АС = 4) ФПС, то получается ~1200
что, в принципе, неплохой показатель. мне такого от канваса не добиться =)
XProger (2006-08-15 01:14:00) [8]Zo, если все 300 полигонов рисуются на всё окно - ничего удивительного в томозах нет, т.к. всё упирается в филлрейт :)
ANTPro (2006-08-14 21:03:00) [9]Поподробнее: Видео бюджетное ATI
Дай погладеть (тока запакуй)
ANTPro (2006-08-14 21:01:00) [10]ANTPro © (14.08.06 20:57) [8]
А где к стати у тебя BEGIN и END
Где ?
ANTPro (2006-08-14 20:57:00) [11]А где к стати у тебя BEGIN и END
ЗЫ: Рисовал почти также когда-то но 512000 полигонов
через glVertex3fv
Zo (2006-08-14 20:30:00) [12]
> ANTPro © (14.08.06 20:27) [6]
Должен быть нарисован прямоугольник с двумя текстурами
Цикл без процедур и константы за пределами не помогли совсем
Видео бюджетное ATI, однако другие ogl приложения работают куда быстрее, вот и пытаюсь понять в чём может быть дело
ANTPro (2006-08-14 20:27:00) [13]Zo (14.08.06 18:45)
Что должно быть нарисованно?
Сделай цикл без процедур
Вынеси констаты за цикл
получишь + к fps но не большой
Какое видео у тебя?
Zo (2006-08-14 20:21:00) [14]если рисовать в обще без цикла то выходит примерно 270-280 FPS в оконном режиме, то есть всё равно не фонтан, это всего при 1 полигоне :(
Zo (2006-08-14 20:16:00) [15]
> XProger © (14.08.06 20:00) [1]
Нет, не помогло :(
RzCoDer (2006-08-14 20:08:00) [16]от этого в обще мало фпс зависят
RzCoDer (2006-08-14 20:07:00) [17]и так тоже самое
XProger (2006-08-14 20:00:00) [18]
glLoadIdentity;
glTranslated(ogl.Resolution.Width/2-640/2,ogl.Resolution.Height/2-480/2,-0);
for I := 0 to 299 do
DrawQuad(640,480,1,1);
А так?