Permítanme ampliar la respuesta de Greg.
Es cierto que Qt tiene una clase de procesador SVG, QSvgRenderer. Además, cualquier dibujo que haga en Qt se puede hacer en cualquier "QPaintDevice", donde estamos interesados en los siguientes "dispositivos de pintura":
- Un widget Qt;
- En particular, un artilugio Qt basado en GL (QGLWidget); imagen
- Un Qt
lo tanto, si usted decide usar Qt, sus opciones son:
- no utilizar más el método actual de la configuración de la ventana (y el contexto GL), y comenzar a usar QGLWidget para toda su representación, incluyendo la representación de SVG. Esto podría ser un cambio bastante pequeño, dependiendo de sus necesidades. QGLWidget no es particularmente limitante en sus capacidades.
- Usa QSvgRenderer para renderizar en una QImage, luego coloca los datos de esa QImage en una textura GL (como lo harías normalmente) y renderízalos de la forma que desees (por ejemplo, en un GL_QUAD rectangular). Puede tener un rendimiento peor que el otro método, pero requiere el menor cambio en su código.
¿Se pregunta qué hace QGLWidget exactamente? Bueno, cuando emite los comandos de renderizado Qt a un QGLWidget, estos se traducen en llamadas GL por usted. Y esto también ocurre cuando los comandos de renderización son emitidos por el renderizador SVG. Entonces, al final, tu SVG terminará siendo renderizado a través de un grupo de primitivas GL (líneas, polígonos, etc.).
Esto tiene una desventaja. Las diferentes tarjetas de video implementan OpenGL de forma ligeramente diferente, y Qt no tiene en cuenta (y no puede) todas esas diferencias. Entonces, por ejemplo, si su usuario tiene una tarjeta de video Intel a bordo barata, entonces su tarjeta de video no admite el antialiasing de OpenGL, y esto significa que su SVG también se verá con alias (irregular) si la procesa directamente en un QGLWidget. Pasar por QImage evita tales problemas.
Usted puede utilice el método QImage cuando amplíe en tiempo real, también. Solo depende de qué tan rápido lo necesite. Es posible que necesite optimizaciones cuidadosas, como reutilizar la misma QImage y habilitar el recorte para su QPainter.
Su monitor es una pantalla rasterizada, por lo que terminará rastrillándose en algún momento, la pregunta es si esa rasterización ocurre o no en una etapa lo suficientemente tarde como para que sea conveniente hacer las cosas que desea hacer. OpenGL no tiene soporte específico para ningún formato de archivo (excepto tal vez el código escrito en el lenguaje de sombreado), por lo que todo se reduce a lo que está dispuesto a escribir. –
Básicamente, esta es la misma pregunta que http://stackoverflow.com/questions/4054612/2d-vector-graphic-renderer-for-opengl – Fizz