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

d3dx

Страницы: 1 2 Следующая »
#0
1:13, 14 июля 2009

Всем здравствуйте :)
я вот только-только начал программировать на с++ и DX
прочитал пару книжек... и вот везде используют d3dx.. решил погуглить вообще по либе, натолкнулся и на сдешнем форуме на споры касательно этой либы..
это ж надстройка над Direct3D? мат либа+ некоторые классы для работы с шейдерами и мешами..
но поскольку свой движек я пишу не столько что бы "убить крайзис", сколько для получения опыта.. хотел спросить:

можно ли не использовать d3dx? или это неотьемлимая часть directX без которой множество возможностей будет закрыто?

у меня просто какое то очень сомнительное отношение к надстрокам... пока я читал, как то казалось что эта либа просто для "упращения жизни". и математика там есть и меши (причем пока читал, казалось что все это я могу переписать... точнее еще до того как дочитал до ID3DXMesh уже в голове прикинул как подобный класс должен выглядить.. пускай примерно -но понял... а когда дочитался до шейдеров сложилось впечатление что кроме как d3dx их никак нельзя ни компилить, ни управлять ими :(
в общем сейчас я почти убежден что переписывание d3dx - пустая трата времени. но все таки решил спросить вас как есть на самом деле.
можно ли просто "верить", что ли, это библиотеке? (верить что все в ней сделано максимально грамотно, все оптимизированно, и лучше все равно не сделать)


#1
1:54, 14 июля 2009

falc0n

Я только новичок в программировании directx, но думаю там всё грамотно сделано.

Программист выигрывает за счёт собственных оптимизаций, вот Вы допустим класс для камеры создаёте, но там есть методы (алгоритмы) оптимизации, если их ни сделать, то графическое приложение будет медленнее работать, если бы программист сделал эту оптимизацию, конечно эти методы (алгоритмы) используют часть функций directx, но на ход работы алгоритма это не влияет.

Это я всего лишь один пример привёл для оптимизации графических программ, а в directx их полно.

#2
2:13, 14 июля 2009

Шейдеры с помощью отдельного компилятора можно откомпилировать в байт код, загрузить, создать интерфейс с помощью IDirect3DDevice9::CreatePixelShader и установить. И затем управлять с помощью констант.

#3
3:25, 14 июля 2009

Booster
ясен пень... вот только единственный известный мне способ компиляции шейдеров лежит в d3dx, константы - интрфейс ID3DXConstantTable....
погуглил чуть чуть,  но что-то ненашел ничего путного... не подскажешь что почитать в этом направлении?...
как скомипилировать шейдер в байт-код без D3DX
(хотя... если придеться писать свой компилятор(или как там грамотно его назвать..? транслятор?) то наверно я пас... я ж новичек в с++.. а задействовать если "сторонние библиотеки" то чем d3dx хуже?)

#4
3:34, 14 июля 2009

falc0n
В поставку DXSDK входит консольный компилятор шейдеров. На stdin принимает исходный текст, на stdout забираем байт-код. Константы передаем вроде как через константные буфера. Сам так не делал, но знаю, что так можно и так вроде как в Крызисе поступили.

#5
3:41, 14 июля 2009

falc0n
> хотя... если придеться писать свой компилятор(или как там грамотно его
> назвать..? транслятор?) то наверно я пас... я ж новичек в с++.. а задействовать
> если "сторонние библиотеки" то чем d3dx хуже?
В DirectX sdk есть компилятор. ^)
http://msdn.microsoft.com/en-us/library/bb232919%28VS.85%29.aspx
Читай msdn, там всё есть.

#6
8:37, 14 июля 2009

falc0n
ты беспокоищься о том что в d3dx есть неоптимизированые куски кода? Я бы не стал )). Много игр видел которые ездят(используют) на нём и довольно шустро, конечно это не значит что нужно его повсеместно пихать в свой код, но самые удобные фичи почему бы и нет.

#7
8:58, 14 июля 2009

для начала сделай рабочий двиг, т.е. воспользуйся самыми доступными средствами (тем же d3dx-ом, ибо удобнее), а потом работай над оптимизацией.
Ибо не готовый оптимизированный код хуже готового не оптимизированного.

#8
10:03, 14 июля 2009

falc0n
Опишу основные полезные возможности d3dx, и как их можно заменить.

1. Мат либа: оптимальная, с поддержкой SSE. Он неё можно запросто отказатся.

2. Меши: фишка в том что X-файлы расширяемы, есть Panda-exporter под все версии 3DSMAX'а, имеет бинарный и текстовый (source control frendly) формат. Так же есть куча ф-ции для операций над мешами (постоение TBN, нормалей, оптимизация, и прочее). Некоторые юзают d3dx-фции в собственных экспортерах для экономии времени. Кароче, при желании запросто заменяется на своё.

3. Загрузчики текстур (jpg, dds, bmp, ...): либо заменять на DevIL, и подобные либы, либо велосипедировать, либо за 10 минут написать загрузчик DDS-формата, и пользоваться толоько им.


4. Шейдеры (а точнее ID3DXEffect) : тут ситуация посложнее.

В Direct3D с шейдерами можно работать либо через device->CreateVertex/PixelShader() (грузить shader asm), и потом через регистры выставлять константы device->SetVertex/PixelShaderConstantF/I/B;
либо через ID3DXEffect, грузить HLSL (или прекомпилированный HLSL), и по именам выставлять константы;
либо через CompileShader, получить интерфейс ID3DXConstantTable, и через него тоже по именам выставлять переменные.

больше никак. тоесть если не юзать d3dx константы можно выставлять только через регистры (uint), что очень не удобно. ещё плюсом является сущность "техника", в которой можно указать стейты, пассы, она всё оптимайзит в стейт блоки, и всё весело и гладко=)

есть 2-а выхода отказаться от ID3DXEffect:
1) написать свой ID3DXEffect=) если честно, то запаритесь переписывать, если захотите поддержать весь функционал ID3DXEffect (shaerd-пулы, техники, и.т.п.)
2) юзать NVIDIA CG (и тянуть за собой cg.dll вместо d3dx.dll). там всё просто, только Flat API=)


Woland
В крайзисе используется NVIDIA CG.

#9
10:06, 14 июля 2009

sildc
>>для начала сделай рабочий двиг, т.е. воспользуйся самыми доступными средствами (тем же d3dx-ом, ибо удобнее)
именно

>>а потом работай над оптимизацией
мне кажется беспокоится над тем что d3dx станет ботлнеком не стоит=)

#10
10:09, 14 июля 2009

паравоз
> беспокоится над тем что d3dx станет ботлнеком не стоит=)
А разве установка параметров шейдера по именам не тормоза?

#11
10:12, 14 июля 2009

X512, а разве обычно это самое тормозное место в проге? )))

#12
10:13, 14 июля 2009

X512
честно сказать не знаю как там организовано это у них (врятли хэш), но суть не в том.
я думаю ты за кадр выставляешь максимально не больше сотни-двух сотен переменных, согласись, глупо даже подумать что от этого будет cpu-bound.

#13
10:20, 14 июля 2009

паравоз
> не больше сотни-двух сотен переменных
на каждый батч - минимум одна матрица (+другие параметры). если 1к батчей - уже больше тысячи переменных

#14
10:35, 14 июля 2009

Kloun
во первых переменные бывают шареные, а во вторых поиск для конкретной техники осуществляется только в тех переменных которые нужны для этой техники. в итоге у тебя получается что поиск при установке переменной будет осущетсвлятся среди 10-20 перменных. и поискать пусть даже тысячу раз, пусть даже линейным перебором среди 10-20 переменных это просто копейки на текущих процессорных мощностях. SG у тебя сколько хавает смеряй сначала=)

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

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