首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将sampler2D从glsl转换成金属?

如何将sampler2D从glsl转换成金属?
EN

Stack Overflow用户
提问于 2020-08-05 12:37:23
回答 1查看 460关注 0票数 1

我正试图将glsl着色器转换成金属材质,尽管网上有很多备忘单和教程,但我还是想不出如何处理sampler2Dtexture电话。备忘单包含了很多内容,但是在关于取样器的一节中,它并没有显示出定义采样器本身(就类型而言)。我的下一个尝试是采用MoltenVK,并尝试将带有取样器的小型glsl着色器转换为金属,看看它是如何处理的。

这是我最小的glsl着色器:

代码语言:javascript
复制
#version 300 es 
in vec4 TexCoord;
out vec4 fragColor;
uniform sampler2D plane[4];

void main()
{
    fragColor = texture(plane[0], TexCoord.xy);
}

下面是来自MoltenGLShaderConverter的MoltenVK的输出:

代码语言:javascript
复制
#include <metal_stdlib>
#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
  float4 TexCoord;
};
struct xlatMtlShaderOutput {
  float4 fragColor [[color(0)]];
};
struct xlatMtlShaderUniform {
  texture2d<float> plane[4];
};
fragment xlatMtlShaderOutput test_frag (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
{
  xlatMtlShaderOutput _mtl_o;
  float4 tmpvar_1 = 0;
  tmpvar_1 = _mtl_u.plane[0].sample(_mtlsmp__mtl_u.plane[0], float2((_mtl_i.TexCoord.xy).x, (1.0 - (_mtl_i.TexCoord.xy).y)));
  _mtl_o.fragColor = tmpvar_1;
  return _mtl_o;
}

这里的好处是,我实际上了解到Y轴是倒的,但是这个示例使用的是_mtlsmp__mtl_u,而没有定义它。所以我仍然不知道如何定义取样器。

有人能解释我错过了什么吗?我明白我是如何通过使用glsl着色器并将版本设置为OpenGL ES 3.0来进行黑客攻击的(但它真的会影响任何事情吗?但这会影响什么吗?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-06 04:01:31

当使用金属,一些配置,如纹理过滤器和其他不像OpenGL使用GL方法定义它在应用程序的着色器。

要回答关于sample function.This中的第一个参数的确切问题,OpenGL中的纹理筛选函数类似于

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

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

https://stackoverflow.com/questions/63265384

复制
相关文章

相似问题

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