This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

glReadPixels generates OUT_OF_MEMORY error

Hi.

Usually, I use render-to-texture technique to process the image.

However, recently, I need to read the contents to the system memory.

So, I tried to use glReadPixels as follows:

GLubyte pixels[256] = { 0, 0, 0, 0 };

GL_CHECK( glReadPixels(100, 100, 2, 2, GL_RGBA, GL_UNSIGNED_BYTE, pixels) );

LOGI("%d %d %d %d\n", pixels[0], pixels[1], pixels[2], pixels[3]);

This code works well on my desktop PC with NVIDIA card.

But, it fails with ARM Mali-T628.

Debug: test0clear.cpp:36: glGetError() = OUT_OF_MEMORY at test0clear.cpp:36

Here is the details of my system:

EGL vendor = ARM

EGL version = 1.4 Midgard-"r4p0-02rel0"

EGL client apis = OpenGL_ES

GL ES vendor = ARM

GL ES version = OpenGL ES 3.0

GL ES renderer = Mali-T628

GL ES SL version = OpenGL ES GLSL ES 3.00

Do you have any idea to overcome this abnormal situation?

Thanks in advance.

--

oceancru

Parents
  • What device are you running on?

    To help us give you a quick answer, can you also share a complete test case (source or Android APK is fine), so we're not trying to reproduce what you have done from the tiny snippet above?

    A couple of starting points:

    • Just to check the obvious, can you double check that the OpenGL ES error state is not set immediately before the call to glReadPixels() - the error state is sticky and may have been set by an earlier function.
    • I think that version of the driver supports the KHR_debug extension, so you may get some more information about the error out via that channel, although with OUT_OF_MEMORY I'm not convinced that will necessarily be the case.

    Cheers,
    Pete

Reply
  • What device are you running on?

    To help us give you a quick answer, can you also share a complete test case (source or Android APK is fine), so we're not trying to reproduce what you have done from the tiny snippet above?

    A couple of starting points:

    • Just to check the obvious, can you double check that the OpenGL ES error state is not set immediately before the call to glReadPixels() - the error state is sticky and may have been set by an earlier function.
    • I think that version of the driver supports the KHR_debug extension, so you may get some more information about the error out via that channel, although with OUT_OF_MEMORY I'm not convinced that will necessarily be the case.

    Cheers,
    Pete

Children