Sign in to follow this  
~Helgon

Calling rasterizer from effect file

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
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
[quote name='Tom KQT' timestamp='1347434364' post='4979210']
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.
[/quote]
Thanks for the correction [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img]

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this