2013-06-06 54 views
1

我正在开发一款android上的照片gallary小部件,它应该实现一些功能,如照片和卷曲效果之间的翻转,这使照片在触摸时卷曲并显示底部表单, 。 我用ViewPager和FragmentStatePagerAdapter实现了这个功能,它创建包含GLSurfaceView和Fragment的实例,该渲染器使用opengl-es 2.0产生卷曲效果。GLSurfaceView在华硕变压器上呈现扭曲的图像

我已经在Kindle Fire HD 7`和许多类型的Sumsung设备上从Ace(2.3.3)到Galaxy Tab 10'测试了这个解决方案 - 工作正常。但在华硕变压器tf700t我有可怕的扭曲图像。

Kindle Fire HD Screenshoot

Distorted image on Asus Transformer

是否有人脸,类似的问题?与Mali400或PowerVR不同,Tegra 3 GPU的初始化GLES2.0上下文有没有特殊之处?

我GLSurfaceView构造函数代码:

/// Конструктор для создания поверхности в runtime с уже загруженой текстурой 
public MainGLSurfaceView(Context context, Bitmap bm) { 
    super(context); 

    // Create an OpenGL ES 2.0 context. 
    setEGLContextClientVersion(2); 

    /// следующие три строчки - для того чтобы из под поверхности было видно другие view 
    setZOrderOnTop(true); 
    //setZOrderMediaOverlay(true); 


    /// было хорошо на Kindle но плохо на Asus transformer и телефонах 
    setEGLConfigChooser(8, 8, 8, 8, 16, 0); 

    /// попытка сделать хорошо везде 
    //setEGLConfigChooser(true); 

    //getHolder().setFormat(PixelFormat.RGBA_8888); 
    getHolder().setFormat(PixelFormat.RGBA_4444); 

    //Bitmap bmTemp = BitmapFactory.decodeResource(getResources(), R.drawable.temp_bitmap); 
    mRenderer = new MainGLRenderer(context,bm,bm, Color.BLACK, Color.WHITE,-20f); 
    setRenderer(mRenderer); 
    setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); 
} 

渲染OnSurfaceCreated:从位图构造

@Override 
public void onSurfaceCreated(GL10 gl, EGLConfig config) { 

    /// смешивание 

    GLES20.glEnable(GLES20.GL_BLEND); 
    GLES20.glBlendColor(0f, 0f, 0f, 1f); 
    GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA); 
    //GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE); 

    /// z-буффер 
    GLES20.glEnable(GLES20.GL_DEPTH_TEST); 

    /// не отрисовывать изнанку полигонов 
    GLES20.glEnable(GLES20.GL_CULL_FACE); 

    //GLES20.glEnable(GLES20.GL_TEXTURE_2D); 

    /// функция z-буффера 
    GLES20.glDepthFunc(GLES20.GL_LEQUAL); 

    /// тоже что-то для z-буффера 
    GLES20.glDepthMask(true); 

    /// сделать цвет фона фрейма - по нулям для прозрачности 
    GLES20.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
} 

质地:

public Texture(Bitmap bm) { 
     //создаем пустой массив из одного элемента 
     //в этот массив OpenGL ES запишет свободный номер текстуры, 
     // который называют именем текстуры 
     int []names = new int[1]; 
     // получаем свободное имя текстуры, которое будет записано в names[0] 
     GLES20.glGenTextures(1, names, 0); 
     //запомним имя текстуры в локальном поле класса 
     name = names[0]; 
     //теперь мы можем обращаться к текстуре по ее имени name 
     //устанавливаем режим выравнивания по байту 
     GLES20.glPixelStorei(GLES20.GL_UNPACK_ALIGNMENT, 1); 
     //делаем текстуру с именем name текущей 
     GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, name); 
     //устанавливаем фильтры текстуры 
     GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, 
       GLES20.GL_TEXTURE_MIN_FILTER, 
       //GLES20.GL_LINEAR_MIPMAP_LINEAR); 
       GLES20.GL_NEAREST); 
     GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, 
       GLES20.GL_TEXTURE_MAG_FILTER, 
       //GLES20.GL_LINEAR); 
       GLES20.GL_NEAREST); 


     GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, 
       GLES20.GL_TEXTURE_WRAP_S, 
       //GLES20.GL_REPEAT); 
       GLES20.GL_CLAMP_TO_EDGE); 
     GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, 
       GLES20.GL_TEXTURE_WRAP_T, 
       //GLES20.GL_REPEAT); 
       GLES20.GL_CLAMP_TO_EDGE); 

     //переписать Bitmap в память видеокарты 
     GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bm, 0); 

     // удалить Bitmap из памяти, т.к. картинка уже переписана в видеопамять 
     bm.recycle(); 
     System.gc(); 
     Runtime.getRuntime().gc(); 

     GLES20.glGenerateMipmap(GLES20.GL_TEXTURE_2D); 
} 

抱歉长期职位。先谢谢你。

回答

0

通过将GLES20.glDepthFunc(GLES20.GL_LEQUAL)更改为GLES20.glDepthFunc(GLES20.GL_ALWAYS)来解决;

+0

您需要使用'glClearDepthf(1.0f);每帧清除深度缓冲区; glClear(GL_DEPTH_BUFFER_BIT);'因为Transformer有时不会将渲染缓冲区初始化为零(并且标准不需要)。 – Triang3l