Войти
Вело-изобретателиФорумMXEngine - движок для VB6

MXEngine & dx_vb (24 стр)

Advanced: Тема повышенной сложности или важная.

Страницы: 121 22 23 24 25 26 Следующая »
#345
10:17, 23 мар. 2012

Так же делаю. Объекты, лежащие в контейнере хрянат указатель на него. Просто и удобно.


#346
14:26, 23 мар. 2012

Запустилась первая сборка... Избавился от Object.Relase выкинув указатели и подсунув нужные обьекты в шейдеры и текстуры... Решил воткнуть костыль...

Делаю следующий обьект - Render2D.

'[------------------Render----------------------------]
'[------Render2D----------------][------Render3D------]
'[Sprite][FontManager][---GUI---][....................]
'        [Font]       [Controls]
Вопрос в том каково его значение? Что нужно на этом уровне?
Вот мои мысли на этот счет:
- виртуальная камера
- батч буфер(в связи с чем все установки стейтов перейдут в этот интерфейс что-бы отлавливать их смену и начинать новый батч)
- установка стейтов бленда
- установка стейтов смешивания текстур и др.

Нужно-ли на этом уровне организовывать низкоуровневый интерфейс отрисовки спрайтов? Т.Е. функции Draw, DrawRect, или непосредственно формировать буфер в высших интерфейсах, затем передавать его Render2D... И вообще нужен ли батч?

#347
15:11, 23 мар. 2012

Не знаю на каком уровне но нужна тайловая карта. Многослойная, с поддержкой изометрии, рендомизации, рисования заданной области и отброс не видимых текстур.

#348
15:32, 23 мар. 2012

Morhoom
>тайловая карта
>отброс не видимых текстур
Была в старых версиях... Сейчас возможно будет два класса:
Sprite - отрисовка области текстуры(можно и всей)
SpriteMap - атлас с поддержкой анимации

Morhoom
> Многослойная
> рендомизации
Эт как?

Morhoom
> изометрии
Изометрия эт уже 3D песня...

#349
15:44, 23 мар. 2012

Это тогда, когда я вызываю 10-15 функций и получаю леса с грибами, поля с цветами, водоёмы, пески, скалы.

#350
19:26, 23 мар. 2012

Тестирую батчинг... Если ресайзить буфер при добавлении нового спрайта жутко падает производительность...
ReDim тормозная весч...

На статическом буфере

Dim Buf(100000)
результаты тестов(30351 спрайт с текстурой):
Без батчинга: 21fps
Батчинг с разными стейтами: 26fps
Батчинг: 70fps

Прирост довольно значительный...

П.С. Вывод через DrawPrimitiveUp D3DPT_TRIANGLELIST без индексов...

#351
21:03, 23 мар. 2012

Батчить спрайты можно добавляя геометрию в буфер при вызове соответствующей функции...
А как батчить вызовы отрисовки текста, если на выходе уже готовый буфер? Через CopyMemory - долго... Есть еще варианты?

Или встроить батчинг прямо в текстовй рендер? Мне кажется так выйдет костыль, да и к тому же постоянный ReDim...

#352
22:42, 23 мар. 2012

max255
> постоянный ReDim
Выделяй и освобождай память порциями, скажем, по 16 кБ.

#353
14:35, 24 мар. 2012

Mikle
Точно... Хорошая идея...

Стоит ли делать батчинг линий? Это соответственно добавит несколько условий в перестройку батча, соответственно и времени... Но стоит ли оно того?

#354
14:56, 24 мар. 2012

Батчинг линий - совершенно отдельный от спрайтов.

#355
15:36, 24 мар. 2012

А как можно отлавливать что нужно вывести батч?
- при изменении стейта
- текстуры
- шейдера
- константы шейдера
- трансформации

Так как же можно отлавливать такое количество контролов разнесенных по разным интерфейсам?

#356
15:40, 24 мар. 2012

Я думаю, что всё автоматизировать не получится, надо будет всё равно самому запускать батчи, соответственно строить архитектуру программы.

#357
15:48, 24 мар. 2012

Mikle
А что если в каждый интерфейс контроля(стейты, текстуры, шейдеры) добавить функции слежения т.е.

Shaders.ClearChanges


Shaders.SetVertexShader id

If Shaders.isChanged Then
' изменились настройки шейдеров
End If
?
#358
15:53, 24 мар. 2012

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

#359
10:43, 27 мар. 2012

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

Начал писать буферы стейтов как в 357 посту... Понял что ошибся... Т.К. нужно батчить спрайты в буфере перед установкой нового стейта, а не после...
Рассматривал вариант буферизации стейтов, Т.Е. стейты устанавливаются не сразу, а в буфер. При такой установке ставится флаг что буфер изменился...
При отрисовке нового батча проверяются все эти флаги и готовый буфер устанавливается... Мне кажется это слишком накладным... К примеру при батче 1 спрайта будет каждый раз ставится около 300 стейтов + константы шейдеров + ....

Может пора уже отойти от прямого директовского интерфейса и реализовать только самые нужные в 2D функции. Реализовать их в Render2D и отлавливать их уже на этом уровне будет намного проще, т.к. интерфейс батчинга находится тут же(Render2D).

Возникает вопрос что нужно в 2D из базовых функций? Смотрел HGE... На мой взгляд скудно... Или может я не увидел... Мултитекстуривания нет, шейдеров нет...
Примерно составил список что вижу я:

Camera
Transform
Batch - батчинг
Draw - отрисовка спрайтов
Blend - блендинг с бэк-буфером
BlendFactor - бленд фактор
FillMode - режим текстурирования
Lines - отрисовка линий
Particles - частиц(из готового буфера)
ZEnable 
ZWriteEnable - управление Z буфером для ZOrder
Textures - установка текстур, и текстурного фильтра
Shaders - установка шейдеров и констант
Mirroring - управление текстурными координатами
Texture FFP(multitexture) - мультитекстурирование 

Страницы: 121 22 23 24 25 26 Следующая »
Вело-изобретателиФорумMXEngine - движок для VB6

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