Android GLES20.glBlendEquation не работает?
Я уже несколько недель пытаюсь создать 2.5D движок с текстурами карты глубины и нормалей, мало чем отличающийся от того, что использовался здесь Линки. Подумав, нарисовать карту глубины в фрагментном шейдере из текстуры было невозможно из-за отсутствия в 2.0 2.0 переменной gl_fragDepth. Я нашел учебник для iOS, где они использовали glBlendEquation с режимом GL_MIN/GL_MAX, чтобы "подделать" буферизацию глубины фрагмента. в фреймбуфер-текстуру Линки. К сожалению, GLES20.glBlendEquation вызывает сбой приложения на обоих моих телефонах (SGS 1/2) с UnsupportedOperationException. Так что мне интересно, кто-нибудь использовал эту функцию для какого-либо успеха? GL_MIN/GL_MAX, кажется, также отсутствует в спецификации Android Opengl ES 2.0, так что, возможно, мне не повезло... Есть идеи?
Кстати, кажется, работает в GL11Ext, но так как я использую фрагментный шейдер для нормального отображения, это не будет работать от меня.
1 ответ
Я экспериментировал на своем планшете Vega (Tegra), и это сработало для меня:
фрагментный шейдер:
#extension GL_NV_shader_framebuffer_fetch : require
// makes gl_LastFragColor accessible
precision highp float;
varying vec2 v_texcoord;
uniform sampler2D n_sampler;
void main()
{
vec4 v_tex = texture2D(n_sampler, v_texcoord);
gl_FragColor = min(gl_LastFragColor, v_tex); // MIN blending
}
Довольно легко, а? Но я боюсь, что это будет только для NV.