OpenGL Point Sprites可以在Android中运行吗?

我正在开发Droid版本2.1-update1.我支持的GL扩展包括GL_OES_point_sprite和GL_OES_point_size_array.

我无法获得点精灵渲染.下面的代码在glTexEnvi调用时从GLWrapperBase抛出UnsupportedOperationException.如果我禁用纹理并注释掉glTexEnvi all,它会在glPointSizePointerOES()处进一步抛出相同的异常.

Android中是否正确支持点精灵?有没有人让他们工作?或者下面的代码是否存在问题?

// Note that gl is cast to GL11
gl.glEnable(GL11.GL_TEXTURE_2D);
gl.glEnable(GL11.GL_BLEND);
gl.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
gl.glDepthMask(false);
gl.glEnable(GL11.GL_POINT_SPRITE_OES);
gl.glTexEnvi( GL11.GL_POINT_SPRITE_OES, GL11.GL_COORD_REPLACE_OES, GL11.GL_TRUE );  
gl.glEnableClientState(GL11.GL_VERTEX_ARRAY);
gl.glVertexPointer(2, GL11.GL_SHORT, 0, .vertBuffer);
gl.glEnableClientState(GL11.GL_POINT_SIZE_ARRAY_OES);
gl.glPointSizePointerOES(GL11.GL_FLOAT, 0, pointSizeBuffer);

谢谢

解决方法:

我有这个工作,这是我的绘图功能

初始化一切

    gl.glEnable(GL10.GL_TEXTURE);
    TextureManager.activateTexture(gl, R.drawable.water1); //Don't look for this, it's not public api, just looks upd texture id for android resource if loaded, and then activates it. it's the gl.glBindTexture() call replacement
    gl.glEnable(GL11.GL_POINT_SPRITE_OES);
    gl.glEnableClientState(GL11.GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES);
    gl.glEnableClientState(GL11.GL_POINT_SIZE_ARRAY_OES);       
    gl.glEnableClientState(GL11.GL_POINT_SPRITE_OES);
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

将纹理环境设置为使用点精灵

    gl.glTexEnvf(GL11.GL_POINT_SPRITE_OES, GL11.GL_COORD_REPLACE_OES, GL11.GL_TRUE);

设置指向数据的指针(第一个数组是2d布局的[x,y,x2,y2,…]第二个是1d [s1,s2,..])

    gl.glVertexPointer(2,GL11.GL_FLOAT,0,PosData);              
    ((GL11)(gl)).glPointSizePointerOES(GL10.GL_FLOAT, 0, SizeData);

    gl.glDrawArrays(GL10.GL_POINTS,0,MAX);

禁用东西

    gl.glDisableClientState(GL11.GL_VERTEX_ARRAY);
    gl.glDisableClientState(GL11.GL_POINT_SIZE_ARRAY_OES);
    gl.glDisableClientState(GL11.GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES);
    gl.glDisableClientState(GL11.GL_POINT_SIZE_ARRAY_OES);      
    gl.glDisable(GL10.GL_TEXTURE);

在我的初始化程序中,我只启用了投影设置并启用了GL_BLEND进行混合.如果你想给你的精灵上色,我想你需要GL_COLOR_MATERIAL.

上一篇:Java随机化 – (减号)和(加号)


下一篇:svg-sprite-loader 在cli3中vue.config.js 中的配置