Сведения о вопросе

ЧОВИД

17:30, 4th August, 2020

Теги

Как включить мультисэмплинг для программы wxWidgets OpenGL?

Просмотров: 617   Ответов: 1

Мультисэмплинг -это способ применения полноэкранного сглаживания (FSAA) в приложениях 3D. Мне нужно использовать мультисэмплинг в моей программе OpenGL, которая в настоящее время встроена в wxWidgets GUI. Есть ли способ сделать это? Пожалуйста, отвечайте только в том случае, если вы знаете подробные шаги для достижения этой цели.

Я знаю о включении мультисэмплинга с использованием WGL (Win32 extensions to OpenGL). Однако, поскольку моя программа OpenGL не написана в MFC (и я хочу, чтобы код был переносимым на несколько платформ), это не вариант для меня.



  Сведения об ответе

padenie

10:24, 17th August, 2020

Я наконец-то получил Мультисэмплинг, работающий с моей программой wxWidgets OpenGL. Это немного грязно прямо сейчас, но вот как:

wxWidgets не имеет поддержки Мультисэмплирования в своих стабильных выпусках прямо сейчас (последняя версия на данный момент- 2.8.8). Но он доступен как патч, а также через их ежедневный снимок. (Последнее обнадеживает, так как это означает, что патч был принят и должен появиться в более поздних стабильных выпусках, если нет никаких проблем.)

Итак, есть 2 варианта:

  1. Скачивайте и создавайте из их ежедневного снимка .

  2. Получите патч для вашей рабочей установки wxWidgets.

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

По крайней мере, для Windows патч изменит следующие файлы:

$(WX_WIDGETS_ROOT)/include/wx/glcanvas.h
$(WX_WIDGETS_ROOT)/include/wx/msw/glcanvas.h
$(WX_WIDGETS_ROOT)/src/msw/glcanvas.cpp

После исправления необходимо перекомпилировать библиотеки wxWidgets.

Чтобы включить мультисэмплинг в вашей программе wxWidgets OpenGL, требуются незначительные изменения в коде.

Список атрибутов должен быть передан конструктору wxGLCanvas:

int attribList[] = {WX_GL_RGBA,
                    WX_GL_DOUBLEBUFFER,
                    WX_GL_SAMPLE_BUFFERS, GL_TRUE, // Multi-sampling
                    WX_GL_DEPTH_SIZE, 16,
                    0, 0};

Если вы уже использовали список атрибутов, то добавьте в него строку с GL_SAMPLE_BUFFERS, GL_TRUE . В противном случае добавьте это определение списка атрибутов в свой код.

Затем измените свой конструктор wxGLCanvas, чтобы принять этот список атрибутов в качестве параметра:

myGLFrame::myGLFrame    // Derived from wxGLCanvas
(
    wxWindow *parent,
    wxWindowID id,
    const wxPoint& pos,
    const wxSize& size,
    long style,
    const wxString& name
)
: wxGLCanvas(parent, (wxGLCanvas*) NULL, id, pos, size, style, name, attribList)
{
    // ...
}

После создания элемента wxGLCanvas по умолчанию включается мультисэмплинг. Чтобы отключить или включить его по желанию, используйте связанные вызовы OpenGL:

glEnable(GL_MULTISAMPLE);
glDisable(GL_MULTISAMPLE);

Теперь мультисэмплинг должен работать с программой wxWidgets OpenGL. Надеюсь, что в скором времени он будет поддерживаться в стабильном выпуске wxWidgets, что делает эту информацию неактуальной :-)


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться