2013-01-10 2 views
3

Je me suis arraché les cheveux pendant un moment. J'ai besoin d'un moyen OpenGL 3.2 Core (pas de choses obsolètes!) Pour rendre efficacement de nombreux sprites, en utilisant le batching (pas d'instanciation).Exemple de lot OpenGL 3.2 Core Sprite?

J'ai vu des exemples qui le font avec la géométrie seule, mais le mien a aussi besoin d'envoyer des textures, je ne sais pas comment faire.

J'ai besoin d'un exemple bien fait de travail en action. Et regarder comment d'autres libs comme monogame et autres ne sont pas d'une grande aide, car tout ce qui m'intéresse c'est le code GL, et il ne doit pas contenir de choses obsolètes.

Fondamentalement, je veux être en mesure de rendre efficacement des milliers + de sprites, ayant tous des textures. La texture est juste une feuille de sprites, donc j'ai juste besoin de lui dire de rendre une région de cette feuille de sprites.

Je suis déçu de la quantité de matériel disponible pour le pipeline programmable. Au point où il semble que ce serait tellement plus facile de dire qu'il faut le visser et utiliser un pipeline fixe, même si je ne veux absolument pas le faire.

Alors ouais, des exemples complets qui font ce que je veux? Ou quelqu'un d'autre pourrait-il en écrire un? :)

Beaucoup d'exemples sont "oh, voici comment rendre 1 triangle". Eh bien c'est génial, sauf que personne n'a besoin de rendre seulement 1 triangle/quad. Et ils doivent être texturés en plus de cela!

Un exemple qui utilise VBOs/Vaos/EBO

AUSSI: cela signifie que le code ne peut pas utiliser glTexPointer et ce genre de choses, mais juste au VBOs/Vaos premières ...

Répondre

3

je vis cette question et a décidé d'écrire un petit programme qui fait un rendu "sprite" en utilisant des points et gl_PointSize. Je ne suis pas sûr de savoir ce que vous entendez par "batching" par opposition à "instancing", mais mon programme utilise l'appel glDrawArraysInstanced() pour que je puisse rendre plusieurs points sans que mon VBO soit de taille variable. Mon code ne texture pas non plus les sprites, mais c'est assez facile à ajouter (télécharger l'index de texture actif (celui qui était actif pendant votre appel à glTexSubImage), à ​​un sampler2D GLSL en utilisant glUniform1i).

De toute façon, voici le programme que j'ai écrit: http://litherum.blogspot.com/2013/02/sprites-in-opengl-programmable-pipeline.html J'espère que vous pourrez en tirer des leçons!

Questions connexes