Jump to content

  • Log In with Google      Sign In   
  • Create Account

Constant Buffer update


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
7 replies to this topic

#1 Ninja2008   Members   -  Reputation: 112

Like
0Likes
Like

Posted 18 February 2012 - 01:37 PM

Hi

I have a constant buffer that I'm updating each frame, it contains one matrix and one float4, the problem seems that the matrix part is updating
while the color part is getting all zeros no matter anything...

my structure oout of shader (i.e. in the source code) is this:

struct BufferInfo
{
XMFLOAT4 color;
XMMATRIX mat;
};

constant buffer declaration is this:
D3D11_BUFFER_DESC constDesc;
ZeroMemory(&constDesc,sizeof(constDesc));
constDesc.BindFlags=D3D11_BIND_CONSTANT_BUFFER;
constDesc.ByteWidth=sizeof(BufferInfo);
constDesc.Usage =D3D11_USAGE_DEFAULT;

d3dResult=d3dDevice->CreateBuffer(&constDesc,0,&mvpcCB);

the draw/update part:
BufferInfo bufferInfo01;

XMMATRIX world=sprite[i]->GetWorldMatrix();
XMMATRIX mvp=XMMatrixMultiply(world, vpMatrix);
mvp=XMMatrixTranspose(mvp);

bufferInfo01.mat = mvp;
bufferInfo01.color = color;
d3dContext->UpdateSubresource(mvpcCB,0,0,&bufferInfo01,0,0);
d3dContext->VSSetConstantBuffers(0,1,&mvpcCB);

--------------------
the shader part:

cbuffer cbChangesPerFrame : register(b0)
{
float4 col_;
matrix mvp_;
};


the pixel shader:
float4 PS_Main(PS_Input frag) : SV_TARGET
{
return colorMap_.Sample(colorSampler_,frag.tex0)*float4(col_[0],col_[1],col_[2],1.0f);
}

if I don't use (return colorMap_.Sample(colorSampler_,frag.tex0)*float4(col_[0],col_[1],col_[2],1.0f);) and use this:
return colorMap_.Sample(colorSampler_,frag.tex0)*col_;

the text (since this is a text renderer, it renders text) won't appear (its alpha will be zero) and it will be black since RGB are all zeroes..

seems that only the matrix part is updates, the color part is updates...any suggestions why is this weird thing happening??

Thanks

Sponsor:

#2 Ninja2008   Members   -  Reputation: 112

Like
0Likes
Like

Posted 18 February 2012 - 01:39 PM

I mean the text is black in the first case (return colorMap_.Sample(colorSampler_,frag.tex0)*float4(col_[0],col_[1],col_[2],1.0f);)
and it will not appear in the second case (return colorMap_.Sample(colorSampler_,frag.tex0)*float4(col_[0],col_[1],col_[2],1.0f);)

#3 TiagoCosta   Crossbones+   -  Reputation: 2438

Like
0Likes
Like

Posted 18 February 2012 - 04:56 PM

Are you initializing the variable "color" on the application side correctly?

#4 Hyunkel   Members   -  Reputation: 381

Like
0Likes
Like

Posted 18 February 2012 - 05:07 PM

Check with pix / nsight (or any other similar tool) if all of your buffer contents match your expectations.

#5 kubera   Members   -  Reputation: 966

Like
2Likes
Like

Posted 19 February 2012 - 08:22 AM

Please update pixel shader's constants.

#6 phantom   Moderators   -  Reputation: 7558

Like
1Likes
Like

Posted 19 February 2012 - 09:28 AM

Please update pixel shader's constants.


Ah yes, good catch I missed that on my first read too.

OP; as Kubera points out you are only updating the constant block for the Vertex Shader and NOT the pixel shader which is where you are trying to read the value from. You have to set the block for each stage of the pipeline you want the values to be updated in.

#7 kubera   Members   -  Reputation: 966

Like
0Likes
Like

Posted 19 February 2012 - 10:16 AM

Thank you, @phantom

#8 Ninja2008   Members   -  Reputation: 112

Like
0Likes
Like

Posted 19 February 2012 - 02:15 PM

Hey guys, thank for the help, as you said, I must use d3dContext->PSSetConstantBuffers()

Thanks for the great help. Very Appreciated.

^_^




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