Existe uma boa biblioteca de gráficos vetoriais em C ++ entre plataformas? [fechadas]

9

Estou fazendo um jogo e quero usar gráficos vetoriais. Comecei a recodificá-lo usando o Cairo e o desempenho é horrível. Então, estou procurando uma biblioteca diferente. Precisa ser para C ++ e multiplataforma (por exemplo, sem Direct2D). Há outra pergunta que alguém fez antes dessa maneira, mas não houve respostas adequadas. Tem que haver algo ...?

Zach Hinchy
fonte
A "pergunta feita antes", você quer dizer gamedev.stackexchange.com/questions/4788/… ?
Tetrad 21/10
@ Tetrad: A pergunta anterior exclui implicitamente várias plataformas, pois solicita explicitamente soluções para o Windows. E as respostas parecem apontar apenas para soluções relacionadas ao Windows.
Coyote
2
@Zach Hinchy: Quando você diz em várias plataformas, quer dizer exatamente o que? Windows, Linux, OS X? Ou você inclui plataformas portáteis iOS, Brew, Android?
Coyote
2
"Tem que haver algo ...?" Por quê? Os gráficos vetoriais, em geral, não são algo que as pessoas que precisam de mais de 30 fps fazem. O seu navegador carrega páginas a 30fps? Não. 10fps é suficiente. Se você usa gráficos vetoriais, é porque valoriza a qualidade em detrimento do desempenho. E assim, as bibliotecas de gráficos vetoriais valorizam a qualidade sobre o desempenho. O Cairo em si não é lento, mas é um renderizador de gráficos vetoriais de qualidade. E essa qualidade significa que não diminui o desempenho.
Nicol Bolas
11
@iamcreasy: Há uma grande diferença entre simplesmente desenhar um quad maior / menor e uma biblioteca de gráficos vetoriais. Jogos são renderizados com a GPU; eles não usam uma biblioteca de gráficos vetoriais. Eles não usam o Cairo ou AntiGrain ou qualquer coisa dessas naturezas.
Nicol Bolas

Respostas:

21

Receio que o assunto seja bastante complicado, poucas soluções multiplataforma parecem ter sido lançadas e menos ainda parecem ter sobrevivido por conta própria. Eu estava analisando o assunto há alguns meses atrás. Eu tinha uma restrição, pois precisava que o mecanismo fosse executado no iOS e Android. Não encontrei nada que realmente me convinha na época.

Mas algumas dicas do que me lembro: cada sistema GUI tem alguma forma de desenhar API. Portanto, você pode encontrar algo de interesse naqueles que são multiplataforma, como o QT .

Um equivalente a cairo seria o AntiGrain. Você pode comparar o desempenho.

O OpenFrameworks tem suporte para gráficos vetoriais.

Uma biblioteca muito grande que possui algum suporte a gráficos vetoriais - e um idioma dedicado a ela - é o ImageMagick .

No nível inferior, você encontrará Libxmi e Libart no projeto gnome.

Não é uma API de alto nível - e não tenho certeza de quais são as probabilidades que servirão para você -, mas existe o OpenVG padrão . Existem várias portas do OpenVG sobre os renderizadores OpenGL e OpenGL ES. O Mesa 3D também parece ter uma implementação OpenVG. Mas, para algumas plataformas, apenas soluções comerciais estarão disponíveis.

Existem bibliotecas de nível superior que integram APIs para gráficos vetoriais. Entre eles, existe um de código aberto chamado Clutter para design de GUI e, usado no design de jogos sérios, existe um scaleform (Not Open Source). Este mecanismo de jogo possui algumas funções para desenhar gráficos vetoriais: 2DEngine


EDIT : desordem usa cairo aparentemente.

Coiote
fonte
3

O MonkVG é uma emulação OpenVG de plataforma cruzada sobre o OpenGL ES 1.1 e 2.0. Consulte: https://github.com/micahpearlman/MonkVG

Nota: Eu sou o autor original e mantenedor desta biblioteca. Tem uma licença BSD muito liberal.

zerodog
fonte
Essa é uma boa contribuição para a pergunta, mas é adequado observar quando você está promovendo algo ao qual está afiliado (como sua própria conta do github).
Seth Battin
-1

Acabei não me incomodando e apenas usando imagens de alta resolução e dimensionando com o OpenGL. Funciona bem o suficiente para a minha situação.

Zach Hinchy
fonte
4
Você perguntou sobre uma biblioteca, mas aceitou uma resposta onde ela diz, basta escolher o contrário (ignorando o fato de que é sua resposta). Não é um bom julgamento. (também ignorando o fato de que talvez o @Coyoto tenha levado cerca de 15 minutos para escrever sua resposta). Tenha um bom dia!
Quazi Irfan
11
isso é cerca de três anos tarde demais, mas outra resposta foi enviada recentemente e recebi a notificação, então finalmente vi isso. Fui em frente e não aceitei o meu e aceitei o @ Coyote's. Sinto muito por isso, eu não entendia muito bem o StackOverflow naquela época. antes tarde do que nunca, espero - espero que ajude as pessoas que virem a pergunta no futuro.
Zach Hinchy