Пропавшее объявляется в GLSL после MCGP - PullRequest
0 голосов
/ 28 января 2019

Я сделал - базовый - шейдер в HLSL, который отлично работает в DX, но выдает ошибки компиляции в OpenGL:

ERROR: 0:47: 'ps_v4' : undeclared identifier 
ERROR: 0:47: 'xyz' :  field selection requires structure, vector, or matrix on left hand side 
ERROR: 0:48: 'ps_v3' : undeclared identifier 
ERROR: 0:48: 'xyz' :  field selection requires structure, vector, or matrix on left hand side 
ERROR: 0:70: 'ps_v5' : undeclared identifier 
ERROR: 0:70: 'xxxx' :  field selection requires structure, vector, or matrix on left hand side 

Я не знаю много о GLSL, но я изучил сгенерированныйФайлы .xnb и даже декларации отсутствуют:

...
...
uniform sampler2D ps_s0;
uniform sampler2D ps_s1;
varying vec4 vTexCoord0;
#define ps_v0 vTexCoord0
#define ps_oC0 gl_FragColor
varying vec4 vTexCoord1;
#define ps_v1 vTexCoord1
varying vec4 vFrontColor;
#define ps_v2 vFrontColor

void main()
...
...
ps_r1 = (ps_r1.xyzx * ps_c12.wwwz) + ps_c12.zzzw;
ps_r0 = clamp(ps_r0 * ps_r1, vec4(0.0), vec4(1.0));
ps_oC0 = mix(ps_c12.zzzw, ps_r0, ps_v5.xxxx);
...

, но они используются в одном файле.

Может кто-нибудь помочь мне выяснить, в чем именно может быть проблема, поэтомуMGCP создает этот файл неправильно?В MGCP нет ошибок, только предупреждения о неявных векторных усечениях.

Весь код шейдера может быть немного неправильным, но он не настолько необычен, но использует Tangent / Binormal для рельефного отображения:

struct VSI
{
    float4 Position : POSITION0;
    float4 Normal : NORMAL0;
    float2 UV : TEXCOORD0;
    float4 Color : COLOR0;
    float3 Tangent : TANGENT;
    float3 Binormal : BINORMAL;
};

Есть идеи?

1 Ответ

0 голосов
/ 28 января 2019

Я фактически использовал регистры TANGENT и BINORMAL в VS-Output, и по какой-то причине это не сработало.

Я заменил регистр TANGENT0 и BINORMAL0 в структуре VS Output на TEXCOORD2 / 3, и это разрешилоошибка

Вывод на экране пока выглядит хорошо, но я проведу дальнейшее тестирование.

...