Browse code

replace framerate class by SDL2 gfx lib

devnewton authored on 06/09/2015 22:24:30
Showing 5 changed files
... ...
@@ -17,6 +17,9 @@ include_directories( ${Boost_INCLUDE_DIRS} )
17 17
 find_package(SDL2 REQUIRED)
18 18
 include_directories(${SDL2_INCLUDE_DIR})
19 19
 
20
+find_package(SDL2_gfx REQUIRED)
21
+include_directories(${SDL2_GFX_INCLUDE_DIR})
22
+
20 23
 find_package(SDL2_image REQUIRED)
21 24
 include_directories(${SDL2_IMAGE_INCLUDE_DIR})
22 25
 
... ...
@@ -34,7 +37,6 @@ add_executable(superpaflaballe
34 37
  src/scenimp/nanim.cpp
35 38
  src/scenimp/node.cpp
36 39
  src/scenimp/sdl_exception.cpp
37
- src/framerate.cpp
38 40
  src/intro.cpp
39 41
  src/main.cpp)
40
-target_link_libraries(superpaflaballe ${SDL2_LIBRARY} ${SDL2_IMAGE_LIBRARY} ${SDL2_MIXER_LIBRARY} ${SDL2_TTF_LIBRARY} ${Boost_LIBRARIES})
42
+target_link_libraries(superpaflaballe ${SDL2_LIBRARY} ${SDL2_GFX_LIBRARY} ${SDL2_IMAGE_LIBRARY} ${SDL2_MIXER_LIBRARY} ${SDL2_TTF_LIBRARY} ${Boost_LIBRARIES})
41 43
new file mode 100644
... ...
@@ -0,0 +1,155 @@
1
+# Locate SDL2_gfx library
2
+# This module defines
3
+# SDL2_GFX_LIBRARY, the name of the library to link against
4
+# SDL2_GFX_FOUND, if false, do not try to link to SDL2_gfx
5
+# SDL2_GFX_INCLUDE_DIR, where to find SDL_gfx.h
6
+#
7
+# Additional Note: If you see an empty SDL2_GFX_LIBRARY_TEMP in your configuration
8
+# and no SDL2_GFX_LIBRARY, it means CMake did not find your SDL2_Gfx library
9
+# (SDL2_gfx.dll, libsdl2_gfx.so, SDL2_gfx.framework, etc).
10
+# Set SDL2_GFX_LIBRARY_TEMP to point to your SDL2 library, and configure again.
11
+# Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value
12
+# as appropriate. These values are used to generate the final SDL2_GFX_LIBRARY
13
+# variable, but when these values are unset, SDL2_GFX_LIBRARY does not get created.
14
+#
15
+# $SDL2 is an environment variable that would
16
+# correspond to the ./configure --prefix=$SDL2
17
+# used in building SDL2.
18
+# l.e.galup 9-20-02
19
+#
20
+# Modified by Eric Wing.
21
+# Added code to assist with automated building by using environmental variables
22
+# and providing a more controlled/consistent search behavior.
23
+# Added new modifications to recognize OS X frameworks and
24
+# additional Unix paths (FreeBSD, etc).
25
+# Also corrected the header search path to follow "proper" SDL2 guidelines.
26
+# Added a search for SDL2main which is needed by some platforms.
27
+# Added a search for threads which is needed by some platforms.
28
+# Added needed compile switches for MinGW.
29
+#
30
+# On OSX, this will prefer the Framework version (if found) over others.
31
+# People will have to manually change the cache values of
32
+# SDL2_GFX_LIBRARY to override this selection or set the CMake environment
33
+# CMAKE_INCLUDE_PATH to modify the search paths.
34
+#
35
+# Note that the header path has changed from SDL2/SDL.h to just SDL.h
36
+# This needed to change because "proper" SDL2 convention
37
+# is #include "SDL.h", not <SDL2/SDL.h>. This is done for portability
38
+# reasons because not all systems place things in SDL2/ (see FreeBSD).
39
+#
40
+# Ported by Johnny Patterson. This is a literal port for SDL2 of the FindSDL.cmake
41
+# module with the minor edit of changing "SDL" to "SDL2" where necessary. This
42
+# was not created for redistribution, and exists temporarily pending official
43
+# SDL2 CMake modules.
44
+# 
45
+# Note that on windows this will only search for the 32bit libraries, to search
46
+# for 64bit change x86/i686-w64 to x64/x86_64-w64
47
+
48
+#=============================================================================
49
+# Copyright 2003-2009 Kitware, Inc.
50
+#
51
+# CMake - Cross Platform Makefile Generator
52
+# Copyright 2000-2014 Kitware, Inc.
53
+# Copyright 2000-2011 Insight Software Consortium
54
+# All rights reserved.
55
+#
56
+# Redistribution and use in source and binary forms, with or without
57
+# modification, are permitted provided that the following conditions
58
+# are met:
59
+#
60
+# * Redistributions of source code must retain the above copyright
61
+# notice, this list of conditions and the following disclaimer.
62
+#
63
+# * Redistributions in binary form must reproduce the above copyright
64
+# notice, this list of conditions and the following disclaimer in the
65
+# documentation and/or other materials provided with the distribution.
66
+#
67
+# * Neither the names of Kitware, Inc., the Insight Software Consortium,
68
+# nor the names of their contributors may be used to endorse or promote
69
+# products derived from this software without specific prior written
70
+# permission.
71
+#
72
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
73
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
74
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
75
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
76
+# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
77
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
78
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
79
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
80
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
81
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
82
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
83
+#
84
+# This software is distributed WITHOUT ANY WARRANTY; without even the
85
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
86
+# See the License for more information.
87
+#=============================================================================
88
+# (To distribute this file outside of CMake, substitute the full
89
+# License text for the above reference.)
90
+
91
+FIND_PATH(SDL2_GFX_INCLUDE_DIR SDL2_gfxPrimitives.h
92
+	HINTS
93
+	$ENV{SDL2}
94
+	$ENV{SDL2_GFX}
95
+	PATH_SUFFIXES include/SDL2 include SDL2
96
+	i686-w64-mingw32/include/SDL2
97
+	x86_64-w64-mingw32/include/SDL2
98
+	PATHS
99
+	~/Library/Frameworks
100
+	/Library/Frameworks
101
+	/usr/local/include/SDL2
102
+	/usr/include/SDL2
103
+	/sw # Fink
104
+	/opt/local # DarwinPorts
105
+	/opt/csw # Blastwave
106
+	/opt
107
+)
108
+
109
+# Lookup the 64 bit libs on x64
110
+IF(CMAKE_SIZEOF_VOID_P EQUAL 8)
111
+	FIND_LIBRARY(SDL2_GFX_LIBRARY_TEMP
112
+		NAMES SDL2_gfx
113
+		HINTS
114
+		$ENV{SDL2}
115
+		$ENV{SDL2_GFX}
116
+		PATH_SUFFIXES lib64 lib
117
+		lib/x64
118
+		x86_64-w64-mingw32/lib
119
+		PATHS
120
+		/sw
121
+		/opt/local
122
+		/opt/csw
123
+		/opt
124
+	)
125
+# On 32bit build find the 32bit libs
126
+ELSE(CMAKE_SIZEOF_VOID_P EQUAL 8)
127
+	FIND_LIBRARY(SDL2_GFX_LIBRARY_TEMP
128
+		NAMES SDL2_gfx
129
+		HINTS
130
+		$ENV{SDL2}
131
+		$ENV{SDL2_GFX}
132
+		PATH_SUFFIXES lib
133
+		lib/x86
134
+		i686-w64-mingw32/lib
135
+		PATHS
136
+		/sw
137
+		/opt/local
138
+		/opt/csw
139
+		/opt
140
+	)
141
+ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 8)
142
+
143
+SET(SDL2_GFX_FOUND "NO")
144
+	IF(SDL2_GFX_LIBRARY_TEMP)
145
+	# Set the final string here so the GUI reflects the final state.
146
+	SET(SDL2_GFX_LIBRARY ${SDL2_GFX_LIBRARY_TEMP} CACHE STRING "Where the SDL2_gfx Library can be found")
147
+	# Set the temp variable to INTERNAL so it is not seen in the CMake GUI
148
+	SET(SDL2_GFX_LIBRARY_TEMP "${SDL2_GFX_LIBRARY_TEMP}" CACHE INTERNAL "")
149
+	SET(SDL2_GFX_FOUND "YES")
150
+ENDIF(SDL2_GFX_LIBRARY_TEMP)
151
+
152
+INCLUDE(FindPackageHandleStandardArgs)
153
+
154
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2_GFX REQUIRED_VARS SDL2_GFX_LIBRARY SDL2_GFX_INCLUDE_DIR)
155
+
0 156
deleted file mode 100644
... ...
@@ -1,38 +0,0 @@
1
-#include "framerate.h"
2
-
3
-namespace superpaflaballe {
4
-
5
-    framerate::framerate() {
6
-        max_frame_ticks = (1000.0 / (float) FPS_MAX) + 0.00001;
7
-        frame_count = 0;
8
-        last_second_ticks = SDL_GetTicks();
9
-    }
10
-
11
-    bool framerate::limit() {
12
-        frame_count++;
13
-        target_ticks = last_second_ticks + Uint32(frame_count * max_frame_ticks);
14
-        current_ticks = SDL_GetTicks();
15
-        average_ticks += current_ticks - last_frame_ticks;
16
-        if (current_ticks - last_frame_ticks <= min_ticks) {
17
-            min_ticks = current_ticks - last_frame_ticks;
18
-        }
19
-        if (current_ticks - last_frame_ticks >= max_frame_ticks) {
20
-            max_ticks = current_ticks - last_frame_ticks;
21
-        }
22
-        if (current_ticks < target_ticks) {
23
-            SDL_Delay(target_ticks - current_ticks);
24
-            current_ticks = SDL_GetTicks();
25
-        }
26
-        last_frame_ticks = current_ticks;
27
-        if (current_ticks - last_second_ticks >= 1000) {
28
-            frame_count = 0;
29
-            min_ticks = 1000;
30
-            max_ticks = 0;
31
-            average_ticks = 0;
32
-            last_second_ticks = SDL_GetTicks();
33
-            return true;
34
-        }
35
-        return false;
36
-    }
37
-
38
-}
39 0
deleted file mode 100644
... ...
@@ -1,27 +0,0 @@
1
-#pragma once
2
-
3
-#include <SDL.h>
4
-
5
-namespace superpaflaballe {
6
-
7
-    class framerate {
8
-    public:
9
-        framerate();
10
-
11
-        bool limit();
12
-
13
-    private:
14
-        const int FPS_MAX = 60;
15
-        float max_frame_ticks;
16
-        Uint32 last_second_ticks;
17
-        int frame_count;
18
-        Uint32 min_ticks;
19
-        Uint32 max_ticks;
20
-        double average_ticks;
21
-        Uint32 last_frame_ticks;
22
-        Uint32 current_ticks;
23
-        Uint32 target_ticks;
24
-    };
25
-
26
-}
27
-
... ...
@@ -1,12 +1,12 @@
1 1
 #include "scenimp/assets.h"
2 2
 #include "scenimp/game.h"
3
-#include "framerate.h"
4 3
 #include "intro.h"
5 4
 #include "bourrines_benchmark.h"
6 5
 #include <boost/statechart/state_machine.hpp>
7 6
 #include <boost/statechart/state.hpp>
8 7
 #include <boost/statechart/simple_state.hpp>
9 8
 #include <boost/statechart/custom_reaction.hpp>
9
+#include <SDL2_framerate.h>
10 10
 
11 11
 namespace superpaflaballe {
12 12
     namespace statechart {
... ...
@@ -25,7 +25,6 @@ namespace superpaflaballe {
25 25
 
26 26
         struct machine : boost::statechart::state_machine< machine, state_running > {
27 27
             scenimp::game game_;
28
-            framerate framerate_;
29 28
         };
30 29
 
31 30
         struct state_running : boost::statechart::simple_state< state_running, machine, state_intro > {
... ...
@@ -107,6 +106,10 @@ int main(int, char**) {
107 106
         superpaflaballe::statechart::event_tick event_tick;
108 107
         auto font = machine.game_.assets().font("ProFontWindows.ttf", 12);
109 108
         auto text_texture = machine.game_.create_text_texture(font, "plop");
109
+        
110
+        FPSmanager fps;
111
+        SDL_initFramerate(&fps);
112
+        SDL_setFramerate(&fps, 60);
110 113
         while (!machine.terminated()) {
111 114
             while (SDL_PollEvent(&event_sdl.e_)) {
112 115
                 machine.process_event(event_sdl);
... ...
@@ -115,7 +118,7 @@ int main(int, char**) {
115 118
             machine.process_event(event_tick);
116 119
             SDL_RenderCopy(machine.game_.renderer(), text_texture.get(), nullptr, nullptr);
117 120
             SDL_RenderPresent(machine.game_.renderer());
118
-            machine.framerate_.limit();
121
+            SDL_framerateDelay(&fps);
119 122
         }
120 123
     } catch (const std::exception& e) {
121 124
         std::cerr << "Error " << e.what() << std::endl;