繁体   English   中英

OpenGL ES 2.0和GPUImage的精度提高

[英]Increasing precision of OpenGL ES 2.0 and GPUImage

是否可以提高GPUImage或OpenGL ES中片段或顶点着色器的精度?

我希望使用GPU进行图像处理,并希望保留尽可能多的原始数据

您可以通过以下语句请求着色器使用硬件中实现的最高精度:

precision highp float;
precision highp int;

或通过对特定声明使用highp限定词。 我相信在任何情况下,着色器都将默认为最高可用精度。

究竟要达到的精度取决于特定的硬件实现。 同样,片段着色器中highp限定符的实现是可选的。 您可以使用glGetShaderPrecisionFormat()API调用查询格式的精度。 在Power VR SGX530芯片上,我获得了highp float和int的这些值:

float range = 126/126, precision = 23/0
int range = 24/24, precision = 0/0

不增加原始纹理数据就无法提高精度。

有许多种插值像素的方法,但这并不意味着可以提高精度。

您可以在IOS API(例如AVCaptureSessionPresetXXXXXX)中增加相机预设

GPUImage是由OpenGL ES制作的,因此着色器代码与GPUImage和任何opengl es 2.0程序中的着色器代码完全相同。

我也想让你知道顶点和碎片(像素)着色器在管道中正在做什么。 这些只是“重做”处理的一部分。

如果您不知道这一点,请记住,顶点着色器正在进行变形,而片段着色器正在进行纹理处理。

简而言之,如果要插值像素,则必须在片段着色器中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM