首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >三星4上的OpenGL es2D-屏幕上没有纹理

三星4上的OpenGL es2D-屏幕上没有纹理
EN

Stack Overflow用户
提问于 2013-08-07 07:46:31
回答 2查看 480关注 0票数 0

我有Nexsus 4和几个HTCs,我的游戏很好。

当我在三星4上启动时,我看到了白色的矩形(空纹理),

没有错误,

此外,我的游戏使用感应器,但我在三星4上看到它不起作用,

但三星3-工作,

请帮帮忙,

编辑

三星3的作品!

我听说他们用S4做了很多改变

编辑2

我就是这样加载纹理的:

代码语言:javascript
复制
public void loadTextures(GL10 gl, Context context){

    //Log.e(LOG_TAG, "DevQuestSprites :: loadTextures");  

    InputStream is;
    Bitmap bitmap;
    is = context.getResources().openRawResource(R.drawable.fly_a1_sprite);


    bitmap = BitmapFactory.decodeStream(is);
    try {
        is.close();
        is = null;
    } catch (IOException e) {
    }

    gl.glGenTextures(textureCount, textures, 0);

    gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);

    bitmap.recycle(); 

}

对我来说,最无能的一排是:

代码语言:javascript
复制
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);

实际上我把纹理放在这里。

这是draw方法:

代码语言:javascript
复制
    public void draw(GL10 gl,
        ...
                    ...
        )
{   

     ...

    //gl.glMatrixMode(GL10.GL_MODELVIEW);

    gl.glTranslatef(transx, transy, 0.0f);

    gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);

    gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, floatBufferArray[mFrame]);

    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
    gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 3);
    //gl.glDrawElements(GL10.GL_TRIANGLES, 1, GL10.GL_UNSIGNED_SHORT, vertexBuffer);
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
}

编辑3

我添加到drawonDrawFrame和main循环中,没有错误:

代码语言:javascript
复制
int error = gl.glGetError();
    if (error != 0)
        Log.e("main loop", "Draw " + error); 

调试后,我发现三星4只有一个新错误:

08-07 12:57:53.356: E/ViewRootImpl(29124):sendUserActionEvent() mView == null

编辑4

代码语言:javascript
复制
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig confid) {
    gl.glEnable(GL10.GL_TEXTURE_2D);
    gl.glShadeModel(GL10.GL_SMOOTH);        
    gl.glClearColor(0,0,0,0);
    gl.glClearDepthf(1.0f);
    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
    gl.glEnable(GL10.GL_BLEND);
    gl.glDisable(GL10.GL_DEPTH_TEST);
    gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
}
EN

回答 2

Stack Overflow用户

发布于 2013-08-07 16:03:00

一个问题是,您已经启用了alpha混合,但是不能使用GLUtils.texImage2D()在Android上加载alpha纹理。这是一个共同的问题,谷歌确实应该更好地记录。问题是,Bitmap类将所有图像转换为预乘格式,但这不适用于OpenGL ES,除非图像完全不透明。最好的解决方案是使用本机代码。本文详细介绍了以下内容:

http://software.intel.com/en-us/articles/porting-opengl-games-to-android-on-intel-atom-processors-part-1

票数 1
EN

Stack Overflow用户

发布于 2014-05-29 07:16:58

你的形象有多大?如果您正在使用opnel GL,则取决于哪个驱动程序具有移动功能,但是您需要大小图像才能在所有设备上工作得很好,2,4,8,16,32...etc。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18097545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档