Мультисэмплинг - это способ применения полноэкранного сглаживания (FSAA) в 3D-приложениях. Мне нужно использовать мультисэмплинг в моей программе OpenGL, которая в настоящее время встроена вграфический интерфейс wxWidgets . Есть ли способ сделать это? Пожалуйста, отвечайте, только если вы знаете подробные шаги для достижения этой цели.
Мне известно о включении мультисэмплинга с использованием WGL (расширения Win32 для OpenGL). Однако, поскольку моя программа OpenGL не написана на MFC (и я хочу, чтобы код был мультиплатформенным переносимым), это не вариант для меня.
Наконец-то я запустил Multisampling с моей программой wxWidgets OpenGL. Сейчас это немного грязно, но вот как:
В своих стабильных выпусках wxWidgets не поддерживает Multisampling (последняя версия на данный момент - 2.8.8 ). Но это доступно как патч, а также через их ежедневный снимок. (Последнее отрадно, так как это означает, что патч был принят и должен появиться в более поздних стабильных выпусках, если проблем нет.)
Итак, есть 2 варианта:
Загрузите и соберите их ежедневный снимок .
Получить патч для вашей рабочей установки wxWidgets.
Второй вариант оказался менее громоздким, поскольку я не хочу как можно больше мешать моей рабочей установке. Если вы не знаете, как патчить в 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, что сделает эту информацию неактуальной :-)