Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

низкие фпс в 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);

А так?


Наверх

Титульная страница Поиск, карта сайта Написать письмо