簡體   English   中英

Android GLES 2.0:將幀緩沖區渲染為半浮點紋理可在某些設備上使用,而在其他設備上則無法使用

[英]Android GLES 2.0: framebuffer rendering to half-float texture works on some devices, not others

我正在Android上使用GLES 2.0,試圖渲染到由紋理支持的幀緩沖區。 紋理和幀緩沖區的創建如下:

final int GL_RGB16F_EXT = 0x881B;
GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGB, width, height, 0,
        GL_RGB16F_EXT, type, null);
GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0,
    GLES20.GL_TEXTURE_2D, textureHandle, 0);

對於type=GL_HALF_FLOAT_OES ,這在某些設備上有效,但在其他設備上GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT狀態。

使用GL_NEAREST縮小和放大模式創建了紋理。

請注意,在某些設備(Nexus 5)上,僅當我使用“ GL_RGB ”而不是“ GL_RGB16F_EXT ”作為內部格式時,上述方法才有效;在某些設備(Nexus 6/7)上,僅適用於GL_RGB16F_EXT ;在某些設備上,兩者均適用(Nexus 9),在某些情況下也無法使用(Nexus 4)。

奇怪的是,我的所有設備(包括故障設備)都報告了GL_OES_texture_half_floatGL_EXT_color_buffer_half_float

我還能在這里錯過什么?

我相信ES 2.0的參數正確組合是:

final int GL_HALF_FLOAT_OES = 0x8D61;
GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGB, width, height, 0,
        GLES20.GL_RGB, GL_HALF_FLOAT_OES, null);

不幸的是,ES 2.0不支持glTexImage2D()內部格式大小。 它從格式/類型參數導出內部格式。 在ES 3.0中增加了內部尺寸的格式。

基於EGL_color_buffer_half_float規范 ,僅支持GL_RGB16F_EXT作為glRenderbufferStorage()的內部glRenderbufferStorage()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM