android - OpenGL Point Sprites 在 Android 中工作吗?

标签 android opengl-es point sprite

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

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

Android 是否正确支持点 Sprite ?有没有人让他们工作?还是我下面的代码有问题?

// 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);

设置纹理环境以使用点 Sprite

    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 以进行混合。如果你想给你的 Sprite 着色,我认为你需要 GL_COLOR_MATERIAL。

关于android - OpenGL Point Sprites 在 Android 中工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3444429/

相关文章:

ios - gpus_ReturnNotPermittedKillClient 应用后台运行时 MKMapView 抛出错误

javascript - 小数点后的值未在 Javascript 中计算

android - Android phonegap GPS 精度

java - 当我在 Android 应用程序中使用 Reflection api 时,性能会受到很大影响吗?

android - OpenGL ES 3.0 对 Android 中 glReadPixels 的性能提升

c - 我正在寻找几何代码,但我不知道 p1[X] 代码

Javascript:多边形中的点性能改进

android - view_holder 的 Recycler View 可重用性。如何保持特定位置项目的可见性?

android - 菜单项未显示在工具栏上

iOS 图形引擎