Для чего параметр PIXELFORMATDESCRIPTOR в SetPixelFormat () используется?

Обычно при установке контекстов OpenGL, я просто заполнил структуру PIXELFORMATDESCRIPTOR с необходимой информацией и назвал ChoosePixelFormat (), следовал вызовом к SetPixelFormat () с возвращенным соответствием pixelformat от ChoosePixelFormat (). Затем я просто передал начальный дескриптор, не много думая почему.

Но теперь я использую wglChoosePixelFormatARB () вместо ChoosePixelFormat (), потому что мне нужны некоторые расширенные черты как sRGB и мультивыборка. Это берет список атрибутов целых чисел, точно так же, как XLib/GLX на Linux, не структура PIXELFORMATDESCRIPTOR. Так, я должен действительно заполнить дескриптор для SetPixelFormat () для использования? Что делает SetPixelFormat (), используют дескриптор для того, когда он уже имеет pixelformat индекс дескриптора? Почему я должен указать те же атрибуты pixelformat в двух различных местах? И какой имеет приоритет; список атрибутов к wglChoosePixelFormatARB (), или атрибуты PIXELFORMATDESCRIPTOR передал SetPixelFormat ()?

Вот прототипы функции, для создания вопроса более ясным:

/* Finds a best match based on a PIXELFORMATDESCRIPTOR,
and returns the pixelformat index */
int ChoosePixelFormat(HDC hdc, const PIXELFORMATDESCRIPTOR *ppfd);

/* Finds a best match based on an attribute list of integers and floats,
and returns a list of indices of matches, with the best matches at the head.
Also supports extended pixelformat traits like sRGB color space,
floating-point framebuffers and multisampling. */
BOOL wglChoosePixelFormatARB(HDC hdc, const int *piAttribIList,
    const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats,
    UINT *nNumFormats
);

/* Sets the pixelformat based on the pixelformat index */
BOOL SetPixelFormat(HDC hdc, int iPixelFormat, const PIXELFORMATDESCRIPTOR *ppfd);

Править: MSDN заявляет это о SetPixelFormat () параметр:

Указатель на структуру PIXELFORMATDESCRIPTOR, которая содержит логическую спецификацию формата пикселя. Компонент метафайла системы использует эту структуру для записи логической спецификации формата пикселя. Структура не имеет никакого другого эффекта на поведение функции SetPixelFormat.

Но я понятия не имею, что это означает, или как это касается моего вопроса (вопросов).

11
задан 29 March 2010 в 19:03
поделиться

1 ответ

Я считаю, что вам не придется использовать PIXELFORMATDESCRIPTOR и ChoosePixelFormat, просто используйте wglChoosePixelFormatARB и установите возвращаемое int как формат пикселей. Эти функции используются только для запроса окон на соответствие формату пикселей, функция SetPixelFormat не знает, какую функцию вы использовали для получения желаемого формата пикселей.

Вывод из обсуждения ниже:

Я изучил реализацию opengl в Wine, они полностью игнорируют этот параметр .. ( internal_SetPixelFormat ), но кто знает, что с этим делает ms, единственный безопасный способ Я вижу, что нужно найти формат пикселей с помощью функции wglChoosePixelFormatARB, а затем использовать DescribePixelFormat для заполнения структуры, которую вы передаете обратно в SetPixelFormat.

4
ответ дан 3 December 2019 в 11:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: