D3D11 и ConstantBuffers

Всичко свързано с Microsoft DirectX. Въпроси относно HLSL.
Потребителски аватар
KosSiO
Power User
Power User
Мнения: 316
Регистриран на: 20 окт 2008 19:29
Местоположение: Targovishte,Sofia

D3D11 и ConstantBuffers

Мнение от KosSiO » 27 яну 2013 16:16

Имам проблем, който от известно време не мога да реша.
В shader model 4 и 5 понятието uniform е заменено с constant Buffer. С Dx9 ми беше лесно да взема униформите на някой шейдър(което ползвам за автоматизация на сетването на uniform-ите), имаше си готови функции.
ЗА Dx11 АПИ-то има едно D3DReflect, което дава ID3D11ShaderReflection, което има добър замисъл, от Microsoft обаче казват : "не го ползвайте това нещо, ако искате нещо да влезе в Windows Store, отделно казват(а и по доста места прочетох), че голям набор от функциите му не работят). Отделно мисля, че е част от Legacy-то, което майкрософт се опитват да премахнат..
Оставам с празни ръце, нямам идея как да разбера какво искат тия Constat Buffers, Мислех си да имам един XML-файл който да идва със шейдъра и ми описва костант буфера, но не мисля, че това е правилния подход.. Мисля, че DX11 се оказа доста по-голяма риба от това което си мислех!

Потребителски аватар
Hivoyer
Sometimes here
Sometimes here
Мнения: 39
Регистриран на: 24 яну 2012 01:22

Re: D3D11 и ConstantBuffers

Мнение от Hivoyer » 01 фев 2013 04:01

Аз ползвам class ConstantBuffer в който има масив от:

Код: Избери всички

struct Mapping
	{
		RenderParameter* _parameter;
		uint _offset;
		uint _size;
		D3D_SHADER_VARIABLE_CLASS	_varClass;
		uint _elements;
		uint _valueID;
	};
и секи кадър ако му е сетнат autoUpdate на ConstantBuffer-a,го мапвам и ъпдействам всичко в него

Потребителски аватар
KosSiO
Power User
Power User
Мнения: 316
Регистриран на: 20 окт 2008 19:29
Местоположение: Targovishte,Sofia

Re: D3D11 и ConstantBuffers

Мнение от KosSiO » 01 фев 2013 19:15

Това ми изглежда, че като XML решението или се бъркам?

Потребителски аватар
Zero_effect
Sometimes here
Sometimes here
Мнения: 35
Регистриран на: 29 авг 2008 17:49

Re: D3D11 и ConstantBuffers

Мнение от Zero_effect » 03 фев 2013 16:49

За да не се занимаваш с reflection-ите може просто да го прикрепиш към даден регистър:

http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Така може да специфицираш точната структура и да ползваш структури от C++ със същата подредба за самото обновяване. Алтернативно трябва да си компилираш shader-ите предварително и да ги налееш с информацията за константите в бинарен файл (освен ако не желаеш да позабавиш работата с XML, както на теб ти е хрумнало).

Потребителски аватар
KosSiO
Power User
Power User
Мнения: 316
Регистриран на: 20 окт 2008 19:29
Местоположение: Targovishte,Sofia

Re: D3D11 и ConstantBuffers

Мнение от KosSiO » 23 фев 2013 22:15

Текущото решение изглежда по този начин

Код: Избери всички

<shader source="basic_shader.hlsl" binary="basic_shader.cso" entryPoint="ps_main" target="ps_5_0">
<constantBuffer name="cb0" upadateRate="PER_FRAME">
	<const name="matProj" offset="0" width="16" usage="USAGE_PROJECTION"/>
	<const name="matView" offset="16" width="16" usage="USAGE_VIEW"/>
</constantBuffer>
</shader>
Силно исках да мога рънтайм да компилирам шейдърите за да не се налага постоянно гадене/пускане на играта по време на промяна. Исках също да се съобразя със изискването на MS шедърите да се се компилират офлайн..

Отговори

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 1 гост