2010-09-29 2 views
3

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

В принципе, я хочу установить каждый пиксель на экране, чтобы сказать случайный цвет как можно быстрее. «Случайные цвета» - это просто массив [] [], который обновляется каждые 2-3 секунды. Я пробовал рисовать прямоугольники и использовать изображения, оба довольно медленные для того, что я хочу делать.

Я думаю, что хочу научиться писать графический шейдер? Это самый быстрый способ сделать это? LJGWL предоставляет OpenGL api для java. Любые базовые руководства по началу работы с шейдерами OpenGL? Или я должен динамически создавать какую-то текстуру, а затем просто выбросить всю текстуру, будет ли это быстрее?

+2

каждый пиксель на тот же случайный цвет или каждый пиксель на другой случайный цвет? – Will

ответ

6

Если бы это было так, что вы статически отображали одно и то же изображение, достаточно было бы использовать текстуру или список отображения. Но поскольку вы хотите часто обновлять его, шейдеры действительно являются лучшим вариантом. Шейдерный код выполняется на графическом процессоре и изменяет данные в GRAM, поэтому у вас нет шеи бутылки, передаваемой с CPU на GPU. Следующее лучшее, вероятно, будет Pixel или Frame Buffer Object. Буферные объекты позволяют вам читать/записывать в GRAM через DMA (без необходимости проходить через CPU), чтобы они могли быть довольно быстрыми.

Я еще не написал никаких шейдеров, поэтому я не могу рекомендовать какие-либо хорошие ресурсы. Но SongHo's OpenGL pages - это хорошее место, чтобы узнать о Buffer Objects. (Его примеры в C++, хотя)

2

Текстуры - это самый быстрый способ нарисовать что-то на экране, нарисовать текстуру, отображаемую в квадрат на экране, она должна быть достаточно быстрой. Когда вам нужно повторно загрузить данные текстуры, используйте glTexSubimage2D для его обновления.

Не нужно использовать шейдеры.

+0

+1, и еще один намек - использовать PBO для хранения данных «случайных пикселей» – erjot

0

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

0

Я не знаю, как вы точно рисуете пиксели, но этот лимит, который вы ударили, может быть из-за количества данных, которые вы передаете (неэффективно?). Обновление экрана, полного пикселей каждые 2-3 секунды, не должно быть тяжелым. Хотя шейдеры приближают вас к графической карте, они никогда не будут быстро делать неэффективные методы, поэтому ...

Почему ваш код так медленно?

  1. Какой код? Какой именно код вы попробовали? Какую текстуру вы использовали, визуализировали, ...?
  2. Это медленный? Как медленно? Как быстро вы это ожидаете?
  3. Как быстро можно получить пиксели 1920x1080 (?) В видео-плейере, каково ваше оборудование, драйверы, ОС?

Я думаю, вам нужно отредактировать/отложить, прежде чем мы сможем помочь вам решить вашу проблему. Просто потому, что он медленный, вовсе не гарантия того, что шейдеры будут даже быстрее бит.

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