Получение формата окна в пикселях - PullRequest
0 голосов
/ 08 мая 2018

Я создал приложение OpenGL, работающее в Windows. Можно ли как-нибудь запросить информацию о формате пикселей моего текущего окна рендеринга? (окно было создано с использованием библиотеки GLFW)

Что меня интересует:

  • Цветные биты
  • Глубина битов
  • Тип пикселя
  • и т.д.

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Вы можете вызвать функцию glfwGetWin32Window (из glfw3native.h) и получить дескриптор окна.

Получение дескриптора формы HDC (с функцией GetDC (window_handle)) Затем передайте этот HDC в функцию GetPixelFormat и вызовите DescribePixelFormat.

См. Пример использования GetPixelFormat + DescribePixelFormat здесь: https://msdn.microsoft.com/en-us/library/windows/desktop/dd318349(v=vs.85).aspx

0 голосов
/ 09 мая 2018

Я делаю это так:

int i;
HDC hdc;
PIXELFORMATDESCRIPTOR pfd;
hdc = GetDC(window_handle);                     // get device context
i=GetPixelFormat(hdc);                          // pixel format descriptor index
DescribePixelFormat(hdc,i,sizeof(pfd),&pfd);    // format from index

Где window_handle - дескриптор окна ваших приложений. Если вы получили доступ к hdc напрямую, то можете пропустить первую строку GetDC. Вот как я печатаю информацию, используя VCL и мой GL движок:

scr.text(AnsiString().sprintf("color: %i bit R%i G%i B%i A%i",pfd.cColorBits,pfd.cRedBits,pfd.cGreenBits,pfd.cBlueBits,pfd.cAlphaBits));
scr.text(AnsiString().sprintf("accum: %i",pfd.cAccumBits));
scr.text(AnsiString().sprintf("depth: %i",pfd.cDepthBits));
scr.text(AnsiString().sprintf("stenc: %i",pfd.cStencilBits));
scr.text(AnsiString().sprintf("auxil: %i",pfd.cAuxBuffers));

так что просто используйте то, что у вас есть для печати текста. В структуре pfd есть еще кое-что, например битовые сдвиги, маски и т. Д., Просто осмотрите ее и напечатайте то, что вам нужно.

0 голосов
/ 08 мая 2018

В GLFW doc вы можете прочитать об использовании OpenGL API напрямую, например, glGetFramebufferAttachmentParameteriv или glGetIntegerv.

...