Jump to content
  • Advertisement
Sign in to follow this  
~Helgon

Calling rasterizer from effect file

This topic is 2227 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi, i have following problem. To set the rastersizer state through c++ code works but when i try to set the rasterizer with an effect file i get the error: Assigment FillMode: Only literal right-hand side values are allowed in the state blocks Effects performance mode
and then the whole application crashes.

The .fx file (source from introduction to directx 10):

[source lang="cpp"]cbuffer cbPerObject
{
float4x4 gWVP;
};

cbuffer cbTime
{
float gTime;
};

void VS(float3 iPosL: POSITION, float4 iColor: COLOR, out float4 oPosH: SV_POSITION, out float4 oColor: COLOR)
{
oPosH = mul(float4(iPosL, 1.0f), gWVP);
oColor = iColor;
}

float4 PS(float4 posH: SV_POSITION, float4 color: COLOR)
: SV_Target
{
return color;
}


RasterizerState Wireframe
{
FillMode = Wireframe;
CullMode = Back;
FrontCounterClockwise = false;
};

technique10 ColorTech
{
pass P0
{
SetVertexShader(CompileShader(vs_4_0, VS()));
SetGeometryShader(NULL);
SetPixelShader(CompileShader(ps_4_0, PS()));
SetRasterizerState(Wireframe);
}
}
[/source]

and now im not sure what to do in the c++ code. is it necessary to call something in the effect pass or should it already work? sorry if the question is pretty dumb but im new to directx and hlsl

[source lang="cpp"]D3D10_TECHNIQUE_DESC techDesc;
mTech->GetDesc(&techDesc);
for(UINT p = 0; p < techDesc.Passes; ++p)
{
mTech->GetPassByIndex(p)->Apply(0);
//do i need to set the rasterizer here somwhow? (when i do it through the fx file) ?
mBox.draw();
}[/source]

regards helgon

Share this post


Link to post
Share on other sites
Advertisement
You just defined "Wireframe" as your rasterizer state structure, so you can't really use "Wireframe" as your fill mode anymore, can you see why? You don't want to call it that, try calling it "wireframeRasterizer" or somesuch. [s]But IIRC, the error is because "Wireframe" isn't a valid constant. It's actually WIREFRAME. Same for culling mode which is BACK. But I could be incorrect... been a long time since I D3D'ed.[/s] Edited by Bacterius

Share this post


Link to post
Share on other sites
My bet would also be that the problem is in naming your RasterizerState Wireframe, it then probably thinks that you want to use this rasterizerstate as fillmode? As Bacterius said, try to rename the RasterizerState to something else.
But where I don't agree with Bacterius (and why I'm writing this post) is the second part - Wireframe is perfectly valid as a FillMode, upper and lower case don't matter here. Edited by Tom KQT

Share this post


Link to post
Share on other sites
you guys are officially awesome, thanks for the quick answer - i just had to rename the RasterizerState - strange that the example from the book was given that way

Share this post


Link to post
Share on other sites

But where I don't agree with Bacterius (and why I'm writing this post) is the second part - Wireframe is perfectly valid as a FillMode, upper and lower case don't matter here.

Thanks for the correction smile.png

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!