Pregunta

multimuestreo es una forma de aplicar suavizado de pantalla completa (FSAA) en aplicaciones 3D.Necesito usar multimuestreo en mi programa OpenGL, que actualmente está integrado en un wxWidgets GUI.¿Hay alguna forma de hacer esto?Responda solo si conoce los pasos detallados para lograrlo.

Soy consciente de habilitar el multimuestreo usando WGL (Extensiones Win32 para OpenGL).Sin embargo, dado que mi programa OpenGL no está escrito en MFC (y quiero que el código sea portátil multiplataforma), esa no es una opción para mí.

¿Fue útil?

Solución

Finalmente conseguí que Multisampling funcionara con mi programa wxWidgets OpenGL.Es un poco complicado en este momento, pero así es como se hace:

wxWidgets no tiene multimuestreo apoyo en sus lanzamientos estables ahora mismo (la última versión en este momento es 2.8.8).Pero está disponible como parche y también a través de su instantánea diaria.(Esto último es alentador, ya que significa que el parche ha sido aceptado y debería aparecer en versiones estables posteriores si no hay problemas).

Entonces, hay 2 opciones:

  1. Descargar y compilar desde su instantánea diaria.

  2. Consigue el parche para su instalación funcional de wxWidgets.

La segunda opción me pareció menos engorrosa, ya que no quiero perturbar mi instalación en funcionamiento tanto como sea posible.Si no sabe cómo aplicar parches en Windows, consulte este.

Como mínimo, para Windows, el parche modificará los siguientes archivos:

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

Después del parche, recompilar las bibliotecas wxWidgets.

Para habilitar el muestreo múltiple en su programa wxWidgets OpenGL, se requieren cambios menores en el código.

Es necesario pasar una lista de atributos al wxGLCanvas constructor:

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

Si ya estaba usando una lista de atributos, agregue la línea con GL_SAMPLE_BUFFERS, GL_TRUE lo.De lo contrario, agregue esta definición de lista de atributos a su código.

Luego modifique su constructor wxGLCanvas para tomar esta lista de atributos como parámetro:

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)
{
    // ...
}

Una vez creado el elemento wxGLCanvas, el muestreo múltiple se activa de forma predeterminada.Para deshabilitarlo o habilitarlo a voluntad, use las llamadas OpenGL relacionadas:

glEnable(GL_MULTISAMPLE);
glDisable(GL_MULTISAMPLE);

El muestreo múltiple ahora debería funcionar con el programa wxWidgets OpenGL.Con suerte, pronto será compatible con la versión estable de wxWidgets, lo que hará que esta información sea irrelevante :-)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top