Opengl GLSL中的语法错误-意外的新\u标识符
我一直在编写一种着色语言,旨在简化GLSL的编写。因此,我不能真正依赖GLSL编译器给出的行号。因此,我无法找到这个错误想要说什么。首先它意味着什么,然后我如何修复它 错误代码:Opengl GLSL中的语法错误-意外的新\u标识符,opengl,syntax,glsl,Opengl,Syntax,Glsl,我一直在编写一种着色语言,旨在简化GLSL的编写。因此,我不能真正依赖GLSL编译器给出的行号。因此,我无法找到这个错误想要说什么。首先它意味着什么,然后我如何修复它 错误代码: 0:8(18): error: syntax error, unexpected NEW_IDENTIFIER, expecting '{' 我相信这只是意味着生成的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;
};