Opengl GLSL中的语法错误-意外的新\u标识符

Opengl GLSL中的语法错误-意外的新\u标识符,opengl,syntax,glsl,Opengl,Syntax,Glsl,我一直在编写一种着色语言,旨在简化GLSL的编写。因此,我不能真正依赖GLSL编译器给出的行号。因此,我无法找到这个错误想要说什么。首先它意味着什么,然后我如何修复它 错误代码: 0:8(18): error: syntax error, unexpected NEW_IDENTIFIER, expecting '{' 我相信这只是意味着生成的GLSL有语法错误,但我找不到。这个错误消息实际上是什么意思 --编辑-- 很抱歉没有提供代码,我想知道错误的含义,以便提供相关的代码区域 生成的顶点着

我一直在编写一种着色语言,旨在简化GLSL的编写。因此,我不能真正依赖GLSL编译器给出的行号。因此,我无法找到这个错误想要说什么。首先它意味着什么,然后我如何修复它

错误代码:

0:8(18): error: syntax error, unexpected NEW_IDENTIFIER, expecting '{'
我相信这只是意味着生成的GLSL有语法错误,但我找不到。这个错误消息实际上是什么意思

--编辑--

很抱歉没有提供代码,我想知道错误的含义,以便提供相关的代码区域

生成的顶点着色器:

#version 120

attribute vec3 position;
attribute vec2 texCoord;
attribute vec3 normal;
attribute vec3 tangent;

varying vec2 fragTexCoords;
varying vec3 worldPos;
varying vec4 shadowMapCoords;
varying mat3 tbnMatrix;

uniform mat4 modelMatrix;
uniform mat4 MVPMatrix;
uniform mat4 lightMatrix;

void main() {
    gl_Position = MVPMatrix * vec4(position, 1);
    fragTexCoords = texCoord;
    shadowMapCoords = lightMatrix * vec4(position, 1);
    worldPos = (modelMatrix * vec4(position, 1)).xyz;

    vec3 n = normalize((modelMatrix * vec4(normal, 0)).xyz);
    vec3 t = normalize((modelMatrix * vec4(tangent, 0)).xyz);
    t = normalize(t - dot(t, n) * n);

    vec3 biTangent = cross(t, n);
    tbnMatrix = mat3(t, biTangent, n);
}
以及生成的片段着色器:

#version 120

varying vec2 fragTexCoords;
varying vec3 worldPos;
varying vec4 shadowMapCoords;
varying mat3 tbnMatrix;

uniform Material material;
uniform Light light;
uniform vec3 eyePos;

uniform sampler2D shadowMap;
uniform float shadowVarianceMin;
uniform float shadowLightBleedReduction;

bool inRange(float value) {
    return value >= 0 && value <= 1;
}

float linStep(float low, float high, float v) {
    return clamp((v - low) / (high - low), 0, 1);
}

vec2 calcParallaxTexCoords(sampler2D dispMap, mat3 tbnMatrix, vec3 directionToEye, vec2 texCoords, float scale, float bias) {
    return texCoords.xy + (directionToEye * tbnMatrix).xy * (texture2D(dispMap, texCoords.xy).r * scale + bias);
}

float sampleShadowMap(sampler2D shadowMap, vec2 coords, float compare) {
    return step(compare, texture2D(shadowMap, coords.xy).r);
}

float sampleVarianceShadowMap(sampler2D shadowMap, vec2 coords, float compare, float varianceMin, float lightBleedReduction) {
    vec2 moments = texture2D(shadowMap, coords.xy).xy;

    float p = step(compare, moments.x);
    float variance = max(moments.y - moments.x * moments.x, varianceMin);

    float d = compare - moments.x;
    float pMax = linStep(lightBleedReduction, 1, variance / (variance + d * d));

    return min(max(p, pMax), 1);
}

struct Light {
    vec3 color;
    float intensity;
    vec3 direction;
};

struct Material {
    float roughness;
    float fresnelReflectance;

    sampler2D diffuseTexture;
    sampler2D normalMap;
    sampler2D dispMap;

    float dispMapScale;
    float dispMapBias;
};

vec3 calcLight(Light light, Material material, vec3 surfaceNormal, vec3 eyePos, vec3 diffuseColor, vec3 specularColor) {
    vec3 halfVector     = normalize(light.direction + eyePos);
    float NdotL         = clamp(dot(surfaceNormal, light.direction),    0.0, 1.0);
    float NdotH         = clamp(dot(surfaceNormal, halfVector),         0.0, 1.0);
    float NdotV         = clamp(dot(surfaceNormal, eyePos),             0.0, 1.0);
    float VdotH         = clamp(dot(eyePos, halfVector),                0.0, 1.0);
    float rSq           = material.roughness * material.roughness;

    // ----- Fresnel term -----
    float fresnel = pow(1 - VdotH, 5.0);
    fresnel *= 1 - material.fresnelReflectance;
    fresnel += material.fresnelReflectance;

    // ----- Geometric attenuation term -----
    float geoNum = 2.0 * NdotV;
    float geoB   = (geoNum * NdotV) / VdotH;
    float geoC   = (geoNum * NdotL) / VdotH;
    float geo    = min(1.0, min(geoB, geoC));

    // ----- Roughness term -----
    float roughnessA = rSq * pow(NdotH, 4.0);
    float roughnessB = (NdotH * NdotH - 1.0) / (rSq * NdotH * NdotH);
    float roughness = 1.0 / roughnessA * exp(roughnessB);

    // ----- Cook-Torrance calculation -----
    vec3 specular = vec3(fresnel * roughness * geo) / (NdotV * NdotL);

    return max(0.0, NdotL) * (specularColor * specular + diffuseColor);
}

float calcShadowAmount(sampler2D shadowMap, vec4 initialShadowMapCoords) {
    vec3 shadowMapCoords = (initialShadowMapCoords.xyz / initialShadowMapCoords.w);

    if (inRange(shadowMapCoords.x) && inRange(shadowMapCoords.y) && inRange(shadowMapCoords.z)) {
        return sampleVarianceShadowMap(shadowMap, shadowMapCoords.xy, shadowMapCoords.z, shadowVarianceMin, shadowLightBleedReduction);
    } else {
        return 1.0;
    }
}

float calcBasicShadowAmount(sampler2D shadowMap, vec4 initialShadowMapCoords) {
    vec3 shadowMapCoords = (initialShadowMapCoords.xyz / initialShadowMapCoords.w);

    return sampleShadowMap(shadowMap, shadowMapCoords.xy, shadowMapCoords.z);
}

void main() {
    vec3 directionToEye = normalize(eyePos - worldPos);
    vec2 texCoords = calcParallaxTexCoords(dispMap, tbnMatrix, directionToEye, fragTexCoords, dispMapScale, dispMapBias);
    vec3 normal = normalize(tbnMatrix * (255.0 / 128.0 * texture2D(normalMap, texCoords).xyz - 1));

    gl_FragColor = calcLight(light, material, normal, eyePos, texture2D(diffuse, texCoords), vec3(1, 1, 1));
}
#版本120
不同的vec2框架;
可变vec3-worldPos;
变化多端的vec4暗影信使;
变化的mat3 TBN矩阵;
均匀的材料;
均匀光照;
均匀vec3眼位;
均匀采样二维阴影图;
均匀漂浮;
均匀浮动阴影光发射;
bool inRange(浮动值){

返回值>=0&&valueGLSL错误报告约定是特定于供应商的,因此很难解析。但是,在这种情况下,
0:8(18):错误:语法错误,意外的新\u标识符,预期“{”
指的是行8,字符18

如果查看片段着色器,在第8行中有以下内容: 这里的问题是您尚未定义
材料的结构

您需要将这些
结构
移动到
制服之前

GLSL错误报告约定是特定于供应商的,因此很难解析。但是,在这种情况下,
0:8(18):错误:语法错误,意外的新\u标识符,期望“{'
引用行8,字符18

如果查看片段着色器,在第8行中有以下内容: 这里的问题是您尚未定义
材料的结构

您需要将这些
结构
移动到
制服之前

这是生成的代码中的语法错误。如果不查看生成的代码或它是如何创建的,则无法帮助您。请至少包含生成的代码,好吗?请查看输入着色器源函数的输出。好的,我已将生成的代码添加到问题中。希望这有帮助!有问题的行似乎是<代码>统一材料;
我怀疑这是因为材料的
结构发生在
统一
声明之后。这是生成的代码中的语法错误。如果不查看生成的代码或如何创建代码,就无法帮到您。请至少包含生成的代码,好吗?查看输入着色器源函数的输出。好的,我已将生成的代码添加到问题中。希望这有帮助!有问题的行似乎是
uniform Material Material;
,我怀疑这是因为
struct
for Material发生在声明
uniform
之后。
uniform Material material;
                 ^ char. 18
struct Light {
    vec3 color;
    float intensity;
    vec3 direction;
};

struct Material {
    float roughness;
    float fresnelReflectance;

    sampler2D diffuseTexture;
    sampler2D normalMap;
    sampler2D dispMap;

    float dispMapScale;
    float dispMapBias;
};