Войти
ПрограммированиеФорумГрафика

Рендеринг. Кто как делает?

Страницы: 1 2 311 12 Следующая »
#0
10:06, 10 апр. 2016

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

Раньше я делал по второму варианту, но как оказалось это весьма неудобно. Изменения стейтов распыляются по классам, получаются лишние вызовы dx\ogl, непонятно какой рендер-таргет сейчас подключен и во что идет рисование. Первый вариант подкупает своей прозрачностью в действиях, поэтому я остановился на нем - в одном методе расписан весь процесс рендера без всяких вложенностей. А так как dx\ogl стейт-машины, то всегда знаешь в каком состоянии она находится.


#1
10:44, 10 апр. 2016

mr.DIMAS
> Изменения стейтов распыляются по классам, получаются лишние вызовы dx\ogl,
> непонятно какой рендер-таргет сейчас подключен и во что идет рисование.
DX12 - PipelineState и нет такой проблемы :) В вулкане аналогично.

#2
10:54, 10 апр. 2016

ArchiDevil
> DX12 - PipelineState и нет такой проблемы

Зато куча иных проблем?

mr.DIMAS

Data-Driven

#3
12:13, 10 апр. 2016

Я делаю несколько структурок с кучей стейтов. Передаю её в метод SetState класса AGraphics и он устанавливает все нужные стейты оттуда, делая проверки: если какой-то стейт уже установлен, то не устанавливает.
Весь код, специфичный для GAPI, сосредоточен в соответствующем наследнике абстрактного класса AGraphics, который знает всё о стейтах GAPI и существующих в нём объектах: текстурах, буферах и т. д..
Но судя по всему, кроме меня так никто не делает. По-моему все делают более мелкие классы типа TextureGL, BufferGL и т.д..

#4
12:28, 10 апр. 2016

innuendo
> Data-Driven
+1

mr.DIMAS
Я даже чуть-чуть описывал здесь в блоге. Правда, в связи с выходом DX12 и прочих низкоуровневых GAPI, мой рендер может потребовать пересмотрения.

#5
12:40, 10 апр. 2016

mr.DIMAS
> Как вы делаете рендеринг в своем движке? Пишете одну большую функцию, в которой последовательно выполняются все нужные шаги - переключение стейтов, > > рендер таргетов, текстур, шейдеров и сама отрисовка? Или же делаете кучу мелких классов, каждый из которых отвечает за небольшой шаг во всем этом >безобразии?
Мелкие классы будут, но они служат в основном в качестве хранения. Установками и переключениями занимается RenderSystem, и да, Data-Driven очень правильный подход. Все настройки можно зачитать из файла и настроить систему рендеринга.
gammaker
> Весь код, специф ичный для GAPI, сосредоточен в соответствующем наследнике абстрактного класса AGraphics, который знает всё о стейтах GAPI и существующих
> в нём объектах: текстурах, буферах и т. д.. Но судя по всему, кроме меня так никто не делает. По-моему все делают более мелкие классы типа TextureGL, BufferGL > и т.д..
Ну почему же дак я тоже делаю.

#6
12:48, 10 апр. 2016

Подкиньте статей по data-driven применительно к рендерингу, аж прям интересно стало.

#7
12:52, 10 апр. 2016

Andrey
> Data-Driven очень правильный подход. Все настройки можно зачитать из файла и
> настроить систему рендеринга.

Это не тот DD

#8
13:00, 10 апр. 2016

mr.DIMAS
> А так как dx\ogl стейт-машины, то всегда знаешь в каком состоянии она
> находится.

И да, после того, как пакет данных отрисован делается flush - сброс стейтов/байндингов в дефолтное состояние чтобы ничего не подвисло :)

#9
13:07, 10 апр. 2016

Ага, и получаем дикие тормоза. Так не делают.

#10
13:10, 10 апр. 2016

mr.DIMAS
> Ага, и получаем дикие тормоза.

Естественно, что не после каждого DrawCall :)

> Так не делают.

Да, кто так не делает получает большой геморрой с крашами и багами. Слухай бородатого дядьку :)

#11
13:35, 10 апр. 2016

mr.DIMAS
> Подкиньте статей по data-driven применительно к рендерингу, аж прям интересно стало.
В этом блоге много всего полезного по data-driven и не только.

innuendo
> И да, после того, как пакет данных отрисован делается flush - сброс
> стейтов/байндингов в дефолтное состояние чтобы ничего не подвисло :)
А в чём проблема просто следить за тем, какой стейт текущий? А то периодический сброс выглядит как какой-то костыль, чтобы замаскировать баги, а не исправить их. Другое дело, если делать это каждый draw call, но очевидно, что это тормозно.

#12
13:42, 10 апр. 2016

gammaker
> А в чём проблема просто следить за тем, какой стейт текущий? А

Речь не только про стейты, но и про ресурсы. Тебе сколько раз приходилось работать с чужим кодом ? Я про 3D

#13
13:47, 10 апр. 2016

innuendo
> сброс стейтов/байндингов в дефолтное состояние
самое бесполезное занятие

#14
13:47, 10 апр. 2016

C каких пор DX стал стейт-машиной?

Страницы: 1 2 311 12 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.