Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: pascal - проблема с opengl  (Прочитано 922 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Disaster1986

  • Автор темы
  • Участник
  • *
  • Сообщений: 246
  • Что делает эта кнопка?
    • Просмотр профиля
pascal - проблема с opengl
« : 01 Марта 2011, 16:38:20 »
Нашел в инете вот такой код:
(Нажмите, чтобы показать/скрыть)

Попробовал скомпилировать - получил вот такую красоту:


Проверил на ноуте - не компилится, говорит не может найти -lX11

Я, конечно же, прекрасно понимаю, что freepascal не для графики и вообще не нужен, но всё же в чём причина такого странного поведения?

(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 01 Марта 2011, 16:41:13 от Disaster1986 »

Оффлайн dedm0zaj

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: pascal - проблема с opengl
« Ответ #1 : 09 Октября 2012, 12:56:17 »
попробовал. код откомпилировался 1 в 1

Оффлайн VitalD

  • Активист
  • *
  • Сообщений: 509
    • Просмотр профиля
Re: pascal - проблема с opengl
« Ответ #2 : 09 Октября 2012, 20:56:21 »
Disaster1986,
А что должно быть в идеале, а то у меня немного другой результат:


Пользователь решил продолжить мысль 09 Октября 2012, 20:58:17:
в добавок к этому одно из ядер процессора полностью загружено  :(
« Последнее редактирование: 09 Октября 2012, 20:58:17 от VitalD »

Оффлайн dedm0zaj

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: pascal - проблема с opengl
« Ответ #3 : 24 Октября 2012, 12:40:23 »
немного потестил. нагружать проц заставляет glXWaitGL. её можно закаментить и будет норм.

также в проге отсутствует очистка очистка фона, т.е переде отрисовкой квадрата нужно добавить
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

в итоге нижняя часть кода получится такой:
while TRUE do
    begin
      while XPending( scr_Display ) <> 0 do
        begin
          XNextEvent( scr_Display, @Event );
        end;
     
      glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); //добавляем очистку экрана перед каждой отрисовкой

      glColor3f( 1, 1, 1 );
      glBegin( GL_QUADS );
        glVertex3f( -1, -1, -3 );
        glVertex3f(  1, -1, -3 );
        glVertex3f(  1,  1, -3 );
        glVertex3f( -1,  1, -3 );
      glEnd;

      glFlush;
      //glXWaitGL; //закоментируем
      glXSwapBuffers( scr_Display, wnd_Handle );
    end;

зы
что интересно, это то, что в паскале квадратик будет рисоваться с частотой, равной частоте монитора, и при этом проц не грузится. а в С++ такого ограничения нет, проц грузится и приходится в код отрисовки вставлять притормаживающие функции на подобии sleep с задержкой хотя бы в 1 мс.

 

Страница сгенерирована за 0.038 секунд. Запросов: 24.