Das Problem: Ich bin Rendering ein Netz HLSL mit (High Level Shader Language) in Managed DirectX 9 auf die Komplexität des Netzes Je (Anzahl der Ecken und Flächen) Manchmal bekomme ich Probleme mit dem Flackern.Flickering Mesh-Problem: DirectX HLSL
Offensichtlich sollte ein Netz mit höherer Komplexität länger zum Rendern benötigen, und die Menge an Flimmern steigt mit der Komplexität des Netzes. Was jedoch passiert, ist, dass das Netz überhaupt nicht gerendert wird und die Zeit, die es braucht, um das Netz zu zeichnen ist deutlich niedriger.
Increased Mesh Complexity -> Increased Flickering
Der Kodex:
/* Before this is called:
- The Device has been set up successfully
- The Effects have been compiled successfully
- The RenderState is correct, etc.. etc..
*/
public void Draw(Device device, MyMeshClass mesh)
{
// Set vertex/index buffers (this has been timed, negligible)
CustomVertex.PositionNormalTextured[] vb = mesh.Vertices;
short[] ib = mesh.Indices
// Set shader parameters (this has been timed, negligible)
this.effect.SetValue("texture", mesh.Texture);
this.effect.SetValue("color", mesh.Color);
this.effect.SetValue("worldViewProj", mesh.ViewProjection);
int passes = this.effect.Begin(0);
for (int i = 0; i < passes; ++i)
{
this.effect.BeginPass(i);
device.DrawIndexedUserPrimitives(PrimitiveType.TriangleList, 0, ib.Length, ib.Length/3, ib, true, vb);
this.effect.EndPass();
}
this.effect.End();
}
Ergebnisse: Dies ist der Ausgang I bekommen ist (I eingefügt Timer, die zur besseren Lesbarkeit in dem obigen Code nicht enthalten sind):
// This is a Copy/Paste from the debug output
.
.
Draw Mesh: 1.2851 ms
Draw Mesh: 1.3882 ms
Draw Mesh: .4819 ms // <-- It flickered here
Draw Mesh: 1.3638 ms
Draw Mesh: 1.4972 ms
Draw Mesh: 1.4262 ms
Draw Mesh: 1.2239 ms
Draw Mesh: 1.6684 ms
Draw Mesh: 1.6963 ms
Draw Mesh: 2.3397 ms
Draw Mesh: 1.3484 ms
Draw Mesh: 1.4012 ms
Draw Mesh: .5287 ms // <-- It flickered here
Draw Mesh: .4644 ms // <-- It flickered here
Draw Mesh: 1.6140 ms
Draw Mesh: 1.4392 ms
Draw Mesh: 1.4579 ms
Draw Mesh: .4987 ms // <-- It flickered here
Draw Mesh: 1.4873 ms
.
.
HLSL-Code: Hier ist die abgekürzt HLSL-Code, bitte beachten Sie, dass dies nicht der eigentliche Code ist also nicht in Syntaxfehler graben, ich versichere Ihnen, der tatsächliche Code ist extrem ähnlich.
Texture texture;
sampler TextureSampler; // There is more here, I cut it out to save space
float4x4 worldViewProj : WorldViewProjection;
float4 color;
float4 mainVS(float4 pos : POSITION) : POSITION
{
float4 Out = mul(pos, worldViewProj);
return Out;
}
float4 mainPS(float4 pos : POSITION) : COLOR
{
float4 Out = tex2D(TextureSampler, pos.xy);
return Out;
}
technique Standard
{
pass One
{
CullMode = CCW;
AlphaBlendEnable = true;
SrcBlend = SrcAlpha;
DestBlend = InvSrcAlpha;
VertexShader = compile vs_2_0 mainVS();
PixelShader = compile ps_2_0 mainPS();
}
}
Jede Hilfe/Ideen/Vorschläge würden sehr geschätzt werden. Vielen Dank!