OpenGL шейдеры? - PullRequest
       2

OpenGL шейдеры?

3 голосов
/ 30 сентября 2010

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

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

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

Ответы [ 4 ]

6 голосов
/ 30 сентября 2010

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

Я еще не написал ни одного шейдера, поэтому не могу рекомендовать ничего хорошегоРесурсы.Но страницы OpenGL в SongHo - хорошее место для изучения объектов буфера.(Хотя его примеры на C ++)

2 голосов
/ 30 сентября 2010

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

Нет необходимости использовать шейдеры.

0 голосов
/ 30 сентября 2010

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

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

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

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

0 голосов
/ 30 сентября 2010

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

...