diff options
Diffstat (limited to 'third_party/gldc/src/flush.c')
-rw-r--r-- | third_party/gldc/src/flush.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/third_party/gldc/src/flush.c b/third_party/gldc/src/flush.c new file mode 100644 index 0000000..f7328bd --- /dev/null +++ b/third_party/gldc/src/flush.c @@ -0,0 +1,66 @@ +#include <stdbool.h> +#include "aligned_vector.h" +#include "private.h" + +PolyList OP_LIST; +PolyList PT_LIST; +PolyList TR_LIST; + +/** + * FAST_MODE will use invW for all Z coordinates sent to the + * GPU. + * + * This will break orthographic mode so default is FALSE + **/ + +#define FAST_MODE GL_FALSE + +void glKosInit() { + TRACE(); + + _glInitContext(); + _glInitTextures(); + + OP_LIST.list_type = PVR_LIST_OP_POLY; + PT_LIST.list_type = PVR_LIST_PT_POLY; + TR_LIST.list_type = PVR_LIST_TR_POLY; + + aligned_vector_init(&OP_LIST.vector); + aligned_vector_init(&PT_LIST.vector); + aligned_vector_init(&TR_LIST.vector); + + aligned_vector_reserve(&OP_LIST.vector, 1024 * 3); + aligned_vector_reserve(&PT_LIST.vector, 512 * 3); + aligned_vector_reserve(&TR_LIST.vector, 1024 * 3); +} + + +void glKosSwapBuffers() { + TRACE(); + + pvr_scene_begin(); + if(aligned_vector_size(&OP_LIST.vector) > 2) { + pvr_list_begin(PVR_LIST_OP_POLY); + SceneListSubmit((Vertex*) aligned_vector_front(&OP_LIST.vector), aligned_vector_size(&OP_LIST.vector)); + pvr_list_finish(); + } + + if(aligned_vector_size(&PT_LIST.vector) > 2) { + pvr_list_begin(PVR_LIST_PT_POLY); + SceneListSubmit((Vertex*) aligned_vector_front(&PT_LIST.vector), aligned_vector_size(&PT_LIST.vector)); + pvr_list_finish(); + } + + if(aligned_vector_size(&TR_LIST.vector) > 2) { + pvr_list_begin(PVR_LIST_TR_POLY); + SceneListSubmit((Vertex*) aligned_vector_front(&TR_LIST.vector), aligned_vector_size(&TR_LIST.vector)); + pvr_list_finish(); + } + pvr_scene_finish(); + + aligned_vector_clear(&OP_LIST.vector); + aligned_vector_clear(&PT_LIST.vector); + aligned_vector_clear(&TR_LIST.vector); + + _glApplyScissor(true); +} |