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

Разница кода пиксельного шейдера

#0
12:44, 7 апр. 2021

Добрый день.  У меня есть код рисует объемный туман. Все работает. Но меня интересует одна строчка кода. Когда есть она

ID3DXConstantTable* FogPSConstTable;
............................
FogPSConstTable->SetDefaults(p_d3d_Device);

Изображение такое как на скрине https://ibb.co/SVSbtH0

Когда ее закоментировать эту строчку кода изображение выглядит по другому как на скрине https://ibb.co/ZKxMXhm

Объясните зачем нужна эта строчка кода? Это взято из DX9, и какой аналог функции в DX11?

Объясню что метод SetDefaults вызывается для константной таблицы пиксельного шейдера и там в пиксельном шейдере вобще нету константной таблицы, зачем там девайс в пиксельном шейдере? И какой аналог этой функции в DX11? Заранее спасибо.


#1
12:50, 7 апр. 2021

SmoothBoy
> зачем там девайс в пиксельном шейдере?

через него и ставятся константы из таблицы

> И какой аналог этой функции в DX11?

нету - ставь через cbuffer или прослойку effects11

#2
13:06, 7 апр. 2021

SmoothBoy
возьми да отладь, у тебя же есть 100% воспроизводимый случай. комментируй участки кода шейдера до тех пор, пока не найдёшь участок кода, который вносит разницу. прозреваю, что там инициализация или обнуление каких-нибудь юниформов происходит, а если её не выполнять, то в каких-то контантах будет просто мусор.

> и там в пиксельном шейдере вобще нету константной таблицы
то есть там нету юниформов? ну тогда должно быть ещё проще отладить, чтобы найти, откуда берётся разница.

#3
13:11, 7 апр. 2021

Спасибо за ответ, я понял что происходит. У меня код пиксельного шейдера:

float3 FogColor={0.5,0.5,0.5};

float4 ps_main(float2 tex:TEXCOORD0) : COLOR0
{
.................
}

Я переменную FogColor переношу в код ps_main:

float4 ps_main(float2 tex:TEXCOORD0) : COLOR0
{
  ......................
  float3 FogColor={0.5,0.5,0.5};      
  ......................
}

И тогда эта строчка кода

FogPSConstTable->SetDefaults(p_d3d_Device);

не надо ее использовать. То есть видно девайс в пиксельном шейдере отвечает за глобальные переменные.

#4
13:15, 7 апр. 2021

SmoothBoy
> не надо ее использовать. То есть видно девайс в пиксельном шейдере отвечает за
> глобальные переменные.
ты уверен, что это — глобальная переменная, а не какой-нибудь юниформ в d3dx эффекте?

#5
13:22, 7 апр. 2021

SmoothBoy
> ID3DXConstantTable

https://www.gamedev.net/forums/topic/648016-replacement-for-id3dxconstanttable/

#6
13:35, 7 апр. 2021

Спасибо разобрался, изображение более яркое потому что если не установить девайс нету доступа к глобальной переменной FogColor на нее умножается цвет пикселя, а там FogColor все 0.5 значения- то есть на нее умножается и получается меньше цвет. А мы девайс не передали, и цвет больший.
Спасибо еще раз всем.

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