![]() |
Показать все 20 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- OpenGL (https://hlfx.ru/forum/forumdisplay.php?forumid=7)
-- Полноэкранный режим DirectX (https://hlfx.ru/forum/showthread.php?threadid=6090)
Полноэкранный режим DirectX
Пытаюсь разобраться с фуллскрином в D3D, и вроде всё работает, но только с определенными разрешениями, а вот другие вроде 320х240, 512х512 ломаются. С чем это связано? Даже если я отфильтрую рабочие разрешения, где гарантии что на других машинах они не будут ломаться? Пример на который я ориентировался, я приложил ниже.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
От фуллскрина лучше отказаться в наше время. Используй безрамочное окно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
А как сохранить соотношение сторон тогда? При d3dpp.Windowed = TRUE; в "фуллскрине" если разрешение не соответсвует соотношениям монитора - растягивается. Единственное что остаётся самому высчитывать соотношение разрешения пользователя, а пользователю предоставлять выбирать только высоту, типа 720p, 1080p и т.д.
С одной стороны - хорошо что не будет черных полосок, с другой почему то так никто не делает, возможно есть на это какие то причины или более простые решения.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Фуллскрин - это фишка для CRT-мониторов, которые при любом разрешении могли показывать не мыльную картинку. Для TFT он очевидно потерял смысл, но его использовали ещё долгие годы по инерции.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
>вроде всё работает, но только с определенными разрешениями, а вот другие вроде 320х240, 512х512 ломаются. С чем это связано?
Если ты меняешь видеорежим монитору, то тут всё очевидно -- просто в монитор не зашито такое разрешение. Его можно задать вручную, но тогда недостаточно просто указать ширину и высоту, нужно сверху ещё задать hbp, hfp, hsync, vbp, vfp, vsync и pixelclock. Могу рассказать почему так, если не в курсе
Но лучше этим не заниматься. По-хорошему не стоит выходить за пределы нативного разрешения LCD панели, а если нужно снизить разрешение, то рисовать в FBO, а там можно и сохранение соотношения сторон реализовать.
__________________
Xash3D FWGS форк
Я думаю, хотя и не уверен на 100%, что полноэкранный режим появился в винде специально для ускорителей 3DFX, т.к. их первые версии подключались как бы последовательно с видеокартой по VGA-разъему и не могли рендерить изображение в окошке. К тому же у них предельное разрешение обычно было ниже того, которое использовали на рабочем столе. Вполне могла быть ситуация, когда на рабочем столе 800х600, а 3Dfx тянул максимум 640х480. Опять же там был ограничение на размер текстур 128х128. И вот собственно ради них этот режим и был введён. А потом его юзали на CRT-мониторах для увеличения быстродействия. С переходом на TFT начались конкретные проблемы с разрешениями, когда какой-нибудь репак настроен на одно разрешение, ты включаешь на своём компьютере и получаешь Out Of Range. Это конечно проблема не монитора, а самого игрового движка, но я сталкивался с этим на разных движках.
Поэтому самый оптимальный выбор - полный отказ от фуллскрина и использование безрамочного окна. Ну или рамочного, т.к. безрамочное глючит. Визуально разницы всё равно нет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
ZGreen это понятно. Смысл полноэкранного режима - как раз в отличии от рабочего разрешения стола. Что утратило смысл при переходе на TFT-экраны.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Xash3D FWGS форк
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Фигня какая то. Причём тут CRT когда он рисует всё тоже самое что и LCD. Хотите сказать что CRT не может рисовать безрамочное окно родного разрешения или что? Или это всё только ради vsync? Занимаетесь переливанием из пустого в порожнее. Лучше покажите пример как создавать нормально безрамочное окно по канонам.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
1 | stylebits = WS_POPUP|WS_VISIBLE|WS_BORDER|WS_CAPTION; |
2 | exstyle = WS_EX_TOPMOST; |
3 | y = -( GetSystemMetrics( SM_CYCAPTION ) + 3 ); |
4 | x = -3; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Xash3D FWGS форк
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Re: Полноэкранный режим DirectX
1 | #include <Windows.h> |
2 |
3 | struct DisplayMode { |
4 | uint32_t width; |
5 | uint32_t height; |
6 | uint32_t frequency; |
7 | }; |
8 |
9 | std::vector<DisplayMode> m_modes; |
10 |
11 | while (true) { |
12 | DEVMODE deviceMode; |
13 |
14 | if (EnumDisplaySettings(nullptr, static_cast<DWORD>(m_modes.size()), &deviceMode) != TRUE) { |
15 | break; |
16 | } |
17 |
18 | DisplayMode displayMode; |
19 | displayMode.width = static_cast<uint32_t>(deviceMode.dmPelsWidth); |
20 | displayMode.height = static_cast<uint32_t>(deviceMode.dmPelsHeight); |
21 | displayMode.frequency = static_cast<uint32_t>(deviceMode.dmDisplayFrequency); |
22 |
23 | m_modes.push_back(displayMode); |
24 | } |
GetSystemMetrics(SM_CYFRAME) |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Временная зона GMT. Текущее время 22:23. | Показать все 20 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024