Note that there are some explanatory texts on larger screens.

plurals
  1. PORendering a line into a 1x1 RenderTarget2D does not change the target's pixel color
    primarykey
    data
    text
    <p>What I am trying to achieve is the following: my pass will return a huge array with several unique numbers repeating over and over, which I need to retrieve and process on CPU.</p> <p>I tried rendering into a 2000x1 texture and then sampled it on the CPU with RenderTarget2d.GetData&lt;>() and a foreach loop. It was awfully slow :). So I sidestepped my problem, the idea now is to render to a 1x1 texture multiple times. Inbetween passes I will extend a parameter array in my shader to include the numbers already returned.Each pixel will than query the array and clip itself if it holds a number that already appeared.</p> <p>The problem now is that pixel color never changes nomatter what I render - it always returns some random numbers. When I added <code>Game.GraphicsDevice.Clear(Color.Transparent);</code> before the draw call it started returning zeroes, though the shader code should return 0.2f (or its 0 to 255 equivalent). Can it be because I render too small a content into it (I am drawing a line on the screen and sample the scene's color along the line) and it gets lerped at some point?</p> <p>C#/XNA code:</p> <pre><code> CollisionRT = new RenderTarget2D(Game.GraphicsDevice, 1, 1, false, SurfaceFormat.Color, DepthFormat.None); ... Game.GraphicsDevice.BlendState = BlendState.AlphaBlend; Game.GraphicsDevice.SetRenderTarget(CollisionRT); Game.GraphicsDevice.Clear(Color.Transparent); Game.GraphicsDevice.DepthStencilState = DepthStencilState.None; foreach (ModelMesh mesh in PPCBulletInvis.Model.Meshes) // PPCBulletInvis is a line that covers 1/18 of the screen (approx). { foreach (Effect effect in mesh.Effects) { //effect.Parameters["Texture"].SetValue(vfTex); effect.Parameters["halfPixel"].SetValue(halfPixel); effect.Parameters["sceneMap"].SetValue(sceneRT); effect.Parameters["World"].SetValue(testVWall.World); effect.Parameters["View"].SetValue(camera.View); effect.Parameters["Projection"].SetValue(camera.Projection); } mesh.Draw(); } Game.GraphicsDevice.SetRenderTarget(null); Rectangle sourceRectangle = new Rectangle(0, 0, 1, 1); Color[] retrievedColor = new Color[1]; CollisionRT.GetData&lt;Color&gt;(retrievedColor); Console.WriteLine(retrievedColor[0].R); // Returns zeroes. </code></pre> <p>Shader code:</p> <pre><code>float4x4 World; float4x4 View; float4x4 Projection; texture sceneMap; sampler sceneSampler = sampler_state { Texture = (sceneMap); AddressU = CLAMP; AddressV = CLAMP; MagFilter = POINT; MinFilter = POINT; Mipfilter = POINT; }; float2 halfPixel; struct VS_INPUT { float4 Position : POSITION0; }; struct VS_OUTPUT { float4 Position : POSITION0; float4 ScreenPosition : TEXCOORD2; }; VS_OUTPUT VertexShaderFunction(VS_INPUT input) { VS_OUTPUT output; float4 worldPosition = mul(input.Position, World); float4 viewPosition = mul(worldPosition, View); output.Position = mul(viewPosition, Projection); output.ScreenPosition = output.Position; return output; } float4 PixelShaderFunction(VS_OUTPUT input) : COLOR0 { input.ScreenPosition.xy /= input.ScreenPosition.w; float2 screenTexCoord = 0.5f * (float2(input.ScreenPosition.x,-input.ScreenPosition.y) + 1); screenTexCoord -=halfPixel; return (0.2f,0.2f,0.2f,0.2f);//tex2D(sceneSampler, screenTexCoord); } technique Technique1 { pass Pass1 { VertexShader = compile vs_3_0 VertexShaderFunction(); PixelShader = compile ps_3_0 PixelShaderFunction(); } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload