首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vulkan:使用没有gl_PrimitiveID特性的geometryShader

Vulkan:使用没有gl_PrimitiveID特性的geometryShader
EN

Computer Graphics用户
提问于 2019-12-28 13:13:09
回答 1查看 886关注 0票数 1

在编译使用glslc编译器读取gl_PrimitiveID的glsl片段着色器时,我获得了启用几何功能的spirv-1.0,这在技术上是正确的,正如螺旋规范中所述。Vulkan1.0规范指出,如果启用了geometryShader功能,必须支持几何功能。

因此,我假设,除非启用了geometryShader,否则就不能使用gl_PrimitiveID。具体来说,在gl_PrimitiveID上使用moltenVK是不可能的,因为它不支持这个特性,不是吗?

在我的管道中,我使用gl_PrimitiveID从全局ssbo中获取每个面的数据,并将face呈现为附件以供以后重用。如果没有gl_PrimitiveID,是否有可能达到类似的效果?

EN

回答 1

Computer Graphics用户

回答已采纳

发布于 2019-12-29 17:02:11

在某种程度上,生成gl_PrimitiveID的机制似乎是基于使几何着色成为可能的硬件。

OpenGL ES 3.1包含计算着色器,但不包含几何着色器(或镶嵌)。但它没有gl_PrimitiveID。相反,ES3.2包含GS和gl_PrimitiveID。桌面OpenGL 3.1vs.3.2和它的GS功能也是如此。拥有GS和能够识别序列中的原语似乎是同一通用功能的一部分。

在我的管道中,我使用gl_PrimitiveID从全局ssbo中获取每个面的数据,并将face呈现为附件以供以后重用。

没有硬件功能,就没有计算原语计数的通用方法。只有针对具体情况的具体解决办法。

例如,如果您使用三角形列表的非索引呈现,那么您可以使用gl_VertexID / 3来计算一个基本ID。显然,这是一个非常严格的限制,但在这种情况下可以工作。

您还可以为每个顶点提供一个每个顶点的面ID。VS将使用flat插值输出此值。通过仔细地将脸ID与基元拓扑的触发顶点匹配,可以有效地将脸ID分配给脸。这对索引三角形列表最有效,因为您可以更多地使用三角形中的索引顺序,而不是条带。基本上,你必须决定哪个顶点映射到哪个面,并确保该面使用这个顶点作为第一个顶点。

票数 1
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/9449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档