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