Android OpenGL only renders half the screen -
i have follow example of opengl application , don't know why thing happening...
i have glsurfaceview it's corresponding renderer drawing triangle. but, instead of getting whole view on screen, have upper half, , it's duplicated can see on picture. i'm using nexus 1
the xml:
<?xml version="1.0" encoding="utf-8"?> <com.forgottenprojects.geoturista.drawinglayer xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawing" android:layout_width="fill_parent" android:layout_height="fill_parent" />
the activity has in manifest:
android:theme="@android:style/theme.notitlebar.fullscreen"
the drawinglayer class:
public class drawinglayer extends glsurfaceview { private trianglerenderer renderer; private context context; public drawinglayer(context context, attributeset attrs) { super(context, attrs); init(context); } public drawinglayer(context context) { super(context); init(context); } private void init(context c) { this.context = c; seteglconfigchooser(false); this.renderer = new trianglerenderer(c); setrenderer(renderer); setrendermode(glsurfaceview.rendermode_continuously); getholder().setformat(pixelformat.translucent); } }
the triangle renderer (most of apress pro android 2 book)
public class trianglerenderer implements renderer { private final static int verts = 3; private floatbuffer mfvertexbuffer; private shortbuffer mindexbuffer; trianglerenderer(context context) { bytebuffer vbb = bytebuffer.allocatedirect(verts * 3 * 4); vbb.order(byteorder.nativeorder()); mfvertexbuffer = vbb.asfloatbuffer(); bytebuffer ibb = bytebuffer.allocatedirect(verts * 2); ibb.order(byteorder.nativeorder()); mindexbuffer = ibb.asshortbuffer(); float[] coords = { -0.5f, -0.5f, 0, // (x1,y1,z1) 0.5f, -0.5f, 0, 0.0f, 0.5f, 0 }; (int = 0; < verts; i++) { for(int j = 0; j < 3; j++) { mfvertexbuffer.put(coords[i*3+j]); } } short[] myindecesarray = {0,1,2}; (int i=0;i<3;i++) { mindexbuffer.put(myindecesarray[i]); } mfvertexbuffer.position(0); mindexbuffer.position(0); } protected void draw(gl10 gl) { gl.glcolor4f(1.0f, 0, 0, 0.5f); gl.glvertexpointer(3, gl10.gl_float, 0, mfvertexbuffer); gl.gldrawelements(gl10.gl_triangles, verts, gl10.gl_unsigned_short, mindexbuffer); } @override public void onsurfacecreated(gl10 gl, eglconfig config) { gl.gldisable(gl10.gl_dither); gl.glhint(gl10.gl_perspective_correction_hint, gl10.gl_fastest); gl.glclearcolor(0.5f, 0.5f, 0.5f, 1.0f); gl.glshademodel(gl10.gl_smooth); gl.glenable(gl10.gl_depth_test); } @override public void ondrawframe(gl10 gl) { gl.gldisable(gl10.gl_dither); gl.glclear(gl10.gl_color_buffer_bit | gl10.gl_depth_buffer_bit); gl.glclearcolor(1.0f, 0.5f, 0.7f, 1.0f); gl.glmatrixmode(gl10.gl_modelview); gl.glloadidentity(); glu.glulookat(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1f, 0f); gl.glenableclientstate(gl10.gl_vertex_array); draw(gl); } @override public void onsurfacechanged(gl10 gl, int width, int height) { gl.glviewport(0, 0, width, height); gl.glmatrixmode(gl10.gl_projection); float ratio = (float)width / (float)height; gl.glloadidentity(); gl.glfrustumf(-ratio, ratio, -1, 1, 3, 7); } }
thanks in advance!
looks egl display configuration wrong.
Comments
Post a Comment