Почему rubygame и gosu медленнее, чем чистый opengl?



Я ищу хороший графический фреймворк, чтобы сделать хорошую 2D-игру в Ruby. Я сделал 3 очень простых теста, чтобы увидеть, какой графический фреймворк Ruby быстрее между Gosu и Rubygame. Тест создает 1000 экземпляров класса "Квадрат", которые перемещаются и рисуют Красный квадрат самым простым способом, используя метод фреймворка. 3-й тест - то же самое, но в чистой реализации OpenGL (без каких-либо рамок). Вот результаты :



Чистый OPENGL (с использованием ruby-opengl) 80 кадров в секунду :
alt текст http://grab.by/JTM



GOSU (используя ruby-opengl + gosu) 46Fps :
alt текст http://grab.by/JTC



RUBYGAME (с использованием ruby-opengl + rubygame + rsdl) 32Fps :
alt текст http://grab.by/JTw



Почему существует такая большая разница в fps между тестом pure OpenGL и тестом Rubygame или GOSU ? (они оба используют opengl)



Действительно ли эти рамки надежны или есть лучшая структура, которую я должен использовать ? (Я не вижу себя уходящим. через весь процесс загрузки изображений звуков и шрифтов в чистом OpenGL: p)



Каково Ваше мнение?

631   4  

4 ответов:

Когда вы используете фреймворк, любой фреймворк для упрощения и ускорения разработки немедленно влечет за собой снижение производительности. OpenGL-хорошая и быстрая библиотека, но когда вы обертываете ее языком высокого уровня и фреймворком, таким как Ruby, вы можете абсолютно ожидать замедления. OpenGL все еще быстр, ваша медлительность происходит из-за накладных расходов того, что происходит внутри этих рамок. Тем не менее, 46 кадров в секунду не кажется слишком плохим, но если вы собираетесь подчеркнуть двигатель намного больше, чем ваш пример, вы может закончиться игрой, в которую нельзя играть.

Я только что сделал квадратный проект, используя Ruby 1.9.2 и Gosu. Я смог получить 1000 квадратов и 60 кадров в секунду без проблем с производительностью на моем MacBook Pro. Используя eval, чтобы развернуть массив объектов, я получил 4000 квадратов со скоростью 60 кадров в секунду. Квадраты имеют случайную скорость и отскакивают от края монитора.

Если это наказание за использование фреймворка, интересно, каково наказание за фактическую реализацию игровой логики... Мои надежды на использование Ruby для gamedev рушатся еще быстрее.

Вы используете YARV? Вы должны попробовать альтернативную реализацию ruby, такую как jruby или rubinius.

Comments

    Ничего не найдено.