是否可以在GPUImage或OpenGL ES中提高片段或顶点着色器的精度?
我希望使用GPU进行图像处理,并希望保留尽可能多的原始数据
答案 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正在进行纹理处理。
简而言之,如果要插入像素,则必须在片段着色器中。