如何在Android版OpenGL ES 2.0中采样大纹理

如何在Android版OpenGL ES 2.0中采样大纹理,android,opengl-es-2.0,glsl,Android,Opengl Es 2.0,Glsl,我现在尝试使用片段着色器来处理纹理上的图像。但是,我发现片段着色器只支持10位浮点,因此当屏幕长度为1280像素时,我无法获取存储在像素中的值,因为我不可能使用10位采样1280像素 我想知道如何才能准确地获得大纹理上的像素?浮动有3种不同的精度格式。说: highp:16位,浮点范围:-2^62到2^62,整数范围: -2^16到2^16 mediump:10位,浮点范围:-2^14到2^14,整数 范围:-2^10到2^10 lowp:8位,浮点范围:-2到2,整数范围:-2^8到 2^8

我现在尝试使用片段着色器来处理纹理上的图像。但是,我发现片段着色器只支持10位浮点,因此当屏幕长度为1280像素时,我无法获取存储在像素中的值,因为我不可能使用10位采样1280像素


我想知道如何才能准确地获得大纹理上的像素?

浮动有3种不同的精度格式。说:

  • highp
    :16位,浮点范围:-2^62到2^62,整数范围: -2^16到2^16
  • mediump
    :10位,浮点范围:-2^14到2^14,整数 范围:-2^10到2^10
  • lowp
    :8位,浮点范围:-2到2,整数范围:-2^8到 2^8
  • 为了能够从>1024x1024纹理进行采样,您必须将以下代码放在
    GLSL
    程序的开头,从而将精度切换到
    highp

    precision highp float;
    

    您有什么证据证明某些支持GLSL的硬件只能提供10位精度?这是什么硬件?我使用函数glGetShaderPrecisionFormat检查了设备,以测试对GLES20.GL_HIGH_FLOAT的支持,但发现硬件不支持它。这意味着设备不支持highp的精度。该函数的更多细节可以在@NicolBolasIn中找到,事实上我已经尝试过了,但我发现设备不支持highp的精度。对该精度的支持是可选的。因此,大多数移动设备的GPU不支持碎片着色器的这种精度,因为通常认为这种大小的纹理是不必要的。因此,即使将这行代码添加到程序的开头,我仍然无法对纹理进行采样。还是谢谢你。有没有可能把纹理的大小缩小到1024,或者把它分成几个纹理?事实上,我现在正试图把它分成几个纹理。但是我担心分割纹理会对程序的效率产生负面影响。我曾经试图减小纹理的大小,但我发现1024大小的纹理也太大了。我仍然不知道问题的原因。谢谢@Sergey K.谢谢你提醒我,我现在就接受。但我仍然担心分割纹理会导致效率下降@Sergey K.看来这是最好的选择。