是否可以提高 GPUImage 或 OpenGL ES 中片段或顶点着色器的精度?
我希望使用 GPU 进行图像处理,并希望尽可能多地保留原始数据
是否可以提高 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 程序中的着色器代码完全相同。
另外我想让你知道顶点和碎片(像素)着色器在管道中做什么。这些只是 Redering 处理的一部分。
如果您不知道这一点,请记住 Vertex shader 正在执行 trasformation 而 Fragment Shader 正在执行 Texturing 。
总之,如果要对像素进行插值,就必须在 Fragment shader 中。