Да, используйте функцию glFramebufferTexture2D
и в последнем параметре укажите уровень mipmap.
После того, как вы вложили все, что вам нужно, визуализируйте изображение, которое вы хотите, на конкретном mipmap.
Примечание. Не забудьте изменить значение на glViewport
, чтобы оно отображалось с соответствующим размером mipmap!
Вот простой пример:
unsigned int Texture = 0;
int MipmapLevel = 0;
glGenFramebuffers(1, &FBO);
glGenRenderbuffers(1, &RBO);
glGenTextures(1, &Texture);
glBindTexture(GL_TEXTURE_2D, Texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, TextureWidth, TextureHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, nullptr);
// glTexParameteri here
// Use shader and setup uniforms
glViewport(0, 0, TextureWidth, TextureHeight);
glBindFramebuffer(GL_FRAMEBUFFER, FBO);
glBindRenderbuffer(GL_RENDERBUFFER, RBO);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, TextureWidth, TextureHeight);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, Texture, MipmapLevel); // Here, change the last parameter to the mipmap level you want to write to
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Render to texture
// Restore all states (glViewport, Framebuffer, etc..)
EDIT:
Если вы хотите изменить сгенерированный mipmap (созданный с помощью glGenerateMipmap
или извне), вы можете использовать тот же метод, использовать glFramebufferTexture2D
и выбрать mipmap, который хотите изменить.
После того, как вы выполнили все настройки (как в примере выше), вы можете либо полностью отрендерить новый mipmap, либо отправить исходную текстуру и изменить ее в фрагментном шейдере.