2011-10-20 22 views
5

He intentado hacer un motor 2.5D con texturas de mapa de profundidad y normales durante algunas semanas, similar a lo que se usa aquí Linky. Después de pensar que el dibujo de un mapa de profundidad en el fragmento sombreado de una textura era imposible debido a que ES 2.0 faltaba la variable gl_fragDepth, encontré un tutorial para iOS donde usaron glBlendEquation con el modo GL_MIN/GL_MAX para "falsificar" el buffer de profundidad del fragmento a una textura framebuffer Linky. Desafortunadamente GLES20.glBlendEquation hace que la aplicación se cuelgue en mis teléfonos (SGS 1/2) con UnsupportedOperationException. Entonces me pregunto si alguien ha usado esta función para tener éxito. GL_MIN/GL_MAX también parece estar ausente de las especificaciones de Android OpenGL ES 2.0, así que probablemente no tenga suerte aquí ... ¿Alguna idea?Android GLES20.glBlendEquation no funciona?

BTW Parece que funciona en GL11Ext, pero como utilizo el sombreador de fragmentos para el mapeo normal, esto no funcionará conmigo.

+0

¿Alguna vez encontró una solución para esto? – Jave

+0

@jave No, no he investigado más sobre esto, ni he recibido ningún comentario sobre ningún foro. Entonces mi suposición es que no está implementado en Android OpenGL ES 2.0. Tal vez esto se ha solucionado en las versiones más nuevas del sistema operativo? Probé esto usando el sistema operativo Android v2.3. –

+0

Ok, me encontré con este problema hace un par de días, pero tampoco encontré una solución. (Usando Android 2.2 por cierto). Si resuelves el problema, me gustaría ver cómo lo hiciste. – Jave

Respuesta

1

estaba experimentando en mi tableta de Vega (Tegra) y esto funcionó para mí:

fragmento shader:

#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 
} 

Bastante fácil, ¿eh? Pero me temo que esto será NV solo.