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

Diligent Engine - современная кросс-платформенная низкоуровневая графическая библиотека (9 стр)

Страницы: 18 9 10 1119 Следующая »
#120
18:36, 10 окт. 2019

assiduous
Посмотрел код. Возник вопрос по поводу флага m_bCommittedD3D11IBUpToDate.

Каждый раз при вызове функции SetIndexBuffer он сбрасывается.

Вот код функции:

+ Показать

В функции DeviceContextD3D11Impl::Draw выполняется проверка флага.
Т.е., как я понял, если флаг сброшен, то необходимо сделать перекоммит буфера.
Вызывается функция CommitD3D11IndexBuffer(), которая делает проверку и перекоммичивает буфер.
Вот часть кода:

+ Показать

И у меня возник вопрос, а зачем вообще этот флаг нужен?
В SetIndexBuffer() он всегда сбрасывается. значит в Draw() всегда вызывается CommitD3D11IndexBuffer().
Или я что то не допонимаю?


#121
20:45, 10 окт. 2019

asvp
Так флаг же сбрасывается только в том случае, если формат буфера изменился

if (m_CommittedIBFormat != drawAttribs.IndexType)
     m_bCommittedD3D11IBUpToDate = false;
#122
20:47, 10 окт. 2019

Если между draw командами не было смены буфера, то флаг будет true и буфер перекомммчеваться не будет

#123
20:54, 10 окт. 2019

assiduous
апи разные ... всё должно начинаться уровнём выше - я так думаю

#124
21:01, 10 окт. 2019

innuendo
> апи разные ... всё должно начинаться уровнём выше - я так думаю
Это о чём вообще?

#125
2:25, 11 окт. 2019

assiduous
> Так флаг же сбрасывается только в том случае, если формат буфера изменился
И не только.

> Если между draw командами не было смены буфера, то флаг будет true и буфер
> перекомммчеваться не будет
Флаг сбрасывается и в SetIndexBuffer, которая вызывается при каждой отрисовки кадра. См. функцию.

перекомммчеваться не будет, если не изменился сам буфер или смещение. Это проверка делается в CommitD3D11IndexBuffer.
Так для чего же флаг m_bCommittedD3D11IBUpToDate?

#126
2:35, 11 окт. 2019

asvp
Попробуй вот такой код мысленно исполнить:

SetIndexBuffer();
Draw();
Draw();
Draw();

Первый Draw закоммитит индекс буфер и установит флаг в true, два последующих просто проверят флаг и ничего делать не будут

#127
2:38, 11 окт. 2019

А флаг для того чтобы CommitIndexBuffer  не звать совсем. Но, возможно, да, можно было бы и без двойных проверок обойтись

#128
8:37, 11 окт. 2019

assiduous
Понятно. Спс.

#129
11:46, 11 окт. 2019

assiduous
> > апи разные ... всё должно начинаться уровнём выше - я так думаю
> Это о чём вообще?

речь про то, что апи разные и низкоуровневым подходом выжать всё по полной из разных апи не получится

#130
17:37, 11 окт. 2019

assiduous
> Windows, Universal Windows, Mac, Linux, Android и iOS
Как же без Switch? :(

#131
17:49, 11 окт. 2019

innuendo
> выжать всё по полной из разных апи не получится
Согласен, что все не получится, но 95% - вполне. Например, Vulkan и D3D12 при всех своих различиях на первый взгляд, при детальном рассмотрении оказываются почти одинокавыми.
Diligent позволяет для этих 95% использовать общий АПИ, а для оставшихся 5%, если надо, писать непосредственно на исходном низкоуровневом АПИ. Я в своих других проектах, которые используют Diligent, с такой необходимостью еще не сталкивался.

#132
17:55, 11 окт. 2019

Robotex
> Как же без Switch? :(
Я так понимаю, что она поддерживает и OpenGL и Vulkan, так что в теории это не должно быть очень сложно.

#133
16:19, 13 окт. 2019

Анимированные GLTF2.0 поддерживает?

#134
18:42, 13 окт. 2019

gamedevfor
> Анимированные GLTF2.0 поддерживает?
Поддерживает
https://github.com/DiligentGraphics/DiligentSamples/tree/master/S… es/GLTFViewer
(Блин, никак не могу понять, как сюда вставляются картинки. Рекомендации отсюда не помогают)

Страницы: 18 9 10 1119 Следующая »
ПрограммированиеФорумГрафика