Jump to content

  • Log In with Google      Sign In   
  • Create Account

Weird issue while rendering screen quad


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 Ripiz   Members   -  Reputation: 529

Like
0Likes
Like

Posted 13 August 2012 - 11:07 AM

Hello,
I'm having some troubles drawing render target's contents on the screen. Problem is probably trivial but I have no luck finding it.
Right now I create small quad (0.2 x 0.2), however for some reason my whole screen becomes white, RTs contents aren't fully white either.
Anyone knows what could possibly cause such issue, or how to fix it?

My render loop can be generalized like this:

if(debug_draw) {
    drawRTquad();
}
else {
    drawSceneNormally();
}
present();

Here's how I draw the quad (this is in the actual loop, nothing cut from other places):
if(debug_draw) {
VertexShader vertexShader;
vertexShader.Create("vs.cso");
/* vs.cso is compiled shader:
struct Input {
    float4 position : POSITION;
    float2 texCoord0 : TEXCOORD0;
};
struct Output {
    float4 position : SV_POSITION;
    float2 texCoord0 : TEXCOORD0;
};
Output main(Input input) {
    Output output;
    output.position = input.position;
    output.texCoord0 = input.texCoord0;
    return output;
}
*/
PixelShader pixelShader;
pixelShader.Create("ps.cso");
/* ps.cso is:
SamplerState sampler0 : register(s0);
Texture2D texture0 : register(t0);
struct Input {
    float4 position : SV_POSITION;
    float2 texCoord0 : TEXCOORD0;
};
float4 main(Input input) : SV_TARGET0 {
    return texture0.Sample(sampler0, input.texCoord0);
}
*/
D3D11_INPUT_ELEMENT_DESC inputLayoutDesc[] = {
    {"POSITION", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0},
    {"TEXCOORD", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0}
};
InputLayout inputLayout;
inputLayout.Create(inputLayoutDesc, vertexShader);
/* notice that quad is not fullscreen,
however my whole screen becomes white
*/
float quad[] = {
    -0.1, 0.1, 0, 0, 0, 0, 0, 0,
    0.1, 0.1, 0, 0, 1, 0, 0, 0,
    -0.1, -0.1, 0, 0, 0, 1, 0, 0,
    0.1, -0.1, 0, 0, 1, 1, 0, 0
};
VertexBuffer vertexBuffer;
vertexBuffer.Create(quad);
// at first I thought some states cause issue, so I added this
deviceContext->ClearState();
auto windowViewport = Window::instance.GetClientArea();
D3D11_VIEWPORT viewport = {0, 0, get<0>(windowViewport), get<1>(windowViewport), 0, 1};
deviceContext->RSSetViewports(1, &viewport);
deviceContext->OMSetRenderTargets(1, &renderTarget, 0);
deviceContext->VSSetShader(vertexShader.shader, 0, 0);
deviceContext->PSSetShader(pixelShader.shader, 0, 0);
deviceContext->IASetInputLayout(inputLayout.layout);
deviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
UINT strides = sizeof(float) * 8;
UINT offsets = 0;
deviceContext->IASetVertexBuffers(0, 1, vertexBuffer.GetPtr(), &strides, &offsets);
/* Visual Studio 2012 Graphical Debugger shows there is something in this SRV
However it fails to debug pixel shader
*/
deviceContext->PSSetShaderResources(0, 1, &RTColor.SRV);
/* draw call gives warning about missing Sampler State,
however it also mentions default state will be used, that's fine
*/
deviceContext->Draw(4, 0);
}
else {
    // draw normally
}
swapChain->Present(0, 0);

Let me know if any information needed. Thank you in advance.

Sponsor:

#2 Ripiz   Members   -  Reputation: 529

Like
0Likes
Like

Posted 14 August 2012 - 05:13 AM

Found the problem. Appears position.w cannot be 0.

Anyone could explain why?

#3 CryZe   Members   -  Reputation: 768

Like
2Likes
Like

Posted 14 August 2012 - 05:54 AM

If SV_Position is a float4 the rasterizer assumes that it's a homogeneous coordinate. So it calculates the actual float3 value by dividing by the w component of the float4.

#4 Seabolt   Members   -  Reputation: 633

Like
0Likes
Like

Posted 14 August 2012 - 10:17 AM

Also I believe it will calculate the depth of that pixel at 0, and if you have any sort of depth testing on, all pixels behind it will be rejected.
Perception is when one imagination clashes with another




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS