Compartir a través de


Funciones de contexto de representación

Cinco funciones WGL administran contextos de representación, tal como se describe en la tabla siguiente.

Función WGL Descripción
wglCreateContext Crea un nuevo contexto de representación.
wglMakeCurrent Define el contexto de representación actual de un subproceso.
wglGetCurrentContext Genera un identificador para el contexto de representación actual de un subproceso.
wglGetCurrentDC Genera un identificador del contexto del dispositivo asociado al contexto de representación actual de un subproceso.
wglDeleteContext Elimina un contexto de representación.

 

La función wglCreateContext toma un identificador de contexto de dispositivo como parámetro y devuelve un identificador de contexto de representación. El contexto de representación creado es ideal para dibujar en el dispositivo al que hace referencia el identificador de contexto del dispositivo. En concreto, su formato de píxel es el mismo que el formato de píxel del contexto del dispositivo. Después de crear un contexto de representación, puede liberar o eliminar el contexto del dispositivo. Consulte Contextos de dispositivo para obtener más información sobre la creación, obtención, liberación y eliminación de un contexto de dispositivo.

Nota:

El contexto del dispositivo enviado a wglCreateContext debe ser un contexto de dispositivo visual, un contexto de dispositivo de memoria o un contexto de dispositivo de impresora de color que use cuatro o más bits por píxel. El contexto del dispositivo no puede ser un contexto de dispositivo de impresora monocromática.

 

La función wglMakeCurrent toma un identificador de contexto de representación y un identificador de contexto de dispositivo como parámetros. Todas las llamadas de OpenGL posteriores realizadas por el subproceso se realizan a través de ese contexto de representación y se dibujan en el dispositivo al que hace referencia ese contexto de dispositivo. El contexto del dispositivo no tiene que ser el mismo que se pasa a wglCreateContext cuando se creó el contexto de representación, pero debe estar en el mismo dispositivo y tener el mismo formato de píxel. La llamada a wglMakeCurrent crea una asociación entre el contexto de representación facilitado y el contexto del dispositivo. No se puede liberar ni eliminar el contexto del dispositivo asociado a un contexto de representación actual hasta después de que el contexto de representación deje de estar activo.

Cuando un subproceso tiene un contexto de representación actual, puede realizar llamadas de gráficos de OpenGL. Todas las llamadas deben pasar por un contexto de representación. No ocurre nada si realiza llamadas de gráficos de OpenGL a través de un subproceso que carece de un contexto de representación activo.

La función wglGetCurrentContext no toma parámetros y devuelve un identificador al contexto de representación actual del subproceso que realiza la llamada. Si el subproceso no tiene ningún contexto de representación actual, el valor devuelto es NULL.

Cuando se obtiene un identificador para el contexto del dispositivo asociado al contexto de representación actual de un subproceso mediante una llamada a wglGetCurrentDC, la asociación se crea al dejar activo un contexto de representación.

Puede romper la asociación entre un contexto de representación actual y un subproceso llamando a wglMakeCurrent con cualquiera de los dos identificadores:

  • Un identificador de contexto de representación null
  • Identificador distinto del denominado originalmente

Tras llamar a wglMakeCurrent con el parámetro del identificador del contexto de representación cambiado a NULL, el subproceso que realiza la llamada no tendrá ningún contexto de representación activo. El contexto de representación se libera de su estado de conexión con el subproceso y se disuelve la asociación del contexto de representación con el contexto del dispositivo. OpenGL vacía todos los comandos de dibujado y puede liberar algunos recursos. No se realizará ningún dibujado de OpenGL hasta la siguiente llamada a wglMakeCurrent, ya que el subproceso no podrá realizar llamadas a gráficos de OpenGL hasta que recupere un contexto de representación activo.

La segunda forma de romper la asociación entre un contexto de representación y un subproceso es llamar a wglMakeCurrent con un contexto de representación diferente. Después de esta llamada, el subproceso de llamada tendrá un nuevo contexto de representación activo, el contexto de representación actual anterior se liberará de su conexión con el subproceso y se disolverá la asociación del contexto de representación actual anterior con el contexto del dispositivo.

La función wglDeleteContext toma un único parámetro, el identificador del contexto de representación que se va a eliminar. Antes de llamar a wglDeleteContext, deje el contexto de representación inactivo llamando a wglMakeCurrent y elimine o libere el contexto de dispositivo asociado llamando a DeleteDC o ReleaseDC, según corresponda.

Es un error si un subproceso elimina un contexto de representación que sea el contexto de representación activo de otro subproceso. Sin embargo, si un contexto de representación es el contexto de representación activo del subproceso de llamada, wglDeleteContext vaciará todos los comandos de dibujado de OpenGL y dejará inactivo el contexto de representación antes de eliminarlo. En este caso, si se confía en wglDeleteContext para que un contexto de representación no esté activo, se necesita que el programador elimine o libere el contexto del dispositivo asociado.