【发布时间】:2018-03-21 18:18:20
【问题描述】:
我正在尝试为移动应用程序创建一个使用位命令的着色器。我正在使用 glsl 版本 320 es。为了演示这个问题,我创建了一个 shadertoy 示例: https://www.shadertoy.com/view/MsVyRw 这应该显示一个红屏。从我的 Galaxy s8 打开时,屏幕也显示为红色。使用以下片段着色器运行我的应用程序时:
#version 320 es
precision highp float;
out vec4 fragColor;
void main()
{
uint x = uint(0xec140e57);
uint tmp0 = x >> uint(4);
uint tmp1 = uint(0xec140e57) >> uint(4);
if(tmp0 == tmp1){
fragColor = vec4(1.0, 0.0, 0.0,1.0);
}
else{
fragColor = vec4(0.0, 0.0, 1.0,1.0);
}
};
屏幕呈蓝色。但是,如果我改变
uint x = uint(0xec140e57);
uint tmp0 = x >> uint(4);
uint tmp1 = uint(0xec140e57) >> uint(4);
到
uint tmp0 = uint(0xec140e57) >> uint(4);
uint tmp1 = uint(0xec140e57) >> uint(4);
屏幕显示为红色。
gpu ALU 绝对不是问题,因为它适用于 shadertoy。允许这种操作的预处理器标志是否缺少我的东西?
【问题讨论】:
标签: opengl-es glsl bitwise-operators