wpf opengl graphics opentk

OpenTK, SharpGL y WPF



opengl graphics (2)

Estoy a punto de comenzar un nuevo proyecto. Algunas decisiones están fuera de mi control: usar WPF y OpenGL son algunas de ellas.

Sin embargo, reduje mis opciones de OpenGL a dos: OpenTK o SharpGL. SharpGL tiene un control WPF, mientras que OpenTK solo tiene un control de Windows Forms, lo que hace que tenga que incrustarlo en un host de Windows Forms: - / Si bien no me importan las restricciones del espacio aéreo, sí deseo tener un rendimiento decente, ya que estoy construyendo una aplicación en tiempo real. No es un juego, pero aún así, en tiempo real.

¿Cuánto de un rendimiento afectaría mi programa al usar OpenTK en un Windows Forms Host, vs usar SharpGL con un control "puro" de WPF?


Cuando se trata de rendimiento, en realidad solo puedo darte una respuesta única: ¡haz un punto de referencia tú mismo! Pero como está pidiendo una suposición elaborada:

SharpGl debería requerir un paso de indirección menos, ya que deja fuera el control de host de Windows Forms como un objetivo de blitting "intermedio". Sin embargo, tome esto como un grano de sal, ni miré la fuente ni la probé yo mismo.

Pero hablando en términos prácticos: el rendimiento debería ser muy similar. Al final del día, las operaciones pesadas computacionales probablemente serán la renderización en sí, lo que OpenGL realiza. Blitting el resultado final solo debe tomar una fracción de ese tiempo. Así que espero que, como decidas, ninguna de estas opciones perjudique tu rendimiento.

Por el bien del argumento: supongamos que la representación en sí misma (la parte OpenGL) lleva 16 ms, por lo que tendríamos un rendimiento teórico de aproximadamente 60 FPS. El Framework A agrega una sobrecarga de 1 ms, Framework B y una sobrecarga de 4 ms. Incluso con esta gran diferencia en los gastos generales, Framework a rendiría a ~ 58 FPS y Framework B a ~ 50 FPS. Entonces, en ambos casos, la aplicación debe seguir siendo utilizable.

Pero lo que me desconcierta es cuánto te estás preguntando acerca de este aspecto. Al final, está trabajando con OpenGL y no debería ser demasiado complicado simplemente cambiar la implementación subyacente en caso de que las cosas vayan mal. Las interfaces no me parecen muy diferentes.


Yo diría que vaya con OpenTK, o si es más cómodo para usted usar SharpGL, luego vaya con él en modo Winforms e incrústelo dentro de una aplicación WPF.

La razón es que el controlador OpenGL sabe cómo trabajar con un identificador de ventana, provisto con cada control de formas de pago. En una aplicación WPF, solo hay un identificador de ventana, el de la ventana principal. Puede intentar usarlo, pero creo que planteará demasiados problemas.

Si no quieres que las cosas se rendericen directamente en la pantalla, y piensas en utilizar un PixelBufferObject o un RenderBufferObject, probablemente estarás bien con SharpGL en modo WPF (se renderizará en un RenderBufferObject, que colocará el búfer resultante en un imagen, probablemente usando un WritableBitmap más o menos), o puede hacer lo mismo usted mismo.