我正在做一个基于BGFX的项目,我试图用片段着色器定义BGFX在OpenGL或DirectX中运行。
gl_FragColor = texture2D(color_tex, UV0);
我需要此信息来访问纹理,因为GL和DirectX之间的纹理坐标(UV0)不同。我可以为这两个API创建着色器的特定版本,但必须有最聪明的方法来处理这一点。我查阅了BGFX文档,但找不到任何关于这一点的信息。
UV0
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
1条答案
按热度按时间eh57zj3b1#
BGFX提供了一系列宏,使着色器预处理器知道它在什么上下文中工作。你可以在这里找到一个例子:https://github.com/bkaradzic/bgfx/blob/69fb21f50e1136d9f3828a134bb274545b4547cb/examples/41-tess/matrices.sh#L22
在您的示例中,您的SL代码可能如下所示: