在我的Windows代码(OpenGL 4)中,我使用这个来计算片段着色器中的纹理位置:
vec2 pixel = "some equation"
vec2 textureSize = vec2(512.0, 512.0);
vec2 texel = floor(pixel + vec2(0.5)) + vec2(0.5);
texel /= textureSize如果我在iOS (OpenGL ES 3.0)上运行这段代码,我的整个图像在x和y方向上会发生部分移位。我试着删除vec2(0.5),只使用
vec2 texel = floor(pixel + vec2(0.5))但它甚至更不正确。
ES中发生了什么?
发布于 2017-10-30 00:50:53
可能是着色器精度。尝试添加:
precision highp float;位于片段着色器的顶部。
如果没有该语句,并且在单个var上没有精度限定符,那么您的数学操作可能(取决于实现)使用半精度浮点数而不是单精度(16位浮点数而不是32位浮点数),而这种精度的缺乏可以解释您所看到的工件。
请注意,OpenGLES实现可以自由地不支持片段着色器中的highp,因此此方法可能并不适用于所有地方。但是,它在所有iOS设备上都受支持,这就是您所提到的。
https://stackoverflow.com/questions/47001102
复制相似问题