2015-12-10 13 views
0

Проблема Я пытаюсь сделать более эффективную систему рендеринга с нуля, и я пришел к выводу, что использование для циклов очень неэффективно для больших окон.Как использовать BitSet и BufferedImage для быстрого набора пикселей?

Вопрос Так что мой вопрос, могу ли я использовать BitSet манипулировать пикселы гораздо быстрее, чем при использовании для цикла, чтобы установить каждый пиксель в отдельности?

Вещи, которые могут понадобиться Система рендеринга очень маленькая, так как это скорее тест, чем что-либо. Единственное, что он сейчас делает, это рисовать прямоугольники на экране, чтобы я мог проверить FPS, который я получаю.

public void drawRect(int offX, int offY, int width, int height, int color) 
{ 
    for (int y = 0; y < height; y++) 
     for (int x = 0; x < width; x++) 
      pixels[x + offX + this.width * (y + offY)] = color; 
} 

массив пикселей только данные из BufferedImage с помощью pixels = ((DataBufferInt) engine.getWindow().getImage().getRaster().getDataBuffer()).getData();

Я не уверен, как бы я идти об использовании класса BITSET с пикселями, но я надеюсь, что это быстрее, чем drawRect способ. Счетчик FPS говорит мне, что рисование одного прямоугольника на экране 1980x1080 составляет примерно 100-130 кадров в секунду без постоянной очистки.

любая помощь, пожалуйста, скажите мне, если так, как я имею в виду, это просто глупо

+0

Почему вы думаете, что использование «BitSet» - хорошая идея? – haraldK

ответ

0

BitSet не действительно будет полезным для этой цели. BitSet похож на быстрый, компактный boolean[]. Вы можете сделать некоторый прогресс, заменив внутренний цикл на Arrays.fill(pixels, offX + this.width * (y + offY), offX + width + this.width * (y + offY)).

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

+0

Я хочу сделать пиксель на основе движка и с нуля, но спасибо за это предложение :) –

+0

Если «Arrays.fill» не заменяется встроенными, это просто цикл 'for'. Дополнительная проверка вызова и ограничений, вероятно, делает его медленнее, чем простой цикл. – haraldK

 Смежные вопросы

  • Нет связанных вопросов^_^