Пиксельная дилемма: выбор правильного графического API - PullRequest
0 голосов
/ 15 сентября 2010

Я хочу сделать 2D-игру с боковой прокруткой и разрушаемым ландшафтом.Мой подход заключается в том, чтобы использовать ландшафт в качестве BMP и иметь доступ к каждому пикселю.

Однако у меня есть проблема с выбором правильного графического API для моей игры.

Я уже рассмотрел несколько вариантов:

  • SDL

Я начал писать игру на SDL, у меня была поверхность, как поверхность, которую я вылетал на экран каждый кадр.К сожалению, это было очень медленно, и стало еще медленнее, когда было видно больше ландшафта.У меня было 30 FPS при рисовании только одного растрового изображения на экране.

  • GDI

Я видел игру, похожую на ту, которую я хочу сделать.Он использует GDI и может манипулировать пиксель за пикселем.Скорость кажется нормальной, но поскольку SDL использует GDI в качестве бэкенда в Windows, почему я не могу просто использовать SDL?

  • SDL + OpenGL

Скорость очень хорошая, хотя яу меня технические проблемы - я больше не могу манипулировать текстурой, когда она загружается в OpenGL, и это нарушает весь мой план

Как уже упоминалось ранее: мне нужно иметь доступ к каждому пикселю нарисованного изображения,и само рисование должно быть достаточно быстрым, чтобы ландшафт 1280 * 500 пикселей отображался плавно.

Ответы [ 2 ]

0 голосов
/ 06 января 2014

В 2014 году попробуйте SDL2 - говорят, что аппаратное ускорение.

Однако я не могу вам ничего сказать о правильной стратегии пикселей.Похоже, рекомендуемый способ состоит в том, чтобы загружать вашу память surface в видео texture на каждом кадре.

0 голосов
/ 24 сентября 2010

Я бы порекомендовал OpenGL, так как вы можете перенести работу на GPU.Однако то, что вы описываете, звучит так, как будто вы хотите сделать много манипуляций на стороне клиента (ЦП), поэтому у вас, вероятно, все еще будет узкое место всей пропускной способности между ЦП и ГП.

Лучший способдобиться того, что вы хотите, используя OpenGL, вероятно, с помощью PBO (Pixel Buffer Objects).AFAIK - это наиболее эффективный способ доступа / изменения данных пикселей на стороне сервера (GPU) со стороны клиента (CPU).

...