2016-12-07 6 views
-2

Скажем, я хотел нарисовать 50px от 60px прямоугольник в SDL2, начиная с точки (0,0). Быстрее ли звонить SDL_RenderDrawRect(renderer, SDL_Rect structure), чем заполнять каждый отдельный пиксель с помощью вложенного цикла и вызывать SDL_RenderDrawPoint?Выполняет ли рисование прямоугольника на экране с помощью RenderDrawRect, занимает тот же промежуток времени, что и заполнение каждого необходимого пикселя с помощью RenderDrawPoint?

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

+1

Почему вы не тестируете? – Olaf

ответ

3

Да, это было бы моим абсолютным ожиданием.

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

Но там очень вероятно аппаратное ускорение, поэтому разница в производительности может быть большой.

Всегда используйте самую высокоуровневую функцию API, которую вы можете использовать, чтобы дать больше рычагов для оптимизации и ускорения.

+0

И это само собой разумеется, что изобретать колесо (рисовать прямоугольник) является полной потерей времени и, вероятно, добавит новую пущу ошибок в вашу программу. Нет никакой пользы. – xhienne

+0

@xhienne Нет, изобретать колесо не добавило бы никаких ошибок в какую-либо программу, я точно знаю, как бы я это сделал (на самом деле это довольно просто, я кратко описал это в моем вопросе). И есть преимущество, потому что мои рассуждения по этому вопросу заключались в том, что я планирую создать программу, которая заполняет непрямоугольные формы. Поскольку SDL не имеет прямой функции для этого, я могу либо заполнить все прямоугольники внутри указанной фигуры, либо индивидуально заполнить каждый пиксель в форме, что было мотивом для вопроса. – 83457

+0

@xhienne Независимо от того, нет ничего плохого в том, чтобы изобретать колесо для практики, понимания и приобретения опыта. – 83457