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

Программирование шейдеров на HLSL. (Комментарии к статье) (10 стр)

Страницы: 15 6 7 8 9 10
#135
22:13, 21 янв. 2014

Wraith
> Короче - смотри дизасм своего шейдера, вдумчиво читай документацию про
> инструкции и просветляйся.

Может для начала ему фифектов будет достаточно ? Чисто по имени ставятся


#136
23:14, 21 янв. 2014

Дык в структуре тоже "чисто по имени ставится". Прямо там же в ашнике со структурой можно сделать

struct S1 { float4x4 worldViewProj; float4x4 invWorld; ... };
#define S1_REG 42
и юзать и в шейдере
#include "paramstructs.h"
S1 params : register(S1_REG);
и в цопопе:
S1 params;
params.worldViewProj = object->matrix * pass->view * pass->proj;
params.invWorld = inverse( object->matrix );
 ... 
device->SetxxxShaderConstantF( S1_REG, (float*) &params, sizeof(params)/16 );

#137
12:28, 24 мар. 2014

Дело остановилось, сижу гадаю что происходит этом случае:

IDirect3DVertexShader9* vs;
/*...создание vs */
device->SetVertexShader(vs);
// Рисую некий меш
device->SetVertexShader(vs);
// Рисую некий меш
device->SetVertexShader(vs);
// Рисую некий меш
device->SetVertexShader(vs);
// и т.д.
Директ оптимизирует это дело? Не упадёт производительность от потоянной установки одного и того же шейдера?
Я не дурак и понимаю что можно раз установить и рисовать, рисовать, рисовать. Но архитектурка меш дллки просит сокрытия деталей(использ. шейдеров)

#138
12:51, 24 мар. 2014

Скорее всего, может и незначительно, но упадёт. У меня в ДХ11 падало, хотя он гораздо "дешевле" в этом плане, чем ДХ9.

#139
13:06, 24 мар. 2014

То есть упадёт всё же из-за директовских внутренних делишек, а не из-за "просто моногократные вызовы функций".  Спасибо подозрения подусилились, буду рассматривать у себя иные варианты сокрытия шейдеров.

#140
15:55, 24 мар. 2014

Жаберштуцер
Ну ты просто текущий шейдер установленный шейдер держи и сранивай что пришел. Если совпали не ставь повторно, а вот измененные константы засылай не зависимо от шейдера.

#141
0:38, 1 апр. 2014

Andrey
Очевидный и простой вариант! Но есть у меня идея разбить сетки на группы по типу используемого шейдера и рисовать сразу всю группу раз установив. Скелет набросал, но углубляться не буду пока не пойму оптимизацию по типу "Рисуй только то что видишь". А там сортировка как раз, так что думаю синхронно нужно всё делать - "сетки" и "фрустум". В математику пока ушёл. Я сторонник быстрого получения результата, чтоб по минимуму но было готово. От мелкой dll до клиента - так фатальные косяки замечаются сразу и не требуют большого труда на исправление

Прошло более 7 месяцев
#142
9:54, 11 ноя. 2014

А не подскажет ли, кто то, есть ли где готовая библиотека примеров шейдеров на HLSL, интересен шейдер для картонных эффектов, типа таких.

Изображение
Изображение

#143
11:17, 11 ноя. 2014

Dark
В гугле забанили?
"cartoon shader hlsl"

#144
11:42, 11 ноя. 2014

Dark
> есть ли где готовая библиотека примеров шейдеров на HLSL
http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html

#145
11:47, 11 ноя. 2014

Жаберштуцер
> Директ оптимизирует это дело? Не упадёт производительность от потоянной
> установки одного и того же шейдера?

у мну на 9-ом вообще проблем с этим не было, отрисовка >1500 калов, но, возможно тут зависит от драйвера, возможно он сам определяет и оптимизирует,  дривер был NVIDIA.

Прошло более 6 месяцев
#146
18:48, 26 мая 2015

На msdn написано следующие:

SV_Depth  Depth buffer data. Can be written or read by any shader.

В пиксельном шейдере действительно можно получить текущую глубину? Или они ошиблись?
Я больше нигде не видел инфы, что можно получить текущую глубину в шейдере, да еще и в любом шейдере o_0.
Везде пишут, что надо тексутру глубины использовать как SRV или копировать ее в свою текстуру.

#147
21:11, 26 мая 2015

WISHMASTER35
SV_Depth это только аутпут.
Возможно в данной фразе имеется ввиду, что ты можешь делать так:
float depth : SV_DEPTH;
depth = x; // запись в переменную
depth = foo(depth); // чтение из переменной и запись в переменную

#148
21:26, 26 мая 2015

Executor
> Возможно в данной фразе имеется ввиду, что ты можешь делать так:
> float depth : SV_DEPTH;
> depth = x; // запись в переменную
Тогда это для всех семантик подходит. А any shader тогда как объяснить? Видно они все же ошиблись.

Есть еще вопрос. Обычно константы пишутся внутри cbuffer. Но не редко вижу как константы (например матрицы) объявляются и без cbuffer. В чем разница?

#149
5:42, 27 мая 2015

WISHMASTER35
> Есть еще вопрос. Обычно константы пишутся внутри cbuffer. Но не редко вижу как
> константы (например матрицы) объявляются и без cbuffer. В чем разница?
в первом случае ты сам определяешь сколько тебе надо константых буферов => ты можешь регулировать их частоту обновлений для оптимизаций.

во втором за тебя это сделает компилятор шейдера загнав все константы в один cbuffer. он будет один

Страницы: 15 6 7 8 9 10
ПрограммированиеФорумГрафика

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