gpt4 book ai didi

c - OpenGL 扩展,如何在 C 和 glsl 中正确使用它们

转载 作者:太空狗 更新时间:2023-10-29 17:23:00 28 4
gpt4 key购买 nike

我正在开发一个游戏引擎,它已经有了很大的发展。因为引擎也需要在 mac 上工作,所以我仍在使用 OpenGL 3.2 和 GLSL 1.2 :-(。我使用 GLEW,我认为它可以为我解决扩展问题。

编辑:与此同时,部分问题得到了回答 - 在下一个编辑中继续阅读:

我总是能够让着色器在 windows 和 mac 上工作,有时我必须在 GLSL 代码中添加一行,如 #extension GL_EXT_gpu_shader4 : enable 以使其在 Mac 上工作。然后似乎我的Windows版本在编译相同的着色器时会发出警告,但它会起作用。

但是自从我开始使用几何着色器后,我的噩梦就开始了。出于某种原因,mac 希望我使用 #extension GL_EXT_gpu_shader4 : enable 而 windows 希望我使用 #extension GL_EXT_geometry_shader4 : enable。这使得创建独立于平台的着色器变得不那么明显。

还有,这更烦人:Windows 版本要我使用:glTransformFeedbackVaryings 并且我认为 GLEW 会让它在 Mac 上可用,但我明确需要使用 glTransformFeedbackVaryingsEXT,它在 Windows 上不起作用版本。所以我需要为 APPLE #ifdef 以使用所需的内容。glBeginTransformFeedbackglBeginTransformFeedbackEXT 也有同样的问题。

但是两者都接受glProgramParameteriEXT,我不需要区分...

我知道只有转换反馈才是我遇到的问题,但是......这是怎么回事?

我以为我了解 OpenGL 扩展的工作原理,但我开始失去这种理解。

我认为当我在另一个 windows 系统或另一个 mac 系统或另一个 linux 系统上运行代码时,我会遇到新的问题,因为有不同的图形适配器或其他东西。

谁能帮我理解这个?我已经阅读了关于扩展的 OpenGL 手册,所以我遗漏了一些明显的东西。如何确保我的代码始终有效?

编辑:通过从 Mac 版本中完全删除 GLEW 并完全使用 Mac 自己的 OpenGL 3.2 实现,所有命名都是正常的,我可以从我的着色器中完全删除 #extension GL_EXT_gpu_shader4 : enable。现在唯一让我担心的是,对于几何着色器,我需要函数 glProgramParameteri,它似乎不存在,但 glProgramParameteriEXT 确实存在。出于某种原因,此功能也适用于 Windows。为什么?我能确定它适用于所有系统/硬件吗?

最佳答案

EXT 表示您正在使用几何着色器的扩展。这也适用于 Windows。几何着色器应该是 OpenGL 3.2 中的核心功能,但现在您正在使用扩展(基本上您使用的是旧 OpenGL 版本的功能,而不是实际的 3.2)。要使用核心几何着色器,您必须切换到 GLSL 1.5。

我不太精通 OpenGL,但我的假设是,如果您开始使用核心功能,实际上不再需要 glProgramParameteri(),这就是库头文件中缺少它的原因。

关于c - OpenGL 扩展,如何在 C 和 glsl 中正确使用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15107521/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com