mirror of
https://github.com/pspdev/pspsdk.git
synced 2025-12-25 13:04:59 +00:00
75 lines
1.9 KiB
C
75 lines
1.9 KiB
C
/*
|
|
* PSP Software Development Kit - http://www.pspdev.org
|
|
* -----------------------------------------------------------------------
|
|
* Licensed under the BSD license, see LICENSE in PSPSDK root for details.
|
|
*
|
|
* Copyright (c) 2005 Jesper Svennevid
|
|
*/
|
|
|
|
#include "guInternal.h"
|
|
|
|
void sceGuClear(int flags)
|
|
{
|
|
GuContext* context = &gu_contexts[gu_curr_context];
|
|
unsigned int filter;
|
|
struct Vertex
|
|
{
|
|
u32 color;
|
|
u16 x,y,z;
|
|
u16 pad;
|
|
};
|
|
|
|
switch (gu_draw_buffer.pixel_size)
|
|
{
|
|
case 0: filter = context->clear_color & 0xffffff; break;
|
|
case 1: filter = (context->clear_color & 0xffffff) | (context->clear_stencil << 31); break;
|
|
case 2: filter = (context->clear_color & 0xffffff) | (context->clear_stencil << 28); break;
|
|
case 3: filter = (context->clear_color & 0xffffff) | (context->clear_stencil << 24); break;
|
|
default: filter = 0; break;
|
|
}
|
|
|
|
struct Vertex* vertices;
|
|
int count;
|
|
|
|
if (!(flags & GU_FAST_CLEAR_BIT))
|
|
{
|
|
vertices = (struct Vertex*)sceGuGetMemory(2 * sizeof(struct Vertex));
|
|
count = 2;
|
|
|
|
vertices[0].color = 0;
|
|
vertices[0].x = 0;
|
|
vertices[0].y = 0;
|
|
vertices[0].z = context->clear_depth;
|
|
|
|
vertices[1].color = filter;
|
|
vertices[1].x = gu_draw_buffer.width;
|
|
vertices[1].y = gu_draw_buffer.height;
|
|
vertices[1].z = context->clear_depth;
|
|
}
|
|
else
|
|
{
|
|
struct Vertex* curr;
|
|
unsigned int i;
|
|
count = ((gu_draw_buffer.width+63)/64)*2;
|
|
vertices = (struct Vertex*)sceGuGetMemory(count * sizeof(struct Vertex));
|
|
curr = vertices;
|
|
|
|
for (i = 0; i < count; ++i, ++curr)
|
|
{
|
|
unsigned int j,k;
|
|
|
|
j = i >> 1;
|
|
k = (i & 1);
|
|
|
|
curr->color = filter;
|
|
curr->x = (j+k) * 64;
|
|
curr->y = k * gu_draw_buffer.height;
|
|
curr->z = context->clear_depth;
|
|
}
|
|
}
|
|
|
|
sendCommandi(211,((flags & (GU_COLOR_BUFFER_BIT|GU_STENCIL_BUFFER_BIT|GU_DEPTH_BUFFER_BIT)) << 8) | 0x01);
|
|
sceGuDrawArray(GU_SPRITES,GU_COLOR_8888|GU_VERTEX_16BIT|GU_TRANSFORM_2D,count,0,vertices);
|
|
sendCommandi(211,0);
|
|
}
|