1

次の CgFx ファイルがあります。

struct VertIn {
  float4 pos   : POSITION;
  float4 color : COLOR0;
};
struct VertOut {
  float4 pos   : POSITION;
  float4 color : COLOR0;
};
VertOut vert(VertIn IN) {
  VertOut OUT;
  OUT.pos     = IN.pos;
  OUT.color   = IN.color;
  OUT.color.z = 0.0f;
  return OUT;
}
struct FragIn {
  float4 color: COLOR;
};
struct FragOut {
  float4 color : COLOR;
};
FragOut frag(FragIn IN) {
  FragOut OUT;
  OUT.color = IN.color;
  OUT.color.y = 0.0f;
  return OUT;
}
struct GeomIn {
  float4 position : POSITION;
  float4 color : COLOR0;
};
TRIANGLE void geom(AttribArray<GeomIn> IN) {
  for(int i=0; i<IN.length; i++) {
    emitVertex(IN[i]);
  }
}
technique technique0 {
  pass p0 {
    VertexShader = compile gp4vp vert();    //line 47
    FragmentShader = compile gp4fp frag();  //line 48
    GeometryShader = compile gp4gp geom();  //line 49
  }
}

cgc を使用して 3 つのシェーダーを検証すると、すべて正常にコンパイルされます。

しかし、次を使用してエフェクト全体をコンパイルしようとすると:

context=cgCreateContext();
effect=cgCreateEffectFromFile(context, "my_shader.cgfx", NULL);
if(!effect) {
  printf(ygl.cgGetLastErrorString(NULL));
  printf(cgGetLastListing(context));
}

次に、次のエラーが表示されます。

CG ERROR : The compile returned an error.
my_shader.cgfx(47) : error C8001: Unknown state 'VertexShader'
my_shader.cgfx(48) : error C8001: Unknown state 'FragmentShader'
my_shader.cgfx(49) : error C8001: Unknown state 'GeometryShader'

私は何を間違っていますか?

4

2 に答える 2

1

コンテキストを作成したら、電話する必要があります

cgGLRegisterStates(handle);

handleCGコンテキストハンドルはどこにありますか。これによりVertexShader、、、などが登録されます。デフォルトで登録されない理由はわかりませんが、登録されています。PixelShaderFillMode

于 2012-11-28T22:29:04.283 に答える
0

さて、それを解決しましたが、方法がわかりません。以前に cg プロファイルをロードしたため、コンパイラは CgFx を予期していなかったので、それを使用しようとしたと思います。しかし、確かではありません。

于 2012-07-24T11:21:12.893 に答える