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.

Другие вопросы по тегам