Hola a todos! Quería pedir consejo sobre qué API utilizar en el programa que me encuentro realizando, y que me corrijáis sobre las conclusiones que he sacado en las pruebas que he hecho en caso de estar equicado.
Me encuentro realizando un programa que genera gráficas basadas en unos datos que van llegando, estas gráficas (en 2D) se van desplazando hacia la izquierda y tal. Probé con GDI, ya sabéis, usando doble buffer mediante Bitmap que se copian al DC con la función BitBlt, pero se producía parpadeo al desplazar las gráficas, un parpadeo que en monitores normales CRT no se apreciaba, pero en portátiles y en general en monitores TFT sí que era de sobra apreciable.
Después probé con DirectX, que tiene un mecanismo de intercambio de superficies mediante la función flip, el problema es que mi aplicación funciona en modo ventana, y en DirectX el intercambio de superficies solo lo puedes hacer a pantalla completa, en modo ventana no tienes más remedio que usar Blt, por lo que no pude corregir el parpadeo con DirectX. Si me equivoco en algo, por favor corríjanme.
Lo último que hice fue usar OpenGL, en modo 2D. Lo cierto es que con OpenGL sí que llegué a solucionar el problema del parpadeo, ya que sí permite el intercambio de buffers mediante la función SwapBuffers en modo ventana, sin tener que recurrir a transferencias de memoria. El problema que me surgió es que OpenGL no es thread-safe, con lo que no puedo tener varios threads pintando a la vez, puesto que mi aplicación tiene que pintar varias gráficas simultáneamente y cada thread se ocupa de una, y además cada gráfica usa un contexto de dispositivo distinto, por lo que no entiendo que no pueda haber más de un thread pintando a la vez. Estos tienen que llamar a MakeCurrent cada vez que quieren pintar, por lo que pinta uno, después otro... y así sucesivamente. Esto provoca que cuando vas añadiendo nuevas gráficas se realenticen las demás. ¿Hay alguna manera de que con OpenGL se puedan tener varios threads pintando a la vez? ¿Existe alguna extensión de OpenGL que permita que varios threads pinten al mismo tiempo?
Bueno, ya conocen mi problema, ¿qué me recomiendan? ¿Quizás alguna otra API gráfica? ¿O hay alguna solución con alguna de las que he usado?
Gracias, un saludo!!!