简单介绍一下如何在RenderDoc中使用Channels设定为Custom后的Shader;
官方文档:How do I use a custom visualisation shader?
- 在Texture View中设置Channels为Custom;
- 输入新创建的Shader名称及后缀;
- 点击绿色加号创建Custom Shader,创建的hlsl保存会在
C:\Users\PC\AppData\Roaming\qrenderdoc
路径下。
- 其顶栏有4给功能:
Find
:文件内搜索/替换;Bookmark
:设置书签,可以快速跳转;Refresh
:修改后的Shader需要Refresh后才能生效。Insert...
:快速添加内置的一些变量;
如何获取到当前纹理并处理
添加Point & Linear Samplers
和Texture Resources
,通常当前纹理都是texDisplayTex2DArray
中的第一个元素,采样即可得到当前颜色。
点击查看代码
/////////////////////////////////////
// Resources //
/////////////////////////////////////// Float Textures
Texture1DArray<float4> texDisplayTex1DArray : register(RD_FLOAT_1D_ARRAY_BINDING);
Texture2DArray<float4> texDisplayTex2DArray : register(RD_FLOAT_2D_ARRAY_BINDING);
Texture3D<float4> texDisplayTex3D : register(RD_FLOAT_3D_BINDING);
Texture2DMSArray<float4> texDisplayTex2DMSArray : register(RD_FLOAT_2DMS_ARRAY_BINDING);
Texture2DArray<float4> texDisplayYUVArray : register(RD_FLOAT_YUV_ARRAY_BINDING);// only used on D3D
Texture2DArray<float2> texDisplayTexDepthArray : register(RD_FLOAT_DEPTH_ARRAY_BINDING);
Texture2DArray<uint2> texDisplayTexStencilArray : register(RD_FLOAT_STENCIL_ARRAY_BINDING);
Texture2DMSArray<float2> texDisplayTexDepthMSArray : register(RD_FLOAT_DEPTHMS_ARRAY_BINDING);
Texture2DMSArray<uint2> texDisplayTexStencilMSArray : register(RD_FLOAT_STENCILMS_ARRAY_BINDING);// Int Textures
Texture1DArray<int4> texDisplayIntTex1DArray : register(RD_INT_1D_ARRAY_BINDING);
Texture2DArray<int4> texDisplayIntTex2DArray : register(RD_INT_2D_ARRAY_BINDING);
Texture3D<int4> texDisplayIntTex3D : register(RD_INT_3D_BINDING);
Texture2DMSArray<int4> texDisplayIntTex2DMSArray : register(RD_INT_2DMS_ARRAY_BINDING);// Unsigned int Textures
Texture1DArray<uint4> texDisplayUIntTex1DArray : register(RD_UINT_1D_ARRAY_BINDING);
Texture2DArray<uint4> texDisplayUIntTex2DArray : register(RD_UINT_2D_ARRAY_BINDING);
Texture3D<uint4> texDisplayUIntTex3D : register(RD_UINT_3D_BINDING);
Texture2DMSArray<uint4> texDisplayUIntTex2DMSArray : register(RD_UINT_2DMS_ARRAY_BINDING);//////////////////////////////////////////////////////////////////////////
// Samplers //
/////////////////////////////////////SamplerState pointSampler : register(RD_POINT_SAMPLER_BINDING);
SamplerState linearSampler : register(RD_LINEAR_SAMPLER_BINDING);/////////////////////////////////////float4 SampleTexture2DArray(float2 uv, int sliceIndex)
{return texDisplayTex2DArray.Sample(linearSampler, float3(uv, sliceIndex));
}float4 main(float4 pos : SV_Position, float4 uv : TEXCOORD0) : SV_Target0
{float3 m_color = SampleTexture2DArray(uv.xy, 0).rgb;return float4(m_color.b, m_color.g, m_color.r,1);
}
效果: