glslc中的Crptic错误:语法错误,意外的浮点常量,应为右参数

glslc中的Crptic错误:语法错误,意外的浮点常量,应为右参数,glsl,Glsl,我在一些着色器中到处使用此复杂类型,最后,我得到以下错误: glslangValidator -S comp help.glsl help.glsl:14:错误:“”:语法错误,意外的FLOATCONSTANT,应为右参数 生成1个错误 这里有一台复制机: #version 460 struct cmplx { float re; float im; }; cmplx fresnel_cont_frac(float ax) { const float pi = 3.1415

我在一些着色器中到处使用此复杂类型,最后,我得到以下错误:

glslangValidator -S comp help.glsl
help.glsl:14:错误:“”:语法错误,意外的FLOATCONSTANT,应为右参数 生成1个错误

这里有一台复制机:

#version 460

struct cmplx {
  float re;
  float im;
};

cmplx
fresnel_cont_frac(float ax)
{
    const float pi = 3.1415926535897932384626433832795;

    const float pix2 = pi * ax * ax;
    cmplx b(1.0, -pix2);

    return b;
}

放大是
b
的构造函数。我被难住了。

您没有为cmplx声明任何构造函数,我也不确定您是否可以为GLSL中的结构声明构造函数。请尝试以下方法:

#version 460
struct cmplx
    {
    float re;
    float im;
    };
cmplx ld(float re,float im){ cmplx c; c.re=re; c.im=im; return c; }

cmplx fresnel_cont_frac(float ax)
    {
    const float pi = 3.1415926535897932384626433832795;
    const float pix2 = pi * ax * ax;
    cmplx b=ld(1.0, -pix2);
    return b;
    }

您没有为cmplx声明任何构造函数,我也不确定您是否可以为GLSL中的结构声明构造函数。请尝试以下方法:

#version 460
struct cmplx
    {
    float re;
    float im;
    };
cmplx ld(float re,float im){ cmplx c; c.re=re; c.im=im; return c; }

cmplx fresnel_cont_frac(float ax)
    {
    const float pi = 3.1415926535897932384626433832795;
    const float pix2 = pi * ax * ax;
    cmplx b=ld(1.0, -pix2);
    return b;
    }

不能在GLSL中使用C++样式的构造函数。您必须使用args显式调用结构名称并赋值(或创建一个构造函数,如上面提到的@Spektre):


不能在GLSL中使用C++样式的构造函数。您必须使用args显式调用结构名称并赋值(或创建一个构造函数,如上面提到的@Spektre):