Opengl GLSL着色器语法错误预处理器指令后出现意外标记-应为换行符

Opengl GLSL着色器语法错误预处理器指令后出现意外标记-应为换行符,opengl,vertex-shader,gameplay3d,Opengl,Vertex Shader,Gameplay3d,我试图修改从GamePlay3d示例中获取的着色器“textured.vert”,但出现以下错误: 错误:0:108:'':语法错误不正确的预处理器指令 错误:0:108:'':语法错误-在 预处理器指令-应为换行符错误:0:112:“”: 语法错误不正确的预处理器指令错误:0:112:“”: 语法错误预处理器指令后出现意外标记- 应为换行符错误:0:120:'':语法错误不正确 预处理器指令错误:0:120:'':语法错误意外 遵循预处理器指令的标记-应为换行符 编辑:如果还原前12行,则有效

我试图修改从GamePlay3d示例中获取的着色器“textured.vert”,但出现以下错误:

错误:0:108:'':语法错误不正确的预处理器指令
错误:0:108:'':语法错误-在 预处理器指令-应为换行符
错误:0:112:“”: 语法错误不正确的预处理器指令
错误:0:112:“”: 语法错误预处理器指令后出现意外标记- 应为换行符
错误:0:120:'':语法错误不正确 预处理器指令
错误:0:120:'':语法错误意外 遵循预处理器指令的标记-应为换行符

编辑:如果还原前12行,则有效!: 修改的着色器的代码:

#ifndef DIRECTIONAL_LIGHT_COUNT
#define DIRECTIONAL_LIGHT_COUNT 0
#endif
#if (DIRECTIONAL_LIGHT_COUNT > 0)
#define LIGHTING
#endif

///////////////////////////////////////////////////////////
// Atributes
attribute vec3 a_position;

#if defined(LIGHTING)

#if defined(BUMPED)
attribute vec3 a_tangent;
attribute vec3 a_binormal;
#endif

#endif

///////////////////////////////////////////////////////////
// Uniforms
uniform mat4 u_worldViewProjectionMatrix;

#if defined(LIGHTING)
uniform mat4 u_inverseTransposeWorldViewMatrix;

#if defined(SPECULAR)
uniform mat4 u_worldViewMatrix;
#endif

#if defined(BUMPED) && (DIRECTIONAL_LIGHT_COUNT > 0)
uniform vec3 u_directionalLightDirection[DIRECTIONAL_LIGHT_COUNT];
#endif

#if defined(SPECULAR)
uniform vec3 u_cameraPosition;
#endif

#endif

#if defined(TEXTURE_OFFSET)
uniform vec2 u_textureOffset;
#endif

///////////////////////////////////////////////////////////
// Varyings
varying vec3 v_texCoord;

#if defined(LIGHTING)

#if !defined(BUMPED)
varying vec3 v_normalVector;
#endif

#if defined(BUMPED) && (DIRECTIONAL_LIGHT_COUNT > 0)
varying vec3 v_directionalLightDirection[DIRECTIONAL_LIGHT_COUNT];
#endif

#if defined(SPECULAR)
varying vec3 v_cameraDirection;
#endif

#include "lighting.vert"

#endif

void main()
{
    vec4 position = vec4(a_position, 1.0);
    gl_Position = u_worldViewProjectionMatrix * position;

    #if defined(LIGHTING)
    vec3 normal = a_position;
    // Transform the normal, tangent and binormals to view space.
    mat3 inverseTransposeWorldViewMatrix = mat3(u_inverseTransposeWorldViewMatrix[0].xyz, u_inverseTransposeWorldViewMatrix[1].xyz, u_inverseTransposeWorldViewMatrix[2].xyz);
    vec3 normalVector = normalize(inverseTransposeWorldViewMatrix * normal);

    #if defined(BUMPED)

    vec3 tangent = a_tangent;
    vec3 binormal = a_binormal;
    vec3 tangentVector  = normalize(inverseTransposeWorldViewMatrix * tangent);
    vec3 binormalVector = normalize(inverseTransposeWorldViewMatrix * binormal);
    mat3 tangentSpaceTransformMatrix = mat3(tangentVector.x, binormalVector.x, normalVector.x, tangentVector.y, binormalVector.y, normalVector.y, tangentVector.z, binormalVector.z, normalVector.z);
    applyLight(position, tangentSpaceTransformMatrix);

    #else

    v_normalVector = normalVector;
    applyLight(position);

    #endif

    #endif

    v_texCoord = position;

    #if defined(TEXTURE_OFFSET)
    v_texCoord += u_textureOffset;
    #endif
}

问题是,在lighting.vert中使用常量SPOT_LIGHT_COUNT和POINT_LIGHT_COUNT

例如照明。垂直:46

#if (POINT_LIGHT_COUNT > 0)
当无法替换点计数时,将不会编译


您可以像在原始文件中一样定义这两个常量,也可以在照明中清理对它们的引用。vert

您确定这就是您要编译的着色器吗?它有102行,报告的错误在第108行、第112行和第120行。您有这个
#包括“lighting.vert”
,那么里面有什么呢?如何处理着色器包含(以及整个着色器加载)?#包含由Gameplay3Ds着色器实用程序处理。谢谢!之前已经注释掉了
/#include“lighting.vert”
,但得到了相同的错误。将此行替换为“lighting.vert”内容,然后修复它。为什么评论不起作用?#包含不是glsl标准的一部分。注释不起作用的原因取决于着色器加载程序如何搜索和替换它们。
#if (POINT_LIGHT_COUNT > 0)