CCTextureAtlas takes too much memory on WP8


#1

I found the main code that consume more memory is located in CCTextureAtlas::mapBuffers(). It will create 2 GL buffers to maintain vertex buffer and index buffer. I write a simple code to demonstrate this below:

    // Get the current memory usage by using Windows::Phone::System::Memory::MemoryManager
    int * pData = new int[243];

    for (int i = 0; i < 1000; ++i)
    {
        GLuint bufId[2];
        glGenBuffers(2, &bufId[0]);

        glBindBuffer(GL_ARRAY_BUFFER, bufId[0]);
        glBufferData(GL_ARRAY_BUFFER, 864, pData, GL_DYNAMIC_DRAW);
        glBindBuffer(GL_ARRAY_BUFFER, 0);

        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufId[1]);
        glBufferData(GL_ELEMENT_ARRAY_BUFFER, 108, pData, GL_STATIC_DRAW);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
    }
    // Get the total memory usage again and show the difference

The sizes used here is what I used in the real application. I find that the loop code consumes about 14M memory. But in my understanding, I only create 1000 * 972 bytes totally 1M around. When I look deep in the angle project, seems the cause is CreateBuffer() method does not only create the memory I required. I have no idea what hides behind CreateBuffer(). How to reduce the memory usage here?