Перечисление форматов пикселей для адаптеров и режимов с OpenGL - PullRequest
1 голос
/ 24 декабря 2010

Я пытаюсь закодировать путь OpenGL для моего 3D-движка. Путь D3D перечисляет все адаптеры устройств, все режимы (под режимом я имею в виду битовую глубину, размеры, доступное оконное отображение и частоту обновления) для каждого адаптера, а затем все форматы пикселей, доступные для данного режима и адаптера, наряду с некоторыми полезными заглавными буквами (шейдер) версия, типы фильтров и т. д.). Итак, я получил следующие защищенные функции в классе:

// Enumerate all back/front buffer combinations.

virtual void EnumerateBackFrontBufferCombinations(CComPtr<IDirect3D9>& d3d9);

// Enumerate all depth/stencil formats.

virtual void EnumerateDepthStencilFormats(CComPtr<IDirect3D9>& d3d9);

// Enumerate all multi-sample formats.

virtual void EnumerateMultiSampleTypes(CComPtr<IDirect3D9>& d3d9);

// Enumerate all device formats, i.e. dynamic, static, render target, etc.

virtual void EnumerateMapFormats(CComPtr<IDirect3D9>& d3d9);

// Enumerate all capabilities.

virtual void EnumerateCapabilities(CComPtr<IDirect3D9>& d3d9);

Адаптеры перечисляются с EnumDisplayDevices, режимы (разрешения и частоты обновления) перечисляются с EnumDisplaySettings, так что это может быть сделано для GL или D3D. Другие функции, в которых я не так уверен с OpenGL. Каковы эквиваленты для IDDirect3D9 CheckDeviceType, CheckDeviceFormat, CheckDeviceMultiSampleType, CheckDepthStencilMatch? Я знаю, что могу использовать DescribePixelFormat, учитывая DC, но вам нужно создать окно, прежде чем вы сможете использовать DC с ним, но вы не можете создать окно правильно, пока не знаете, какие форматы вы собираетесь использовать использовать.

Какие советы вы можете мне дать?

Спасибо.

1 Ответ

1 голос
/ 24 декабря 2010

, но вы не можете правильно создать окно, пока не знаете, какие форматы вы собираетесь использовать

Почему?

Стандартный подход:

  1. Создайте окно.
  2. Перечислите все форматы, поддерживаемые устройством, представленным DC окна.
  3. Вызовите SetPixelFormat () с вашим любимым форматом, чтобы установитьформат.
  4. Создание контекста OpenGL.
...