glcanvas.h

Clase wxGLCanvas

wxGLCanvas es una clase para mostrar gráficos OpenGL.

Jerarquía:

Jerarquía de la clase wxGLCanvas

Se utiliza siempre junto con wxGLContext, ya que el contexto solo puede hacerse actual (es decir, activo para los comandos OpenGL) cuando está asociado a un wxGLCanvas.

Más concretamente, primero hay que crear una ventana wxGLCanvas y luego crear una instancia de un wxGLContext que se inicializa con este wxGLCanvas y luego utilizar SetCurrent() con la instancia del wxGLContext o wxGLContext::SetCurrent() con la instancia del wxGLCanvas (que puede no ser la misma que se utilizó para la creación del contexto) para enlazar el estado OpenGL que está representado por el contexto de renderizado con el lienzo, y finalmente llamar a SwapBuffers() para intercambiar los buffers del lienzo OpenGL y así mostrar su salida actual.

Hay que tener en cuenta que wxGLContext siempre utiliza píxeles físicos, incluso en las plataformas en las que wxWindow utiliza píxeles lógicos, afectados por el escalado de coordenadas, en pantallas de alto DPI. Por lo tanto, si se desea establecer el puerto de vista OpenGL al tamaño de toda la ventana, se debe multiplicar el resultado devuelto por wxWindow::GetClientSize() por wxGLCanvas::GetContentScaleFactor() antes de pasarlo a glViewport(). Las mismas consideraciones se aplican a otras funciones OpenGL y otras coordenadas, especialmente las recuperadas de wxMouseEvent en los manejadores de eventos.

Hay que tener en cuenta que las versiones de wxWidgets anteriores a la 2.9 solían crear implícitamente un wxGLContext dentro del propio wxGLCanvas. Esto todavía está soportado en la versión actual pero está obsoleto y será eliminado en el futuro, por favor actualizar el código para crear los contextos de renderizado explícitamente.

Para configurar los atributos del lienzo (número de bits para el buffer de profundidad, número de bits para el buffer del stencil, etc.) debe pasarse en el constructor usando una instancia de wxGLAttributes. Todavía se puede usar la forma anterior a la 3.1.0 (configurando los valores correctos del parámetro attribList) pero se desaconseja.

Nota: En las plataformas que utilizan un script de configuración (por ejemplo, Linux y macOS), la compatibilidad con OpenGL se activa automáticamente si se encuentran las cabeceras y bibliotecas relativas. En Windows, el soporte OpenGL está activado por defecto (wxUSE_GLCANVAS a 1 en el fichero setup.h). Si el programa se enlaza estáticamente con wxWidgets, se necesitará añadir opengl32.lib (y glu32.lib para versiones antiguas de OpenGL) a la lista de librerías con las que se enlaza tu programa.

Funciones miembro

wxGLCanvas()

wxGLCanvas::wxGLCanvas( wxWindow * parent, const wxGLAttributes & dispAttrs, wxWindowID id = wxID_ANY, const wxPoint & pos = wxDefaultPosition, const wxSize & size = wxDefaultSize, long style = 0, const wxString & name = wxGLCanvasName, const wxPalette & palette = wxNullPalette )

Crea una ventana con los parámetros dados.

Hay que tener en cuenta que necesita crear y utilizar un wxGLContext para dar salida a esta ventana.

Parámetros
parent
Puntero a una ventana padre.
dispAttrs
Los wxGLAttributes utilizados para establecer los atributos de visualización (no para renderizar los atributos del contexto).
id
Identificador de la ventana. Si -1, creará automáticamente un identificador.
pos
Posición de la ventana. wxDefaultPosition es (-1, -1) lo que indica que wxWidgets debe generar una posición por defecto para la ventana.
size
Tamaño de la ventana. wxDefaultSize es (-1, -1) que indica que wxWidgets debe generar un tamaño por defecto para la ventana. Si no se puede encontrar un tamaño ad
ecuado, la ventana tendrá un tamaño de 20x20 píxeles para que la ventana sea visible pero obviamente no tendrá el tamaño correcto.
style
Estilo de la ventana.
name
Nombre de la ventana.
palette
Paleta para el modo de color indexado (es decir, no WX_GL_RGBA). Se ignora en la mayoría de las plataformas.
wxGLCanvas()

wxGLCanvas::wxGLCanvas( wxWindow * parent, wxWindowID id = wxID_ANY, const int * attribList = NULL, const wxPoint & pos = wxDefaultPosition, const wxSize & size = wxDefaultSize, long style = 0, const wxString & name = "GLCanvas", const wxPalette & palette = wxNullPalette )

Este constructor sigue disponible solo por razones de compatibilidad.

Por favor, utilizar el constructor con wxGLAttributes en su lugar.

Si no se especifica attribList, se utiliza wxGLAttributes::PlatformDefaults(), además de algunos otros atributos (ver más abajo).

Parámetros
parent
Puntero a una ventana padre.
id
Identificador de la ventana. Si -1, se creará automáticamente un identificador.
attribList

Matriz de enteros. Con este parámetro puede establecer los atributos de contexto de dispositivo asociados a esta ventana. Este array está terminado en cero: debería configurarse usando constantes wxGL_FLAGS. Si una constante debe ir seguida de un valor, colocarlo en la siguiente posición del array. Por ejemplo, WX_GL_DEPTH_SIZE debe ir seguida del valor que indica el número de bits para el buffer de profundidad, p.e:

attribList[n++] = WX_GL_DEPTH_SIZE;
attribList[n++] = 32;
attribList[n] = 0; // termina la lista

Si la lista de atributos no se especifica en absoluto, es decir, si este parámetro es NULL, se utilizarán los atributos por defecto, incluyendo WX_GL_RGBA y WX_GL_DOUBLEBUFFER. Pero hay que tener en cuenta que si especifica algunos atributos también se debe incluir explícitamente estos dos atributos por defecto en la lista si se necesitan.

pos
Posición de la ventana. wxDefaultPosition es (-1, -1) lo que indica que wxWidgets debe generar una posición por defecto para la ventana.
size
Tamaño de la ventana. wxDefaultSize es (-1, -1) que indica que wxWidgets debe generar un tamaño por defecto para la ventana. Si no se puede encontrar un tamaño adecuado, la ventana tendrá un tamaño de 20x20 píxeles para que la ventana sea visible pero obviamente no tendrá el tamaño correcto.
style
Estilo de la ventana.
name
Nombre de la ventana.
palette
Paleta para el modo de color indexado (es decir, no WX_GL_RGBA). Se ignora en la mayoría de las plataformas.
CreateSurface()

bool wxGLCanvas::CreateSurface()

Vuelve a crear EGLSurface.

Para ser utilizado después de un reparent u otros cambios que pueden invalidar la superficie de dibujo EGL.

Solo disponible cuando wxUSE_GLCANVAS_EGL está habilitado.

Valor de retorno

true si la superficie se ha recreado correctamente

IsDisplaySupported()

static bool wxGLCanvas::IsDisplaySupported(const int * attribList)

Determina si está disponible un lienzo con los atributos especificados.

Esto solo se aplica a los atributos visuales, no a los atributos de contexto de renderizado. Por favor, utilizar la nueva forma de este método, utilizando wxGLAttributes.

Parámetros
attribList
Ver attribList para wxGLCanvas().
Valor de retorno

true si los atributos son soportados.

IsDisplaySupported()

static bool wxGLCanvas::IsDisplaySupported(const wxGLAttributes & dispAttrs)

Determina si está disponible un lienzo con los atributos especificados.

Esto solo se aplica a los atributos visuales, no a los atributos de contexto de renderizado.

Parámetros
dispAttrs
Los atributos solicitados.
Valor de retorno

true si los atributos son soportados.

IsExtensionSupported()

static bool wxGLCanvas::IsExtensionSupported(const char * extension)

Devuelve true si la extensión con el nombre dado está soportada.

Hay que tener en cuenta que aunque esta función está implementada para todas las plataformas GLX, WGL y NSOpenGL, los nombres de las extensiones no suelen ser los mismos para las distintas plataformas, por lo que el código que la utiliza suele utilizar la compilación condicional.

SetColour()

bool wxGLCanvas::SetColour(const wxString & colour)

Establece el color actual para esta ventana (usando glcolor3f()), usando la base de datos de colores de wxWidgets para encontrar un color con nombre.

SetCurrent()

bool wxGLCanvas::SetCurrent(const wxGLContext & context) const

Hace que el estado OpenGL representado por el contexto de renderizado OpenGL sea actual, es decir, será utilizado por todas las llamadas OpenGL posteriores.

Esto es equivalente a wxGLContext::SetCurrent() llamada con esta ventana como parámetro.

Nota: Esta función solo puede ser llamada cuando la ventana se muestra en pantalla, en particular no puede ser llamada normalmente desde el constructor ya que la ventana aún no se muestra en ese momento.

Valor de retorno

false si se ha producido un error.

SwapBuffers()

virtual bool wxGLCanvas::SwapBuffers()

Intercambia el búfer doble de esta ventana, convirtiendo el búfer posterior en el frontal y viceversa, de forma que la salida de los comandos OpenGL anteriores se muestre en la ventana.

Valor de retorno

false si se ha producido un error.

Métodos y datos heredados

Esta clase hereda los métodos y datos miembro públicos y protegidos de wxObject, wxEvtHandler y wxWindow,