Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » OpenGl

Ответить
Настройки темы
OpenGl
Basilcat


Сообщения: n/a

Профиль | Цитировать


Может кто подскажет решение проблемы по быстрому выводу графики под OPENGL на машинах типа 500Мгц с видеокартой 2МБ. Конечно на 1000 Селероне всё летает класс, а вот на старых дёргается и зависает. Проверил время цикла вывода, 40 милисекунд (25 кадров/сек), но реально идёт перерисовка на экране страшно медленно, что это инерция экрана ЖК или карточка и что делать?
Кусок кода вывода:
Код: Выделить весь код
procedure TDrawPicture.WMPaint(var Msg: TWMPaint); 
var 
  k,i : integer; 
  cadr:TCadr; 
  t: integer; 
begin 
 
  if (fprogr<>nil) 
  then 
  begin 
{*********} 
  t := GetTickCount; 
{*********} 
  wglMakeCurrent(dc, hrc); 
  BeginPaint (handleGL, ps);        // &#228;&#235;&#255; &#225;&#238;&#235;&#229;&#229; &#243;&#241;&#242;&#238;&#233;&#247;&#232;&#226;&#238;&#233; &#240;&#224;&#225;&#238;&#242;&#251; 
glEnable(GL_SCISSOR_TEST); // &#226;&#234;&#235;&#254;&#247;&#224;&#229;&#236; &#240;&#229;&#230;&#232;&#236; &#232;&#241;&#239;&#238;&#235;&#252;&#231;&#238;&#226;&#224;&#237;&#232;&#255; &#226;&#251;&#240;&#229;&#231;&#234;&#232;. 
glScissor(0, 0, round(ClientWidth), ClientHeight); // &#238;&#225;&#235;&#224;&#241;&#242;&#252; &#226;&#251;&#240;&#229;&#231;&#234;&#232; 
 
  glClearColor (0.7, 0.7, 0.7, 1); 
  glClear (GL_COLOR_BUFFER_BIT); 
 
 
  if (isPoint) then 
  begin 
    glPointSize(5); 
 
    glEnable(GL_POINT_SMOOTH); 
  end; 
 
  lineWidth:=3; 
  lineWidthOld:=1; 
  glLineWidth(1); 
 
  glPushMatrix; 
 
    glTranslated(fposGl.x,fposGl.y,0); 
 
    glScalef(scale*mx, scale*my,0); 
  if (fprogr.isDrawSheet or fprogr.isDrawSheetContur) then 
      DrawBorder(false); 
 
  if (fprogr.IsCompile)and(fprogr.cadrsOut.Count>0) then 
  begin 
 
    if (fprogr.isDrawBorderProgr) then 
      DrawBorderProgr; 
  end; 
    if (fprogr.isDrawSheet or fprogr.isDrawSheetContur) then 
      DrawBorder(true); 
 
  if (fprogr.IsCompile)and(fprogr.cadrsOut.Count>0) then 
  begin 
 
    colorNew:=1; 
 
    glPushMatrix; 
 
   glTranslated(FXYStart.x,FXYStart.y,0); 
 
 
    colorRGBPlazmaOn.r:=0.7; 
    colorRGBPlazmaOn.g:=0; 
    colorRGBPlazmaOn.b:=0; 
 
    colorRGBFast.r:=0; 
    colorRGBFast.g:=1; 
    colorRGBFast.b:=0; 
 
    colorRGBPlazmaOff.r:=0; 
    colorRGBPlazmaOff.g:=0; 
    colorRGBPlazmaOff.b:=0; 
 
    colorRGB:=colorRGBPlazmaOff; 
 
 
      if fprogr.isDrawContur then 
        DrawCadrs(false, fprogr.cadrsOut); 
 
      colorRGBPlazmaOn.r:=1; 
      colorRGBPlazmaOn.g:=0; 
      colorRGBPlazmaOn.b:=0; 
 
      colorRGBFast.r:=0.2; 
      colorRGBFast.g:=1; 
      colorRGBFast.b:=0.5; 
 
      colorRGBPlazmaOff.r:=0.1; 
      colorRGBPlazmaOff.g:=0.3; 
      colorRGBPlazmaOff.b:=1; 
 
      colorRGB:=colorRGBPlazmaOff; 
 
      if ((fprogr.isEkivdOld<>0)or(not fprogr.isDrawContur))and fprogr.isDrawEkvid then 
      begin 
        DrawCadrs(true,fprogr.cadrsOutEkvid); 
        if fprogr.isDrawStartCadr then 
        with tcadr(fprogr.cadrsOutEkvid[fprogr.cadrsOutEkvid.FigureIndex]) do 
        begin 
          glLineWidth(2); 
          glEnable(GL_LINE_SMOOTH); 
          glColor3f(0,0,1); 
          glBegin(GL_LINES); 
            glVertex2f(X0,Y0); 
            glVertex2f(X0-0.075/scale,Y0); 
            glVertex2f(X0,Y0); 
            glVertex2f(X0+0.075/scale,Y0); 
            glVertex2f(X0,Y0); 
            glVertex2f(X0,Y0+0.075/scale); 
            glVertex2f(X0,Y0); 
            glVertex2f(X0,Y0-0.075/scale); 
          glEnd; 
          glDisable(GL_LINE_SMOOTH); 
          glLineWidth(1); 
        end; 
      end; 
 
      glBegin(GL_LINE_STRIP); 
        glVertex2f(fprogr.Xbeg,fprogr.YBeg); 
        glVertex2f(fprogr.XEnd,fprogr.YEnd); 
      glEnd; 
 
  glPopMatrix; 
  end; 
    glLineWidth(2); 
          glColor3f(0,0,1); 
 
        if (isRezak ) then 
        begin 
 
         glTranslated(FPosRezak.X,FPosRezak.y,0); 
 
 
            glBegin(GL_LINES); 
                  glVertex2f(0,0); 
                  glVertex2f(0.1/(fscaleGl),0); 
                  glVertex2f(0,0); 
                  glVertex2f(0,0.1/(fscaleGl)); 
                  glVertex2f(0,0); 
                  glVertex2f(-0.1/(fscaleGl),0); 
                  glVertex2f(0,0); 
                  glVertex2f(0,-0.1/(fscaleGl)); 
                glEnd; 
        end; 
      glLineWidth(1); 
 
    glPopMatrix; 
 
 
  glFlush; 
 
 
 swapBuffers(dc); 
 
 wglMakeCurrent(0, 0); 
glDisable(GL_POINT_SMOOTH); 
glDisable(GL_SCISSOR_TEST); // &#226;&#234;&#235;&#254;&#247;&#224;&#229;&#236; &#240;&#229;&#230;&#232;&#236; &#232;&#241;&#239;&#238;&#235;&#252;&#231;&#238;&#226;&#224;&#237;&#232;&#255; &#226;&#251;&#240;&#229;&#231;&#234;&#232;. 
 
 EndPaint (handleGL, ps); 
{**************} 
  Form_Aplication.Label42.caption := IntToStr(GetTickCount - t)+'&#236;&#241;; &#204;&#224;&#245;:'+IntToStr(max(T_New,GetTickCount - t))+'&#236;&#241;;  '+IntToStr(Round(1000/(GetTickCount - t)))+'&#234;/&#241;; '+IntToStr(Round(1000/max(T_New,GetTickCount - t)))+'&#234;/&#241;;  '; 
  Inc(j_T_New); 
  if j_T_New>50 then 
  begin 
    j_T_New:=0; 
    T_New:=0; 
  end; 
  T_New:=max(T_New,GetTickCount - t); 
{**************} 
 
  end 
end;//---TDrawPicture.Paint;---
Прошу ответить на мыло_в@профиле

[s]Исправлено: hasherfrog, 13:36 3-08-2004[/s]

Отправлено: 13:31, 03-08-2004

 

Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Цитата:
что это инерция экрана ЖК или карточка
Инерция - вряд ли. Карточка сама по себе тоже. Я бы всё-таки в первую очередь подумал о правильности настроек драйверов видеокарты, наличии DrectX и т.д.

Отправлено: 17:32, 03-08-2004 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Часть диалога велась по mail-переписке.
Мы договорились, что драйвера нормальные. Значит, дело в программе.


Для меня всё усложняется тем. что Вы используете Delphi. На мой взгляд,
это тяжкое испытание. Я благополучно всё делал в чистом Win32,
ну MFC, в крайнем случае.

Хочу предложить Вам пролистать:
http://www.opengl.org/resources/faq/.../mswindows.htm
http://www.opengl.org/resources/faq/...al/mslinks.htm

По дельфи + openGl информации в сети значительно меньше.


Отправлено: 15:50, 04-08-2004 | #3



Сообщения: 196
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Хехе 25 фпс на openGL Криво пишите видать, мой движок на директе 85 выдает как с куста. Хотя 2 мега видео маловато...ни одна ноормальная современная игра не пойдет на таком железе.

Отправлено: 12:40, 07-08-2004 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » OpenGl

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Вышел OpenGL 3! Coutty Новости информационных технологий 4 26-08-2007 14:18
FreeBSD and OpenGL Guest Общий по FreeBSD 14 16-11-2005 17:26
OpenGL Guest Хочу все знать 2 18-08-2004 08:25
Где взять OpenGL 1.4.0 UTU Хочу все знать 5 10-02-2004 13:15
OpenGL derotizator Хочу все знать 7 25-11-2003 10:58




 
Переход