opengl es 2.0 android c ++ альтернатива glGetTexImage

при тестировании в Windows код работает так, как ожидалось, но на android glGetTexImage api не существует, есть ли другой способ получить все пиксели из OpenGL без их кеширования перед созданием текстуры?

это код:

void Texture::Bind(int unit)
{
    glActiveTexture(GL_TEXTURE0 + unit);
    glBindTexture(GL_TEXTURE_2D, mTextureID);
}

GLubyte* Texture::GetPixels()
{
    Bind();

    int data_size = mWidth * mHeight * 4;

    GLubyte* pixels = new GLubyte[mWidth * mHeight * 4];

    glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);

    return pixels;
}

person dvrer    schedule 01.01.2019    source источник


Ответы (1)


glGetTexImage не существует в OpenGL ES.
В OpenGL ES вы должны прикрепить текстуру к фреймбуферу и прочитать цветовую плоскость из фреймбуфера с помощью _ 2_

Bind();
int data_size = mWidth * mHeight * 4;
GLubyte* pixels = new GLubyte[mWidth * mHeight * 4];

GLuint textureObj = ...; // the texture object - glGenTextures  

GLuint fbo;
glGenFramebuffers(1, &fbo); 
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureObj, 0);

glReadPixels(0, 0, mWidth, mHeight, GL_RGBA, GL_UNSIGNED_BYTE, pixels);

glBindFramebuffer(GL_FRAMEBUFFER, 0);
glDeleteFramebuffers(1, &fbo);
person Rabbid76    schedule 01.01.2019