Funções de contexto de renderização
Cinco funções WGL gerenciam contextos de renderização, conforme descrito na tabela a seguir.
Função WGL | Descrição |
---|---|
wglCreateContext | Cria um contexto de renderização. |
wglMakeCurrent | Define o contexto de renderização atual de um thread. |
wglGetCurrentContext | Obtém um identificador para o contexto de renderização atual de um thread. |
wglGetCurrentDC | Obtém um identificador para o contexto do dispositivo associado ao contexto de renderização atual de um thread. |
wglDeleteContext | Exclui um contexto de renderização. |
A função wglCreateContext usa um identificador de contexto de dispositivo como seu parâmetro e retorna um identificador de contexto de renderização. O contexto de renderização criado é adequado para desenhar no dispositivo referenciado pelo identificador de contexto do dispositivo. Em particular, seu formato de pixel é igual ao do contexto do dispositivo. Depois de criar um contexto de renderização, você pode liberar ou descartar o contexto do dispositivo. Confira Contextos de dispositivo para obter mais detalhes sobre como criar, obter, liberar e descartar um contexto de dispositivo.
Observação
O contexto de dispositivo enviado para wglCreateContext deve ser um contexto de dispositivo de exibição, um contexto de dispositivo de memória ou um contexto de dispositivo de impressora colorida que usa quatro ou mais bits por pixel. O contexto do dispositivo não pode ser um contexto de dispositivo de impressora monocromática.
A função wglMakeCurrent usa um identificador de contexto de renderização e um identificador de contexto de dispositivo como parâmetros. Todas as chamadas OpenGL subsequentes feitas pelo thread são feitas por meio desse contexto de renderização e são desenhadas no dispositivo referenciado pelo contexto de dispositivo em questão. O contexto do dispositivo não precisa ser o mesmo passado para wglCreateContext quando o contexto de renderização foi criado, mas deve estar no mesmo dispositivo e ter o mesmo formato de pixel. A chamada para wglMakeCurrent cria uma associação entre o contexto de renderização fornecido e o contexto do dispositivo. Você não pode liberar ou descartar o contexto do dispositivo associado a um contexto de renderização atual até tornar o contexto de renderização não atual.
Depois que um thread tem um contexto de renderização atual, ele pode fazer chamadas gráficas OpenGL. Todas as chamadas devem passar por um contexto de renderização. Nada acontecerá se você fizer chamadas gráficas OpenGL de um thread que não tem um contexto de renderização atual.
A função wglGetCurrentContext não usa parâmetros e retorna um identificador para o contexto de renderização atual do thread de chamada. Se o thread não tiver um contexto de renderização atual, o valor retornado será NULL.
Quando você obtém um identificador para o contexto do dispositivo associado ao contexto de renderização atual de um thread chamando wglGetCurrentDC, a associação é criada quando um contexto de renderização passa a ser atual.
Você pode quebrar a associação entre um contexto de renderização atual e um thread chamando a função wglMakeCurrent com um dos dois identificadores:
- Um identificador de contexto de renderização null
- Um identificador diferente do originalmente chamado
Depois de chamar a função wglMakeCurrent com o parâmetro de identificador de contexto de renderização definido como NULL, o thread de chamada não tem nenhum contexto de renderização atual. O contexto de renderização é liberado da conexão com o thread, e a associação do contexto de renderização a um contexto de dispositivo é encerrada. O OpenGL libera todos os comandos de desenho e pode liberar alguns recursos. Nenhum desenho do OpenGL será feito até a próxima chamada de wglMakeCurrent, pois o thread não pode fazer nenhuma chamada gráfica OpenGL até recuperar um contexto de renderização atual.
A segunda maneira de quebrar a associação entre um contexto de renderização e um thread é chamar a função wglMakeCurrent com um contexto de renderização diferente. Após essa chamada, o thread de chamada tem um novo contexto de renderização atual, o contexto de renderização atual anterior é liberado da respectiva conexão com o thread, e a associação do contexto de renderização atual anterior a um contexto de dispositivo é encerrada.
A função wglDeleteContext usa um único parâmetro, o identificador para o contexto de renderização a ser excluído. Antes de chamar wglDeleteContext, torne o contexto de renderização não atual chamando wglMakeCurrent e exclua ou libere o contexto de dispositivo associado chamando DeleteDC ou ReleaseDC, conforme apropriado.
É um erro o thread excluir um contexto de renderização que consiste no contexto de renderização atual de outro thread. No entanto, se um contexto de renderização for o contexto de renderização atual do thread de chamada, a função wglDeleteContext liberará todos os comandos de desenho do OpenGL e tornará o contexto de renderização não atual antes de excluí-lo. Nesse caso, contar com a função wglDeleteContext para tornar um contexto de renderização não atual requer que o programador exclua ou libere o contexto do dispositivo associado.