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

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

Полноэкранность в OpenGL [Delphi, Windows]


Страницы:   1 2

Zeqfreed ©   (2004-10-25 17:14:00) 

Добрый вечер, уважаемые!
В книге М. Краснова "OpenGL, графика в проектах Delphi" сказано, что для создания полноэкранного приложения достаточно растянуть окно на весь экран и, при необходимости, сменить разрешение экрана. Так вот меня мучит вопрос, зачем тогда в Direct3D нужно выполнять специальные действия для установки полноэкранного режима? И за счет чего тогда увеличивается производительность в OpenGL-полноэкранных приложениях, если вообще увеличивается, только при растягивании окна до размера экрана?


malij   (2004-11-08 18:47:00) [1]

Zeqfreed, дать совет?
Если у тебя эта книга в электронном виде, лучшее, что можно сделать - отпечатать ее на мягкой бумаге и применить по назначению. Сравни примеры с последней страницы на http://www.sulaco.co.zaс примерами Краснова.

Примеры просто офигеть!!!!!!!!!!!!


OSokin   (2004-11-07 17:04:00) [2]

<offtopic>
Zeqfreed, дать совет?
Если у тебя эта книга в электронном виде, лучшее, что можно сделать - отпечатать ее на мягкой бумаге и применить по назначению. Сравни примеры с последней страницы на http://www.sulaco.co.zaс примерами Краснова.
</offtopic>


DeadMeat   (2004-10-27 20:37:00) [3]


> [21] NikeOLD ©   (27.10.04 09:34)

Нуу... Я в своем "паратрупере" (на конкурсе) сделал именно через GetAsyncKeyState и все нормально... И до сих пор пользуюсь именно им. Хотя может быть и директ инпут тоже нормально. Надо будет глянуть.

---
...Death Is Only The Begining...


Magikan   (2004-10-27 15:02:00) [4]

>cyborg ©   (26.10.04 10:41) [10]
>
>
>> [9] Magikan ©   (26.10.04 02:49)
>> Контекст OpenGL-рендеринга привязывается не к монитору, а к окну :)
>> А в DirectX такая фишка не возможна. Гы...
>
>Ты в этом уверен?

Абсолютно. Контекст OpenGL-рендеринга привязывается к окну. При выводе 3Д-графики в оконном режиме, драйвер видюхи через контекст окна узнает координаты, а видеокарта уже воспроизводит 3Д изображение (рендерит) непосредственно в этот участок экрана. Кстати, для тех, кто не знает - такая возможность впервые была реализована на X-сервере под Unix/Linux.
Старые видеокарты (3dfx) рендеринг в окно не поддерживали, поэтому они выводили 3Д только на весь экран.


П7   (2004-10-27 11:01:00) [5]

Да ну нафиг, ДиректИкс ещё юзать. По моему, правильнее не левые библиотеки использовать, а Апи твоей ОСи. И на этом успокоится.


NikeOLD   (2004-10-27 09:34:00) [6]

MSDN - твой друг.

GetAsyncKeyState - только в NT различаются левый и правый SHIFT, CTRL, ALT, например. Опрашивает только одну клавишу за раз. Нажал две - проблема, для этого GetKeyboardState нужена. Но она работает не асинхронно, а только при извлечении сообщения из очереди, т.е. при интенсивной работе (в игре) - будут тормоза.

Этого в принципе достаточно.


Darthman   (2004-10-26 23:37:00) [7]

//OpenGL + DirectDraw как-то "ненатурально".
Отчего же? Очень даже. DirectInput и так далее тоже натурально и уместно использовать. OpenGL это кроссплатформенная библиотека. В Линуксе ты будешь использовать функции Иксов для перехвата управления и экрана, в Виндовсе ДирекИкс... помоему все верно и логично.


DeadMeat   (2004-10-26 22:53:00) [8]

Какие?
Я просто DirectInput никогда не пользовался, т.к. игр не пишу...

---
...Death Is Only The Begining...


NikeOLD   (2004-10-26 22:30:00) [9]

Ограничения там, вот и вся религия.


Zeqfreed   (2004-10-26 19:34:00) [10]

Да можно наверно, некоторым, правда, религия не позволяет... ;)


DeadMeat   (2004-10-26 19:09:00) [11]

А GetAsyncKeyState почему нельзя?

---
...Death Is Only The Begining...


Zeqfreed   (2004-10-26 17:18:00) [12]

Ладно, спасибо за советы.
Буду пробовать, как лучше выйдет...


Zeqfreed   (2004-10-26 17:18:00) [13]

Ладно, спасибо за советы.
Буду пробовать, как лучше выйдет...


NikeOLD   (2004-10-26 17:07:00) [14]


> Такой подход конечо может иметь место, но все-таки OpenGL
> + DirectDraw как-то "ненатурально".

Натуральнее некуда. Хотя естественее OpenGL + Direct3D. Последний подход во всех играх.
Кроме того еще и DirectInput и DirectMusic практически во всех играх используется. Куда уж натуральнее?...

Без DirectInput - только return to DOS и на уровне прерываний :))
Желаю счастья в этом деле. У Ламота это было во времена DOS.


Поручик   (2004-10-26 16:41:00) [15]

И ещё, может быть кто-то подскажет, как отлавливать нажатия клавиш клавы и мыши кроме как сообщения Windows и не используя тот же DirectInput?

Интересно, это как? На аппаратном уровне с портом работать, свой драйвер клавиатуры писать? Вспомнил. Вроде у Ла Мота что-то было подобное на Асме, но имхо не нужно это, твоя игра не настолько крута, чтоб заморачиваться по этому поводу. Вот когда напишешь что-нить стОящее, тогда будешь ломать голову над оптимизацией.
Так что, ловилку сообщений тебе в руки и удачной рыбаки


Zeqfreed   (2004-10-26 11:35:00) [16]

2 Imp:
Спасибо.
Но, как я понял, предложенный тобой подход впринципе тот же самый, что описанный мною в [5]?

2 NikeOLD:
Такой подход конечо может иметь место, но все-таки OpenGL + DirectDraw как-то "ненатурально".

И ещё, может быть кто-то подскажет, как отлавливать нажатия клавиш клавы и мыши кроме как сообщения Windows и не используя тот же DirectInput? И вообще имеет ли смысл это делать? (прибегать к методу, отличному от отловки сообщений)


cyborg   (2004-10-26 10:41:00) [17]


> [9] Magikan ©   (26.10.04 02:49)
> Контекст OpenGL-рендеринга привязывается не к монитору, а к окну :)
> А в DirectX такая фишка не возможна. Гы...

Ты в этом уверен?


Magikan   (2004-10-26 02:49:00) [18]

Гы... При изменении разрешения экрана не означает, что я буду рисовать на весь экран. Я могу окошечко сделать на полэкрана и спокойно выводить в него. А чтобы выводить на весь экран, я и растягиваю окошко на всю площадь. Контекст OpenGL-рендеринга привязывается не к монитору, а к окну :)
А в DirectX такая фишка не возможна. Гы...


Imp   (2004-10-25 21:46:00) [19]

а ты делай основной цикл программы в try / except;

try
  repeat
   ...
  until Finished;
except
 on E: Exception do RestoreScreenMode;
end


NikeOLD   (2004-10-25 21:41:00) [20]

Если я правильно понял, то подхлд г-на Краснова - только пуля тебя спасет (и желаательно в висок).

Я бы рекомендовал использование комбинации OpenGL и DirectDraw. Последнее лишь для переключения экрана в требуемый режим. Кстати, этот подход избавляет от многих проблем, связанных с зависанием программы, переключенной в другой режим. Дело в том, что стандартная функция ChangeDisplaySettings при некорректном выходе из программы не восстанавливает исходный размер рабочего стола.

Для включения DirectDraw достаточно создать интерфейс, и вызвать методы интерфейса SetDisplayMode и SetCooperativeLevel. Дальше - убрать заголовок и развернуть окно (лучше средствами API) и наслаждаться.


Страницы:   1 2

Наверх

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