HLFX.Ru Forum Страницы (2): « 1 [2]
Показать все 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)


Отправлено Дядя Миша 22-05-2024 в 13:34:

Цитата:
FiEctro писал:
Хотите сказать что CRT не может рисовать безрамочное окно родного разрешения или что?

Может конечно. Но тогда так делать было непринято.

Цитата:
FiEctro писал:
Лучше покажите пример как создавать нормально безрамочное окно по канонам.

Создавай рамочное.

C++ Source Code:
1
stylebits = WS_POPUP|WS_VISIBLE|WS_BORDER|WS_CAPTION;
2
exstyle = WS_EX_TOPMOST;
3
y = -( GetSystemMetrics( SM_CYCAPTION ) + 3 );
4
x = -3;

Число три это магическая константа, подобранная экспериментальным путём. x, y это - смещение окна. Как раз встанет точно по размеру экрана.
У этого окна будет шапка, но она окажется за пределами экрана и никто её не увидит. Если делать настоящее безрамочное окно - оно будет как-то похитрому глючить не то на старых, не то на новых виндах.
И это не только моё наблюдение. Размер окна, ессно равен разрешению экрана.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено a1batross 22-05-2024 в 21:24:

Цитата:
Дядя Миша писал:
А прямо на матрице распаяна

Далеко не всегда так. Я работаю со встраиваемыми системами и почти всегда никакого EDID не получаю (а хотелось бы, сильно упростило часть работы). Нативное разрешение и границы ожидаемого pixclk просто описаны в даташите на матрицу. Как хочешь, так и выкручивайся =/

Но вообще да, тот факт, что оно _обычно_ не связано физически позволяет его положить куда угодно или забить туда любую информацию.

Цитата:
Дядя Миша писал:
Размер пикселя определяется диаметром щели в маске.

Интересно. Как же тогда делали нестандартное разрешение?

Цитата:
FiEctro писал:
Лучше покажите пример как создавать нормально безрамочное окно по канонам.

Могу только без канонов. Недавно безрамочное окно запилил в наш форк, но там саму фичу предоставляет SDL. Лежит в engine/platform/sdl/vid_sdl.c в сорцах.

__________________
Xash3D FWGS форк


Отправлено Дядя Миша 23-05-2024 в 05:31:

Цитата:
a1batross писал:
Я работаю со встраиваемыми системами и почти всегда никакого EDID не получаю

Эта микросхемка не нужна для правильной работы матрицы, поэтому запросто может отсутствовать. Она просто торчит в сторону LVDS-разъема чтобы пользователь мог её прочитать.

Цитата:
a1batross писал:
Интересно. Как же тогда делали нестандартное разрешение?

Я наверное немного неверно выразился. Минимальный размер пикселя определяется диаметром щели в маске. Так-то размер пикселя - вполне актуальный параметр для CRT. Разрешения масштабировались просто за счёт физического движения луча, он зажигал несколько пикселей одним цветом.

Но вообще если приблизить лицо к CRT экрану, это выглядит довольно забавно. Особенно на кинескопах с триадами, вместо инлайнов. Там видно, что в триадах светятся все три цвета, причём при приближении практически невозможно разобрать какие ярче, а какие темнее.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Unit 04-07-2024 в 06:56:

Re: Полноэкранный режим DirectX

Цитата:
FiEctro писал:
Пытаюсь разобраться с фуллскрином в D3D, и вроде всё работает, но только с определенными разрешениями, а вот другие вроде 320х240, 512х512 ломаются. С чем это связано? Даже если я отфильтрую рабочие разрешения, где гарантии что на других машинах они не будут ломаться? Пример на который я ориентировался, я приложил ниже.


Нужно получить список доступных разрешений, далее из этого списка выбрать подходящий, что-то типа этого:

C++ Source Code:
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
}


Цитата:
Дядя Миша писал:
Число три это магическая константа, подобранная экспериментальным путём.


Скорее всего это число - размер верхнего фрейма, за который тянут мышкой при изменении размеров, в разных темах и версиях Windows могут отличаться значения.
Его можно получить:

C++ Source Code:
GetSystemMetrics(SM_CYFRAME)


Отправлено Дядя Миша 04-07-2024 в 07:42:

Цитата:
Unit писал:
Скорее всего это число - размер верхнего фрейма, за который тянут мышкой

Да, возможно.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Временная зона GMT. Текущее время 09:44. Страницы (2): « 1 [2]
Показать все 20 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024