 <p>Firstly, the cast to <code>int</code> is counter productive. You have <code>float</code> values and don't want to loose precision by casting to <code>int</code>, which will always be one of <code>{0, 1 ... 4 * radius^2}</code>.</p> <p>Furthermore, the comparison to <code>== 0</code> needs some luck to be hit. If you want to fill the circle, use <code>&lt;= 0</code> or if you want to draw a line try something like <code>abs(...) &lt;= epsilon</code> where epsilon is some small number that describes the line's thickness.</p> <p>Be aware that you just set the r-component of the returned color of 1. This does not need to result in a red circle (e.g. if you already have a white texture).</p> <p>I would do something like the following:</p> <pre><code>float4 PixelShaderFunction(float2 coords: TEXCOORD0) : COLOR0 { float dx = coords.x - 0.5f; float dy = coords.y - 0.5f; if(dx * dx + dy * dy &lt;= 0.25f) return float4(1.0f, 0.0f, 0.0f, 1.0f); else return float4(0.0f, 0.0f, 0.0f, 0.0f); } </code></pre> <p>Notice that you don't need an explicit radius or center because the texture coordinates are normalized.</p>