2013-08-11 7 views
1

Я новичок в шейдерах и HLSL, надеюсь, что я не делаю ничего серьезного неправильного. Я пытаюсь смешать две текстуры в HLSL. У меня есть оба моих текстуры и пробников настройка:Образец текстуры HLSL прекрасен при прямом возврате, недействителен, если какая-либо операция применяется

Texture2D<float4> First : register(t0); 
Texture2D<float4> Second : register(t1); 
uniform sampler FirstSampler : register(s0); 
uniform sampler SecondSampler : register(s1); 

В моем пиксельном шейдере, я пробуя свои текстуры:

float4 firstSample = First.Sample(FirstSampler, coords); 
float4 secondSample = Second.Sample(SecondSampler, coords); 

Сейчас, на данный момент, если я непосредственно вернуть firstSample или secondSample, я получаю правильные результаты. Тем не менее, я пытаюсь интерполировать между моими текстурами. Я пробовал:

float4 returnValue = lerp(firstSample, secondSample, 0.5); 

Но то, что я получаю, является интерполяцией между чистым черным и моей второй текстурой. Если я переключу их места, я получаю тот же результат. Если я установил вес 0.0, я получаю чистый черный и т. Д., Что означает что-то не так в firstSample. Я также пытался вручную интерполировать между ними, используя чистую математику, а не lerp, но также дает тот же результат. Самое странное, что когда я прямо возвращаю свой firstSample или возвращаю некоторое значение, не взаимодействуя с другим образцом (например, return float4(firstSample.b, firstSample.g, firstSample.r, 1); для обмена каналами), я получаю рабочий результат, но всякий раз, когда я пытаюсь использовать свою текстуру с любым другим образцом, образец текстуры становится недействительным (черный). Что может быть причиной? Я очень новичок в шейдерах, вероятно, это то, что я делаю, очевидно, неправильно, но я не мог понять, что это такое.

ответ

0

Результаты, которые вы видите, могут быть вызваны ошибкой компилятора. Убедитесь, что вы используете последнюю версию компилятора HLSL, либо версию 46 из Windows SDK, либо версию 43 из June 2010 DirectX SDK.

+0

Я использую (и должен использовать) directx toolkit-компилятор, который поставляется с sharpdx, поэтому я не могу обновить последний компилятор. У меня есть последняя версия этого компилятора, хотя это было недавно обновлено. –

+0

@ canpoyrazoğlu Можете ли вы опубликовать полный код шейдера вместе с параметрами компиляции? – MooseBoys

+0

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