簡體   English   中英

讀取和寫入HLSL 5.0中的紋理(延遲陰影)

[英]Reading & Writing to textures in HLSL 5.0 (deferred shading)


我正在嘗試在DirectX 11 c ++中實現延遲着色。 我設法創建了G緩沖區並將場景渲染到該緩沖區(已通過“ GPU PerfStudio”檢查)。 我在最后的照明階段遇到困難。 我無法使用SV_Position返回的坐標讀取紋理(漫反射,法線,鏡面)。

這是用於將光渲染為形狀的像素着色器。

Texture2D<float4> Diffuse   : register( t0 );
Texture2D<float4> Normal    : register( t1 );
Texture2D<float4> Position  : register( t2 );

cbuffer MaterialBuffer : register( b1 )
{
    float4 ambient;
    float4 diffuse;
    float4 specular;
}
//--------------------------------------------------------------------------------------
struct VS_OUTPUT
{
    float4 Pos : SV_POSITION;
    float4 PosVS:   POSITION;
    float4 Color : COLOR0;
    float4 normal : NORMAL;
};

float4 main(VS_OUTPUT input) : SV_TARGET
{

    //return Diffuse[screenPosition.xy]+Normal[screenPosition.xy]+Position[screenPosition.xy];
    //return float4(1.0f, 1.0f, 1.0f, 1.0f);
//--------------------------------------------------------------------------------------
    //Problematic line
    float4 b=Diffuse.Load(int3(input.Pos.xy,0));
//--------------------------------------------------------------------------------------
    return b;
}

我已經使用“ GPU PerfStudio”檢查了輸入紋理是否正確綁定。

上面的代碼返回了我用來清除紋理的顏色(通過調試,我發現它的返回值位於像素位置0,0)

如果我將有問題的行替換為:-

float4 b=Diffuse.Load(int3(350,300,0));

然后使用適當的光線形狀在350,300像素位置渲染該值。

謝謝

您在設備創建時是否嘗試了調試標志D3D11_CREATE_DEVICE_DEBUG並查看了輸出日志。 您可能會在頂點和像素階段之間遇到簽名不匹配的情況。 它將解釋為什么sv_position語義行為不正確。

我解決了這個問題,我使用了與以前用於G緩沖區相同的z緩沖區來渲染光的幾何形狀。

感謝您的答復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM