java - OpenGL ES 2.0 VBO issue -
i trying switch vbos, without indices now. blank screen. can point out why blank? same code works fine if comment out vbo-specific code , replace 0(offset) in glvertexattribpointer mfvertexbuffer, i.e without using vbos.
this ondraw method
gles20.glclearcolor(0.50f, 0.50f, 0.50f, 1.0f); gles20.glclear(gles20.gl_depth_buffer_bit | gles20.gl_color_buffer_bit); // bind default fbo // gles20.glbindframebuffer(gles20.gl_framebuffer, 0); gles20.gluseprogram(mprogram); checkglerror("gluseprogram"); gles20.glenable(gles20.gl_blend); gles20.glblendfunc(gles20.gl_src_alpha, gles20.gl_one_minus_src_alpha); gles20.glbindtexture(gles20.gl_texture_2d, id); int vertexcount = mcarverticesdata.length / 3; gles20.glbindbuffer(gles20.gl_array_buffer, buffers[0]); checkglerror("1"); gles20.glvertexattribpointer(positionhandle, 3, gles20.gl_float,false, 0, 0); checkglerror("2"); gles20.glenablevertexattribarray(positionhandle); checkglerror("3 "); transfertexturepoints(gettexturehandle()); gles20.gldrawarrays(gles20.gl_triangles, 0, vertexcount); checkglerror("gldrawarrays"); gles20.glbindbuffer(gles20.gl_array_buffer, 0); gles20.gldisablevertexattribarray(positionhandle); gles20.gldisable(gles20.gl_blend);
this vbo setup:
// allocate , handle vertex buffer bytebuffer vbb2 = bytebuffer.allocatedirect(mcarverticesdata.length * float_size_bytes); vbb2.order(byteorder.nativeorder()); mfvertexbuffer = vbb2.asfloatbuffer(); mfvertexbuffer.put(mcarverticesdata); mfvertexbuffer.position(0); // allocate , handle vertex buffer this.buffers = new int[1]; gles20.glgenbuffers(1, buffers, 0); gles20.glbindbuffer(gles20.gl_array_buffer, buffers[0]); gles20.glbufferdata(gles20.gl_array_buffer, mfvertexbuffer.capacity() * float_size_bytes, mfvertexbuffer, gles20.gl_static_draw);
before linking program:
gles20.glbindattriblocation(program, 0, "aposition"); checkglerror("bindattribloc");
and vertex shader :
uniform mat4 umvpmatrix; attribute vec4 aposition; attribute vec2 atexturecoordinate; varying vec2 v_texturecoordinate; void main() { gl_position = umvpmatrix * aposition; v_texturecoordinate = atexturecoordinate; gl_pointsize= 10.0; }
you need generate elements array , phone call in order render "object":
// bind vertex buffer gles20.glbindbuffer(gles20.gl_array_buffer, _bufferids.get(2)); gles20.glvertexattribpointer(4, 4, gles20.gl_float, false, 4*4, 0); // bind elements buffer , draw gles20.glbindbuffer(gles20.gl_element_array_buffer, _bufferids.get(1)); gles20.gldrawelements(gles20.gl_triangles, _numelements, gles20.gl_unsigned_short, 0);
hope helps.
java android opengl-es-2.0 vbo
No comments:
Post a Comment