You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DirectX 11编译Geometry Shader报错X3514缺少最大顶点计数如何解决

错误X3514根因

DirectX的HLSL几何着色器强制要求显式声明最大输出顶点数、输入图元类型、输出图元类型三类属性,你当前代码缺少这些声明,且几何着色器的函数签名规则和顶点/像素着色器不同,不能直接单入单出。

修复后的完整着色器代码

////////////////////////////////////////////////////////////////////////////////
// Filename: light.gs
////////////////////////////////////////////////////////////////////////////////


//////////////
// TYPEDEFS //
//////////////
struct GeometryInputType
{
    float4 position : POSITION;
    float2 tex : TEXCOORD0;
    float3 normal : NORMAL;
};

struct PixelInputType
{
    float4 position : SV_POSITION;
    float2 tex : TEXCOORD0;
    float3 normal : NORMAL;
};


////////////////////////////////////////////////////////////////////////////////
// Geometry Shader
////////////////////////////////////////////////////////////////////////////////
// 声明单个GS实例最多输出3个顶点(和输入三角形顶点数一致,满足直通场景需求)
[maxvertexcount(3)]
void LightGeometryShader(
    // 声明输入图元为三角形,对应输入是长度为3的顶点数组
    triangle GeometryInputType input[3],
    // 声明输出为三角形流,输出顶点格式为PixelInputType
    inout TriangleStream<PixelInputType> OutputStream
)
{
    PixelInputType output;
    
    // 原样输出输入的3个顶点,实现直通逻辑
    for(uint i = 0; i < 3; ++i)
    {
        output.position = input[i].position;
        output.tex = input[i].tex;
        output.normal = input[i].normal;
        OutputStream.Append(output);
    }
    // 输出完一个三角形后重启条带
    OutputStream.RestartStrip();
}

核心配置说明

  • [maxvertexcount(N)]:报错要求的必填属性,N根据你的业务逻辑设置,如果你需要对每个输入三角形额外生成顶点,就把N改成对应最大值即可,例如做法线可视化需要每个三角形生成6个顶点展示法线,就填6。
  • 输入图元前缀:可选值包括point(点,输入数组长度1)、line(线,输入数组长度2)、triangle(三角形,输入数组长度3)等,和输入装配阶段的图元拓扑对应即可。
  • 输出流类型:如果输出线就用LineStream,输出点就用PointStream,输出三角形就用TriangleStream。

内容的提问来源于stack exchange,提问作者Mi Po

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:45:08