
#include <stdio.h>

#include "graffiti_buffer.h"

#include <proto/intuition.h>
#include <proto/graphics.h>

BOOL Graffiti_ShowNextBuffer (struct GraffitiHandle * gh)
{
    UWORD t;

    t = (GD(gh)->VisibleBuffer + 1) % GD(gh)->NBuffers;

    ScreenDepth (GD(gh)->Buffer[t], SDEPTH_TOFRONT|SDEPTH_INFAMILY, NULL);

    GD(gh)->VisibleBuffer = t;

    return TRUE;
} /* Graffiti_ShowNextBuffer */


BOOL Graffiti_UseNextBuffer (struct GraffitiHandle * gh)
{
#if 0
    ULONG t;
    register ULONG * lptr0;
    register ULONG * lptr1;
    register ULONG * lptr2;
    register ULONG * lptr3;

    t = (GD(gh)->RenderBuffer + 1) % GD(gh)->NBuffers;

    lptr0 = (ULONG *)(GD(gh)->Plane[0] = GD(gh)->Buffer[t]->RastPort.BitMap->Planes[0]);
    lptr1 = (ULONG *)(GD(gh)->Plane[1] = GD(gh)->Buffer[t]->RastPort.BitMap->Planes[1]);
    lptr2 = (ULONG *)(GD(gh)->Plane[2] = GD(gh)->Buffer[t]->RastPort.BitMap->Planes[2]);
    lptr3 = (ULONG *)(GD(gh)->Plane[3] = GD(gh)->Buffer[t]->RastPort.BitMap->Planes[3]);

    GD(gh)->RenderBuffer = t;

    t = (GD(gh)->BPR * GD(gh)->Height) >> 2;

    while (t >= 4)
    {
	*lptr0++ = 0; *lptr0++ = 0; *lptr0++ = 0; *lptr0++ = 0;
	*lptr1++ = 0; *lptr1++ = 0; *lptr1++ = 0; *lptr1++ = 0;
	*lptr2++ = 0; *lptr2++ = 0; *lptr2++ = 0; *lptr2++ = 0;
	*lptr3++ = 0; *lptr3++ = 0; *lptr3++ = 0; *lptr3++ = 0;

	t -= 4;
    }

    while (t > 0)
    {
	*lptr0++ = 0;
	*lptr1++ = 0;
	*lptr2++ = 0;
	*lptr3++ = 0;

	t --;
    }

    return TRUE;
#else
    ULONG t;
    register UBYTE * pptr0;
    register UBYTE * pptr1, *pptr2;
    register ULONG * lptr2, *lptr1;
    register ULONG * lptr3;

    t = (GD(gh)->RenderBuffer + 1) % GD(gh)->NBuffers;

    pptr0 = (GD(gh)->Plane[0] = GD(gh)->Buffer[t]->RastPort.BitMap->Planes[0]);
    pptr1 = (GD(gh)->Plane[1] = GD(gh)->Buffer[t]->RastPort.BitMap->Planes[1]);
    lptr2 = (ULONG *)(GD(gh)->Plane[2] = GD(gh)->Buffer[t]->RastPort.BitMap->Planes[2]);
    lptr3 = (ULONG *)(GD(gh)->Plane[3] = GD(gh)->Buffer[t]->RastPort.BitMap->Planes[3]);

    pptr2 = (UBYTE *)lptr2;
    lptr1 = (ULONG *)pptr1;

    GD(gh)->RenderBuffer = t;

    t = (GD(gh)->BPR * GD(gh)->Height);

    BltClear (pptr0, t, 0);
    BltClear (pptr1, t, 0);
    /* BltClear (pptr2, t, 0); */

    t >>= 2;

    while (t >= 4)
    {
	/* *lptr1++ = 0; *lptr1++ = 0; *lptr1++ = 0; *lptr1++ = 0; */
	*lptr2++ = 0; *lptr2++ = 0; *lptr2++ = 0; *lptr2++ = 0;
	*lptr3++ = 0; *lptr3++ = 0; *lptr3++ = 0; *lptr3++ = 0;

	t -= 4;
    }

    while (t > 0)
    {
	/* *lptr1++ = 0; */
	*lptr2++ = 0;
	*lptr3++ = 0;

	t --;
    }

    /* WaitBlit (); */

    return TRUE;
#endif
} /* Graffiti_UseNextBuffer */

