2011-10-20 9 views
5

Próbowałem zbudować silnik 2,5D z teksturami głębi i normalnej mapy już od kilku tygodni, w odróżnieniu od tego, co tutaj zastosowano: Linky. Po przemyśleniu rysunek mapy głębi w shaderze fragmentu z tekstury był niemożliwy, ponieważ ES 2.0 brakowało zmiennej gl_fragDepth Znalazłem samouczek dla iOS, gdzie użyli glBlendEquation z trybem GL_MIN/GL_MAX do "fałszywego" buforowania głębi fragmentu do framebuffer-tekstury Linky. Niefortunnie błąd GLES20.glBlendEquation powoduje awarię aplikacji na obu telefonach (SGS 1/2) z wyjątkiem UnsupportedOperationException. Więc zastanawiam się, czy ktoś użył tej funkcji do jakiegokolwiek sukcesu? Wygląda na to, że GL_MIN/GL_MAX brakuje w specyfikacji Androida OpenGL ES 2.0, więc mam na szczęście tutaj ... Jakieś pomysły?Android GLES20.glBlendEquation nie działa?

BTW Wydaje się, że działa w GL11Ext, ale ponieważ używam shadera fragmentów do normalnego mapowania, to nie zadziała ode mnie.

+0

Czy kiedykolwiek znalazłeś rozwiązanie tego problemu? – Jave

+0

@jave Nie, nie zagłębiałem się w to ani dalej, ani nie miałem żadnych opinii na żadnym forum. Tak więc moim założeniem jest to, że nie jest on zaimplementowany w systemie Android OpenGL ES 2.0. Być może zostało to naprawione w nowszych wersjach systemu operacyjnego? Testowałem to używając systemu Android OS v2.3. –

+0

Ok, sam wpadłem na ten problem kilka dni temu, ale też nie znalazłem rozwiązania. (Przy okazji przy użyciu Androida 2.2). Jeśli rozwiążesz problem, chciałbym zobaczyć, jak to zrobiłeś. – Jave

Odpowiedz

1

i eksperymentował na moim tablecie Vega (Tegra) i ten pracował dla mnie:

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

Całkiem proste, prawda? Ale obawiam się, że będzie to tylko NV.