我如何从BGFX着色器内部知道它正在OpenGL API上运行?

vx6bjr1n  于 2022-09-26  发布在  其他
关注(0)|答案(1)|浏览(172)

我正在做一个基于BGFX的项目,我试图用片段着色器定义BGFX在OpenGL或DirectX中运行。

gl_FragColor = texture2D(color_tex, UV0);

我需要此信息来访问纹理,因为GL和DirectX之间的纹理坐标(UV0)不同。我可以为这两个API创建着色器的特定版本,但必须有最聪明的方法来处理这一点。我查阅了BGFX文档,但找不到任何关于这一点的信息。

  • 此外,BGFX抽象这类API的全部意义不就是不同吗?*
eh57zj3b

eh57zj3b1#

BGFX提供了一系列宏,使着色器预处理器知道它在什么上下文中工作。你可以在这里找到一个例子:https://github.com/bkaradzic/bgfx/blob/69fb21f50e1136d9f3828a134bb274545b4547cb/examples/41-tess/matrices.sh#L22

在您的示例中,您的SL代码可能如下所示:


# if BGFX_SHADER_LANGUAGE_GLSL

    vec2 UV0_corrected = vec2(1.0, 1.0) + vec2(-1.0, -1.0) * UV0;

# else

    vec2 UV0_corrected = vec2(1.0, 0.0) + vec2(-1.0, 1.0) * UV0;

# endif

相关问题