在金属着色语言中,GLSL的uintBitsToFloat和floatBitsToUint相当于什么?

时间:2016-09-23 16:48:19

标签: opengl glsl shader metal

我正在将计算着色器从GLSL转换为Metal着色语言。我正在使用函数f.input :is_active, as: :boolean, checked_value: true, unchecked_value: false uintBitsToFloat来存储原子变量。什么是金属中的等价物? GLSL中的示例用法:

floatBitsToUint

1 个答案:

答案 0 :(得分:2)

看起来你可以使用as_type<type-id>()演员。

从此链接的最底部:https://developer.apple.com/library/content/documentation/Metal/Reference/MetalShadingLanguageGuide/data-types/data-types.html#//apple_ref/doc/uid/TP40014364-CH2-SW1

  

Metal着色语言添加了一个as_type运算符,允许将任何标量或向量数据类型(不是指针)重新解释为另一个相同大小的标量或向量数据类型。 操作数中的位直接返回而不作为新类型进行修改。不执行函数参数的常规类型提升。

float f = 1.0f;
// Legal. Contains: 0x3f800000
uint u = as_type<uint>(f);

// Legal. Contains:
// (int4)(0x3f800000, 0x40000000,
//        0x40400000, 0x40800000)
float4 f = float4(1.0f, 2.0f, 3.0f, 4.0f);
int4 i = as_type<int4>(f);