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

D3D9-Вопросы. Device.SetGammaRamp()

Страницы: 1 2 37 8 Следующая »
#0
(Правка: 22 апр. 2019, 10:20) 20:26, 23 мар. 2019

Как лучше менять гамму экрана: Device.SetGammaRamp() или полноэкранный квад в шейдере?
В D3D11 данную функцию убрали вроде как, она деприкатед.

Какие проблемы могут возникнуть от использования функции Device.SetGammaRamp() и её брата SetDeviceGammaRamp()?

Старые вопросы:

+ Показать
+ Показать
+ Показать
+ Показать

#1
20:51, 23 мар. 2019

monobogdan
> Простейший фрагментный шейдер, очевидно если альфа > 0 в исходном фрагменте то
> сэмплим белый цвет.

а если без шейдеров?

#2
(Правка: 20:55) 20:54, 23 мар. 2019

Хаус
> а если без шейдеров?
Читаешь текстуру, проходишь по каждому пикселю и
monobogdan
> если альфа > 0 то белый цвет.

#3
(Правка: 4:31) 4:30, 24 мар. 2019

Хаус
> а если без шейдеров?
а если не заниматься ерундой? в д3д9 прекрасно поддерживаются шейдеры.

#4
7:32, 24 мар. 2019
device_->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_CONSTANT);
device_->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
device_->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
Не?
#5
7:54, 24 мар. 2019

Suslik
+ ещё целый фреймворк для эффектов от D3DX

#6
8:37, 24 мар. 2019

Если я правильно понял вопрос, то на FFP так:

device_->SetRenderState(0, D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR);
device_->SetRenderState(0, D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR);

#7
13:29, 24 мар. 2019

Интереса ради, в OGL FFP тоже есть такой функционал. Называется texture_env_combine.
https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_textur… v_combine.txt

#8
(Правка: 22:29) 22:28, 26 мар. 2019

новый вопроц

#9
22:48, 26 мар. 2019

Хаус
> Как получить бэкбуфер в текстуру?
GetRenderTargetData()

#10
12:38, 27 мар. 2019

Хаус
> Device.StretchRect(Surface, nil, SurfaceTexture, nil, D3DTEXF_NONE);
Вчера, ради интереса, протестировал эту функцию (использовал версии Managed DX и SharpDX).

Выяснил следующие подробности:
1. Оба Surface должны быть созданы в DEFAULT Memory Pool, что уже объясняет почему у вас вываливается D3DERR_INVALIDCALL.
2. В более ранних версиях DirectX 9 почему то нельзя передавать пустые Rectangle, пришлось заполнить их соответственно Desc.Width и Desc.Height.
3. Также эту функцию нельзя вызывать внутри блока BeginScene/EndScene.
4. Ещё много всяких мелких логичных для того поколения видеокарт ограничений, типа только одинаковые пискельные форматы обеих "поверхностей".

Не знаю на сколько это поможет, по крайней мере этого всего нужно избежать при использовании этой функции.

#11
(Правка: 13:45) 13:44, 27 мар. 2019

DODge
> Выяснил следующие подробности:
> 1. Оба Surface должны быть созданы в DEFAULT Memory Pool, что уже объясняет
> почему у вас вываливается D3DERR_INVALIDCALL.

обе поверхности в D3DPOOL_DEFAULT

> 2. В более ранних версиях DirectX 9 почему то нельзя передавать пустые
> Rectangle, пришлось заполнить их соответственно Desc.Width и Desc.Height.

заполнил

> 3. Также эту функцию нельзя вызывать внутри блока BeginScene/EndScene.

вот это уже как-то накладно, но вынес за блок

> 4. Ещё много всяких мелких логичных для того поколения видеокарт ограничений,
> типа только одинаковые пискельные форматы обеих "поверхностей".
>

обе поверхности D3DFMT_X8R8G8B8, текстура такой же имеет формат

результат тот же.

#12
14:00, 27 мар. 2019

Хаус
Ещё раз:
> GetRenderTargetData()
Не работает?

#13
(Правка: 14:01) 14:00, 27 мар. 2019

Хаус
> Device.CreateTexture(Desc.Width, Desc.Height, 0, 0, D3DFMT_A8R8G8B8,
> D3DPOOL_MANAGED, Texture, nil);
Подозрительно что количество уровней у вас стоит 0. В этом случае DirectX генерирует мип-уровни автоматически. Попробуйте поставить значение 1, чтобы был только верхний уровень. Ещё такой момент что Usage возможно должен быть Usage.RenderTarget. У меня работало всё в реал-тайме при таких параметрах. Здесь у вас точно D3DPOOL_DEFAULT?

#14
14:41, 27 мар. 2019

Mikle
> Не работает?

ещё не пробовал :)

DODge
> Usage.RenderTarget

заработало ага, только всякие ограничения на StretchRect() не действуют, может эти ограничения только слабых картах?

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