// Draw whole scene void graph3d::draw_end(void) { if(graphics) { clear(); if(config.opengl_lighting) { gl_light::on(); } if(p_scene_active) { p_scene_active->draw_end(config.draw_debug_all_objects); } if(config.opengl_lighting) { gl_light::off(); } // Reset world matrix GPIPE *p_pipe = gpipe_get(); if(p_pipe) p_pipe->world_init(); if(config.draw_grid) grid_draw(); if(p_pipe) p_pipe->matrix_2d_mode_set(); if(config.draw_debug_fps) fps_draw(); if(config.draw_console) console_draw(); if(config.draw_mouse_cursor) mouse_cursor_draw(); if(config.draw_selection) selection_rectangle_draw(); if(p_pipe) p_pipe->matrix_3d_mode_set(); flip(); } }
void main_loop(void *data) { MainLoopData* loopData = (MainLoopData*)data; // TODO use registry to get love.update and love.draw? chdir("love"); timer_step(); graphics_clear(); matrixstack_origin(); lua_rawgeti(loopData->luaState, LUA_REGISTRYINDEX, loopData->errhand); lua_getglobal(loopData->luaState, "love"); lua_pushstring(loopData->luaState, "update"); lua_rawget(loopData->luaState, -2); lua_pushnumber(loopData->luaState, timer_getDelta()); pcall(loopData->luaState, 1); lua_pushstring(loopData->luaState, "draw"); lua_rawget(loopData->luaState, -2); pcall(loopData->luaState, 0); graphics_DisplayState curState = *graphics_getState(); matrixstack_push(); mouse_cursor_draw(); matrixstack_pop(); graphics_setState(&curState); graphics_swap(); lua_pop(loopData->luaState, 1); SDL_Event event; while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_KEYDOWN: keyboard_keypressed(event.key.keysym.sym); break; case SDL_KEYUP: keyboard_keyreleased(event.key.keysym.sym); break; case SDL_TEXTINPUT: keyboard_textInput(event.text.text); break; case SDL_MOUSEMOTION: mouse_mousemoved(event.motion.x, event.motion.y); break; case SDL_MOUSEBUTTONDOWN: mouse_mousepressed(event.button.x, event.button.y, event.button.button); break; case SDL_MOUSEBUTTONUP: mouse_mousereleased(event.button.x, event.button.y, event.button.button); break; case SDL_JOYDEVICEADDED: joystick_deviceAdded(event.jdevice.which); break; case SDL_JOYDEVICEREMOVED: joystick_deviceRemoved(event.jdevice.which); break; case SDL_JOYBUTTONUP: joystick_buttonReleased(event.jbutton.which, event.jbutton.button); break; case SDL_JOYBUTTONDOWN: joystick_buttonPressed(event.jbutton.which, event.jbutton.button); break; case SDL_JOYAXISMOTION: joystick_axisEvent(event.jaxis.which, event.jaxis.axis, event.jaxis.value); break; case SDL_CONTROLLERBUTTONUP: joystick_controllerButtonReleased(event.jbutton.which, event.jbutton.button); break; case SDL_CONTROLLERBUTTONDOWN: joystick_controllerButtonPressed(event.jbutton.which, event.jbutton.button); break; case SDL_CONTROLLERAXISMOTION: joystick_controllerAxisEvent(event.jaxis.which, event.jaxis.axis, event.jaxis.value); break; #ifndef EMSCRIPTEN case SDL_QUIT: exit(0); #endif } } audio_updateStreams(); //lua_gc(loopData->luaState, LUA_GCCOLLECT, 0); }