More rendering subsystem breakout, added a physics subsystem, everything now fires from akgl_game_update() for the user
This commit is contained in:
@@ -43,6 +43,7 @@ akerr_ErrorContext AKERR_NOIGNORE *akgl_render_init2d(akgl_RenderBackend *self)
|
||||
self->frame_end = &akgl_render_2d_frame_end;
|
||||
self->draw_texture = &akgl_render_2d_draw_texture;
|
||||
self->draw_mesh = &akgl_render_2d_draw_mesh;
|
||||
self->draw_world = &akgl_render_2d_draw_world;
|
||||
SUCCEED_RETURN(e);
|
||||
}
|
||||
|
||||
@@ -56,14 +57,17 @@ akerr_ErrorContext AKERR_NOIGNORE *akgl_render_2d_shutdown(akgl_RenderBackend *s
|
||||
akerr_ErrorContext AKERR_NOIGNORE *akgl_render_2d_frame_start(akgl_RenderBackend *self)
|
||||
{
|
||||
PREPARE_ERROR(e);
|
||||
FAIL_ZERO_RETURN(e, self->sdl_renderer, AKERR_NULLPOINTER, "No valid SDL rendering backend");
|
||||
SDL_SetRenderDrawColor(self->sdl_renderer, 0, 0, 0, 255);
|
||||
SDL_RenderClear(self->sdl_renderer);
|
||||
SUCCEED_RETURN(e);
|
||||
}
|
||||
|
||||
akerr_ErrorContext AKERR_NOIGNORE *akgl_render_2d_frame_end(akgl_RenderBackend *self)
|
||||
{
|
||||
PREPARE_ERROR(e);
|
||||
FAIL_ZERO_RETURN(e, renderer.sdl_renderer, AKERR_NULLPOINTER, "No valid SDL rendering backend");
|
||||
SDL_RenderPresent(renderer.sdl_renderer);
|
||||
FAIL_ZERO_RETURN(e, self->sdl_renderer, AKERR_NULLPOINTER, "No valid SDL rendering backend");
|
||||
SDL_RenderPresent(self->sdl_renderer);
|
||||
SUCCEED_RETURN(e);
|
||||
}
|
||||
|
||||
@@ -98,3 +102,35 @@ akerr_ErrorContext AKERR_NOIGNORE *akgl_render_2d_draw_mesh(akgl_RenderBackend *
|
||||
FAIL_RETURN(e, AKERR_API, "Not implemented");
|
||||
}
|
||||
|
||||
akerr_ErrorContext AKERR_NOIGNORE *akgl_render_2d_draw_world(akgl_RenderBackend *self, akgl_Iterator *opflags)
|
||||
{
|
||||
PREPARE_ERROR(e);
|
||||
akgl_Iterator defflags;
|
||||
SDL_Time curTime = SDL_GetTicksNS();
|
||||
akgl_Actor *actor = NULL;
|
||||
int j = 0;
|
||||
|
||||
FAIL_ZERO_RETURN(e, self, AKERR_NULLPOINTER, "self");
|
||||
|
||||
if ( opflags == NULL ) {
|
||||
opflags = &defflags;
|
||||
PASS(e, aksl_memset((void *)opflags, 0x00, sizeof(akgl_Iterator)));
|
||||
}
|
||||
for ( int i = 0; i < AKGL_TILEMAP_MAX_LAYERS ; i++ ) {
|
||||
if ( i < gamemap.numlayers ) {
|
||||
PASS(e, akgl_tilemap_draw((akgl_Tilemap *)&gamemap, &camera, i));
|
||||
}
|
||||
for ( int j = 0; j < AKGL_MAX_HEAP_ACTOR ; j++ ) {
|
||||
actor = &HEAP_ACTOR[j];
|
||||
if ( actor->refcount == 0 ) {
|
||||
continue;
|
||||
}
|
||||
if ( actor->layer != i ) {
|
||||
continue;
|
||||
}
|
||||
PASS(e, actor->renderfunc(actor));
|
||||
}
|
||||
}
|
||||
|
||||
SUCCEED_RETURN(e);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user