Войти
OpenGL communityФорумВопросы по программированию

PIXELFORMATDESCRIPTOR, cColorBits

#0
8:27, 3 мар. 2014

Привет!

Вопрос по PIXELFORMATDESCRIPTOR, а именно по параметру cColorBits.
Объясните, пожалуйста, почему в уроках и примерах его устанавливают в 32, если в MSDN четко сказано:

cColorBits
Specifies the number of color bitplanes in each color buffer. For RGBA pixel types, it is the size of the color buffer, excluding the alpha bitplanes. For color-index pixels, it is the size of the color-index buffer.

Т.е. для PFD_TYPE_RGBA его нужно ставить в 24 (что в примере MSDN и сделано)?


И ещё. А не игнорируется ли вообще этот параметр? Можно хоть в 0 ставить - ничего не меняется...


#1
9:19, 3 мар. 2014

там есть два параметра колорбитс и альфабитс если ты юзаешь ргба то надо ставить 24 и 8
а ставят 32 просто от балды, вед процесс как выглядит - ты запрашиваешь PFD у системы передавая ей желаемые харакетристики. А система тебе возвращает PFD наиболее близкое к запрашиваемым.
т.е. поставь ты 32 бита - система вернет тебе 24. Проверь у себя.

#2
12:57, 3 мар. 2014

RmzVoid
> поставь ты 32 бита - система вернет тебе 24. Проверь у себя.
странно, но как раз что не ставь - всегда возвращает 32 бита:

PIXELFORMATDESCRIPTOR pfd;  
  memset(&pfd, 0, sizeof(pfd));
  pfd.nSize = sizeof(pfd);
  pfd.nVersion = 1;
  pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
  pfd.iPixelType = PFD_TYPE_RGBA;
  pfd.cColorBits = 24;
  pfd.cDepthBits = 16;
  pfd.cAlphaBits = 8;
  
  int pixelFormat = ChoosePixelFormat(hdc, &pfd);
  if(!pixelFormat) return false;
  SetPixelFormat(hdc, pixelFormat, &pfd);
  hglrc = wglCreateContext(hdc);
  wglMakeCurrent(hdc, hglrc);

  memset(&pfd, 0, sizeof(pfd));
  DescribePixelFormat (hdc, pixelFormat, sizeof(pfd), &pfd);
  OutputDebugStringW(ToString(pfd.cColorBits).c_str()); OutputDebugStringW(L"\n");
  OutputDebugStringW(ToString(pfd.cAlphaBits).c_str()); OutputDebugStringW(L"\n");

Выводит:
32
8

#3
16:43, 3 мар. 2014

Значит я что-то не знаю. Видимо мсдн лукавит.

#4
19:10, 3 мар. 2014

cAlphaBits больше не используется. Все пакуется в cColorBits

#5
20:39, 3 мар. 2014

DimaO
> cAlphaBits больше не используется. Все пакуется в cColorBits

Всё же похоже что используется: http://www.gamedev.ru/code/forum/?id=186274&page=2#m25

#6
21:44, 3 мар. 2014

Riddik
Чем больше пользуюсь SDL, тем меньше помню WinAPI.

#7
23:01, 3 мар. 2014

Сегодняшние драйвера практически не дают никакого выбора - максимум что можно выбрать это либо комбинацию 24+8 либо просто 24 (на некоторых драйверах я видел только вариант 24+8). Поэтому и разницы от проставления параметров практически нет.

А вот в стародавние времена (которые я застал только как пользователь) был популярен формат 16 бит, и тогда от этих циферок зависело многое (делался выбор между качеством и скоростью графики).

Есть ещё комбинации 30+2, но проверить как ведут себя функции поиска наиболее оптимального пиксельного формата в этом случае не представляется возможным - нужна профессиональная видеокарта :(.

OpenGL communityФорумВопросы по программированию

Тема в архиве.