2014-02-12 100 views
0

我認爲我很愚蠢,因爲我無法弄清楚在最簡單的情況下導致問題的原因。渲染爲紋理的結果僅在着色器中爲空

項目類型是Windows OpenGL(在Android上,問題仍然存在)。

這裏是着色器:

//---------------------------------------------------------------------------- 
float4 PSTest (float2 TexCoords : TEXCOORD0) : COLOR0 
{ 
    float4 color = float4 (1, 0, 0, 1); 

    return color; 
} 

//---------------------------------------------------------------------------- 
Technique Test 
{ 
    pass Test 
    { 
     PixelShader = compile ps_2_0 PSTest(); 
    } 
} 

,如果我把它與Texture(128×128)繪製到屏幕上正常工作:

 Shader.CurrentTechnique = Shader.Techniques["Test"]; 
     GraphicsDevice.SetRenderTarget (null); 
     GraphicsDevice.Clear (Color.White); 

      Batch.Begin (SpriteSortMode.Immediate, BlendState.Opaque, 
       SamplerState.PointClamp, DepthStencilState.None, null, Shader); 
      Batch.Draw (Texture, Vector2.Zero, Color.White); 
      Batch.End(); 

Image

現在我決定畫它進入渲染目標Output由代碼創建:

new RenderTarget2D (GraphicsDevice, 256, 256, false, 
    SurfaceFormat.Color, DepthFormat.None); 

抽獎代碼:

 // Render into Output 
     Shader.CurrentTechnique = Shader.Techniques["Test"]; 
     GraphicsDevice.SetRenderTarget (Output); 
     GraphicsDevice.Clear (Color.DimGray); 

     Batch.Begin (SpriteSortMode.Immediate, BlendState.Opaque, 
      SamplerState.PointClamp, DepthStencilState.None, null, Shader); 
     Batch.Draw (Texture, Vector2.Zero, Color.White); 
     Batch.End(); 

     // Draw Output 
     GraphicsDevice.SetRenderTarget (null); 
     GraphicsDevice.Clear (Color.White); 

     Batch.Begin(); 
     Batch.Draw (Output, Vector2.Zero, Color.White); 
     Batch.End(); 

但結果是完全荒謬的:

Image

我已經嘗試了不同的最簡單的着色器,SurfaceFormat.HdrBlendable,紋理尺寸 - 但沒有什麼幫助。

此外,我曾嘗試畫Texture(瀰漫着紫色)到渲染目標無着色(然後到屏幕)和它工作正常

Image

好像我已經錯過了一些基本知識:在XNA着色器的事情,但我無法弄清楚它是什麼。

回答