2010-09-15 19 views
1

Je veux créer un jeu 2D à défilement horizontal avec un terrain destructible. Mon approche consiste à avoir le terrain en tant que BMP et avoir accès à chaque pixel.Dilemme des pixels: Choix de l'API graphique appropriée

Cependant, j'ai un problème avec le choix de la bonne API graphique pour mon jeu.

Je l'ai déjà envisagé plusieurs options:

  • SDL

je commence à écrire le jeu en SDL, j'ai eu le terrain surface que je blittée sur l'écran chaque image. Malheureusement, il était très lent, et il est devenu encore plus lent quand plus de terrain était visible. J'avais 30 FPS en dessinant seulement un bitmap sur l'écran.

  • GDI

J'ai vu un jeu similaire à celui que je veux faire. Il utilise GDI et peut manipuler pixel par pixel. La vitesse semble O.K. mais comme SDL utilise GDI comme backend sur Windows, pourquoi ne puis-je pas simplement utiliser SDL?

  • SDL + OpenGL

vitesse est très bonne, je barbante des problèmes techniques - je ne peux pas manipuler la texture plus quand il est chargé dans OpenGL, et qui brise tout mon plan

Comme mentionné précédemment: J'ai besoin d'avoir accès à chaque pixel de l'image qui est dessinée, et le dessin lui-même devrait être assez rapide pour un terrain de 1280 * 500 pixels à rendre en douceur.

+0

Je ne suis pas très expérimenté avec OpenGL, mais avec DirectX 3D vous pouvez verrouiller une surface pour l'éditer, je m'attends à ce qu'il y ait un équivalent dans OpenGl. – CiscoIPPhone

+2

Je ne connais pas assez toutes les API pour répondre directement. Notez que si votre bitmap est beaucoup plus large que l'écran (comme c'est mon impression à partir de votre description), il suffit de passer la partie visible à l'écran pour sauter la mémoire de manière non-cache. Pensez à découper votre image dans des panneaux aussi larges que l'écran. Un rafraîchissement impliquera alors le blitting de (typiquement) deux panneaux adjacents. Deux fois les opérations, mais beaucoup mieux la localité. –

+0

lorsque vous utilisez SDL, utilisez-vous la surface matérielle? L'accès aux pixels directement dans une surface matérielle est lent, il est préférable d'utiliser la surface du logiciel si vous avez besoin de beaucoup de manipulations de pixels. –

Répondre

0

Je recommanderais OpenGL car vous pouvez décharger le travail au GPU. Cependant, ce que vous décrivez ressemble à ce que vous voulez faire une grande partie de la manipulation du côté client (CPU), donc vous aurez probablement toujours le goulot d'étranglement de tout le débit entre le processeur et le GPU. La meilleure façon d'accomplir ce que vous voulez en utilisant OpenGL est probablement avec les PBO (Pixel Buffer Objects). AFAIK c'est le moyen le plus efficace d'accéder/modifier les données de pixel sur le côté serveur (GPU) du côté client (CPU).

0

En 2014, essayez SDL2 - il est dit être matériellement accéléré.

Cependant, je ne peux rien vous dire sur la bonne stratégie de pixel. On dirait que le recommended way est de télécharger la mémoire surface sur la vidéo texture sur chaque image.