Opengl GLSL版本错误
作为我项目的一部分,我必须在opengl窗口中显示动画3d模型 我在上找到了一个用于此目的的示例代码 我成功地编译了代码,但在运行时出现以下错误Opengl GLSL版本错误,opengl,glsl,shader,Opengl,Glsl,Shader,作为我项目的一部分,我必须在opengl窗口中显示动画3d模型 我在上找到了一个用于此目的的示例代码 我成功地编译了代码,但在运行时出现以下错误 Status: VSmain shader compiled with errors Compilation details for VSmain shader: 0:3(1): error: syntax error, unexpected VERSION Status: FSmain shader compiled with er
Status: VSmain shader compiled with errors
Compilation details for VSmain shader:
0:3(1): error: syntax error, unexpected VERSION
Status: FSmain shader compiled with errors
Compilation details for FSmain shader:
0:3(1): error: syntax error, unexpected VERSION
Status: Link failed
Linkage details:
linking with uncompiled shaderlinking with uncompiled shader
Errors in shader compilation
Error initializing the lighting technique
同时也是为了
printf("%s \n",glGetString(GL_SHADING_LANGUAGE_VERSION));
它正在返回null
我觉得这个错误与skinning.glsl文件有关,如下所示
#version 120
#define VERTEX_IN attribute
const int MAX_POINT_LIGHTS = 2;
const int MAX_SPOT_LIGHTS = 2;
struct VSInput
{
vec3 Position;
vec2 TexCoord;
vec3 Normal;
ivec4 BoneIDs;
vec4 Weights;
};
interface VSOutput
{
vec2 TexCoord;
vec3 Normal;
vec3 WorldPos;
};
struct VSOutput1
{
vec2 TexCoord;
vec3 Normal;
vec3 WorldPos;
};
const int MAX_BONES = 100;
uniform mat4 gWVP;
uniform mat4 gWorld;
uniform mat4 gBones[MAX_BONES];
shader VSmain(in VSInput VSin:0, out VSOutput VSout)
{
mat4 BoneTransform = gBones[VSin.BoneIDs[0]] * VSin.Weights[0];
BoneTransform += gBones[VSin.BoneIDs[1]] * VSin.Weights[1];
BoneTransform += gBones[VSin.BoneIDs[2]] * VSin.Weights[2];
BoneTransform += gBones[VSin.BoneIDs[3]] * VSin.Weights[3];
vec4 PosL = BoneTransform * vec4(VSin.Position, 1.0);
gl_Position = gWVP * PosL;
VSout.TexCoord = VSin.TexCoord;
vec4 NormalL = BoneTransform * vec4(VSin.Normal, 0.0);
VSout.Normal = (gWorld * NormalL).xyz;
VSout.WorldPos = (gWorld * PosL).xyz;
}
const int MAX_POINT_LIGHTS = 2;
const int MAX_SPOT_LIGHTS = 2;
struct BaseLight
{
vec3 Color;
float AmbientIntensity;
float DiffuseIntensity;
};
struct DirectionalLight
{
struct BaseLight Base;
vec3 Direction;
};
struct Attenuation
{
float Constant;
float Linear;
float Exp;
};
struct PointLight
{
struct BaseLight Base;
vec3 Position;
Attenuation Atten;
};
struct SpotLight
{
struct PointLight Base;
vec3 Direction;
float Cutoff;
};
uniform int gNumPointLights;
uniform int gNumSpotLights;
uniform DirectionalLight gDirectionalLight;
uniform PointLight gPointLights[MAX_POINT_LIGHTS];
uniform SpotLight gSpotLights[MAX_SPOT_LIGHTS];
uniform sampler2D gColorMap;
uniform vec3 gEyeWorldPos;
uniform float gMatSpecularIntensity;
uniform float gSpecularPower;
vec4 CalcLightInternal(struct BaseLight Light, vec3 LightDirection, VSOutput1 In)
{
vec4 AmbientColor = vec4(Light.Color, 1.0f) * Light.AmbientIntensity;
float DiffuseFactor = dot(In.Normal, -LightDirection);
vec4 DiffuseColor = vec4(0, 0, 0, 0);
vec4 SpecularColor = vec4(0, 0, 0, 0);
if (DiffuseFactor > 0) {
DiffuseColor = vec4(Light.Color, 1.0f) * Light.DiffuseIntensity * DiffuseFactor;
vec3 VertexToEye = normalize(gEyeWorldPos - In.WorldPos);
vec3 LightReflect = normalize(reflect(LightDirection, In.Normal));
float SpecularFactor = dot(VertexToEye, LightReflect);
SpecularFactor = pow(SpecularFactor, gSpecularPower);
if (SpecularFactor > 0) {
SpecularColor = vec4(Light.Color, 1.0f) *
gMatSpecularIntensity * SpecularFactor;
}
}
return (AmbientColor + DiffuseColor + SpecularColor);
}
vec4 CalcDirectionalLight(VSOutput1 In)
{
return CalcLightInternal(gDirectionalLight.Base, gDirectionalLight.Direction, In);
}
vec4 CalcPointLight(struct PointLight l, VSOutput1 In)
{
vec3 LightDirection = In.WorldPos - l.Position;
float Distance = length(LightDirection);
LightDirection = normalize(LightDirection);
vec4 Color = CalcLightInternal(l.Base, LightDirection, In);
float Attenuation = l.Atten.Constant +
l.Atten.Linear * Distance +
l.Atten.Exp * Distance * Distance;
return Color / Attenuation;
}
vec4 CalcSpotLight(struct SpotLight l, VSOutput1 In)
{
vec3 LightToPixel = normalize(In.WorldPos - l.Base.Position);
float SpotFactor = dot(LightToPixel, l.Direction);
if (SpotFactor > l.Cutoff) {
vec4 Color = CalcPointLight(l.Base, In);
return Color * (1.0 - (1.0 - SpotFactor) * 1.0/(1.0 - l.Cutoff));
}
else {
return vec4(0,0,0,0);
}
}
shader FSmain(in VSOutput FSin, out vec4 FragColor)
{
VSOutput1 In;
In.TexCoord = FSin.TexCoord;
In.Normal = normalize(FSin.Normal);
In.WorldPos = FSin.WorldPos;
vec4 TotalLight = CalcDirectionalLight(In);
for (int i = 0 ; i < gNumPointLights ; i++) {
TotalLight += CalcPointLight(gPointLights[i], In);
}
for (int i = 0 ; i < gNumSpotLights ; i++) {
TotalLight += CalcSpotLight(gSpotLights[i], In);
}
FragColor = texture(gColorMap, In.TexCoord.xy) * TotalLight;
}
program Lighting
{
vs(120)=VSmain();
fs(120)=FSmain();
};
#版本120
#在属性中定义顶点
const int MAX_POINT_LIGHTS=2;
const int MAX_SPOT_LIGHTS=2;
结构VSInput
{
vec3位置;
vec2-TexCoord;
vec3正常;
伊维茨博奈德;
vec4权重;
};
接口输出
{
vec2-TexCoord;
vec3正常;
vec3-WorldPos;
};
结构VSOutput1
{
vec2-TexCoord;
vec3正常;
vec3-WorldPos;
};
常量int MAX_BONES=100;
统一mat4 gWVP;
统一mat4 gWorld;
均匀的mat4骨[最大骨];
着色器VSmain(输入VSin:0,输出VSout VSout)
{
mat4 BonetTransform=gBones[VSin.BoneIDs[0]]*VSin.Weights[0];
BoneTransform+=gBones[VSin.BoneIDs[1]]*VSin.Weights[1];
BoneTransform+=gBones[VSin.BoneIDs[2]]*VSin.Weights[2];
BoneTransform+=gBones[VSin.BoneIDs[3]]*VSin.Weights[3];
vec4 PosL=骨转换*vec4(VSin.Position,1.0);
gl_位置=gWVP*PosL;
VSout.TexCoord=VSin.TexCoord;
vec4 NormalL=BoneTransform*vec4(VSin.Normal,0.0);
VSout.Normal=(gWorld*NormalL).xyz;
VSout.WorldPos=(gWorld*PosL).xyz;
}
const int MAX_POINT_LIGHTS=2;
const int MAX_SPOT_LIGHTS=2;
结构基本光
{
vec3颜色;
漂浮环境强度;
漂浮扩散强度;
};
结构定向光
{
结构基础灯基础;
vec3方向;
};
结构衰减
{
浮动常数;
浮动线性;
浮动汇率;
};
结构点光源
{
结构基础灯基础;
vec3位置;
衰减阿滕;
};
结构聚光灯
{
结构点光源底座;
vec3方向;
浮动截止;
};
统一的灯光;
统一的聚光灯;
均匀定向光;
均匀点光源gPointLights[最大点光源];
均匀聚光灯[最大聚光灯];
均匀采样二维gColorMap;
统一vec3 gEyeWorldPos;
均匀浮动GMAT特殊强度;
均匀浮动gSpecularPower;
vec4 CalcLightInternal(结构基本灯光、vec3灯光方向、VSOutput1英寸)
{
vec4-AmbientColor=vec4(Light.Color,1.0f)*Light.AmbientIntensity;
浮动扩散因子=点(在正常方向,-光方向);
vec4 DiffuseColor=vec4(0,0,0,0);
vec4镜面颜色=vec4(0,0,0,0);
如果(扩散因子>0){
DiffuseColor=vec4(Light.Color,1.0f)*Light.DiffuseIntensity*扩散因子;
vec3 VertextoPeye=标准化(gEyeWorldPos-In.WorldPos);
vec3 LightReflect=规格化(反射(光方向,In.法线));
浮动镜面反射因子=点(垂直、光反射);
SpecularFactor=功率(SpecularFactor,GSSpecularPower);
如果(镜面反射因子>0){
镜面颜色=vec4(Light.Color,1.0f)*
gMatSpecularIntensity*镜面反射因子;