A method comprising: queuing, by a centralized processing unit, CPU, a first rendering command for a first plurality of objects; causing a graphics processing unit, GPU, to store rasterized data of the first plurality of objects into a first A-Buffer, sort the first A-Buffer, and render a first frame based on the first A-Buffer; wherein the centralized processing unit is free to process other commands while the GPU is rendering the first frame; allocating, by the CPU, a size of a second A-buffer based on the size of the first A-Buffer from the first frame; wherein the CPU receives the size of the first A-buffer from the GPU during the second frame and determines the size for the second A-buffer such that the GPU does not wait for the size of the second A-Buffer during the second frame; queuing, by the CPU, a second rendering command for a second plurality of objects; causing the GPU to store rasterized data of the second plurality of objects into a second list stored in the second A-buffer, store an identification of one or more objects of the second plurality of objects into a removed buffer, R-buffer, when the one or more objects are partially stored in the second A-Buffer, sort the second list, and render a second frame using the second sorted list; wherein the CPU is free to process one or more other commands while the GPU is rendering the second frame; wherein the one or more objects of the second plurality of objects are removed from the second A-Buffer prior to rendering the second frame; wherein the second plurality of objects are rendered into the second A-Buffer in a single pass without the GPU requesting the CPU to increase the size of the second A-Buffer and without re-rendering the one or more objects of the second plurality of objects. queuing, by a centralized processing unit, CPU, a first rendering command for a first plurality of objects; causing a graphics processing unit, GPU, to store rasterized data of the first plurality of objects into a first A-Buffer, sort the first A-Buffer, and render a first frame based on the first A-Buffer; wherein the centralized processing unit is free to process other commands while the GPU is rendering the first frame; allocating, by the CPU, a size of a second A-buffer based on the size of the first A-Buffer from the first frame; wherein the CPU receives the size of the first A-buffer from the GPU during the second frame and determines the size for the second A-buffer such that the GPU does not wait for the size of the second A-Buffer during the second frame; queuing, by the CPU, a second rendering command for a second plurality of objects; causing the GPU to store rasterized data of the second plurality of objects into a second list stored in the second A-buffer, store an identification of one or more objects of the second plurality of objects into a removed buffer, R-buffer, when the one or more objects are partially stored in the second A-Buffer, sort the second list, and render a second frame using the second sorted list; wherein the CPU is free to process one or more other commands while the GPU is rendering the second frame; wherein the one or more objects of the second plurality of objects are removed from the second A-Buffer prior to rendering the second frame; wherein the second plurality of objects are rendered into the second A-Buffer in a single pass without the GPU requesting the CPU to increase the size of the second A-Buffer and without re-rendering the one or more objects of the second plurality of objects.