着色器代码的 MIME 类型

Posted

技术标签:

【中文标题】着色器代码的 MIME 类型【英文标题】:MIME type for shader code 【发布时间】:2015-05-10 21:39:45 【问题描述】:

对于 OpenGL 着色器程序源代码,是否有任何已建立的 MIME 类型?我知道official IANA table 似乎没有提到这样一个,所以它必须是一些实验性的(x-…)或一些特定于供应商的(vnd.…)子类型,可能是text/… 主要类型。根据What is the correct file extension for GLSL shaders? 的说法,这些文件似乎甚至没有既定的文件扩展名,但这对我来说是一个完全不同的问题。

背景: 我有时想在某些 WebGL 应用程序的 <script> 标记中包含着色器代码,并且我想以语义上尽可能合理的方式编写该标记的 type= 属性,即使目前我不能没想到这样的选择会产生任何实际差异(除非我称它为text/javascript 或类似愚蠢的东西)。但是,如果能够在我尚不了解的当前既定标准的基础上遵循可能随着时间推移而开发的任何工具,那就太好了。

【问题讨论】:

规范要求 UTF-8 编码的 Unicode,text/plain 听起来很合理,可能会仔细检查服务器是否在 HTTP 标头中发送 charset=utf-8 【参考方案1】:

Khronos 编写的 glTF 标准草案规定将 text/plain 用于 GLSL 文件。

【讨论】:

【参考方案2】:

我在使用 fetch API 时在 IIS 中提供 GLSL 文件时遇到问题。为了正确地从 IIS 提供 GLSL 文件,我必须为 MIME 类型添加一个 .glsl 文件扩展名:

    打开 IIS 并导航到您的站点 双击 MIME 类型(位于日志记录和模块之间) 在右侧面板的“操作”下方,点击“添加...” 在“文件扩展名:”下输入“glsl” 在“MIME 类型:”下输入“text/plain”

如果您收到“此文件扩展名的 MIME 类型已存在”的错误消息,请关闭“添加 MIME 类型”窗口并滚动文件扩展名,直到找到 .glsl 扩展名。确保 MIME 类型为“文本/纯文本”。如果是,并且当您请求 glsl 文件时 IIS 仍在服务 404 页面,那么您就不走运了:\

【讨论】:

我不确定这是否是写这个答案的地方......这是当我用谷歌搜索“iis glsl”来解决这个问题时弹出的第二个网站......我没有找到任何东西来修复不提供 .glsl 文件的 IIS。我只是希望我能帮助别人。【参考方案3】:

以下网站更详细地解释了如何添加自定义 MIME 类型:https://www.xsofthost.com/help/add-and-delete-mime-type-within-cpanel/

this link,Krhonos 文档状态:

文件扩展名和 MIME 类型

外部着色器文件可以有任何扩展名。首选 MIME 类型是 text/plain

(但是,我仍然在 Chrome 和 Edge 中看到带有着色器文件的错误 - 具体而言,“加载模块脚本失败:需要一个 JavaScript 模块脚本,但服务器以“text/plain”的 MIME 类型响应。严格的 MIME 类型根据 html 规范对模块脚本执行检查。" vertex.glsl:1)

【讨论】:

以上是关于着色器代码的 MIME 类型的主要内容,如果未能解决你的问题,请参考以下文章

oc渲染器提示着色器失败

Unity Shader的形式

将 UInt8 组件类型的纹理传递给 Metal 计算着色器

在CG/HLSL中访问着色器的内容

使用几何着色器创建新的基元类型

“字节码”而不是硬编码着色器性能