OpenGL: автоматическое создание мип-карт только для определенных слоев массива 2D-текстур - PullRequest
0 голосов
/ 02 июля 2018

У меня есть большой массив текстур с изображениями (несколько сотен) для большой объединенной сетки. Теперь мне нужно регулярно обновлять определенные «кусочки» или слои этого массива.

Моя проблема в том, что при использовании glGenerateMipmap() драйвер, похоже, воссоздает мипмапы для ВСЕХ слоев этого массива текстуры вместо только обновленных. Есть ли способ просто обновить один слой и воссоздать его mipmap, не воссоздавая mipmaps для всех слоев одновременно?

Что я сейчас делаю, когда обновляю срез / слой массива 2D-текстур:

glTexSubImage3D(EXTTextureArray.GL_TEXTURE_2D_ARRAY_EXT,
        0, //mipmap level
        0,
        0,
        sliceIndex,
        width,
        height,
        1,
        glFormat,
        GL11.GL_UNSIGNED_BYTE,
        currentData);

glGenerateMipmap(EXTTextureArray.GL_TEXTURE_2D_ARRAY_EXT);

Когда я пропускаю glGenerateMipmap(), тогда мип-карты вообще не обновляются. Так есть ли способ автоматического создания мипмапов только для этого слоя или мне нужно самому в этом случае создавать мипмапы?

1 Ответ

0 голосов
/ 02 июля 2018

Ну, glGenerateMipmap всегда будет заново создавать все уровни mipmap от GL_TEXTURE_BASE_LEVEL+1 до GL_TEXTURE_MAX_LEVEL. В случае текстуры 2D-массива это означает, что она будет работать на всех слоях указанной текстуры.

Есть ли способ просто обновить один слой и воссоздать его mipmap, не воссоздавая mipmaps для всех слоев одновременно?

В современном GL (> = 4.3) этого можно достичь с помощью видов текстуры . По сути, вы можете создать новый двухмерный текстурный объект, представляющий собой представление одного слоя текстуры массива с glTextureVIew, и заново сгенерировать для него мипмапы. Однако, чтобы это работало, вы должны создать текстуру массива как неизменяемый через glTexStorage3D.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...