2013-06-06 56 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