Calling rasterizer from effect file

Started by
3 comments, last by Bacterius 11 years, 7 months ago
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

from time to time i find time

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]

“If I understand the standard right it is legal and safe to do this but the resulting value could be anything.”

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.
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

from time to time i find time


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

“If I understand the standard right it is legal and safe to do this but the resulting value could be anything.”

This topic is closed to new replies.

Advertisement