opengl es 2.0 android c ++ glGetTexImage альтернатива - PullRequest
0 голосов
/ 01 января 2019

при тестировании на windows код работает как положено, но на андроиде 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;
}

1 Ответ

0 голосов
/ 01 января 2019

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

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);
...