2011-08-15 21 views

Respuesta

5

Desde el enlace:

Crear un contexto sin una ventana, para la representación fuera de la pantalla. Esto puede no funcionar realmente.

Esa segunda oración es importante. Desde el WGL_ARB_create_context specification:

4) ¿Debería haber una manera de hacer que una corriente de contexto y sin unión a un dibujable sistema de ventanas al mismo tiempo?

RESUELVE: Sí, pero solo en OpenGL 3.0 y versiones posteriores. Esto da como resultado un contexto con un framebuffer predeterminado no válido, cuyo significado es definido en la especificación OpenGL 3.0.

NOTA: Aparentemente en Windows, opengl32.dll hace uso del argumento dibujable para identificar el espacio de nombres del controlador, por lo que puede que no sea capaz de evitarlo.

La especificación no le permiten crear un contexto sin una ventana, ya que necesita el formato de píxel que se establece en el contexto de dispositivo. Pero teóricamente puede pasar NULL para el HDC al hacer que el contexto sea actual, lo que hace que OpenGL no tenga un framebuffer predeterminado.

Pero, como se indicó anteriormente, es posible que esto no funcione. Puedes intentarlo para ver qué sucede, pero no me gustaría ilusionarme.

+0

Gracias por la respuesta. Entonces, ¿cuál es la forma más minimalista de crear un contexto sin ventanas? – ronag

+0

Otro intento sería utilizar la pantalla DC (pasando NULL a la * rutina GetDC *). – Luca

+1

@Luca: ¡No debe configurar el PIXELFORMATDESCRIPTOR de la ventana raíz/pantalla! Y el contexto de OpenGL dibujable debe obligatoriamente tener un formato de pixel compatible. Por lo tanto, su sugerencia es un muy mal consejo. – datenwolf

2

La forma habitual de poner en práctica fuera de la pantalla de representación es:

  1. crear un contexto ventana + OpenGL ficticio para obtener acceso a las extensiones
  2. obtener las funciones para crear un pBuffer
  3. Crear un DC pBuffer
  4. Crear un contexto OpenGL en el PBuffer
  5. Destruir la ventana ficticia

Otra opción es utilizar objetos Framebuffer (FBO) mediante los cuales se crea una ventana OpenGL regular, pero en lugar de renderizar al framebuffer principal se renderiza en búferes de objetos Framebuffer, con la ventana OpenGL invisible.

+1

Para un principiante, ¿sería posible tener un fragmento de código? – user377178

-1

otra cosa:

HDC hdc = CreateDC(L"DISPLAY",NULL,NULL,NULL); 

Pero ReleaseDC no funciona con it.DeleteDC hace.

+0

¿Qué quiere decir con "no funciona"? 'ReleaseDC' y' DeleteDC' no son equivalentes entre sí, sino que tienen fines completamente diferentes. – BDL

Cuestiones relacionadas