DirectX11 Compute Shaders を使用したフラクタル レンダリングの実験を試みています。提供されている例は、FeatureLevel_10 デバイスで実行されます。
RwStructured 出力バッファーのデータ形式は R32G32B32A32_FLOAT です
問題は、バッファーに書き込むときに、ALPHA ( w ) 値だけが他に何も書き込まれないように見えることです。シェーダー コードは次のとおりです。
struct BufType
{
float4 value;
};
cbuffer ScreenConstants : register(b0)
{
float2 ScreenDimensions;
float2 Padding;
};
RWStructuredBuffer<BufType> BufferOut : register(u0);
[numthreads(1, 1, 1)]
void Main( uint3 DTid : SV_DispatchThreadID )
{
uint index = DTid.y * ScreenDimensions.x + DTid.x;
float minRe = -2.0f;
float maxRe = 1.0f;
float minIm = -1.2;
float maxIm = minIm + ( maxRe - minRe ) * ScreenDimensions.y / ScreenDimensions.x;
float reFactor = (maxRe - minRe ) / (ScreenDimensions.x - 1.0f);
float imFactor = (maxIm - minIm ) / (ScreenDimensions.y - 1.0f);
float cim = maxIm - DTid.y * imFactor;
uint maxIterations = 30;
float cre = minRe + DTid.x * reFactor;
float zre = cre;
float zim = cim;
bool isInside = true;
uint iterationsRun = 0;
for( uint n = 0; n < maxIterations; ++n )
{
float zre2 = zre * zre;
float zim2 = zim * zim;
if ( zre2 + zim2 > 4.0f )
{
isInside = false;
iterationsRun = n;
}
zim = 2 * zre * zim + cim;
zre = zre2 - zim2 + cre;
}
if ( isInside )
{
BufferOut[index].value = float4(1.0f,0.0f,0.0f,1.0f);
}
}
コードは実際にはある意味では正しい結果 ( 2D マンデルブロー集合 ) を生成しますが、どういうわけかアルファ値だけが変更され、他には何も書き込まれていないように見えますが、集合内のピクセルは赤く着色されているはずです... (画像は黒 &白い )
ここで何が起こっているのか、誰にも手がかりがありますか?