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

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

PURE OPENGL (с использованием ruby-opengl) 80Fps: http://grab.by/JTM

GOSU (с использованием ruby-opengl + gosu) 46Fps: http://grab.by/JTC

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

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

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

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


person XPac27    schedule 23.11.2009    source источник


Ответы (4)


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

person Paul Sasik    schedule 23.11.2009
comment
Я согласен, но разрыв огромен :) Есть ли лучший фреймворк для создания 2D (или 3D) графики в реальном времени на Ruby? - person XPac27; 23.11.2009

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

person Arrow    schedule 25.11.2010

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

person Leonid Shevtsov    schedule 23.11.2009
comment
Довольно часто фреймворк делает за вас много работы, которую вам нужно сделать самостоятельно. Таким образом, вы увидите начальное замедление, подобное этому, но когда вы начнете добавлять свой игровой код, вы можете не заметить дальнейшего замедления, поскольку он эффективно использует инфраструктуру для выполнения задач. - person Kylotan; 24.11.2009
comment
Вы хотите переместить 1000 изображений на экране одновременно? даже если вы это сделаете, вы все равно получите 45 кадров в секунду. Это совсем не плохо. - person horseyguy; 03.10.2010

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

person rtra    schedule 29.06.2010
comment
Нет, я использую ruby ​​​​1.8.1 (mac). Но похоже, что это лучшее решение: programmingzen. com/2010/07/19/the-great-ruby-shootout-july-2010 Возможно, проблема связана с тем, что Rubygame основана на SDL. - person XPac27; 20.07.2010