提高OpenGL ES 2.0和GPUImage的精度

时间:2013-02-25 21:42:06

标签: ios opengl-es opengl-es-2.0 gpuimage

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如果不增加原始纹理数据,则无法提高精度。

插入像素有很多种方法,但这并不意味着精度会增加。

在您的情况下,您可以在IOS API中增加相机预设,例如AVCaptureSessionPresetXXXXXX

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

另外,我想让你知道什么是顶点& frag(像素)着色器正在管道中。这些只是Redering处理的一部分。

如果您不知道这一点,请记住Vertex着色器正在进行转换,Fragment Shader正在进行纹理处理。

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