comparison ppl.c @ 176:dfe7e392ea7e

Optimize screen updates.
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 06 Oct 2012 11:14:51 +0300
parents e281663f04ba
children b29c9a2fbeb5
comparison
equal deleted inserted replaced
175:4192aa6d5af6 176:dfe7e392ea7e
669 669
670 int currTick, prevTick = 0, prevRow = -1; 670 int currTick, prevTick = 0, prevRow = -1;
671 671
672 while (!engine.exitFlag && engine.plr->isPlaying) 672 while (!engine.exitFlag && engine.plr->isPlaying)
673 { 673 {
674 currTick = SDL_GetTicks();
675 BOOL force = (currTick - prevTick > 500);
676
674 while (SDL_PollEvent(&engine.event)) 677 while (SDL_PollEvent(&engine.event))
675 switch (engine.event.type) 678 switch (engine.event.type)
676 { 679 {
677 case SDL_KEYDOWN: 680 case SDL_KEYDOWN:
678 switch (engine.event.key.keysym.sym) 681 switch (engine.event.key.keysym.sym)
686 SDL_PauseAudio(engine.pauseFlag); 689 SDL_PauseAudio(engine.pauseFlag);
687 break; 690 break;
688 691
689 case SDLK_LEFT: 692 case SDLK_LEFT:
690 if (engine.actChannel > 0) 693 if (engine.actChannel > 0)
694 {
691 engine.actChannel--; 695 engine.actChannel--;
696 force = TRUE;
697 }
692 break; 698 break;
693 699
694 case SDLK_RIGHT: 700 case SDLK_RIGHT:
695 if (engine.actChannel < engine.mod->nchannels) 701 if (engine.actChannel < engine.mod->nchannels)
702 {
696 engine.actChannel++; 703 engine.actChannel++;
704 force = TRUE;
705 }
697 break; 706 break;
698 707
699 case SDLK_RETURN: 708 case SDLK_RETURN:
700 jvmMute(engine.dev, engine.actChannel, !jvmGetMute(engine.dev, engine.actChannel)); 709 jvmMute(engine.dev, engine.actChannel, !jvmGetMute(engine.dev, engine.actChannel));
710 force = TRUE;
701 break; 711 break;
702 712
703 case SDLK_PAGEUP: 713 case SDLK_PAGEUP:
704 JSS_LOCK(engine.dev); 714 JSS_LOCK(engine.dev);
705 JSS_LOCK(engine.plr); 715 JSS_LOCK(engine.plr);
706 jmpPlayOrder(engine.plr, dmClamp(engine.plr->order - 1, 0, engine.mod->norders)); 716 jmpPlayOrder(engine.plr, dmClamp(engine.plr->order - 1, 0, engine.mod->norders));
707 JSS_UNLOCK(engine.plr); 717 JSS_UNLOCK(engine.plr);
708 JSS_UNLOCK(engine.dev); 718 JSS_UNLOCK(engine.dev);
719 force = TRUE;
709 break; 720 break;
710 721
711 case SDLK_PAGEDOWN: 722 case SDLK_PAGEDOWN:
712 JSS_LOCK(engine.dev); 723 JSS_LOCK(engine.dev);
713 JSS_LOCK(engine.plr); 724 JSS_LOCK(engine.plr);
714 jmpPlayOrder(engine.plr, dmClamp(engine.plr->order + 1, 0, engine.mod->norders)); 725 jmpPlayOrder(engine.plr, dmClamp(engine.plr->order + 1, 0, engine.mod->norders));
715 JSS_UNLOCK(engine.plr); 726 JSS_UNLOCK(engine.plr);
716 JSS_UNLOCK(engine.dev); 727 JSS_UNLOCK(engine.dev);
728 force = TRUE;
717 break; 729 break;
718 730
719 default: 731 default:
720 break; 732 break;
721 } 733 }
744 { 756 {
745 dmError("Can't lock surface.\n"); 757 dmError("Can't lock surface.\n");
746 goto error_exit; 758 goto error_exit;
747 } 759 }
748 760
749 currTick = SDL_GetTicks();
750 #if 1 761 #if 1
751 if (engine.plr->row != prevRow || currTick - prevTick > 100) 762
763 if (engine.plr->row != prevRow || force)
752 { 764 {
753 dmClearSurface(engine.screen, col.boxBg); 765 dmClearSurface(engine.screen, col.boxBg);
754 766
755 dmDrawBMTextQ(engine.screen, font, DMD_TRANSPARENT, 5, 5, "%s v%s by ccr/TNSP - (c) Copyright 2012 TNSP", dmProgDesc, dmProgVersion); 767 dmDrawBMTextQ(engine.screen, font, DMD_TRANSPARENT, 5, 5, "%s v%s by ccr/TNSP - (c) Copyright 2012 TNSP", dmProgDesc, dmProgVersion);
756 768
760 772
761 dmDisplayPattern(engine.screen, 5, 40, 773 dmDisplayPattern(engine.screen, 5, 40,
762 engine.screen->w - 6, engine.screen->h * 0.8, 774 engine.screen->w - 6, engine.screen->h * 0.8,
763 engine.plr->pattern, engine.plr->row); 775 engine.plr->pattern, engine.plr->row);
764 776
765 prevTick = currTick;
766 prevRow = engine.plr->row; 777 prevRow = engine.plr->row;
767 } 778 force = TRUE;
768 else 779 }
780
781 if (force)
769 { 782 {
770 dmFillRect(engine.screen, 5, 5 + 12, engine.screen->w, 5 + 12 + 10, col.boxBg); 783 dmFillRect(engine.screen, 5, 5 + 12, engine.screen->w, 5 + 12 + 10, col.boxBg);
771 } 784 dmDrawBMTextQ(engine.screen, font, DMD_TRANSPARENT, 5, 5 + 12,
772
773 dmDrawBMTextQ(engine.screen, font, DMD_TRANSPARENT, 5, 5 + 12,
774 "Tempo: %3d | Speed: %3d | Row: %3d | Order: %3d/%3d | Pattern: %3d/%3d", 785 "Tempo: %3d | Speed: %3d | Row: %3d | Order: %3d/%3d | Pattern: %3d/%3d",
775 engine.plr->tempo, engine.plr->speed, engine.plr->row, 786 engine.plr->tempo, engine.plr->speed, engine.plr->row,
776 engine.plr->order, engine.mod->norders, 787 engine.plr->order, engine.mod->norders,
777 engine.plr->npattern, engine.mod->npatterns); 788 engine.plr->npattern, engine.mod->npatterns);
778 789 }
779 790
780 791 if (force || currTick - prevTick >= (engine.pauseFlag ? 100 : 20))
781 JSS_LOCK(engine.dev); 792 {
782 JSS_LOCK(engine.plr); 793 JSS_LOCK(engine.dev);
783 dmDisplayChannels(engine.screen, 5, engine.screen->h * 0.8 + 5, 794 JSS_LOCK(engine.plr);
784 engine.screen->w - 5, engine.screen->h - 5, engine.dev); 795 dmDisplayChannels(engine.screen, 5, engine.screen->h * 0.8 + 5,
785 796 engine.screen->w - 5, engine.screen->h - 5, engine.dev);
786 JSS_UNLOCK(engine.plr); 797
787 JSS_UNLOCK(engine.dev); 798 JSS_UNLOCK(engine.plr);
799 JSS_UNLOCK(engine.dev);
800 }
801
802 if (force)
803 prevTick = currTick;
788 804
789 #endif 805 #endif
790 806
791 // Flip screen 807 // Flip screen
792 if (SDL_MUSTLOCK(engine.screen) != 0) 808 if (SDL_MUSTLOCK(engine.screen) != 0)
793 SDL_UnlockSurface(engine.screen); 809 SDL_UnlockSurface(engine.screen);
794 810
795 SDL_Flip(engine.screen); 811 SDL_Flip(engine.screen);
796 SDL_Delay(engine.pauseFlag ? 100 : 10); 812 SDL_Delay(engine.pauseFlag ? 100 : 20);
797 } 813 }
798 814
799 error_exit: 815 error_exit:
800 SDL_PauseAudio(1); 816 SDL_PauseAudio(1);
801 817