Contexts OpenGL

Tengo varias preguntas relacionadas con el renderizado de OpenGL y los problemas que encontré al hacer 3D enigne. Algunos de ellos se les preguntó antes, pero las respuestas son viejas y posiblemente anticuadas o ambiguas.

1) ¿Hay alguna forma de asegurarse de que se haya inicializado un context de OpenGL antes de crear un recurso?

Sé que SMFL ejecuta una function que comtesting la existencia de un context activo en un hilo actual y lo crea si no había uno, pero eso implica al less algunas funciones con hopyfully inline cada vez que se crea dicho recurso. (infierno estático) También hay un método para imponer la creación de resources OGL por context / window, pero al mismo time te obliga a pasar references.

2) ¿Hay algún motivo para hacerlo? Si vamos a lanzar exception de todos modos, no veo uno. Tampoco hay tan poderoso "no lo hagas" escrito en los documentos.

3) ¿Tengo que considerar la posibilidad de múltiples windows / contexts? ¿Qué hay de multihilo?

He leído un poco sobre la creación de 2 hilos, uno para renderizar, segundo para pasar datos. Me parece que tendré que esperar a que termine el otro hilo antes de dejar que otro permiso se vaya.

Enormes gracias de antemano 🙂

Creo que echas de less lo que es un motor un poco.

Los motores de juego se desarrollan con el fin de facilitar la creación de juegos, sin que los usuarios del motor tengan que ocuparse de complejas API de bajo nivel. Por lo tanto, administraría los resources de OpenGL internamente, dentro del motor.

Entonces, repasemos sus puntos.

  1. Depende de cómo construyas tu sistema. En mi pequeño (s) motor (es) de renderizado solía tener fábricas ( Factory -Pattern) que me crearon los resources. Por lo tanto, ni siquiera fue posible para mí crear un recurso sin tener una instancia de la fábrica. Por ejemplo, puede crear una class de context OpenGL, que también actúa como fábrica de resources.

  2. No entiendo este punto. Como alguien que quiere desarrollar un motor de juego, debe apuntar a hacer que la creación del juego sea más fácil y más simple.

  3. Tendría en count que uno crearía 2 o más windows con un context. Esto no significa necesariamente que cada window debe tener su propio context. Un context puede ser compartido a través de múltiples windows. Sin embargo, puede procesar solo en una window a la vez.

  4. Acerca de multi threading y OpenGL: Simplemente no lo haga. Supongo que desea emitir múltiples drawcalls desde múltiples hilos. Un context OpenGL está vinculado a un determinado hilo, generalmente por las llamadas '* MakeCurrent' expuestas por los sistemas de windows. Multi Threading no le comprará mucho con OpenGL. Para más información, solo lea aquí .

Descargo de responsabilidad: no soy un ingeniero gráfico profesional. Mi conocimiento completo es autodidacta usando la reference o sitios como SO.

EDITAR: Olvidé el obligatorio "Escribir juegos, no motores!"