Пытаюсь разобраться с фуллскрином в D3D, и вроде всё работает, но только с определенными разрешениями, а вот другие вроде 320х240, 512х512 ломаются. С чем это связано? Даже если я отфильтрую рабочие разрешения, где гарантии что на других машинах они не будут ломаться? Пример на который я ориентировался, я приложил ниже.
Вложение: main.zip (3.6 кб)
Этот файл был скачан 104 раз.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Дядя Миша
А как сохранить соотношение сторон тогда? При d3dpp.Windowed = TRUE; в "фуллскрине" если разрешение не соответсвует соотношениям монитора - растягивается. Единственное что остаётся самому высчитывать соотношение разрешения пользователя, а пользователю предоставлять выбирать только высоту, типа 720p, 1080p и т.д.
С одной стороны - хорошо что не будет черных полосок, с другой почему то так никто не делает, возможно есть на это какие то причины или более простые решения.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Фуллскрин - это фишка для CRT-мониторов, которые при любом разрешении могли показывать не мыльную картинку. Для TFT он очевидно потерял смысл, но его использовали ещё долгие годы по инерции.
Цитата:
FiEctro писал: При d3dpp.Windowed = TRUE; в "фуллскрине" если разрешение не соответсвует соотношениям монитора - растягивается
Ну в ксаше теперь безрамочное окно (хотя кого я обманываю?). Разве там что-то растягивается?
Дядя Миша писал: Ну в ксаше теперь безрамочное окно (хотя кого я обманываю?). Разве там что-то растягивается?
Там OGL это раз, исходников окна ксаша у меня нет это два.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
>вроде всё работает, но только с определенными разрешениями, а вот другие вроде 320х240, 512х512 ломаются. С чем это связано?
Если ты меняешь видеорежим монитору, то тут всё очевидно -- просто в монитор не зашито такое разрешение. Его можно задать вручную, но тогда недостаточно просто указать ширину и высоту, нужно сверху ещё задать hbp, hfp, hsync, vbp, vfp, vsync и pixelclock. Могу рассказать почему так, если не в курсе
Но лучше этим не заниматься. По-хорошему не стоит выходить за пределы нативного разрешения LCD панели, а если нужно снизить разрешение, то рисовать в FBO, а там можно и сохранение соотношения сторон реализовать.
Я думаю, хотя и не уверен на 100%, что полноэкранный режим появился в винде специально для ускорителей 3DFX, т.к. их первые версии подключались как бы последовательно с видеокартой по VGA-разъему и не могли рендерить изображение в окошке. К тому же у них предельное разрешение обычно было ниже того, которое использовали на рабочем столе. Вполне могла быть ситуация, когда на рабочем столе 800х600, а 3Dfx тянул максимум 640х480. Опять же там был ограничение на размер текстур 128х128. И вот собственно ради них этот режим и был введён. А потом его юзали на CRT-мониторах для увеличения быстродействия. С переходом на TFT начались конкретные проблемы с разрешениями, когда какой-нибудь репак настроен на одно разрешение, ты включаешь на своём компьютере и получаешь Out Of Range. Это конечно проблема не монитора, а самого игрового движка, но я сталкивался с этим на разных движках.
Поэтому самый оптимальный выбор - полный отказ от фуллскрина и использование безрамочного окна. Ну или рамочного, т.к. безрамочное глючит. Визуально разницы всё равно нет.
a1batross писал: Могу рассказать почему так, если не в курсе
Давай, может что то новое узнаю.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Дядя Миша писал: Я думаю, хотя и не уверен на 100%, что полноэкранный режим появился в винде специально для ускорителей 3DFX
Секундочку. В 95й винде можно запустить условный Старкрафт, который работает в фулскрине 640*480, а в винде разрешение рабочего стола может быть любым. Ну или Диабло, для чистоты дат.
Если говорить о CRT, то изображение на них получается направляя луч электронов на поверхность экрана. horizontal/vertical back/front porch буквально дают некоторое время трубке перейти на следующую линию или столбец, но ещё и дают понять монитору, что этот сигнал не несёт информации. hsync/vsync немного интереснее и нужны для стабилизации изображения. Ну и частотой сигнала является pixel clock. Из них даже частоту обновления можно посчитать поделив частоту на произведение количества сигналов по высоте и по ширине.
CRT мониторы были (относительно?) проще устроены и им очень грубо говоря всё равно на параметры входящий сигнал, и если дать достаточно времени на бланк и частоту которая не выходит за его границы, то их можно, как говорят, разогнать. Задрать выше частоту, чтобы получить меньше мерцания или увеличить активную зону, чтобы получить чуть больше драгоценных пикселей. Ну ты понял.
В LCD эти оффсеты перед hsync/vsync уже не нужны, но как концепция при настройке экрана остались. На самом деле у многих LCD экранов торчит ножка display enable, которая даёт понять экрану когда передаются данные. Да, LCD панель тоже можно разогнать, но разве что немного поднять частоту обновления. С матрицей же ничего не поделаешь, меньше или больше заданного сделать всё равно нельзя. В мониторах для ПК обычно ставят дополнительную микросхему, которая будет преобразовывать сигнал, банально растягивая входящее изображение под единственное разрешение матрицы и часто это делает с очень паршивым качеством. И то она нужна чисто для совместимости (картинку в BIOS показать, например), в ноутбуках или телефонах её например не ставят за отсутствием необходимости.
И именно поэтому тебе тут не рекомендуют пытаться выставлять видеорежим с LCD мониторами, тем более выставляя случайно 320x240 или 512x512.
Кстати, в мониторах кстати есть ещё одна микросхема, которая через грубое подмножество шины I2C, передает компьютеру поддерживаемые разрешения. И часто этот список можно получить от операционной системы/дисплейного сервера. И ориентироваться уже на него, чтобы не получать Out of Range.
a1batross писал: чтобы получить чуть больше драгоценных пикселей
Пиксели там точно такие же физические, как и на TFT. Размер пикселя определяется диаметром щели в маске.
Цитата:
a1batross писал: Кстати, в мониторах кстати есть ещё одна микросхема, которая через грубое подмножество шины I2C, передает компьютеру поддерживаемые разрешения.
Не в мониторах. А прямо на матрице распаяна. EDID называется.
Никакой физической связи с матрицей она не имеет, туда можно программатором зашить всё что угодно.
Скрытый текст:
Этот текст скрытый. Вы должны оставить хотя бы одно сообщение в теме, чтобы его увидеть.
Фигня какая то. Причём тут CRT когда он рисует всё тоже самое что и LCD. Хотите сказать что CRT не может рисовать безрамочное окно родного разрешения или что? Или это всё только ради vsync? Занимаетесь переливанием из пустого в порожнее. Лучше покажите пример как создавать нормально безрамочное окно по канонам.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!