From cb7005fff0996aee555e106df7cfae471647e461 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Marchal?= Date: Sun, 29 May 2016 18:10:44 +0200 Subject: [PATCH] Reupload --- LICENSE | 4 +- Makefile | 36 + Makefile_linux | 54 + Makefile_mac | 71 + assets/linux/Makefile | 27 + assets/linux/launcher.sh | 1 + assets/mac/Makefile | 48 + assets/mac/util/Icon.icns | Bin 0 -> 47725 bytes assets/mac/util/Info.plist | 26 + assets/mac/util/launcher.sh | 3 + assets/resources/bg.jpg | Bin 0 -> 1723430 bytes assets/src/Game.cpp | 33 + assets/src/Game.hpp | 23 + assets/src/main.cpp | 8 + include/SFML/Audio.hpp | 50 + include/SFML/Audio/Export.hpp | 48 + include/SFML/Audio/Listener.hpp | 184 +++ include/SFML/Audio/Music.hpp | 228 +++ include/SFML/Audio/Sound.hpp | 262 ++++ include/SFML/Audio/SoundBuffer.hpp | 359 +++++ include/SFML/Audio/SoundBufferRecorder.hpp | 138 ++ include/SFML/Audio/SoundRecorder.hpp | 270 ++++ include/SFML/Audio/SoundSource.hpp | 286 ++++ include/SFML/Audio/SoundStream.hpp | 377 +++++ include/SFML/Config.hpp | 159 ++ include/SFML/Graphics.hpp | 62 + include/SFML/Graphics/BlendMode.hpp | 46 + include/SFML/Graphics/CircleShape.hpp | 151 ++ include/SFML/Graphics/Color.hpp | 228 +++ include/SFML/Graphics/ConvexShape.hpp | 150 ++ include/SFML/Graphics/Drawable.hpp | 126 ++ include/SFML/Graphics/Export.hpp | 48 + include/SFML/Graphics/Font.hpp | 361 +++++ include/SFML/Graphics/Glyph.hpp | 79 + include/SFML/Graphics/Image.hpp | 319 ++++ include/SFML/Graphics/PrimitiveType.hpp | 53 + include/SFML/Graphics/Rect.hpp | 248 +++ include/SFML/Graphics/Rect.inl | 137 ++ include/SFML/Graphics/RectangleShape.hpp | 128 ++ include/SFML/Graphics/RenderStates.hpp | 174 +++ include/SFML/Graphics/RenderTarget.hpp | 451 ++++++ include/SFML/Graphics/RenderTexture.hpp | 280 ++++ include/SFML/Graphics/RenderWindow.hpp | 266 ++++ include/SFML/Graphics/Shader.hpp | 623 ++++++++ include/SFML/Graphics/Shape.hpp | 345 +++++ include/SFML/Graphics/Sprite.hpp | 277 ++++ include/SFML/Graphics/Text.hpp | 351 +++++ include/SFML/Graphics/Texture.hpp | 602 ++++++++ include/SFML/Graphics/Transform.hpp | 450 ++++++ include/SFML/Graphics/Transformable.hpp | 417 +++++ include/SFML/Graphics/Vertex.hpp | 148 ++ include/SFML/Graphics/VertexArray.hpp | 223 +++ include/SFML/Graphics/View.hpp | 341 +++++ include/SFML/Network.hpp | 51 + include/SFML/Network/Export.hpp | 48 + include/SFML/Network/Ftp.hpp | 591 ++++++++ include/SFML/Network/Http.hpp | 467 ++++++ include/SFML/Network/IpAddress.hpp | 316 ++++ include/SFML/Network/Packet.hpp | 407 +++++ include/SFML/Network/Socket.hpp | 218 +++ include/SFML/Network/SocketHandle.hpp | 57 + include/SFML/Network/SocketSelector.hpp | 263 ++++ include/SFML/Network/TcpListener.hpp | 162 ++ include/SFML/Network/TcpSocket.hpp | 292 ++++ include/SFML/Network/UdpSocket.hpp | 283 ++++ include/SFML/OpenGL.hpp | 62 + include/SFML/System.hpp | 56 + include/SFML/System/Clock.hpp | 117 ++ include/SFML/System/Err.hpp | 78 + include/SFML/System/Export.hpp | 48 + include/SFML/System/InputStream.hpp | 148 ++ include/SFML/System/Lock.hpp | 139 ++ include/SFML/System/Mutex.hpp | 148 ++ include/SFML/System/NonCopyable.hpp | 119 ++ include/SFML/System/Sleep.hpp | 52 + include/SFML/System/String.hpp | 543 +++++++ include/SFML/System/Thread.hpp | 282 ++++ include/SFML/System/Thread.inl | 90 ++ include/SFML/System/ThreadLocal.hpp | 103 ++ include/SFML/System/ThreadLocalPtr.hpp | 158 ++ include/SFML/System/ThreadLocalPtr.inl | 77 + include/SFML/System/Time.hpp | 452 ++++++ include/SFML/System/Utf.hpp | 763 ++++++++++ include/SFML/System/Utf.inl | 774 ++++++++++ include/SFML/System/Vector2.hpp | 301 ++++ include/SFML/System/Vector2.inl | 161 ++ include/SFML/System/Vector3.hpp | 302 ++++ include/SFML/System/Vector3.inl | 168 ++ include/SFML/Window.hpp | 52 + include/SFML/Window/Context.hpp | 140 ++ include/SFML/Window/ContextSettings.hpp | 104 ++ include/SFML/Window/Event.hpp | 237 +++ include/SFML/Window/Export.hpp | 48 + include/SFML/Window/GlResource.hpp | 76 + include/SFML/Window/Joystick.hpp | 203 +++ include/SFML/Window/Keyboard.hpp | 209 +++ include/SFML/Window/Mouse.hpp | 167 ++ include/SFML/Window/VideoMode.hpp | 228 +++ include/SFML/Window/Window.hpp | 540 +++++++ include/SFML/Window/WindowHandle.hpp | 64 + include/SFML/Window/WindowStyle.hpp | 53 + include/damncute/AAction.hh | 55 + include/damncute/AGame.hh | 37 + include/damncute/APattern.hh | 75 + include/damncute/APhysics.hh | 155 ++ include/damncute/APlayer.hh | 65 + include/damncute/Background.hh | 32 + include/damncute/Bullet.hh | 51 + include/damncute/Button.hh | 59 + include/damncute/Core/Core.hh | 123 ++ include/damncute/Core/QuadTree.hh | 76 + include/damncute/Core/TreeNode.hh | 38 + include/damncute/IRenderable.hh | 14 + include/damncute/Menu.hh | 97 ++ include/damncute/Path.hh | 52 + include/damncute/SubMenu.hh | 48 + include/glm/core/_detail.hpp | 482 ++++++ include/glm/core/_fixes.hpp | 55 + include/glm/core/_swizzle.hpp | 861 +++++++++++ include/glm/core/_swizzle_func.hpp | 787 ++++++++++ include/glm/core/_vectorize.hpp | 159 ++ include/glm/core/dummy.cpp | 40 + include/glm/core/func_common.hpp | 430 ++++++ include/glm/core/func_common.inl | 1226 +++++++++++++++ include/glm/core/func_exponential.hpp | 123 ++ include/glm/core/func_exponential.inl | 156 ++ include/glm/core/func_geometric.hpp | 138 ++ include/glm/core/func_geometric.inl | 321 ++++ include/glm/core/func_integer.hpp | 201 +++ include/glm/core/func_integer.inl | 648 ++++++++ include/glm/core/func_matrix.hpp | 150 ++ include/glm/core/func_matrix.inl | 582 +++++++ include/glm/core/func_noise.hpp | 87 ++ include/glm/core/func_noise.inl | 364 +++++ include/glm/core/func_packing.hpp | 193 +++ include/glm/core/func_packing.inl | 208 +++ include/glm/core/func_trigonometric.hpp | 203 +++ include/glm/core/func_trigonometric.inl | 244 +++ include/glm/core/func_vector_relational.hpp | 138 ++ include/glm/core/func_vector_relational.inl | 178 +++ include/glm/core/hint.hpp | 40 + include/glm/core/intrinsic_common.hpp | 89 ++ include/glm/core/intrinsic_common.inl | 313 ++++ include/glm/core/intrinsic_exponential.hpp | 79 + include/glm/core/intrinsic_exponential.inl | 27 + include/glm/core/intrinsic_geometric.hpp | 76 + include/glm/core/intrinsic_geometric.inl | 146 ++ include/glm/core/intrinsic_matrix.hpp | 69 + include/glm/core/intrinsic_matrix.inl | 1070 +++++++++++++ include/glm/core/intrinsic_trigonometric.hpp | 48 + include/glm/core/intrinsic_trigonometric.inl | 27 + .../glm/core/intrinsic_vector_relational.hpp | 48 + .../glm/core/intrinsic_vector_relational.inl | 366 +++++ include/glm/core/setup.hpp | 694 +++++++++ include/glm/core/type.hpp | 341 +++++ include/glm/core/type_float.hpp | 84 + include/glm/core/type_gentype.hpp | 169 +++ include/glm/core/type_gentype.inl | 366 +++++ include/glm/core/type_half.hpp | 118 ++ include/glm/core/type_half.inl | 421 +++++ include/glm/core/type_int.hpp | 142 ++ include/glm/core/type_mat.hpp | 41 + include/glm/core/type_mat.inl | 27 + include/glm/core/type_mat2x2.hpp | 314 ++++ include/glm/core/type_mat2x2.inl | 688 +++++++++ include/glm/core/type_mat2x3.hpp | 258 ++++ include/glm/core/type_mat2x3.inl | 633 ++++++++ include/glm/core/type_mat2x4.hpp | 260 ++++ include/glm/core/type_mat2x4.inl | 652 ++++++++ include/glm/core/type_mat3x2.hpp | 265 ++++ include/glm/core/type_mat3x2.inl | 670 ++++++++ include/glm/core/type_mat3x3.hpp | 318 ++++ include/glm/core/type_mat3x3.inl | 800 ++++++++++ include/glm/core/type_mat3x4.hpp | 266 ++++ include/glm/core/type_mat3x4.inl | 700 +++++++++ include/glm/core/type_mat4x2.hpp | 270 ++++ include/glm/core/type_mat4x2.inl | 716 +++++++++ include/glm/core/type_mat4x3.hpp | 268 ++++ include/glm/core/type_mat4x3.inl | 725 +++++++++ include/glm/core/type_mat4x4.hpp | 320 ++++ include/glm/core/type_mat4x4.inl | 893 +++++++++++ include/glm/core/type_size.hpp | 43 + include/glm/core/type_vec.hpp | 41 + include/glm/core/type_vec.inl | 27 + include/glm/core/type_vec1.hpp | 212 +++ include/glm/core/type_vec1.inl | 928 ++++++++++++ include/glm/core/type_vec2.hpp | 317 ++++ include/glm/core/type_vec2.inl | 998 ++++++++++++ include/glm/core/type_vec3.hpp | 342 +++++ include/glm/core/type_vec3.inl | 1122 ++++++++++++++ include/glm/core/type_vec4.hpp | 399 +++++ include/glm/core/type_vec4.inl | 1348 +++++++++++++++++ include/glm/ext.hpp | 145 ++ include/glm/glm.hpp | 129 ++ include/glm/gtc/constants.hpp | 186 +++ include/glm/gtc/constants.inl | 186 +++ include/glm/gtc/epsilon.hpp | 94 ++ include/glm/gtc/epsilon.inl | 286 ++++ include/glm/gtc/half_float.hpp | 454 ++++++ include/glm/gtc/half_float.inl | 1050 +++++++++++++ include/glm/gtc/matrix_access.hpp | 87 ++ include/glm/gtc/matrix_access.inl | 80 + include/glm/gtc/matrix_integer.hpp | 506 +++++++ include/glm/gtc/matrix_inverse.hpp | 74 + include/glm/gtc/matrix_inverse.inl | 159 ++ include/glm/gtc/matrix_transform.hpp | 291 ++++ include/glm/gtc/matrix_transform.inl | 434 ++++++ include/glm/gtc/noise.hpp | 80 + include/glm/gtc/noise.inl | 867 +++++++++++ include/glm/gtc/quaternion.hpp | 381 +++++ include/glm/gtc/quaternion.inl | 792 ++++++++++ include/glm/gtc/random.hpp | 114 ++ include/glm/gtc/random.inl | 170 +++ include/glm/gtc/reciprocal.hpp | 133 ++ include/glm/gtc/reciprocal.inl | 199 +++ include/glm/gtc/swizzle.hpp | 375 +++++ include/glm/gtc/swizzle.inl | 116 ++ include/glm/gtc/type_precision.hpp | 669 ++++++++ include/glm/gtc/type_precision.inl | 32 + include/glm/gtc/type_ptr.hpp | 169 +++ include/glm/gtc/type_ptr.inl | 473 ++++++ include/glm/gtc/ulp.hpp | 90 ++ include/glm/gtc/ulp.inl | 318 ++++ include/glm/gtx/associated_min_max.hpp | 106 ++ include/glm/gtx/associated_min_max.inl | 912 +++++++++++ include/glm/gtx/bit.hpp | 140 ++ include/glm/gtx/bit.inl | 600 ++++++++ include/glm/gtx/closest_point.hpp | 66 + include/glm/gtx/closest_point.inl | 36 + include/glm/gtx/color_cast.hpp | 124 ++ include/glm/gtx/color_cast.inl | 733 +++++++++ include/glm/gtx/color_space.hpp | 96 ++ include/glm/gtx/color_space.inl | 149 ++ include/glm/gtx/color_space_YCoCg.hpp | 84 + include/glm/gtx/color_space_YCoCg.inl | 64 + include/glm/gtx/compatibility.hpp | 176 +++ include/glm/gtx/compatibility.inl | 60 + include/glm/gtx/component_wise.hpp | 82 + include/glm/gtx/component_wise.inl | 47 + include/glm/gtx/constants.hpp | 33 + include/glm/gtx/epsilon.hpp | 29 + include/glm/gtx/euler_angles.hpp | 156 ++ include/glm/gtx/euler_angles.inl | 244 +++ include/glm/gtx/extend.hpp | 66 + include/glm/gtx/extend.inl | 55 + include/glm/gtx/extented_min_max.hpp | 194 +++ include/glm/gtx/extented_min_max.inl | 178 +++ include/glm/gtx/fast_exponential.hpp | 99 ++ include/glm/gtx/fast_exponential.inl | 148 ++ include/glm/gtx/fast_square_root.hpp | 85 ++ include/glm/gtx/fast_square_root.inl | 136 ++ include/glm/gtx/fast_trigonometry.hpp | 100 ++ include/glm/gtx/fast_trigonometry.inl | 75 + include/glm/gtx/gradient_paint.hpp | 76 + include/glm/gtx/gradient_paint.inl | 43 + include/glm/gtx/handed_coordinate_space.hpp | 74 + include/glm/gtx/handed_coordinate_space.inl | 33 + include/glm/gtx/inertia.hpp | 115 ++ include/glm/gtx/inertia.inl | 114 ++ include/glm/gtx/int_10_10_10_2.hpp | 64 + include/glm/gtx/int_10_10_10_2.inl | 19 + include/glm/gtx/integer.hpp | 104 ++ include/glm/gtx/integer.inl | 203 +++ include/glm/gtx/intersect.hpp | 102 ++ include/glm/gtx/intersect.inl | 196 +++ include/glm/gtx/log_base.hpp | 65 + include/glm/gtx/log_base.inl | 24 + include/glm/gtx/matrix_cross_product.hpp | 71 + include/glm/gtx/matrix_cross_product.inl | 44 + include/glm/gtx/matrix_interpolation.hpp | 88 ++ include/glm/gtx/matrix_interpolation.inl | 131 ++ include/glm/gtx/matrix_major_storage.hpp | 143 ++ include/glm/gtx/matrix_major_storage.inl | 173 +++ include/glm/gtx/matrix_operation.hpp | 112 ++ include/glm/gtx/matrix_operation.inl | 124 ++ include/glm/gtx/matrix_query.hpp | 117 ++ include/glm/gtx/matrix_query.inl | 154 ++ include/glm/gtx/mixed_product.hpp | 65 + include/glm/gtx/mixed_product.inl | 22 + include/glm/gtx/multiple.hpp | 73 + include/glm/gtx/multiple.inl | 128 ++ include/glm/gtx/noise.hpp | 29 + include/glm/gtx/norm.hpp | 133 ++ include/glm/gtx/norm.inl | 156 ++ include/glm/gtx/normal.hpp | 67 + include/glm/gtx/normal.inl | 22 + include/glm/gtx/normalize_dot.hpp | 76 + include/glm/gtx/normalize_dot.inl | 115 ++ include/glm/gtx/number_precision.hpp | 88 ++ include/glm/gtx/number_precision.inl | 13 + include/glm/gtx/ocl_type.hpp | 132 ++ include/glm/gtx/ocl_type.inl | 27 + include/glm/gtx/optimum_pow.hpp | 91 ++ include/glm/gtx/optimum_pow.inl | 58 + include/glm/gtx/orthonormalize.hpp | 72 + include/glm/gtx/orthonormalize.inl | 43 + include/glm/gtx/perpendicular.hpp | 67 + include/glm/gtx/perpendicular.inl | 21 + include/glm/gtx/polar_coordinates.hpp | 72 + include/glm/gtx/polar_coordinates.inl | 55 + include/glm/gtx/projection.hpp | 65 + include/glm/gtx/projection.inl | 21 + include/glm/gtx/quaternion.hpp | 195 +++ include/glm/gtx/quaternion.inl | 208 +++ include/glm/gtx/random.hpp | 29 + include/glm/gtx/raw_data.hpp | 75 + include/glm/gtx/raw_data.inl | 11 + include/glm/gtx/reciprocal.hpp | 26 + include/glm/gtx/rotate_vector.hpp | 132 ++ include/glm/gtx/rotate_vector.inl | 215 +++ include/glm/gtx/simd_mat4.hpp | 206 +++ include/glm/gtx/simd_mat4.inl | 590 ++++++++ include/glm/gtx/simd_vec4.hpp | 517 +++++++ include/glm/gtx/simd_vec4.inl | 727 +++++++++ include/glm/gtx/spline.hpp | 90 ++ include/glm/gtx/spline.inl | 70 + include/glm/gtx/std_based_type.hpp | 83 + include/glm/gtx/std_based_type.inl | 13 + include/glm/gtx/string_cast.hpp | 70 + include/glm/gtx/string_cast.inl | 588 +++++++ include/glm/gtx/transform.hpp | 131 ++ include/glm/gtx/transform.inl | 90 ++ include/glm/gtx/transform2.hpp | 135 ++ include/glm/gtx/transform2.inl | 154 ++ include/glm/gtx/ulp.hpp | 29 + include/glm/gtx/unsigned_int.hpp | 26 + include/glm/gtx/unsigned_int.inl | 13 + include/glm/gtx/vec1.hpp | 137 ++ include/glm/gtx/vec1.inl | 27 + include/glm/gtx/vector_access.hpp | 85 ++ include/glm/gtx/vector_access.inl | 53 + include/glm/gtx/vector_angle.hpp | 88 ++ include/glm/gtx/vector_angle.inl | 57 + include/glm/gtx/vector_query.hpp | 112 ++ include/glm/gtx/vector_query.inl | 164 ++ include/glm/gtx/verbose_operator.hpp | 83 + include/glm/gtx/verbose_operator.inl | 124 ++ include/glm/gtx/wrap.hpp | 73 + include/glm/gtx/wrap.inl | 165 ++ include/glm/virtrev/xstream.hpp | 166 ++ libs/linux/libFLAC.so.8 | Bin 0 -> 312176 bytes libs/linux/libGLEW.so.1.5 | Bin 0 -> 452592 bytes libs/linux/libGLEW.so.1.9 | Bin 0 -> 452592 bytes libs/linux/libdamncute.1.so | Bin 0 -> 2643296 bytes libs/linux/libjpeg.so | Bin 0 -> 2643296 bytes libs/linux/libjpeg.so.62 | Bin 0 -> 147824 bytes libs/linux/libogg.so.0 | Bin 0 -> 26648 bytes libs/linux/libopenal.so.1 | Bin 0 -> 364256 bytes libs/linux/libsfml-audio.so.2 | Bin 0 -> 87412 bytes libs/linux/libsfml-graphics.so.2 | Bin 0 -> 301389 bytes libs/linux/libsfml-network.so.2 | Bin 0 -> 127426 bytes libs/linux/libsfml-system.so.2 | Bin 0 -> 56344 bytes libs/linux/libsfml-window.so.2 | Bin 0 -> 107674 bytes libs/linux/libsndfile.so.1 | Bin 0 -> 405552 bytes libs/linux/libvorbis.so.0 | Bin 0 -> 183064 bytes libs/linux/libvorbisenc.so.2 | Bin 0 -> 2943048 bytes .../freetype.framework/Resources/Info.plist | 20 + .../Versions/A/Resources/Info.plist | 20 + .../freetype.framework/Versions/A/freetype | Bin 0 -> 1668068 bytes .../Versions/Current/Resources/Info.plist | 20 + .../Versions/Current/freetype | Bin 0 -> 1668068 bytes libs/mac/freetype.framework/freetype | Bin 0 -> 1668068 bytes libs/mac/libsfml-audio.2.dylib | Bin 0 -> 177080 bytes libs/mac/libsfml-graphics.2.dylib | Bin 0 -> 1691316 bytes libs/mac/libsfml-system.2.dylib | Bin 0 -> 117040 bytes libs/mac/libsfml-window.2.dylib | Bin 0 -> 364660 bytes .../sndfile.framework/Resources/Info.plist | 20 + .../Versions/A/Resources/Info.plist | 20 + libs/mac/sndfile.framework/Versions/A/sndfile | Bin 0 -> 6602736 bytes .../Versions/Current/Resources/Info.plist | 20 + .../Versions/Current/sndfile | Bin 0 -> 6602736 bytes libs/mac/sndfile.framework/sndfile | Bin 0 -> 6602736 bytes src/AGame.cpp | 62 + src/APlayer.cpp | 64 + src/Background.cpp | 31 + src/Bullet.cpp | 53 + src/Button.cpp | 108 ++ src/Core/Core.cpp | 177 +++ src/Menu.cpp | 212 +++ src/Path.cpp | 51 + src/SubMenu.cpp | 16 + 381 files changed, 73702 insertions(+), 2 deletions(-) create mode 100644 Makefile create mode 100644 Makefile_linux create mode 100644 Makefile_mac create mode 100755 assets/linux/Makefile create mode 100644 assets/linux/launcher.sh create mode 100644 assets/mac/Makefile create mode 100644 assets/mac/util/Icon.icns create mode 100644 assets/mac/util/Info.plist create mode 100755 assets/mac/util/launcher.sh create mode 100644 assets/resources/bg.jpg create mode 100644 assets/src/Game.cpp create mode 100644 assets/src/Game.hpp create mode 100644 assets/src/main.cpp create mode 100644 include/SFML/Audio.hpp create mode 100644 include/SFML/Audio/Export.hpp create mode 100644 include/SFML/Audio/Listener.hpp create mode 100644 include/SFML/Audio/Music.hpp create mode 100644 include/SFML/Audio/Sound.hpp create mode 100644 include/SFML/Audio/SoundBuffer.hpp create mode 100644 include/SFML/Audio/SoundBufferRecorder.hpp create mode 100644 include/SFML/Audio/SoundRecorder.hpp create mode 100644 include/SFML/Audio/SoundSource.hpp create mode 100644 include/SFML/Audio/SoundStream.hpp create mode 100644 include/SFML/Config.hpp create mode 100644 include/SFML/Graphics.hpp create mode 100644 include/SFML/Graphics/BlendMode.hpp create mode 100644 include/SFML/Graphics/CircleShape.hpp create mode 100644 include/SFML/Graphics/Color.hpp create mode 100644 include/SFML/Graphics/ConvexShape.hpp create mode 100644 include/SFML/Graphics/Drawable.hpp create mode 100644 include/SFML/Graphics/Export.hpp create mode 100644 include/SFML/Graphics/Font.hpp create mode 100644 include/SFML/Graphics/Glyph.hpp create mode 100644 include/SFML/Graphics/Image.hpp create mode 100644 include/SFML/Graphics/PrimitiveType.hpp create mode 100644 include/SFML/Graphics/Rect.hpp create mode 100644 include/SFML/Graphics/Rect.inl create mode 100644 include/SFML/Graphics/RectangleShape.hpp create mode 100644 include/SFML/Graphics/RenderStates.hpp create mode 100644 include/SFML/Graphics/RenderTarget.hpp create mode 100644 include/SFML/Graphics/RenderTexture.hpp create mode 100644 include/SFML/Graphics/RenderWindow.hpp create mode 100644 include/SFML/Graphics/Shader.hpp create mode 100644 include/SFML/Graphics/Shape.hpp create mode 100644 include/SFML/Graphics/Sprite.hpp create mode 100644 include/SFML/Graphics/Text.hpp create mode 100644 include/SFML/Graphics/Texture.hpp create mode 100644 include/SFML/Graphics/Transform.hpp create mode 100644 include/SFML/Graphics/Transformable.hpp create mode 100644 include/SFML/Graphics/Vertex.hpp create mode 100644 include/SFML/Graphics/VertexArray.hpp create mode 100644 include/SFML/Graphics/View.hpp create mode 100644 include/SFML/Network.hpp create mode 100644 include/SFML/Network/Export.hpp create mode 100644 include/SFML/Network/Ftp.hpp create mode 100644 include/SFML/Network/Http.hpp create mode 100644 include/SFML/Network/IpAddress.hpp create mode 100644 include/SFML/Network/Packet.hpp create mode 100644 include/SFML/Network/Socket.hpp create mode 100644 include/SFML/Network/SocketHandle.hpp create mode 100644 include/SFML/Network/SocketSelector.hpp create mode 100644 include/SFML/Network/TcpListener.hpp create mode 100644 include/SFML/Network/TcpSocket.hpp create mode 100644 include/SFML/Network/UdpSocket.hpp create mode 100644 include/SFML/OpenGL.hpp create mode 100644 include/SFML/System.hpp create mode 100644 include/SFML/System/Clock.hpp create mode 100644 include/SFML/System/Err.hpp create mode 100644 include/SFML/System/Export.hpp create mode 100644 include/SFML/System/InputStream.hpp create mode 100644 include/SFML/System/Lock.hpp create mode 100644 include/SFML/System/Mutex.hpp create mode 100644 include/SFML/System/NonCopyable.hpp create mode 100644 include/SFML/System/Sleep.hpp create mode 100644 include/SFML/System/String.hpp create mode 100644 include/SFML/System/Thread.hpp create mode 100644 include/SFML/System/Thread.inl create mode 100644 include/SFML/System/ThreadLocal.hpp create mode 100644 include/SFML/System/ThreadLocalPtr.hpp create mode 100644 include/SFML/System/ThreadLocalPtr.inl create mode 100644 include/SFML/System/Time.hpp create mode 100644 include/SFML/System/Utf.hpp create mode 100644 include/SFML/System/Utf.inl create mode 100644 include/SFML/System/Vector2.hpp create mode 100644 include/SFML/System/Vector2.inl create mode 100644 include/SFML/System/Vector3.hpp create mode 100644 include/SFML/System/Vector3.inl create mode 100644 include/SFML/Window.hpp create mode 100644 include/SFML/Window/Context.hpp create mode 100644 include/SFML/Window/ContextSettings.hpp create mode 100644 include/SFML/Window/Event.hpp create mode 100644 include/SFML/Window/Export.hpp create mode 100644 include/SFML/Window/GlResource.hpp create mode 100644 include/SFML/Window/Joystick.hpp create mode 100644 include/SFML/Window/Keyboard.hpp create mode 100644 include/SFML/Window/Mouse.hpp create mode 100644 include/SFML/Window/VideoMode.hpp create mode 100644 include/SFML/Window/Window.hpp create mode 100644 include/SFML/Window/WindowHandle.hpp create mode 100644 include/SFML/Window/WindowStyle.hpp create mode 100644 include/damncute/AAction.hh create mode 100644 include/damncute/AGame.hh create mode 100644 include/damncute/APattern.hh create mode 100644 include/damncute/APhysics.hh create mode 100644 include/damncute/APlayer.hh create mode 100644 include/damncute/Background.hh create mode 100644 include/damncute/Bullet.hh create mode 100644 include/damncute/Button.hh create mode 100644 include/damncute/Core/Core.hh create mode 100644 include/damncute/Core/QuadTree.hh create mode 100644 include/damncute/Core/TreeNode.hh create mode 100644 include/damncute/IRenderable.hh create mode 100644 include/damncute/Menu.hh create mode 100644 include/damncute/Path.hh create mode 100644 include/damncute/SubMenu.hh create mode 100644 include/glm/core/_detail.hpp create mode 100644 include/glm/core/_fixes.hpp create mode 100644 include/glm/core/_swizzle.hpp create mode 100644 include/glm/core/_swizzle_func.hpp create mode 100644 include/glm/core/_vectorize.hpp create mode 100644 include/glm/core/dummy.cpp create mode 100644 include/glm/core/func_common.hpp create mode 100644 include/glm/core/func_common.inl create mode 100644 include/glm/core/func_exponential.hpp create mode 100644 include/glm/core/func_exponential.inl create mode 100644 include/glm/core/func_geometric.hpp create mode 100644 include/glm/core/func_geometric.inl create mode 100644 include/glm/core/func_integer.hpp create mode 100644 include/glm/core/func_integer.inl create mode 100644 include/glm/core/func_matrix.hpp create mode 100644 include/glm/core/func_matrix.inl create mode 100644 include/glm/core/func_noise.hpp create mode 100644 include/glm/core/func_noise.inl create mode 100644 include/glm/core/func_packing.hpp create mode 100644 include/glm/core/func_packing.inl create mode 100644 include/glm/core/func_trigonometric.hpp create mode 100644 include/glm/core/func_trigonometric.inl create mode 100644 include/glm/core/func_vector_relational.hpp create mode 100644 include/glm/core/func_vector_relational.inl create mode 100644 include/glm/core/hint.hpp create mode 100644 include/glm/core/intrinsic_common.hpp create mode 100644 include/glm/core/intrinsic_common.inl create mode 100644 include/glm/core/intrinsic_exponential.hpp create mode 100644 include/glm/core/intrinsic_exponential.inl create mode 100644 include/glm/core/intrinsic_geometric.hpp create mode 100644 include/glm/core/intrinsic_geometric.inl create mode 100644 include/glm/core/intrinsic_matrix.hpp create mode 100644 include/glm/core/intrinsic_matrix.inl create mode 100644 include/glm/core/intrinsic_trigonometric.hpp create mode 100644 include/glm/core/intrinsic_trigonometric.inl create mode 100644 include/glm/core/intrinsic_vector_relational.hpp create mode 100644 include/glm/core/intrinsic_vector_relational.inl create mode 100644 include/glm/core/setup.hpp create mode 100644 include/glm/core/type.hpp create mode 100644 include/glm/core/type_float.hpp create mode 100644 include/glm/core/type_gentype.hpp create mode 100644 include/glm/core/type_gentype.inl create mode 100644 include/glm/core/type_half.hpp create mode 100644 include/glm/core/type_half.inl create mode 100644 include/glm/core/type_int.hpp create mode 100644 include/glm/core/type_mat.hpp create mode 100644 include/glm/core/type_mat.inl create mode 100644 include/glm/core/type_mat2x2.hpp create mode 100644 include/glm/core/type_mat2x2.inl create mode 100644 include/glm/core/type_mat2x3.hpp create mode 100644 include/glm/core/type_mat2x3.inl create mode 100644 include/glm/core/type_mat2x4.hpp create mode 100644 include/glm/core/type_mat2x4.inl create mode 100644 include/glm/core/type_mat3x2.hpp create mode 100644 include/glm/core/type_mat3x2.inl create mode 100644 include/glm/core/type_mat3x3.hpp create mode 100644 include/glm/core/type_mat3x3.inl create mode 100644 include/glm/core/type_mat3x4.hpp create mode 100644 include/glm/core/type_mat3x4.inl create mode 100644 include/glm/core/type_mat4x2.hpp create mode 100644 include/glm/core/type_mat4x2.inl create mode 100644 include/glm/core/type_mat4x3.hpp create mode 100644 include/glm/core/type_mat4x3.inl create mode 100644 include/glm/core/type_mat4x4.hpp create mode 100644 include/glm/core/type_mat4x4.inl create mode 100644 include/glm/core/type_size.hpp create mode 100644 include/glm/core/type_vec.hpp create mode 100644 include/glm/core/type_vec.inl create mode 100644 include/glm/core/type_vec1.hpp create mode 100644 include/glm/core/type_vec1.inl create mode 100644 include/glm/core/type_vec2.hpp create mode 100644 include/glm/core/type_vec2.inl create mode 100644 include/glm/core/type_vec3.hpp create mode 100644 include/glm/core/type_vec3.inl create mode 100644 include/glm/core/type_vec4.hpp create mode 100644 include/glm/core/type_vec4.inl create mode 100644 include/glm/ext.hpp create mode 100644 include/glm/glm.hpp create mode 100644 include/glm/gtc/constants.hpp create mode 100644 include/glm/gtc/constants.inl create mode 100644 include/glm/gtc/epsilon.hpp create mode 100644 include/glm/gtc/epsilon.inl create mode 100644 include/glm/gtc/half_float.hpp create mode 100644 include/glm/gtc/half_float.inl create mode 100644 include/glm/gtc/matrix_access.hpp create mode 100644 include/glm/gtc/matrix_access.inl create mode 100644 include/glm/gtc/matrix_integer.hpp create mode 100644 include/glm/gtc/matrix_inverse.hpp create mode 100644 include/glm/gtc/matrix_inverse.inl create mode 100644 include/glm/gtc/matrix_transform.hpp create mode 100644 include/glm/gtc/matrix_transform.inl create mode 100644 include/glm/gtc/noise.hpp create mode 100644 include/glm/gtc/noise.inl create mode 100644 include/glm/gtc/quaternion.hpp create mode 100644 include/glm/gtc/quaternion.inl create mode 100644 include/glm/gtc/random.hpp create mode 100644 include/glm/gtc/random.inl create mode 100644 include/glm/gtc/reciprocal.hpp create mode 100644 include/glm/gtc/reciprocal.inl create mode 100644 include/glm/gtc/swizzle.hpp create mode 100644 include/glm/gtc/swizzle.inl create mode 100644 include/glm/gtc/type_precision.hpp create mode 100644 include/glm/gtc/type_precision.inl create mode 100644 include/glm/gtc/type_ptr.hpp create mode 100644 include/glm/gtc/type_ptr.inl create mode 100644 include/glm/gtc/ulp.hpp create mode 100644 include/glm/gtc/ulp.inl create mode 100644 include/glm/gtx/associated_min_max.hpp create mode 100644 include/glm/gtx/associated_min_max.inl create mode 100644 include/glm/gtx/bit.hpp create mode 100644 include/glm/gtx/bit.inl create mode 100644 include/glm/gtx/closest_point.hpp create mode 100644 include/glm/gtx/closest_point.inl create mode 100644 include/glm/gtx/color_cast.hpp create mode 100644 include/glm/gtx/color_cast.inl create mode 100644 include/glm/gtx/color_space.hpp create mode 100644 include/glm/gtx/color_space.inl create mode 100644 include/glm/gtx/color_space_YCoCg.hpp create mode 100644 include/glm/gtx/color_space_YCoCg.inl create mode 100644 include/glm/gtx/compatibility.hpp create mode 100644 include/glm/gtx/compatibility.inl create mode 100644 include/glm/gtx/component_wise.hpp create mode 100644 include/glm/gtx/component_wise.inl create mode 100644 include/glm/gtx/constants.hpp create mode 100644 include/glm/gtx/epsilon.hpp create mode 100644 include/glm/gtx/euler_angles.hpp create mode 100644 include/glm/gtx/euler_angles.inl create mode 100644 include/glm/gtx/extend.hpp create mode 100644 include/glm/gtx/extend.inl create mode 100644 include/glm/gtx/extented_min_max.hpp create mode 100644 include/glm/gtx/extented_min_max.inl create mode 100644 include/glm/gtx/fast_exponential.hpp create mode 100644 include/glm/gtx/fast_exponential.inl create mode 100644 include/glm/gtx/fast_square_root.hpp create mode 100644 include/glm/gtx/fast_square_root.inl create mode 100644 include/glm/gtx/fast_trigonometry.hpp create mode 100644 include/glm/gtx/fast_trigonometry.inl create mode 100644 include/glm/gtx/gradient_paint.hpp create mode 100644 include/glm/gtx/gradient_paint.inl create mode 100644 include/glm/gtx/handed_coordinate_space.hpp create mode 100644 include/glm/gtx/handed_coordinate_space.inl create mode 100644 include/glm/gtx/inertia.hpp create mode 100644 include/glm/gtx/inertia.inl create mode 100644 include/glm/gtx/int_10_10_10_2.hpp create mode 100644 include/glm/gtx/int_10_10_10_2.inl create mode 100644 include/glm/gtx/integer.hpp create mode 100644 include/glm/gtx/integer.inl create mode 100644 include/glm/gtx/intersect.hpp create mode 100644 include/glm/gtx/intersect.inl create mode 100644 include/glm/gtx/log_base.hpp create mode 100644 include/glm/gtx/log_base.inl create mode 100644 include/glm/gtx/matrix_cross_product.hpp create mode 100644 include/glm/gtx/matrix_cross_product.inl create mode 100644 include/glm/gtx/matrix_interpolation.hpp create mode 100644 include/glm/gtx/matrix_interpolation.inl create mode 100644 include/glm/gtx/matrix_major_storage.hpp create mode 100644 include/glm/gtx/matrix_major_storage.inl create mode 100644 include/glm/gtx/matrix_operation.hpp create mode 100644 include/glm/gtx/matrix_operation.inl create mode 100644 include/glm/gtx/matrix_query.hpp create mode 100644 include/glm/gtx/matrix_query.inl create mode 100644 include/glm/gtx/mixed_product.hpp create mode 100644 include/glm/gtx/mixed_product.inl create mode 100644 include/glm/gtx/multiple.hpp create mode 100644 include/glm/gtx/multiple.inl create mode 100644 include/glm/gtx/noise.hpp create mode 100644 include/glm/gtx/norm.hpp create mode 100644 include/glm/gtx/norm.inl create mode 100644 include/glm/gtx/normal.hpp create mode 100644 include/glm/gtx/normal.inl create mode 100644 include/glm/gtx/normalize_dot.hpp create mode 100644 include/glm/gtx/normalize_dot.inl create mode 100644 include/glm/gtx/number_precision.hpp create mode 100644 include/glm/gtx/number_precision.inl create mode 100644 include/glm/gtx/ocl_type.hpp create mode 100644 include/glm/gtx/ocl_type.inl create mode 100644 include/glm/gtx/optimum_pow.hpp create mode 100644 include/glm/gtx/optimum_pow.inl create mode 100644 include/glm/gtx/orthonormalize.hpp create mode 100644 include/glm/gtx/orthonormalize.inl create mode 100644 include/glm/gtx/perpendicular.hpp create mode 100644 include/glm/gtx/perpendicular.inl create mode 100644 include/glm/gtx/polar_coordinates.hpp create mode 100644 include/glm/gtx/polar_coordinates.inl create mode 100644 include/glm/gtx/projection.hpp create mode 100644 include/glm/gtx/projection.inl create mode 100644 include/glm/gtx/quaternion.hpp create mode 100644 include/glm/gtx/quaternion.inl create mode 100644 include/glm/gtx/random.hpp create mode 100644 include/glm/gtx/raw_data.hpp create mode 100644 include/glm/gtx/raw_data.inl create mode 100644 include/glm/gtx/reciprocal.hpp create mode 100644 include/glm/gtx/rotate_vector.hpp create mode 100644 include/glm/gtx/rotate_vector.inl create mode 100644 include/glm/gtx/simd_mat4.hpp create mode 100644 include/glm/gtx/simd_mat4.inl create mode 100644 include/glm/gtx/simd_vec4.hpp create mode 100644 include/glm/gtx/simd_vec4.inl create mode 100644 include/glm/gtx/spline.hpp create mode 100644 include/glm/gtx/spline.inl create mode 100644 include/glm/gtx/std_based_type.hpp create mode 100644 include/glm/gtx/std_based_type.inl create mode 100644 include/glm/gtx/string_cast.hpp create mode 100644 include/glm/gtx/string_cast.inl create mode 100644 include/glm/gtx/transform.hpp create mode 100644 include/glm/gtx/transform.inl create mode 100644 include/glm/gtx/transform2.hpp create mode 100644 include/glm/gtx/transform2.inl create mode 100644 include/glm/gtx/ulp.hpp create mode 100644 include/glm/gtx/unsigned_int.hpp create mode 100644 include/glm/gtx/unsigned_int.inl create mode 100644 include/glm/gtx/vec1.hpp create mode 100644 include/glm/gtx/vec1.inl create mode 100644 include/glm/gtx/vector_access.hpp create mode 100644 include/glm/gtx/vector_access.inl create mode 100644 include/glm/gtx/vector_angle.hpp create mode 100644 include/glm/gtx/vector_angle.inl create mode 100644 include/glm/gtx/vector_query.hpp create mode 100644 include/glm/gtx/vector_query.inl create mode 100644 include/glm/gtx/verbose_operator.hpp create mode 100644 include/glm/gtx/verbose_operator.inl create mode 100644 include/glm/gtx/wrap.hpp create mode 100644 include/glm/gtx/wrap.inl create mode 100644 include/glm/virtrev/xstream.hpp create mode 100644 libs/linux/libFLAC.so.8 create mode 100644 libs/linux/libGLEW.so.1.5 create mode 100644 libs/linux/libGLEW.so.1.9 create mode 100644 libs/linux/libdamncute.1.so create mode 100644 libs/linux/libjpeg.so create mode 100644 libs/linux/libjpeg.so.62 create mode 100644 libs/linux/libogg.so.0 create mode 100644 libs/linux/libopenal.so.1 create mode 100644 libs/linux/libsfml-audio.so.2 create mode 100644 libs/linux/libsfml-graphics.so.2 create mode 100644 libs/linux/libsfml-network.so.2 create mode 100644 libs/linux/libsfml-system.so.2 create mode 100644 libs/linux/libsfml-window.so.2 create mode 100644 libs/linux/libsndfile.so.1 create mode 100644 libs/linux/libvorbis.so.0 create mode 100644 libs/linux/libvorbisenc.so.2 create mode 100644 libs/mac/freetype.framework/Resources/Info.plist create mode 100644 libs/mac/freetype.framework/Versions/A/Resources/Info.plist create mode 100644 libs/mac/freetype.framework/Versions/A/freetype create mode 100644 libs/mac/freetype.framework/Versions/Current/Resources/Info.plist create mode 100644 libs/mac/freetype.framework/Versions/Current/freetype create mode 100644 libs/mac/freetype.framework/freetype create mode 100755 libs/mac/libsfml-audio.2.dylib create mode 100755 libs/mac/libsfml-graphics.2.dylib create mode 100755 libs/mac/libsfml-system.2.dylib create mode 100755 libs/mac/libsfml-window.2.dylib create mode 100644 libs/mac/sndfile.framework/Resources/Info.plist create mode 100644 libs/mac/sndfile.framework/Versions/A/Resources/Info.plist create mode 100644 libs/mac/sndfile.framework/Versions/A/sndfile create mode 100644 libs/mac/sndfile.framework/Versions/Current/Resources/Info.plist create mode 100644 libs/mac/sndfile.framework/Versions/Current/sndfile create mode 100644 libs/mac/sndfile.framework/sndfile create mode 100644 src/AGame.cpp create mode 100644 src/APlayer.cpp create mode 100644 src/Background.cpp create mode 100644 src/Bullet.cpp create mode 100644 src/Button.cpp create mode 100644 src/Core/Core.cpp create mode 100644 src/Menu.cpp create mode 100644 src/Path.cpp create mode 100644 src/SubMenu.cpp diff --git a/LICENSE b/LICENSE index be1d1ae..a3c83e4 100755 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2014 +Copyright (c) 2014 Team PsychoScientists Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +SOFTWARE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d609c09 --- /dev/null +++ b/Makefile @@ -0,0 +1,36 @@ +### General DamnCute Engine Makefile ### + +ifeq ($(OS),Windows_NT) +error: + $(info Windows is not yet supported) +else + +UNAME := $(shell uname -s) + +ifeq ($(UNAME),Linux) + +project: + make -f ./Makefile_linux +build-only: + make -f ./Makefile_linux build-only +clean: + make -f ./Makefile_linux clean +fclean: + make -f ./Makefile_linux fclean + +endif + +ifeq ($(UNAME),Darwin) + +project: + make -f ./Makefile_mac +build-only: + make -f ./Makefile_mac build-only +clean: + make -f ./Makefile_mac clean +fclean: + make -f ./Makefile_mac fclean + +endif + +endif diff --git a/Makefile_linux b/Makefile_linux new file mode 100644 index 0000000..b7ff1f8 --- /dev/null +++ b/Makefile_linux @@ -0,0 +1,54 @@ +##### DamnCute Engine #### +### Makefile for Linux ### + +SRC = src/Bullet.cpp \ + src/Path.cpp \ + src/Background.cpp \ + src/Core/Core.cpp \ + src/APlayer.cpp \ + src/AGame.cpp \ + +VERSION = 1.0 +NAME = libdamncute.1.a +DEST = ./build + +CXXFLAGS = -Wall -Wextra -ansi -W -O2 -I./include -I./include/damncute -std=c++0x -g +OBJS = $(SRC:.cpp=.o) +RM = rm -rf + +CXX = clang++ +LINKER = $(CXX) + +LDFLAGS = -static -shared -fPIC -L./libs/linux -Wl,-rpath ./libs/linux + +GREEN = \033[01;32m +STOPCOL = \033[00m + +all: project + +project: $(OBJS) + @rm -rf $(DEST) + @mkdir -p $(DEST)/libs + ar rcs $(DEST)/libs/$(NAME) $(OBJS) + @cp -R include $(DEST) + @cp -R libs/linux/* $(DEST)/libs + @cp -R src $(DEST) + @rm -rf $(DEST)/src + @cp -R assets/linux/* $(DEST) + @cp -R assets/src $(DEST) + @cp -R assets/resources $(DEST) + @cp -R assets/linux/launcher.sh $(DEST) && chmod +x $(DEST)/launcher.sh + @echo -e "Sample project created into $(GREEN)$(DEST)$(STOPCOL)" + +build-only: $(OBJS) + ar rcs $(NAME) $(OBJS) + @echo -e "Compiled as $(GREEN)$(NAME)$(STOPCOL)" + +clean: + $(RM) $(OBJS) *.swp *~ *# + +fclean: clean + $(RM) $(NAME) + $(RM) $(DEST) + +.PHONY: all clean fclean re diff --git a/Makefile_mac b/Makefile_mac new file mode 100644 index 0000000..4e9dd6d --- /dev/null +++ b/Makefile_mac @@ -0,0 +1,71 @@ +#### DamnCute Engine #### +### Makefile for OS X ### + +SRC = src/Bullet.cpp \ + src/Path.cpp \ + src/Background.cpp \ + src/Core/Core.cpp \ + src/APlayer.cpp \ + src/AGame.cpp \ + +VERSION = 1.0 +NAME = libdamncute.1.dylib +DEST = ./build + +CXXFLAGS = -Wall -Wextra -ansi -W -O2 -I./include -I./include/damncute -std=c++0x -stdlib=libc++ -mmacosx-version-min=10.7 -g +OBJS = $(SRC:.cpp=.o) +RM = rm -rf + +CXX = clang++ +LINKER = $(CXX) + +### PROJECT ### + +define SFML +./libs/libsfml-$(1).2.dylib +endef + +LIBSFML = $(call SFML,system) $(call SFML,audio) $(call SFML,graphics) $(call SFML,window) +LDFLAGS = -std=c++0x -stdlib=libc++ -headerpad_max_install_names $(LIBSFML) -dynamiclib -current_version $(VERSION) -compatibility_version $(VERSION) + +### BUILD-ONLY ### + +define B_SFML +./libs/mac/libsfml-$(1).2.dylib +endef + +B_LIBSFML = $(call B_SFML,system) $(call B_SFML,audio) $(call B_SFML,graphics) $(call B_SFML,window) +B_LDFLAGS = -std=c++0x -stdlib=libc++ -headerpad_max_install_names $(B_LIBSFML) -dynamiclib -current_version $(VERSION) -compatibility_version $(VERSION) + +STOPCOL = \x1b[0m +GREEN = \x1b[32;01m + +all: project + +project: $(OBJS) + @rm -rf $(DEST) + @mkdir -p $(DEST)/app + @cp -R include $(DEST)/app + @cp -R libs/mac $(DEST)/app/libs + @cp -R Makefile $(DEST)/app + @cp -R src $(DEST)/app + cd $(DEST)/app && $(LINKER) $(OBJS) $(LDFLAGS) -o libs/$(NAME) + @rm -rf $(DEST)/app/src + @cp -R assets/mac/* $(DEST)/app + @cp -R assets/src $(DEST)/app + @cp -R assets/resources $(DEST)/app + @cd $(DEST) && ln -s app/libs Frameworks + @echo "Sample project created into $(GREEN)$(DEST)/app$(STOPCOL)" + +build-only: $(OBJS) + $(LINKER) $(OBJS) $(B_LDFLAGS) -o $(NAME) + @echo "Compiled as $(GREEN)$(NAME)$(STOPCOL)" + +clean: + $(RM) $(OBJS) *.swp *~ *# + +fclean: clean + $(RM) $(NAME) + $(RM) $(DEST) + +.PHONY: all clean fclean re diff --git a/assets/linux/Makefile b/assets/linux/Makefile new file mode 100755 index 0000000..b7b71bc --- /dev/null +++ b/assets/linux/Makefile @@ -0,0 +1,27 @@ +### Sample DamnCute Engine based program Makefile ### + +SRC = src/main.cpp \ + src/Game.cpp + +NAME = sample +CXXFLAGS = -Wall -Wextra -ansi -W -O2 -std=c++0x -I./include +CXX = clang++ +OBJS = $(SRC:.cpp=.o) +LINKER = $(CXX) + +LIB = ./libs + +LDFLAGS = -L$(LIB) -Wl,-rpath $(LIB) $(LIB)/* + +all: $(NAME) + +$(NAME): $(OBJS) + $(LINKER) $(OBJS) $(LDFLAGS) -o $(NAME) + +clean: + $(RM) $(OBJS) *.swp *~ *# + +fclean: clean + $(RM) $(NAME) + +.PHONY: all clean fclean re diff --git a/assets/linux/launcher.sh b/assets/linux/launcher.sh new file mode 100644 index 0000000..473104d --- /dev/null +++ b/assets/linux/launcher.sh @@ -0,0 +1 @@ +LD_LIBRARY_PATH=./libs ./sample diff --git a/assets/mac/Makefile b/assets/mac/Makefile new file mode 100644 index 0000000..08e391b --- /dev/null +++ b/assets/mac/Makefile @@ -0,0 +1,48 @@ +### Sample DamnCute Engine based app Makefile ### + +SRC = src/main.cpp \ + src/Game.cpp + +NAME = sample +CXXFLAGS = -Wall -Wextra -ansi -W -O2 -std=c++0x -I./include +CXX = clang++ +OBJS = $(SRC:.cpp=.o) +LINKER = $(CXX) + +LIB = ./libs + +define SFML +$(LIB)/libsfml-$(1).2.dylib +endef + +LIBSFML = $(call SFML,system) $(call SFML,audio) $(call SFML,graphics) $(call SFML,window) +LDFLAGS = -std=c++0x -stdlib=libc++ -headerpad_max_install_names $(LIB)/libdamncute.1.dylib $(LIBSFML) -L$(LIB) -Wl,-rpath $(LIB) + +all: $(NAME) + +$(NAME): $(OBJS) + $(LINKER) $(OBJS) $(LDFLAGS) -o $(NAME) + +BUNDEST = $(NAME).app/Contents +STOPCOL = \x1b[0m +GREEN = \x1b[32;01m + +bundle: $(NAME) + @mkdir -p $(BUNDEST)/MacOS $(BUNDEST)/Resources + @cp -R libs $(BUNDEST)/MacOS + @mv $(NAME) $(BUNDEST)/MacOS + @cd $(BUNDEST) && ln -s MacOS/libs Frameworks + @cd $(BUNDEST) && ln -s MacOS/libs libs + @cp -R util/Info.plist $(BUNDEST) + @cp -R util/launcher.sh $(BUNDEST)/MacOS + @cp -R util/Icon.icns $(BUNDEST)/Resources + @echo "Your OS X app bundle was created as $(GREEN)$(NAME).app$(STOPCOL)" + +clean: + $(RM) $(OBJS) *.swp *~ *# + +fclean: clean + @$(RM) -rf $(NAME).app + $(RM) $(NAME) + +.PHONY: all clean fclean re diff --git a/assets/mac/util/Icon.icns b/assets/mac/util/Icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..8c7e874f4da7ce9da9d97278cfc9fad5f9f44bac GIT binary patch literal 47725 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 IhX4To2BwWrvH$=8 literal 0 HcmV?d00001 diff --git a/assets/mac/util/Info.plist b/assets/mac/util/Info.plist new file mode 100644 index 0000000..6853625 --- /dev/null +++ b/assets/mac/util/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + launcher.sh + CFBundleIconFile + Icon + CFBundlePackageType + APPL + CFBundleGetInfoString + © 2013 yourteam + CFBundleIdentifier + com.yourteam.sample + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + sample + CFBundleShortVersionString + 0.1 + LSApplicationCategoryType + Game + + diff --git a/assets/mac/util/launcher.sh b/assets/mac/util/launcher.sh new file mode 100755 index 0000000..cca5078 --- /dev/null +++ b/assets/mac/util/launcher.sh @@ -0,0 +1,3 @@ +#!/bin/sh +cd "${0%/*}" ; cd .. +MacOS/sample $1 $2 diff --git a/assets/resources/bg.jpg b/assets/resources/bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..567a6d09267d854b9b54e15b05b8e279360bc095 GIT binary patch literal 1723430 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

Blyn*7ym@8aS@fgTdUfWV6uft%%pV&Zp0wF& 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

q@PvI%87uNY1ph`H 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 z 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®rpjT<+GyPLUTECrO56OxM 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 z

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�bH`a@TUN3&S}XF)S)2 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

Y&xx3i;Bsrc>5&sk?Y%MDkR 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

!`Z((!FkX9Le&)9p`Et}bPS{9Z9BQI(?w zMaQhDP2F{?>M@5txb=NJvf!`D6WG+!_xnW-V^wRh0Ts;}roM9J+w~R(i&J`C2j+)b zAV3h@pH(S!yr>-=erD^7)=LG?P{6g<;_Ioih1y>h>@m(NU88w;+4p8ju{LvaXkxzc z{%V7pZ@Mt%q7`qqN>#Iaf$m88Kdv<*KO@LzraezH^+9Lm(9Y8Q>_oN5zWlQmGrc`? z;|oW5Q#$NS-EZxG7nQQI-|N!o7fcb*Q`F5WC#tyYUJhR=`q{d=J+mVl>1YF!_>)O> zQne^F3-XSbjRS|TKv=KZRCP*Tm)DN8Nzcj2NLw^moQWQsNv-Vv??zrJZ{yrlRr{p`*MLd)kf*B%%B zmQfHK3TVyM#Yz3Vk@Ri0${OF)g)s^C1IUK+{cUv&Ykj_ncmcPQHIGbosIc+3k%L_t{D44 z$X}1ckUVyUPI(q-YRzLoimTe)sqc3!om|PLLBR_bKw625B{@HVWH%k{v!^P@(S|Dg zjw)5wDS2&0q-?RW99EqZf)wYwXCY)FTf~td_MdjJDJXRE8<1&~LdHd#(L;7JHXMrp zHLAacQp1BskEc8QS?!+ix%cqBB!v(F(vAmgW!f2EMU76X7R7w#?S~6$Cf{XM%qdv9 z&jK|~WFq|OcB?~eccE|V5RMh!yZ0M|r~B=|eyU#N#t`g3F0Ct%IuB(HgYKA)0oN1< zXNpvuct;gi1&yCQFg^VUEM&a(qoUZ^la&Y?k@5Tjq_iV>4epnDyG~fYqeQvs(&>zd ziKW{P@&KyF?4L$YHFcX*9%JjwXc+^8O6jE~SV?!AN3rO{{V2*+5L)z|l6dBewmFn@2); z`FmuxY2T{04F}69Rm8(S8QV;@tHHZM@?j zaB?HBWP9!3tSaf^)oaJf{CK$`kL(NNqNJv=AY9snAlVImrsp*GCwm2iu5DS4e;Z*@ zCS;NVV2knxqTr@KlkS$msNlg<0l=*ko4i=!^lsK%cDwE<_Y`0V4MNh0mN#+%dZCr6sz4eKGGp`%t%R zt0h~>{zd+QK@|Q+0bq>-vSt7 zfqbQl;YkmDHU86Y=DMfjzd*lRB-=hT(dH60FA1SzaZS(DoJ>}bl2%G<2K~zK>bJ%N zh*an~r&Z_Onu$LuCKTmv#*zr`FhouGTn}x?4E(ihid8f-h!k)iI^gWR#D|J*8lW6@ z*O_Eh$o5#=H`@LU5gV0#;$75z9F>r_8$ zAg6WN;zp#{1JR$BJ*o|}f5MGTG0J$?J*id>`CfrgF7_8c+tRQc#%i<_GLbkEHd(Vc z_F=Y29(8NTL;2{E)cch6sb61-y#vzUx@%TsIICJ#TmR?7{jhot#Jwn7_x0X`^EWF3 z=&}*nQMvt2O^u`_f7gAF*G6LxHIL6z2*Im^!aGRS&$`nG@OM#GyVyg+#2+W=TL6Me z+Ev`i)XC361Mwz;-sQ%`fM;adu%`d|t4qjm#e*j4~!WhT1ImF2GQ1ORjIdj754 zxaO4@(LUpU^z66b??OhEGtd8w)F1o$;|*%y+pAZPb`)(zgLcBk;?BUOvI}Tce!8`Q zl?IHfUIU1c#~RelG$FbA=ZrI1C2m#ShG^v9yl>3_Pp6+jm%Ko27NP%rs6M{q;@t<0OXS7E!f#9Vb>^qEpy^RRl+5jgUsF7NEc2JJu*k1rBsdouXXFM zmDADL=Og9|aygGp`#WSTT`O8PY?_`mGet489%1;fHrKFt;mOWtywYcTfx)1I)w7fH zBC;-dhG^;ml-zF_%^A6gRhw8RfF~%Rh%0tf4SD6zF>xO5@SeqtF{H0F5`}DaipD#~ ze4{bxW8=H@@&g@5_@$@%eN^cR5~k?mxt1YAV_M32mqMp<;xx+%XAh)6G#1UB7}(V! z&MOIpaPrjk{u>^*b#?{C&M1cVNE#}KW)*AHl+EDWIGzPpJv}9}$KK|HYGX}#0Vo=S zGI3zmY^2b9`)NFw50dgb zuZvrO!r4eQ%*wjE)LZ7Rme%$RYZtpRiQrbg*xAV~8YyuBvhe3Tt(XZz@Q(*XtkqH2 zyX!7brR#`LCb4gFnZXvy-5Cv&>=YBG>fJLpruEWaIG9(_0ZNE{f$|;qJF%t;;q5HW z>>HFv%R<&e$Nv-O+W{5pN~Bs>W%B zjS+tSN|=0o42IU2KXa#qmT|!7uPbt9jCr>g1nz}D-~frok>QY7DC@wfaq#(5uH%z1 zVJc8(Q$vGbxT49PFc0EnIm!=WF#BfnCbIp;I<1ad02JB{hh6vodOx%C#JYf_xpAjp z=TM~HYo~szc37X@zrKRs{peMb|9I*{do0YGHReV4sZBSnU4!t*HqK;G+)okyrS(Ji z;weXp+f>@=w0mMeF+MJqD6BY|ofbOilo?QMYCyE#!c&N`6()sdv}G2QGJx5wH`Hnw zCI1#mFzUdEZl>|*+$Lh&qH3m}Ex`vEa#I$cA!K(`5_-3280n-U`C!#1GpAssi3s0A z7mbfyZn95^fW5bTeTHO75d`MGjEs;$ij{qolUqJf7REIM|*Fs&N?e0yRu)o{YylM+m^|os}@aS zPnT+)VC$;>^OccvzL`{ZPD?|GaXBi>Zv0^J4czwjdhmlBLGI!Ok*=yQ+IuOX)_13U zARk#D9K@7sP75D-w`G&O{uOO-@Ff)hS|o1K06{n1&gn128BQ%Gy;h<4OI z`5G}!xwC=K1&6Cv=#ubx$a8Y<-jDdC`H&aGd=^iPDwA$hU95K1G_hW2EJFR`64F`U zXEWfB|I3wv3v182eidc_y)wsDFgbhfaHj0%mS?BFi1FD#SCyo7+qOu;Ac9tlRMwK2 zjw;v*C%<d<0s}#c5ZzEKO9_uu{OhuV)0BCwl$%%1-3ndHaM`Rju?n_& zmx&u6--{tK=~G|EpI#m8+#GPg`cKesw#1TrAg}PE-G6JDp3oWx558bch^Q88sjhlp z!ll|gV7a)87}0(hmyf$S0J+PY)Y_e50E@w^Vm^Vj^Aa%FW+)M_K@~ZtHHR*cGgBGs zi`fI;35FF$Z(_0Sm`%KEpliZ!)P#K1#*sAa2jO^&XNI9!`|PJy>31Tq)_yqXI4gj& z1ez*xdjvs;$1v&8aLjh&v+{~RTG_{4GLMKvJ>z9+)hAIi4FJrOHYri?#=@=5CcIMH zSB+GsJB2U9b4I}s7F2D9tg5no@W`???u*11Quj6Eam1-wM(R0z;7JK@n=lEM>fqas z-^<;q-q&)1Zgy6MfEy^^gA_54wNNx~zGv;7Fu(Cn7SolMnqMGg6h(S$5ytnyEaQrQ z?j4CsrU2EpO$qa?j+FNd$%iA^LNDKdwvP11O$Nmlu(pdrze$^KHVn{3G?$i7E}3q-)~WDS zJn#C@yLC0O<2}%llIV6>#>C%hvDJQph<65$1r4(u$5XDEP2$jS62}S1`K&k&`Av;E zu1L);aK^S~Jo-SF1CO{%Ixo%K**>%hF{WK6+124=In5ER-Nfqa4Xcf0I15m{!XW*` zo~V50QM}kFDBfJO@aS!t_ONoF_yw?68dN!|D(4h7#MG_Qjkdi<-e(XkwapZ+Yg-*| znc5z*F?MYXxK?qHk}WUG5`$jQg;bln9b=^XLmwjwu-YsB#BrqVsD&CtuU zZQ0pma>J`@4(x3pSInQwzD=4V;Uhb)ap(`x^a%#Kgz`7Sn41Cp7fGEXXuGI?p(8hxk!pw4Zpf*UReEe5P~eYL}20N<06y}5;7sLJuOi1w z10NnFT@?f@T<1updXQXB7Ta%F4@bJWY@Yw}5JCKBM)^ujc*5rZ+n$TRB7zK*%F9jg z`1nUio*Yra{2_7>23$#|ZZXEZVQG%h!i1Hg+-xM(_^ z{d$)DkIU35tAQ_S#OvYu>}LXbvv0b>{nKt}Vw#1{uE+B!XGikqYVt|#nr=iaO)@)X z<;}~D>$bi+d*Ct>^RPV*nz?oUui9Zdv{xyNCN={c{|u<@yDpS77nqX79gi4eFMZ%N zf9DL&!fI%Xe50DYN0Vm1=yG}{foTz}`C}?a%BE6i0FkmcJUQaZwVb*_?wl8+qV@W7 z8u84r{iGsJ!Z&d@=OL1Xxs-4&`hDo%4T3l^a`YH1{pMw0=avs~E!+ssmdv zY3zMU$d*pwk7Uoy`P56%wUWQ)d7cuqVJV?QGSAn-y&A@~$N|8Krq*3{<#@mhJ?;m} zPDAoP>D!-6t6>?qpTZZ;fto{m;!IS)BV{=ZRy)g&RI$!+(zFA@DMN?O(8av~%=3qL zOzzfYzx+{l;iS5EV3_a#9kYDElKxx4sLA z0q8k8#_Jl)fp_DG_7WX_&i)MlhkGA=0R5(L?P^h<#`HI(m}4-}IPqzlJ~`uc2EMe; zorwB)|DteW=khHcu{7h(wX_3*cqRODA!QMwR^DE{wW38TXA!q|-43yU4;%M)p`Z`ODyh>}bS=gX>i*!UQ}4kB<8hqv`$qTad&>l>tGalzUhyi{tSF zfK~IGi&@xKA|cL|!||t+x5CHUkyv)MLO70{<2K&eW!S;Gx~;RR6&tm`%$g|q!+DcY zY&y|32500%Zr>R_!jsGGyUm=JN&^S<>99-@acYb8az%6~#fD=J1rXixex+uK`AS5G zfVM?6vpDVJPZo3d!ZngUSqpU#tvk4eYGt61&+iQA923>=0T$`+$MsBRJ_LonAQ-kuh|Sob@-6$$1Pa$&C`*Yn%JwMCYjU5G~qg1_WoljP;|1 zoxWkn^Ze`kTd`%-ZSj3Sbwr$wyYC8KxBXdDI+jMPB0-$J(azxORN2h_lU;lW5Vs6H zomkSP;~ynjFg5U*eh^OoDKZt!-X)=m(_^dGqX#c)Xuas>WlC4Fs|R83X>90X@4ETd_Mm=7DkAg5Z9Iy1{+M>M&N9b!Ob%G$fIJ!anX^&; zIh>{|4&sb9PZ)?8LSEqd6z=i2OQgL>P{B2`zV_%#y29H&#}m97-A@ieE%J3ScnXEx{LYR@{8O2G`q$5c&wStT%GzEHL5Tx~ zWg(FwZ#2qzoMM7h$6-xQMQs9dGN(4b@0IhuH#X490$-O)xDCrF;G$B;#hY9Fp1xHW z8*nH!`pbI_HO`Zj3q+9}->MvWtnS&@p`i_C!{*bB#7Q&pXVwK5A_%c@J&jz(Ep_M2 z^{X`2E z$Y@@yO}GPl!d*96tpt0TIv>RRaCqzWnTz#ZqIWXxU1-FXJB}SOI&)qcG{nW^ zV2gmEGx378&WDbRb&$4yv!4z$S>_C<3(1?mK86|TR?Mcb|4Ei%eRpDqgK zJ~`RV^mz23dpNqu;_{IZ=g1P*x)*E7J;9Got1K3KX;4G?z*ONAi<~PfDW!$qJTz|D zi@L5CsfD;oYXDMPG(@5!KAzq=)R4LxfYe9?-gwBD*s=cg-g%ubMyyii9%r}tkIVI| z!Ny|K&Uu7Ol}F%H3E=mZUT>b19jZ>`$Fq^zuAhFqC|)Mjs&7(L$8m&yK_eCc$px5l zpQL<(n7*Ofsy}TnZYxy=O)sfP_n*1aG*LQtyf@_VTA>?;5 z7f6s>bRW!E*Enq8is#}I;p*s@aXP=gTXc4sK=j8_OGVuho%Vk*xx*`^m=h66{N9Z7=?YmJG#TKz!2q$7SK(wMnN) z9KkvhH?@mfG<2!U=8)l|BIF*?qF^5U|J;~D6pRaV9{m{hgme5UkZw)X-Xi`QKI#EI zaZcwvx`IhBc?=sqE>v{4dkqBgc7})h}x}zthd-vGk z(aGy>aiZHbjbqULjydM}mrYp(up|N9mS0i7>|xuM=mwpoA^b`09=1 zRcFGb|D?pFMx5>~Y=>u>{k}p^@;oG{9%$XK&er(6KGVME%0L#kJ4LU@$vs={<}c;_ z-mP72WN3yNpRpgO!MACsqz8X}c2;w~j5TsXR24??sHNZ4mt?;X{?rPE?%L4>PsZ`V zRVAVFWDIx`fi^qzmH)zDg<1W=go(Z#$Ovi$^f|V#DfAa0y71SW6g+ps-K5@~G0{b?QdEPRY>A3YNVu5Ej_cEVU)VL|tD_xUi#;OH}6D<-qcCoq(iC!SO#@4a7r*g&v0Q+VUx9oHjS)i$r zN0kmjl@ELmOnMjdbWX{63jQv5`_xmh@kaUjrA2$PsVNDUNvkXa0RXFI3pMkCT}20s z&Hc2lE;hVotWR=19Tadgb==Eg?(Ub&vTB#XAThGoJolx)Oq8&hH2?FT@9f6|1`$AS zC{ybTQv*jE%MOdcwOAi+SwI;$W>Bcp48ywZJ$aJkG9dXO<0;m(M48-uGB_7=(=tE% zU^u#%m+o-5F1k9EoQ0RO3-}B`f>(&>P>1dYhSi0v%u!mUR4y%48t;w&QL2~hi-SbQ z==(+SIRtJ>7Yvgu0;?u}Sf-Bj-RL~!aI6>s_y4l-YDTn7f(ogwG+>m1m)UZ=pGBeu z;cs49fR?8+VfLnSPG+=fC*)AVb$(-T;MQ~22*s~Y(Qe>L?G^h3Gof2A6Ezci9NS#7PG*r)jCcpjcQojoj||z1x!MPd8r!k4uFfDsD*S zR2<}fodJYU!erSmk{rs%rl=nw&JCD|dlpyau|kzSs*~|>yAqYfYYMKLoN;F*hCw5Q zv>gp|U^i47>zmXBW`WE?S|q^(ia4hrpCPS7KF0=)hfQ}6b)we#j@q@qah6%gzp|)Z z4-ypN?*a(&Bpi=^cUt)V!F*>(AGs%ED+u*g%Na+kTr|D>XA`IH$r+TX>;_HIBeDxg zHmf9BdlBRN3#1<(O_Tca?5LLDQhQ6CGh|vx^f?}LF{oHaqX@4vM5eJrfn!yoc4e+aJRtD6V(+vJ2$BXG{jD$t4##9* z%6oO@F5J*tKIFZ}76ms+m*TC@wh9a7+b$EwxpWjJWL3|_SyoBv`6 ziaK@r!sg1RRYGNAs#=Xm)*@^yU3sM?Rt^O$V}ED8kZ*uKvl)>XC6`^YKsXKrTq$j` zKe^?!a-($9jr`UUHy*59qt89W?-PPHu(-GuW};mAgGTl*RoB^NMMuGYQL_)6>Jj&C z3Uj|CK7rX_vi%VVxxd!2uhW)`MgBA{V4`2YjJ8s$jfB?aQ5a4-~;5jwiB0GZQKx9|&^Tf+YIw7WzrD9{cyxqL~mdGATK#c9|v z)prKB^ptbOk~cPLyCz`1+On2QODQz0p;l-}#nfPs-$tM>oMMg{TnS!pA)O3R2;>CIQO&1TyQ(*@)M4)Hxt?BW; zu3TAF>HY#sYNGA6sfqMS$O=xo#l<-!=X0T1pHz!R5h;dXM`q0It$c5vC>S;jhiKHu zOUrspyu8A?d;Ph>-T=6@*6;h$_YIV0j;JtMIcSE1lZ8(;L(B0j?i=1Ygfml@D_lC^U7Big{2vZE;N~ z|10fcTm22L?w!qpPyFxW#XW^e+jXCv^|cpx8IqlIYQ$`_n<E5r);z<=|8UaCSS*m~ z74xxB3%c=^pk>uF8??GIi)&Q9jQ%k_os);VQnNSd>oMPz5m4{7C(GH24CckEA$CM=s9YEG!GJoV+3 zy*w+_H;`)yTBMB2M1V1Qu~oo;znOW;@2o(%NGF0DW}H+%vqJskL^+u$^{Vj5FJlS2 zHDT0ringb0RG;iG#S{8y*(bQMCLE;|UG49#ATsoUgDVmUP}l(y8<|8X27;>DIREC> zic>O02w<`^2=8){N}XLZLrLE=y5S|vc*+_vJ^HBMJd!P3)hMedJd#qgy_0jJzlcTo zJgJMwONU#PNe{@#ZJC&73uWi**kPS^e(rkOHje#H156E-N^)Aq@{TKa1@3|`t}Uqa z$?TrEljL<>P1uV#IfAq@Q#IFa!e%>VMz0sxLCCvG4;JZ`2yPBCP)!a#px)=`w9az9 zKE&RIWkABS{PQO*j&EJye(`I8`g3QS?m9il2qM6l?HESWYhfg+4q8mNrLal8{uYh6 z(6PvcE!g!g1eNyS5Rc-Z+mMZ0WA=+Cet?5;-pf~wD`?Dfb+;|0LEATC2}iDq`3f&E*Uw+2YRr#i%H|kv)Bkau<+SFW zlW*bzb4zrKGJ2;oDU5B19t*ELmp`BI%sd+?WQX;hy7*{&Bf|ZbSp1_OY!@;t(6JJgsKn{OR{T za`@>Nhv<22Sh`2le|f57MC#@YfxV@uH10HXpxQWrMjb*>-QRIEQl_zoV=U{Kx^&9? zRrTH1qAfKD)F2q|R=5^7C?GJgz83@}*tBlft4?giem@?&J{Ax5i0AE{ubsN3Da=%T ziDtPkmCRALM2yQb>)Mdx3<@+1Y)WuVmEns#wL3B(@PU7x?`X<1(54agi%H+m)iY{O zq6-GiEd1Pt2_O{#(CU<#${}!|{9v7l50Wt9^P2546tqddrO6Nmh~4TFP3_e= zBK67kU63YDFEKyvZ0?tWgF{VhW_!^u;_H>N6dpvc#;dH2K*>HEq({jUCRI1d~QEo$CPLr!aKAr79jQXMXMcV-$% zac`xR{MZ&cf1GZAH&3m^s|c``7n3%U+ilK&_xgvB(BhKU?z)ccd_@kH;U8CQVpnaj z^oSj2F!ukV?LEVi{KNNuP0Ob3VX5`Wy=N-!>XVA5mNUgs&J-2Jfr_KF>8hN$uyPM1 zCn^G&=2mi&B4ExGffNxZpC8};Fe4A)f zq}ynVvCbp1tX;Wr<(J3(zxxZTx7U1`_UA;K+OI&2dXQg#h675{C7XP+uk?N3cO6L3 zJD)wf@a(j~=_4%)^M5ysMTV;qGR&1hT0~2FEPD*&>wU8LT5_dsWQ>7%Mj1+{$K(rk zlB)5CUdG&5L+YQ8S#M{`+NYkdxSqXaC&1L`>7IB1{b9Q2YAWt}pL1GdPp1-yEkXA0 zNs=4`SE_e7Te5$x3`>n_?5a%?CUh;$?Io)5y3PtR@l9pjVY_gWnS(a#z1AiBnX?3F z39Desa39h1$F@uUtyV!0?h=DYE}x5h)Q)@PoKaRvm$>Zx(BxqXy&9bB?#gzwj@P^7 z0Mp1a`;u)ke5firz;{VVq;F-VJF*hxR;a_`fhO$P8RmPi2?&cNeqP|skG}6Od6^w> zLo>iFu5`}aG%aq~$@h1l^TPhuqgN8T?o%F|AP`#C8xiVJ7ndf6{)QE{F51wdLzd9B zl}I$JdHLs)ZEH=`Wtppy@cx;mvUzEA+rzdUSA(IJ{cDwn66sn}g$eZsr2_wmE@sZo z&M)e8ii3;xU`Lq@hq3lR4i=5BTro`yS%0|H^(0WqdtD112r@P7Tfu{`7X5uOT(^_q zuN&rnj6#qjomY<3hawY6l?$80Mx@3W3YFQ5L_6|L_U%8wr7i2GZj?Wuu znJ&9317&vHU8!uIj4f)Dhz$Zwu`RK%sV2A^ZJ@dpJbe14YS$6nwVk(oY{2Z67(8XE z)KUgcW%~0h$y^9Sw<)W5?Mn^|>aCwS@sp_-hP}Q$}l^rdu1U5h}aoszw;d+BVLC zCAacc*cvY_Ux5^d!uz5k*8XUrgb<;-zU99OlZ{(R{f-V1`_Z&fYAiie=C1o|M-rG` zi-qkE0MGVg!UzuEuDuQj*(q55wDiT^9!(rrpF9|T^P4;du8u=Bka^x?m}a(4vrKkt z(RS-fwrB-Fa#=quq;ENIA-t?qISShGXMdCEZosCk!W8wL6JJD?H8FPg4P(QIOviM0 zfVl`aq91MBh&ry?nQ}T#{q#jUDPZ@{dP{6NmI`OXR-0oXH6EUB8a7CROh0ys?LQ4C z?I;A&F!b7`B#5Din3n^essTSOAvA+vOJrA9n`fE34VOsh7^dwug^$@2eOHI0Z&g1) zUfo>Qv9>FPW5XJ-%vf!Fr97GEVt>olR(M#CI>8U z0Dzd^{Q2t)q;zI8)A(4t3)lRXdZ-D>oI>zoE{gH1K&G>pUZ@tq`*# zBy+_8{Jrvd7;X4r#>0ZlolQtC)`1GMbY;ZapX_t!v`v{8u}cUE0ai3!NYCQ9QsV|= z8`k}$axZBpXz12alJ{NGpvK>BcJqTZiIF_Y~f?fAqj6559`}-kNZ#=TwKDw@&xb9Zaa3cg)?&-Y=x! zh)nx~#%&Fi6u2peWYZJ2!fzzQX*@9 z=RJD3m>~F3K(tlw*p0;k^gkB9GTT-eCw8aRz%1`gP+^nR%MpaUgs?Le0FZk`eO7=8ud9YiDC(p+cDNLMM_2UQK^ zm*)Rr*4fv$Jxt2F47)^0ZJq~XNLA5(V~~FkLaF-sq1Q}bWp#J}|A+wh+F3NJ&WgE> zRoo~_yKz)4qM75TV%;ItxE`@V_OL%`87J*nR)PQ?H~67Kfy<_HWTc`Wshm9t5^3-5Mb+qXLO> zixJ9>2c9uKK{|q-V>7!5Hd*8c*t)Og|jXUH;tGH+FZvOnk zGl1V5FHyX@bf?CJAG=ky0ZmemGd?OHkT)9{UTo#eRe`L;a13s_;z%oG2rG8KFOV&A zdEhB|@;?1a1jEqx!RdZb%KVO_{%7Cq+I)ldHLj_hPf0T|pNQL<9NuI2DYClthZb`A z4WD@Ip?%}v>BkntUju58m-cQIgZy}Pp1WmkRRa)$8VZ{vQcHKke>MrSfHzN}7SEj> z!e9HUuF-qAZum4{SjgX{G926&0awv3FM`cjN+K}R@4L4o@KJ403l|)zfn?r7v$V zKu$Nqn=PPs`(75^;1kJ>zD^98M_Agxn%mg412E?e5hydp13aoW$X6z~e^mb*pu8lp zXb>q-YXIPBGAQQ<1AMI&HCrDld^N5UknMe}kzk9k77>kpaAeSNI*7KG-~r+nm5f`D z8}AoeNbyx@eR~qvyQ(w9%kLSwgU;$5Y&;C)LwxRXaRU8}4s$ouVgA)wcF_+UWgH0bMf70D4IoI&SRuqc`j zH4GKk78OQA4ec|Uqb=NL>ZQ99qy{+>AMGC z`X}#mogzgMR&ztc6U&kx2%?YKy(Kji634Y|pTW5n9R>!IP`qjUbsj74W^>w7c*Gk$ zbv5drkKCKUZl^X+#3s2Jyo+BcX9r^};*eo}oH61+?P4aVaZW+DwXO=vaBd!+cOnR)AG_u8SOvvK14p)=zf%{z#+eg@r- zM6`6bcw4P!NM!PsMWtcyf=B*GS)pM@#mw^rJ@NS#!p~}dHkhtGmLI4>W?=8d_u$<# z{@{%|;s$$r184dc7chLmI}-o!@BQi^xOkRVFOrdy2a5aI1XEOS5T}jGtLl-|_-($I zZhj)U^C@2eJ^i;A_~4?6&kMvib;$jU0bJF}CiXk8NIHoBy+5GUV12T7D>OE5*6fq6 z`GYUQ+FHV+ApK>0&{M8gO+Gx#q8dy9GPMgv zEsGegOSPoyFT5Wg$7;gENp{)j1{$q?Tocb*GPTsdr+$T7N`szx~p-v zZj9g4mO8le%ePz%P_+c267aN*(cR|-b$?)&#s;O*MT*m%{`H2|cMr!j+LX|}1dq(9 zn%=b_`_apGLENL{F=G6-z>|@im^yH8E&c8e=3ZT{LvSKftDEoa&qRz&xlZZ8WnOy; zwM?B{bFVZHylR%M-LIPa(d0t4*2Lc6EVM*i)l}v~p6GRx&1vQnGADW`Q)aC8=Ei`@ zouTU=%Y$IDIs}pKD8X>L1;sL)R~J>qe`25~c}f@%hH81salCrVQRW(O+VJs_(*|lq zi^RYBI6o({-sUK6iO3Tl2?O*X+f?4?4KdSuU$heLT}u-6<(ro{_)IK_%PlU1_|k%~ zIde8ylszg8{f9XQk9qMlH~xjFXM_-nwhQ;g9_Pt*A>b_*D;EE-QU>p~LR(%yGX#Qp zsdt`$D>CJH_r(vB8H*VV(jFt5elSUmRaSsV=1=T1x7WDwaA@#p7q4Yz9Du#c-mI9I z3Sx6n6XE#$%Nf|_F-u2SLlY;?mArVW709p#tinUnby+hoPH7Wyk+VZS*v%kX@$%3< zE`$;E@W}wcuwEK3f55%}r8k&HU9KN1j}4>ED6z0O4sF{I9~ERI_rb#KZk@oD9XtMk z^CZK>ylHg@=L7oD%oe+oc&+P#yA>-5M(1MncC#0;P0jc*en}|cf$=v8w)?c_cG{~# z<_>jtTu2i2Jbh|ahhC7vCM@o+8(+%y-5WGHwrU-hC_pO;h*)~2bX`@AJaG6_PchU0 z!~P`nR;?giYqnrZrl1HFWKhBXo7FSl^T0Gde&gvO%VmR>mGMnNe5mnhjo#ZcUFnz8 zf%?IxZO6vSH1hZ!%DMf=_b#qQG9>Z9D)Q5@f465kCB1fiiy-BaKLr!KC8U5shL0n~ z%ind19>^XFOIIbKwM@p|tH*}E`rXQ2#_}oX_)5JI(a-4Norox~`%|F%XUT%rBU#V1 zf`xfvxq;C`WBzA}zs_l-aEAHBYa%5?|Kn5VKhNXn@^yNZ>%TYVEE^Frh!sZ=8S#~V zzGnuj&pvh)ztNGVS0L0=dFmPbI3Mlv`l&sB%vz1LVPS|3^!>t$SzXSL%m^m)bcpe4b2U4a7DhvP_^D z;di#+-xfkYhU+61_v|3#=g-5b|M7)NWY2C0kEP7+?miIs-!!STn*KXR*&)_78bRvNRYll@6h-XwB!KfX3z z9I(vOGDPucP|Fp43-LwE#zIy{Ov_P*FTx2t{n`+pP#K)lx3Ek?6uEGEqWO5bCq(Oh z19OaqSbBEtnaNSXE%q{M<2sU0`di4jm!|3lW@BZZfI-f`tApSL6t~H1~#iv;v z7b_e}tdKk~#NMVEpS+P4!k(940SFK`_)q?^0#@(0HM1=`ZA_??FJ6dMK#fw*Gk0n5} z95RDY{Rs4)6|rG_wuyOy^dhy9%DIfbM%VauYWe z>DfE<=ZDeLit%#$YGud6R_2`c-*ItZw_%02^7q!BA=gixtT=J@Ex(ZDIw{ClLK3!w zOVCJ0D`rpw+qv)^gdmnwNzKBZw*f`qvLStJxu!b6VfE;<9n5cHp*&9K{%SLv7eclL zi&u!##nH))>7#qiZALw&)goJ3GEfD9gv);NLY2L<;!{Ft1qF+H*sMmpwp(={g@*sw z)DRo!Lo}t~-Dsvuw*q~E{5JjlB+j9ZtTyIJ;k&0FKu;4jfwyUlttmY!n`)I8Agg^D z1Dhh36@{^Pz#Cv&^k~eJ`9R6DPf%{%&m%t0n1)rQ$2{{CA*wz z%d~~FOx9t|*xt(f?e{l_PA_2I);(k{*B1RkrJp}yowW=0TAAg1e=d;X+I5DkZM z5CqP$=HZT&?v8n@?6HMfvD?FZ3u%7dB4OyygLK~^t+71>uBw}+H|WvWrL#(HJz8sz zg5!4eFaZM(_AR!PY6dCN?HN%XF`6+W0p@yrwQO@k5%W z{D*n4yl(M<$2?G@$dMoA6 z=)TPecPOxOJHT(7nPBy9Ye@N#$5-5NAH^y=BiVguNT)T*DJJc8r?U-sWTt;(Tiur> zVxzzw3CMkzHYV!sk4;-tmiX{4U8%!FUmz`auFkD9O9iQne%DwKOQI>5W|cL;Rz|zG z1I~4!?Ca;7A2qRYG>6GX8XRpCq->esVJ7t- zpV`%iqi#!j&+1>f%RGEHWH0W~8$uXznA7iXG9UlPJZ163l<729aVLrl(p;M$YX`la zFnt9rPz+`-I-a$(Z)h*KycOuRvZoUMqkqf(d^%ZcYi9k_{;rM|p~8u}GRz2rPo_}} z{v{Jj%WQQ7R#$CG>aECJQ(819bm2W2{dO}D z8S`ip=xa_E8ivbpB;M^oa%H>2LGq1Z8LpG*{ z3L`_xYaDv({p)a_!OAdsWUooml4dOBVfNEPopZM$hhO;je_0HhSM~#as4zr>!@02{ zG`J}b`~9$EgZ3~KJ-xLE9%|fcxNEz9J=yDpn_uVJ%||!E7$qaSdc;Od`Y3idH~tD5 z7Oqzc2Ilz*$?vrd9oM<1?2O8-G;}gQXRhZwX0=BjtikPhzuE0gE{A-u(bX0yB+C1WHp;#{0YSPD) z>;AIjK;scHxC*r|Vxb{PmKLR%l@>X}#AHV{d`H9Q`gLdb>3^$BS3b0;pZIm^89F!L zPeDD(rhGVe5&15!R{Leg&9B)Ggj{>1&f~Sq8vxW<{Sn2B8 zD2*7)Xlhy1K>~i)K-Lv3>M2ZIv&z%9iL`&>=_>L^AoT+R)PGaUXQYk6FqPgL|MB%S zw#=BG6J=CXTScS?2V%n$C-hwLtUon6=7@KNPAfG{?a@(GIE+NdTDSi3M-%)u;0qc< zWH^SMA1doRT8Ef=P<&z!{`uysp!B1lpeRXEM~BODSx+nb9~57PT{QI8V=@{MIk?@e z(PeRo>sK{`?G_yfPA2`=$}zCbrmZ%8cZcojIZ*Pez%y=s4y*m^Js}}mWr^=vgANJ4 zQlf_3)o#(b$avWQcjTRt{Z(Xnm6hBU-mxrSZ)Rh4zE0T6uC?+@) zeV6~x(S*-0>cU;znbp|5^!%~5=#^bIAisKru@F_OEY*^IHzzM5-Ra|Qj>n?{R(jMb z6x=30XD)Y7!B6Z`(dV9rtr)a41=)weP?up#Y%-ZCRM5}2@ct7kkxosE0`$1yGRJuO zf46FP?Ec>7>b*vb0XO{LgYXMxR;Me5t)-y1dxDSsF(w2=PlU$qGB$~|yAcP#1?M0J z>OVey92d01$#rjKgphdVOBx9;$|6)RLk1S(d9<7XCPpD=z}f&sT&5iCPw6Pe6#@zF z_l0wpi*Da32-;O5vBrp#i%>txfn(e*kAYNPrvnXcPghmTAd0S2*?beB)o!aq9&9|; z{qZ8)|35yEHWGh=wB-DvHzaK~Yt<_HeRSyf0^BPpcPJ1}<++VeZo5JX(K=04ew?`I zI3swSzrnYKS5j#JeJ?1Go(_%AQVt9vt;YyQ`U31E=>49Ns|)aoOXTvyX2R z40~`U{Jk9#2HW~cqM2A_91~9{r#L6lh=ClqJDLsM^xFRvE|}J`u#l0~o)AJRiblZo zw(#x>Fe=2YCMJ!*BJ!+1TA-Bk`^MsUmHPq{@2=*e5YLswI=P17U%oQQ})*_D;}#o64QA!g;~Z0Lk@d zp*{CS8E$ciamYawZ=isG>m zBzPq4ikEk^@F{P3zkVBNMEZoE*CfIHU*yE<)YviHBjraFWljSQyGOEYhKs#^y>D^h zY9l8PSLj!Bxd9xBR5rA5*YM3biEJ-SJ_1t=nOAzRmJWV>@pYED`2~NgWLw+NcU_|} ze=3EhTnHgzPC4_a!gl4y(;h4UQQU@>66r99#1k^>HF^M|)#hMWy6e6=2{@7|_)mSpLpHoZV6(jZ# z8fp&OYBEjMu5#TUuib5?udhNQ zEVoeUa%$2e=ZUJ*92|mxEB&W4VULU?0mBFJ0skG^d7PV|qdXRNIWsbn-vr!i=nKobnELNSg%xnroTa2s|n9Eae-ku|@JwXrjBNjxIPS zz3O4m#)FKsVGa%a6h|kdg^eT99V3DmePx>tffyXep!0jg*I%y2=r+;azLqx@7YA*e z?;U@i`&8sq$0=Fpg^2fO38?33Se7%4+F+q{IsD`h-&B8#mb@UZ3?=UhF5?;L-i{)&PxK)##K&w_9@UN@hgl>nxBF zndVhGK^fwuFcTr4f7m`+)#!ZKC9j01Z2SPU7%2ISnOg=mHBAiCZGUHg{^aEQ=56ep z10cg+WxW7uua_o$NnNi$m^GG<66r(TNrO4-RP+a@1lRj(6blxP7j-SLGczU+vMa?6 zC0+%Oed{mq1$cT!-94}EQ_{4s=xlP%jp=~KPNZ4ff9LjhGkr$2wWaM6;{G{cfXrKg zu#

a#Nl$JbpZrxUxVjbuJT9O}V*z^tK(;&u$AEsN~o_ozyV)Z`*2QrtH$rzch1A z8Rv#CpO4+iueJ;Y>X56=EpIWyUERvRY-=&Qpgoc3?2T2Tty;F8cZ&0!1rylqU@6<1 zM_)5}yUt(y&u!h5J*@?-nyx%4k_1HgL;EIZaqx1VY0Bh;-ml$&FSWj))6Qi8xk+d! zPbT`S=~4~@*>2;vH>4fNU;|RkExOt=Y}ZdrA5L<8zoO+ZIQvOb_NJhnkKmJDfhd&e zX@`Q@ufIeSIv%EsTSInu|%R6-SAbnccmMP%o| z(#P(NP`?^p{@Q+$Id}BqWuNq;WOHeg+aexny|atf61RR>U;5J|`~5i3Nvm*^T#ca; z2DjvAvx0)6vs|PZzhiaD(U35n?w~+wD{YS9YS=x*lupTVQkt>E^7m!Fl$7fbvDa}q z$zCRP&Qn#IP;P38keQHlVq;7`GZq9aQcLUqtT5X7Tgs-2I2~FY)hazv6jn>DZk5jc zof=qsxGO?=AgJHPL*qG7+*WH@qHsoa|4sSZ!LMV*HfJjq6V>=bfEiG{y2vM-$qh8L*G)Yscm`R~u6Hqz)9KdtJ z=N$WJ`}y#(A(CUnOg%Ha7>m`9cA<=0vF4R0#h#*C$ug0XaDA<=TIe&SEa z>=S)qElssY02BK!S-K;y_3b%J{xmmqgRAYzB-ts_W47|Vi{hA>Xv_0-z3?E=@V8Fc z1z!v0U@ngtZf z-=sh4wMm9>TxuN{1%(rBB;U5^9GS63gYD$5;NCmgr?#Bz1)gst{yIVs>((24r6O7i zOK5|0HwbQ+CR*$*+~P!sH_O2(3ES8%F~&oU$9gqIPm@Ewq)$$+>d$1~d(X@?xgX~i z=VJ_=Nl6h8`APJ44|INk6n0M2ey}tFZ1SS;cpU_-7ZpFdzO!9EmHXU?5)?lv#WEtKNS4CPPy;;yu$Jv|%#ylfwJl{y$d&6dc0L2@%v0`0GZ^hnG&ojFz57IE?LT=Q@5I`3 z&V2kz@p^6%2(=af9JxS`edLd`73QbuaF!c7x@%AMa<129|R9?x4|F$VkOjY&| zyw$%5gQKS+h_0Kh5GxBXs4>UJp=FG;kVP-3uKxN>_Ta=n3$J=5Qqr1U#{9c}!MPJ> zz6-qL7Yaqrjp1lG+ThCf$HgyEmy@k(#VEohphepVzm=**9+(K`YpGONn)Rb}qM#C9 zUXlyWPTi6X{UEvuJXkQ!3J6~V3`Lzd>rkWcu&VTGy-Sq>yeF&(!Lz~Qaep^utzJf3 z38%P}P`i*yMOD$@^5H=c*4!dtVaE8UV(Nt_wr_1CJgLuwf9g2sKPNcnMf!@!LalRa zeRroe!3>|Q5Od(rc-ikb_waq!Ha7EDP0&D>#|+iia@gbK@$Q9#MF{q5c!yzeqU)K? zmT{}ef*RBWuPEZ?1Im+Z%BTh_Js_pP((GO4HeT&*SWPcuFs2@3^j0e|9TWYSGwT&i z{I_C=r-rjx!fQBdQF7Q6uI~jkO_EK<)Rfzns|}I4ZBli^_`z{W#vI znIK2MLB3WQl3U1H3}W-8Gy^)WthlgUX3`tS$w+v$6Bt5+$JO(dy%K_6dGBgU#l-*PE8N>!tqu8@_1IJZr?GI}_Y+{WAWfY>aB^oPko2bX=} zRPHHy{GG1zL+9T=W9s_`nF*exUztxU$NoDnf^;hs+hr4*xN$y>i#ix^En|pOy@W-M zlEY?j5FfoqXoZcJ-4_xG$5r`_eym0TXfC4LcvdFcK^DCAa3*kop8Qr6B$a&~zLt#vt~OD ziRos1p~Fv`3&=(AU66&7(Ksx*o{7z;mN7Ranp^DJ$^O{@+$=G*39FmF^Rivc)L4VufwBVN_-A%cqj(eE1Tg*!l7rnuN6au z;Z!YVDQa?;&YPR6pR8Dlnm(&n-!<=L*%J6&pixzc1AAQXZV?DNJ?<`)YSl?ZZKgTD%Cq`fFMmX3b6e?=IpyRc06b+lu7U6NUDARCAJtD-b9{=lG3{ucJDSE|R!H_I@lOu*w7qcF^S z-qd=OH=n_^xpBt0LQ4iPZsRH*6lan_t=X~}{5f~x^-GE8?nlS|#XLI0H>37SGHk&& z$-yx`u1GHq!*+Xu=Z$s$D&hX)TV}mgo-b6IztiuTa4&a$?%!ZD>yI0qLj3$P19WTFCOgovO5R)Js@G?Gs?4@jh$KB-7o4=^1An0ya&g{Xwt2)K=F8)mS!- z8l*j#U7uOrenZ=w*ED42N8o>ud`Aqpw*yJ;FiXdx&AbSeA;Tw0R0;o!lFwOso;Mo8 zB}L~A05o$OUS1R_7Pkbv@HAO^-%CD2rMN*`;1`P!u=zR0E!lO){T4Yr9xg_rx>3wr z*99MV?$vgk0dz=gH;kc#TG^URG0mXS`sOw&mdhpIV^Q5{qjL?PvZgh6Bp+PKoPYjG zVMhBiU@4hmsbuSnx1jAt)$tyn93uDnP=e|CW5?4)jBh-DHc;@SWv{1#K8|RVy0nSU zJGkza_vQn?-zC`(f6XLxq^wQ$tE&4ozo6X0w_LIL&9D)PWR6ZA z7=t`qr)n==JsPUqx$#;NC|d)#_A!D}QcJ>3g9s?s_RXE=H_1-!4ZMgC776uW_%k%;eA#A61bFiI=|Lzjv5&r7L7>oyJQ|Hxo=kvO z%DkWcdBP1Z_9nq<|L5VCd9nmX>2${%KtPJ;^Nv0q8$~*U`hZ0vZthP7iMd54asOU? zVCdjUC}iXry)C&7c*cSboZ4l|EWm)C+v)oPH6;tIDv37}9S9R?c2 zzeexMC!bvg7}*lsrh0qadk`UGpZNTGg1Fc?{GjiutiZOzI9G+_k|9QT&9<+{z6f~Q z7`4#gXA6Mw5HD}v+&KHZcUb*iT)wqj2rTVpj;7>H2J)gNf~3s@BsLkzR)6fn=-=`w zy&lq?St^Wjm}`vPg2WCAtSeZ{<9)UxZ$t=$Phek?>#~l(^i0o0!OV`(zuZhsEOI6< zj>2pQFS|$BU%)C!Zvq*-qN487ZGR%dD!+_wc9@;+&51Hr&6@T%Q zzfa%8JdZf899*q=?w&|$?+v{(&`uE%WPH8C58cdad;cNckkA0-gTQX?eEg3OJX)#Z z>yV|b$raHmaF{N?T;*WJbanohBrsyyQLGyU8@QGwmL5vwG^dX0LqamBBGrjZ=2 zfLLVj;kR$U3UrlTKv8+XUoK5zB%#zkR9?-p)_XvjLq+qT%^R)DT&1zbz1{`h8tk|} zUDtWSXP3LG6EtGIUQzEo{pqjSf@g#o%2cImqP$cT{H0W3I1#g$r6iCw3XUqR^ zgt%K)ma$6uZqj)+*$PFL5G%$3vKSs%#fpvdD06>Vsb?zqiNU?P0i0rECwO8M9tLwM z_ir=Bi^b5~zM^_CQ8AJ7?C;U|TOKC9kl%JvAwNum8mYzEC)En3ItD=%)^soko&2RGZmxH9r_m?_8tCGWaI()ZD_nF<0z z8(8j>vp^kY7{b)KgsVByW*=n-_@dXp*`{1Cck5beGpH%5Cb{M8O(whUHKa{KD3&o} z5ly?{%<>&$K``rj&R1$r93KOEI*95r!7}9FhsbPJED8#;n858~a5*g2jr64p+;d&$ zzuBgliCO8)uNqw~y~K{Qc8#x&Q-RO8tQhX{?$lfp5a(n}#RxRYGl7Z-p%L(t%_-;c znoZ5bF`i}Dz%W`!Gq2538Xd9}F*;3;4d)#@BnGo-%(V1V=#h+3=>8NHgMgh0Dd1d@ zLEO_e&&*f`mcvl)v^b6^*gny%KhV-Bs;6`p3=fT3!HhFBU46TPEyaE?nqX!3!koie zAlfI@x~ksRz3^JRze+lG<8g*t+|6w9kWBmI;og@rlIXQ>F=Wax^{=(^Oy6}Nd;vX7V7V0 zns+KlHI}{>?+CheCRkDy`4UH&)u) zI0R|D(>BU)Yls5}^#tA@&T>9m?$C7k#FS2-jBw?>9~604o_Yz}1P}>ovdDiV{%bq2 zE5Z?qD=P2w@n}o+K1w=glqUy6c}ECtTp)h7()_G_714P@XOAuR?;JHMP?AmCo|&zo znWtyzIP&tlHRalZG*-qQDd`O?Fe1B)kCgjrW@oIRzYYk}MeC^3gXoaKk|lt}CB4>_ zmPM1>IzzFyM1E#on0Gj5DJNs)*8}oz1aWw+RE_znhg~K?!l~YVn%Gjno&}kr>P5GIlx0m0qazl(FSqa>S|bbHl}eL-7zzRN6b z)BA39d-(UYjF+4$r#QzG@T8JLcA=?^VcS&6?w<_s_;9VZc4d52x3<;KlJvwT>W>IC zr|A21GuAVW)}43IM8Y*x4qQySM%sGy@MOrHPyb{FgzfNNtd1Sz{tZjpN22<(S@M3v zBMGo9%0U=9pIHTd5XKU{2LQ~;_hhjwe<*`uu4;}gO>#kBu9TUTH^1I`V&ddsgYXKC&6SK22fQ-77b^cQ zcgy$UVtb&o=E7=sVRJ(1m$=$VOORt@E!(&1tKF)Va%LIYHq^4I8e+i$4S2D~pk{Om zMea#cOWsnSvM3?qLp$FKCDDMb94o?E(KTod$@F1|jBb%)p1GB-lH>$4d@u`vi;qf7 zwyb6;tg_wM(~g!aJl*&NJ8i4;;XC@}nCTwHV~Qtp9^T0jkjMN!{I1|p#?p;}L&5VG zN6bt0D%|LL23qvEx8e9d-nyYKqfHqYN3b0kON@=C)?y0S9gz$Fe9khqr|D^A%L^|B z^T}H|+4=@}C9PQM{SU!(TaV2M^+y#`VG51^@pZAOZk2)9{zpEGS^1KS18U4?k62?e z5&-tMswH4kte!h)C8$lC%8<#nE(T5WoDI#iB@TArM1X`PJs9zH@#Y~@2zGdh@1}1B zwXhTMDamb=9zo%-@UDr~ z#xpX~{8*by6zUQ#E*|-MZOf$@7LQ~ib9it0$SC26gqNY+Kp_c4idAHfPOs5WTM`Fv z#oJ%CG3|r5v@NVnC#NAK+-`Yg=-T-sXEUcq`5qLur&V<=JV%gqPdmT1_b0_0<@6KK ztB!S+&LqF(Wr*Q_d=n_rQ#8z<5LDNiq!ncpe+Y8aD&p;x%kLkjR%b(?p-uzmuaI*0 zt(!Ou4S{}5Y-@tUrWx(!QFDio=+!k65W2c)N!s`s5UrS(+LKXk zatHF{Bt$V#_Wl7UBf#hWGpmDQffNCvHL|-Ps*DYGXdZ(b*zB=aeMKdZhRzmwqf<>` z81y6)#z6}2S#KN74RpPoOSV3C^YsynKU=ld>uWRLQep<4If@zRw-ww=C|eZKMJJ;% zmY5aaQZ8qQ&3pw+N*|k&-WvdIMXM0w=B~e>XukAP`eNRD_hO!Q!UK|U@Fi{an+UD_ zc1}0gzG!hY#EmSyhLn=xXd#Aq?tr^;UccCb6ABfq7^Pb(O1d;S$=dcqK5)FTRm#=E z65BAvnVdVOl#k$7k`H+Ni@cEzV)|bE(|P$$JyyPPwY+#M)W*%97<3T8s|DJ3Kl(Si zR@+otljB95d65GcXOsc5nIp$=In=HS=v!$l;74dM6NvyiD6|ocfupQ=-@1Rnmeq`M zb>0tXa)|#sKWwLQD7D~S=0YXyojoB4Uusj0rGk)a2fT$#S!jtW!`e?!r`_Vy=0t?; z5@ymq>T^U>9{Z-SFTmZnhB(58a8FJ708V%%7zBr)Q8H;ER4VGB zb>2Y`l^Ra_pO&ABZ}^vqofRz4uXGv~J~^2kTMCpBYFXy)vXyAW+E8<%GmW#$#Maum zWHmLTn-4hHG05U7$fELE;@-Dw`ptZTqL0&BRspnvvJt!++CShT5ubHRF}x6d@Tb|zq#YJ$RXW_U34rRFxDvvzGmc zO7RRtwc1MfY-;BJq3yk*nrgo|OhgnLq96!@6zN@%UTt&%2_@1MrAz397O;Uz?Wv!g7yzhDU*}wffP(Mj6;|4h~ zZggT}vv?JwdX4@UxjC~j<72#gxj4AR!!Vt+EaL(5Y3)z_DV7}kwMe?SzrpjkGbjfD zB@TJ;D;i#B<#{xTmhevX6=R$7s&xL3$-@-Esrz1XUfZ1+RhLPQ2z1=YdW>9J5#4B7 z9F5e{NvVjLldm2R_BHJYnCP2>L>!qZJ`fuiKo3GaY;+wC(zJiDtxqj@UAOxY7!m)^ zV!gLcG5Bua_v!}Ckb_d5uBW*P(fdm209#`Ty0KV&;>mft@k^7@61Ok;$#svnt9OO) zOR#(9G|Vpy+^oa~CS!mPQ#iva_5WH;`y6)u$MoqN<{3Q0=I?ZUD@nt0&r_bZ$Wax* z{5a5Pf>j%~>%;oC)7=Cnkm+Au54*_&?^Bo3^%~6#$wXAte|89xTDFV3ED00gvJIP< zG=3SlIuZnz66-NmZ)@qF(tuK1tQFKT9S86;Q$eFC)znworX4(Rjd}m^YGrS; zE|u?ds9S-ARTFM6?;QMqFQ50}5gR-nR3#_c*jz&p&nDmUtlFqLKR^2Fu7##b+Gkct z?uR-y#;Baiw@HqVrG_ix5?_%QE4+%ReG+~;D!N@7AO6fqI9z{pQ_5guF-ryFT%p}( zjlmz;&2)3>b@4e}EVxe1(Txf+!oIHOAbp?l@5H>TsQwjt@Fp4ZNrL$C>R5+?RFjIt zjm)(!cwHcRV;zPlLFQro7Q?LONj%;e`-&k4jZn$KjFLHsZ@5CNUVfEH3(t%37d125 zc?teYvLLvF#-u}5ciuHySHnZ{Y(%>CNDiB(x#b?xyGJ_heSn!xH1`zE_jI#8vCz)I z^lCY2(0U1&9cWPmNTL%h{z;z@JMhsPy&}aE+UdRbLn5g%@4n-?-tqSywY>ce4Ic3L z`0K~tO0@)JDNCIR=R0s@ul=eoHoW)=kkeIq7=8tJX~EuaCKG-MT3IJjlnKMObX%4D zKKA`?KbcJk4zryb>fcwi$8l-@DkIoOA;6eUi$ip-A|@# zIGZQ%8aLmwzg(YrbPj>$f^zYtuk{Tr%jkmDZhuSmM+qxgiSxHouAP?ZTP0>^xk=D8 zV6-+VgMpol`jaR5h8>5c9eeb>ZT{4E9M7UA%C;}IJv8|JU~suN39q9#^|9@RSC`L3 zxfI?Szc_+NMAl^;k#Rd7X?0+6+4C!P-6C~VeeE2(Z=MP@riUch zgdDU<(}eA&Q<-{tbNHX9gRjRS;g8Oo<27Yx<1{f*Y;r}#Xz4_s!q4%80_?341IAHO z-G%@!b8}nUBQ@NVzAsvb)d082)wH*_Zx1K&THj7o>*VyEVeLo6veMJKpX_tZxh}lT zk{T<0Fxr$3_~$0mJ7hYE4{piZJ$l{fzC-;9liC4~8{OB6?@+3LkQ5xcq z5>(5T(A78+J7)^B9Z_7)#Y5455S6AL`_>KB4H%p3`KQB4iM1aRr<#IZU5o9qzaN1N zfU%Zi!$^Tqb*nuZ5*v+L<%Zz0Y#(rp)00ZK-SBX#&4;Q{t3(ly9nQ{4O2cK5zTf_R za==aWMG2?A^y3HmTNB~$rEwah=^dxZ!3Vbw|Au`BCZ5dLb>hfmtq=f2VP-&iBYZOZ z5|aCA)bZc)-mDzijL_lE=wy-u;o}g?xBjZ(V&8KXyj>>m!rTQuW*i@ljpbnX|Bz>n z&}B!EQ;!^VlPrswpN>sEE(ZlR(Wk)O=D67JnyI-wh10{rnVLy8=a^>IM7f4o%XbHT zVD)#@JuddzT4m*eBSL&e_GA8Dot77PM)$d(FJTrW5Dc-Bjxp_d)T#3mGr6;@>^_sxItM z%#QCy-HU4-xAqm#Uw1S05Xp1Jd|zPx*Jg)fp`>ldAWeNwY} z34Ti{v#~HD-gs4Xml6YnsO-ShqFzGRr`xrv|Ly1mMt@u3Ei!g-@bhVD*~F|&-&yhi zhi2_Ud?CBTyTA>*e8mydP$F zGWVL3V8hk3-`R&)VGXMdD?+=1NrBddH|c>?zJsV{#(TKReap_CW}u97?-520J&Mf3 ztUWurpL$>vZP_X~qe1@{(xqn~tFP~baEZVe-_oz;PY@^hj}A?T3&m$Ml-?5{1@`09YU|%-Bi~y)jO_}gPp%O(@6Jn-XKouFqlX0 zV|2cbHvxv5Q!3UDPfh?kYQdG?Y1u0Hc+w00UJh}l9)CI?vzow<;y}1ygQK2Rz*m zEyS&SWwc6m$ucbx%{j-Dj#$;1Lnkd${fjOq$4!P$pu$zDZ$24}CAD?JG}EEuJPy_AF+oMpw*{ z^T!70>ztv`ej#R*Sju2MP{&H6Pj1uy;(c2jT!tfV)z|NB53n5oFPM0G={O>ZQi*M*Bln05-&oY(N5BYyK)9{#B%37HXRiQaE1)*tYubMHb5+5fzHPd6_- zbjhb&MvH+nmxJj04GkUcs)#j?(pBUf zVHx2fm!w_hu4=?1#6)`xZ%2I!SNc?XRFBP6&<&<*!Ysc08>z!+J;JO{zJX`3*&P+q_5ra>nWWle(UIKQuzi-B zA3D2V>c_}sq@ccV%eiNP);AFG`8ot1x9NY^3}!E9il{#|U+9jCu!MtJbSW9TKXy-B z5ErJblBG~pBliiPm6v(19gjY=xR#@x*}AWn?1_Q6F#6uq=AstHZQC;d?7FCiaqefn zf2-frQ*UF1W$NC4m3YN_u6m0hCS%mFF2von+YDB~<=YRq!#0w~gY#9V-rRpBv@{ra z_rj2bgm%#V|CstmKhL!!ue}sGn4e4DOiJJr{E{^oXz`#&)B_gl!{9oCPkg4;sF)bt zKI9?kBqG)Efig39e%m?lV^ij+8gst)-AC{YC@k~nFk$87u9|#uy0Dnt15kmM!j*7! zb&2F-4}>_X(UGvTRsi&kJV+-^!|7KVr(J?$6ah{R)Zfo%4_CBdp5Ra?0Y*^fX#W(= zLMX?DkdFRiYIlio_!D9~#P+K`PAswaX_p#J;Pt}41drvj5~901qMKSchhmyrj2Vh} z=o(2WCPo+N!A^^j!DH`qew(fwR1ITtl70^sFQ>r1K~vlL!Sf$SX`(b=G7+8=Gafq? z(W2L~_#YFXEgpzTx+N$z`(k) zt%9~2kjC2qgg0W7U+1QzQ@5B0+dXlN&} zxHcisC#U1&S` zIP}}48ZG0u!m}JkOddL#>>!=SZe^Vql-8T>@K?{l)dw~j5?VKlV2jVM>Sc-Nc@L8R z2mNWd`Jx5J_YciAA^xH8{>=-#K+l5*tI46s$G-_pq(3lN3-S1xY&`=K+Uw>zWwT(m z5IV6a+n>;I?c1w`a=v7?yHaOgyJwZ!PE~)9WH(&!I(!NBh-WIZGuD&8p$gRd8Sxx; zAaSg(zmKhHPH}Qs-rK3qxg6tcddhl`Mi&V+00%Q#Ep;_1d8okKJq7f5A z{XTNqGKZAR49Mcq=D65?WryCng0e?OQ!V;Vd1M(77KUmEw?Endaw*_tNlO%Xuc1L7 zI@ovY10o2d7UIeP_#nZhv0Uu0Rq3>mASLnB6i6P|8o zgK38LNTd)^#F4nXRWuFdG`hV-`yOM@SgLNH6u-gWt+bN2#$FJg!DMJrb;<%x8At z)Rw1`9PmbdXj%cIt>PSXs?78a_V4(jEJ$XRhC;s^ry&V1ka0J|WP z4Bz@iXDo!P?X2o;L)x<^p3H6;LNLuuXka8GZbF>e{C3Xxd^G5IPsoGlzqs2?)Lu!w zcNC;p}2_8nOdVto@(--UgWW;-h;8f zjwsls6LP_0mxafm=UEE2Ph$>unAVsi|Cjf;b$O%B62nWzLHAi=9Dg(4yDQCgc@aAM zhG|#y6jt_z|Jm7h;W|2h&Ul_lTngH{ch#crokhLURSUoEHJ9GrX zYYevSnP5~JReyi$Kc(kbnyio>*xQ{J!w zb0UGyP69owzxzRr#&O(V0a8`>+}zUt(#Ib)p^mC*H|2VZl5~F-rOzr=Dm|EQt}os^ z;&gk11p1FDU~__Gt(aN-sdrO3Kw5d@d&Lic|EcG`Ux~dlawYMB*Sy{9(2dy@;D{j+Z6PsbVe#r& zSHmr>(?j={^Rk=wszHM%^1EBwbmzaPIr9mVsE`3&h~^qg_pwR8FBkRY83*s^f7jzY zbe(xlju(N&ah=4Uqfd)f)OBLQ@`4XnkqHp4|Cl)Y5g!VjODb&O(t&7%*-@4bz#a|R z@gcrGQTVw}2%J(WUCLB_-4^;W`|>Xj7i_wWY&`A9nXN_xZ6%a_{J#ckfYpa3ouy#t zt2{iRg0x>dK2?t37oF=}09+I+MfK-K$f#7BLZV0!wJ&WZgc{W9xd8@gzdoS*S4BU; zmF_01zfl799Pp=2A%cdnnHpkZU^uoaf5&VUggeyLNo^G3)B0t+vw!zv+ z#z}m4=IQ5u6_dwFU3#CE!@X&c!uU(7p}ZEhmh1K#2c&K@~+6VO{Q%%A4+-mPf<9- zV%8^8o^C4VD9$|&qD)H%WWCBfh<^%uxTsKkW-!9@MYVZRX8ByEbJK9*>pBX82m#Ya zJ_CXdFsrVD&_EDY!exAtPL`i zdHspm=P>Jx*-gIOuCfrbNRwb`=PGNrqX}b!p^DI28lLV`jQq$x(93?^>_}=`Yoz@A zsJ)mBu6qVNthMSfGI+s|Hqk29|*TJBmreuMqi)Jq;ZzrEVS^TcyF99JO z?5QBnRwJcr-xt7dX#|!J-FR%EbCc=jEVF(@YWIurg1S-xcUu3LgOA~>_1*2&#szKM ztvvI5J7uhXUm6HqYiZ0ts=fB8|EzmsPC5`W&98ryRgwu>Q14QQEj z(EHSJh}ScSNqA*6_|7wLDmh=X(z$LLM2aX`Ksosl`vbeIeJ`gPJaA{>_kenc_-P+P z`9}hQW_1K?cuThvffRgiF)Muu;u!od8%HVIhiL7A`&)u5piEOYJa}h06Vv|f50w{D zD_6%UaD51U=ETocK@6^B=J%=@WF`?EKZN;82z%Lq&5jkNdT15RJl<4l=H+;JA^Fvn z-s;|x*(W8M%;88`=S$gA`hzmLa^A3d!e)djgLe)ZfYm#FnZL_eLiAhJBwKGKbY>RG zvKdor-lNK(4E!`Wn!{nQIgy`i*l%tur!Vuqe8H2xb~6xl2X$BmRy4Y6lG{1EUV1^p zKw8rLYdYe7iHlFd0-tm2PFnbc5wN8haqwN0W$XuBHQ9E*6 z2p3CGAC+@$ltmnOfzKfk*iv0AoTiOZ?d6{8MS^~sj|v7u?P=u%n^lw*cZQe=`@ zr(;uZVzQk(?oW6U{%<>rtGAo74bN6D04i-_nTwyMBQm2!t1|5EUJppQ@8%mDl)SuP zU6vOgb1972fmE{Z(R`3uLyMY*xa-z#LM>|&< z?KPKm6;%EMAKhV`4QQKBG8`{ID9z)mH249u^+Y0J+%h44d|cqf9AoyrhU@Q#fb0o2 zS!x%Z3=2p>T_zEeU22oZqs0C{#h==G-xp}VDwW{vvYv+IC68oKM-llu3WDqtRHe_s zQ*<`3Ez-n!*a85bOQJY5+VrPC`}{)d;zO?A6&)#Wn_ym$Km<#nEzjq2^B${rpzIdk znZ4$`nJKbgaXSE^VV-4j*EmQw96d;@j6HI2z>q_<^v?Y=?Z~OOk83RQ#_CsDR@bC! zC44PT?H%T}V*6M3MU~e0&WpL*AKt^^-VpHbSXugElD&=F-gFVNik!dDpMNy12*+2vbPX1kK8_e~Z7UfRU8Sj?!K12`NhGEh}>ed)7h&2Yy`cCb_H zg0wM$@Zy72of}xCKht&Bp1ilbHA7A;&6#i1s4y6Q9{>WFW~~;7hB8Wl{C=tnJK5>$ zb9AInLV+;(w}nXRu_L1m$0Y857>jQ7F^C2E(aPQ?DhN)_XG@(8Y>Cnrfk#IMl&c7vtb!j^AGoN0%EYSVU--lRbCIPA(okl*qL`CEsE06Cv!g;?Kr* zfO!M62|%cF8c6y;Pay|pBrsmLe869{LENGe&6HdGw%x7gZYn@zeBIZN)<#2dk)?$Y z(7CE+6Gw-3{x}ha?Y5>NXqnrof0I)<;osy1S;e$5Te)omnpWjWrEFR$TU~ zn=h?64xvUyAXmygu}^^6fV=^bBVMPw_hbiTgrzesIPEKoR`=MsJO@4aBh%F}zjUd* z3y!WYS1F>wU3BF4bmDnD2f53QA09f>dS?LOnk`&Crg2!}jl?ke0w}oB%;K5hnS~mB zZkuAO`wLA??KWdp(C>Z*h|=(0|9AvQg{7CsdwW}XuR75X z$SKU}=zyW~`tD4Ty#e;qr&yR2fi7*tuEuL99qRkn{G2m9aGdLNXS)JO+j zfh#X36ki$}OV7=XDtED7n!>KOxR&P5I=ayoOo|ig7C^q5lhjC`!#`oHNh$>&ivjgx zQMY}<-NkHg65)>)G8u>eKmp1ryK?3w}lxLaMV#Y^dDhpFX~=pKMl)ZX~f zfLNqgXw;r&cuzDG`1jc`xU2h!y39T0QY(bIsu}}B~<^v~` znGGu`bTzO0OXYZq)%pnId8*Yjvq5X#w_ihSYv&G;hG2vm>WyY@v@v5lzVYJu+Mh)k zrQ^~sr&5yF@?;5R0=u{f~$Ha(Cm1f|NKuyUWe0Z*%5nzo)XuU7a7t+F^FC>@) zjo?q*6@3-+>2N=4z$ZpdzmgichC6lMr5rPdxc4k3vr3e+fT_ge`B(s9-1}&kiUPNk zJEjzk9O>*vW25zdr7rlhdj8VbuxMC8Sv*<~vLMN+j{7jI%;@HP3b1VH=hb}&=Mf+T zjCJyZM1#kM<9VM%zSGNQ9}p4oH8{OC5_lFCCb7IAfX=Ki%(Igaud{cmq*CjTiYt^! zCbl5Ok;6$fB$Dp(?`)f^zlOy7G+e;pN;0g2J=$yAufpX$F%tDJa_w+JZXd5gAQA{T zoF9Rfy>=*wa&d=(eaPD z%FbY|qpdL10}03>h)%4|h{I`xMtJT-_^gqS4zuN6FXTSp6?6J^-U4gBd^UZ8iM=UM z=PeaTt3pN6$OkRXLlw0gg%>f9+px+FYK5tTE(XkD8aAIhKO@W+3wgKV`TSuF509`z z^OCy6Sdc>(ddwjM0LJ1+eTYtxkoCnZ!H583o!~6gD@3GIaK!3ZI*Ge3^+5G^|IY^s zxig-r>1Sk?+wZt(3~6Yn51yAXwoXiMnkkpKtqdHW+^1ur7b{eRNFQ!gZImMN3H4r; z;eM#XKLUK?+Q8?)^|*NlE1^aoWA|)R&RgjZ2QK&aiF#jt?oYOmbL6QA)2!INaiaiR zR#a@MCnZ`nRSVH`#+qKsku4#Cj*)->rwnt8uQH6d%Q7Tjwtzb(tO~Lo#SR3xhNZpm?7J*`JB&CrWs@5blD-7QnU>-0 z*TBykbX?cE`S{z}wDmg5f5Rnu3Gr;^W}h1-?2r9c$?L zEh=MBNfU_69_^DdwzkQ#-*W6xSFZp&*bmawaNy~KDpGi7G_Ca)PHgfUvy{#N*&gp6mI6-_ zMveo?Z5kkavgnmxYLf9IBi-Dm9=c|5l}%s6*)jmRaAsmKGY?qotE4J%O`!>qP zS6*e;ufuQ*x9#rxKffWcpHdI|#Uty+u6SEI0sEg}&SqeWgWeeM1a-? zcyAK#z|c{Q?%Boz_N?IH()lEkG>LSCR|7}f%5`t{Xl%;%cyNpJp82ezY=LyK;K8em zw_U&el`gU@E;z9DU67P>!S(SWc720EI@k?tzOo|7#zS-b#^TBHa${qz{R5pbHy;y< z(gac1owMhSUqWUwIj#RfiLbEglBoJGiE}>!!#l+u2JG8bTy*L^-QFfT?5v|_7A-j7 znpt985k0tv6r9;=Us;kvB&FO7^cpFSd7Q2K`25{rWPPLvK;}qe!|ez98OzdF+EV6$ z|HZb0{ErnGjn;}o&YDE+Lclc}@5aDVdZ%HoxeiASt_5-^kSIM@F`muGe#r!6He6|m z^|!IzrkFbsO%HPSZsm6-WtV@|9S>*uphGg_N#+t_zO%^9S}b5;IhCyWFU(bD4vM-Y zuV#JV7LKl5u`f9Z`GfW-{?JWqn+-UuG7wKP4zjTkn&av7;8h9Nw_Ejfh}hBKCLoat zBB{NzKc^lCa?AW^wsUp<^4#>Q|MZ(kAYwNnc-7?Ehnq?fonDc4sz($bGAdWs+%8VM zULJM_;f1*r--8h?917Q$%k+hC5Q}vLpKgj5sC0x2H$lQN`wl?b0 z7ZwBdKM%bea&x{`e)CdOJrrS)XPdXy9OWVxX^BjerGrwyKxt+&=3&upOHSON04vXKtZKw+M zlPQ}o=FWAp8up|(p|GOqGwb%H>y6j6o9*k@{XmVD(^t(64Ec8u!uE+3SZTAdL`NvV zOB9BI93f#SBSc)s&ku_ClFH3Z6thP2$)r%4*xxnON~8PC<>00|htJ$bUmw>n9mw#m zuj?*c?@KOb5eP4}#k*9F<)4!rGwZr)`n5jStYimlMmq6>TbZaw2-+8#a!HzJ7V{2e zhZ-BJdDV^D`pi&Y>eqb*m3b-uIvsZ3Rx(ujLDEWXt&UP~Kb1ER=Yj?q0ZO^zn-ux6 z?b*P*Kl5n&-6@A!uf-9RGoY=(=I3@@MNntgMYUk^LES3OdnhtznemRJ+R>P4?9R)* z*zhNy3cfe-41UvD3eSr+WQ0a(M8jvPhd%5w-#e|ETLz>+d*Ja(uV%Q@>pV8o%K~CA|mv%Th`R*xRCOoQpb5VjNUB`P{_Vuc? zccumdoHgx;A1|%SBF`Xpoa4fs&%=ZXS>an1ei=Dm^~vN$)eWfc_KsG`XcR}i!J{gt z|Cl@YEPKbOsq>vsCpx~CzL(S{O#Hr+PaAX)BI`ID^XNYU`hg205G@mPgG9Hnjgo2P9t6VDh!Lw6`$@U0|QfHB8G}A2K?6g z_OO+|bbEoc>z$X+DMr(Zcw|lPF0Kga(wj74S&8548tZ_JshT4_7d3p+OFKRAyln&` z8;|j&)z^zaOd(B@HgA%0)Y!Ilmn1GFjlZ;PHUGLeYV8PH#UQd_kSN^#O#(-JL`hX+ z?(m)qkQr zf+AWHZr!^2BKk zji<*D=sh73$f8;^9hLErolzj8O)5uk9uUj|0W^*=vEp-YA8nfyHV&0-j|H-6ZJ-e7 z9McxPp7_B-$}SiJqtj)z`0_Q}vJdS_&n=lkW{b{jg_riU$|b($5q%zS3sUo~M>4|A zr!AxPbG1{T0=NqfZYhSXp}1Yo{3Y0T)0ju*8c#d6x@*M|x+|EXJdK(}p_gJ9skR0U zClm&?bP_VMT!#ET;3`}nv*TlD<6D&W%t9)YdH<^J2J7EfF|islNV>%!<$Duqtjv5uy4W&aO9>p}TP#~}D?#F{1s0i3 zJ+}t;ou4ZXw#AA5;usJB2bwR*%_N0T?1GOOo}yhcf)Ny8%y$L)82%Vp2I60aQH5ge zFh_mk@#B!qXGz2SO$|!v%BTzW8||e7;mFhab(KikcoahrgID3JqH=hHYg|+fzf^p} zF$n_W*%1;TC9C?_E*RIHy4LQ3asKQy(#`8bp+7MWWsMo+Y5R5 z%U*uX%>$zhs9N;tNuU?_G?$Lr{T{7btgs{wz67&&n~?rK`@ZLb#q)@eS*R8Bh2;yI zS{#;)=@F5@l%}Q#nC{naY&@vh$kr{1tTV4)e}Z=9|FD>mp$;&a-rjlIb2k>+DdHj4 zsQ&UD1Y!^&IL7=8&3y2==lLH?-ei+^lY_>shbb%fZzYvG$TeL{fkgsd*;zmTHQ35S zw)p#vX%kv7n1$J9h=ZG793X%`468@fXNl(6?2zpHJavFXA=aR4JRI;#PdU3|P&XWo zKgMk1(c8NxW=`VPW(Hiz`kuX+$>Gm3Ih1&BFkj_bPIQO9i2{*%mOvM3q2n&Vw+OwM<&6Tg#) zI&bmv8~&XUEQrW}yJ{D;KE_L2u^u$IkbY0leF3GxoPS8&kB(Vpb~1cjx{+?NBc

5G?fUc2`%DS= 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Ν*zfBnp~lmkwGm$fjFt~olH9%eU}lT)G}19pce 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≀clp^P9jch%x!_eKKGm_sS=wNVi{gL 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 + _alive = _engine->getWindowStatus(); + while (_alive) { + update(); + if (_alive) { + _engine->flushEvent(); + _engine->flushScene(); + } + } + _engine->freeAll(); +} + +void Game::pause() {} + +bool Game::update() { + return (DamnCute::Core::getInstance()->getWindowStatus()); +} + +void Game::playMusic() { + + _engine->musicPath("resources/music"); + _engine->getMusic().setLoop(true); + _engine->musicPlay(0); +} diff --git a/assets/src/Game.hpp b/assets/src/Game.hpp new file mode 100644 index 0000000..453627f --- /dev/null +++ b/assets/src/Game.hpp @@ -0,0 +1,23 @@ +#ifndef GAME_HPP_ +# define GAME_HPP_ + +#include +#include + +class Game : public DamnCute::AGame { + + private: + bool update(); + void playMusic(); + bool _alive; + DamnCute::Core *_engine; + + public: + Game(); + ~Game() = default; + virtual void run(); + virtual void pause(); + +}; + +#endif diff --git a/assets/src/main.cpp b/assets/src/main.cpp new file mode 100644 index 0000000..13fe167 --- /dev/null +++ b/assets/src/main.cpp @@ -0,0 +1,8 @@ +#include "Game.hpp" + +int main(void) { + + Game g; + g.run(); + return 0; +} diff --git a/include/SFML/Audio.hpp b/include/SFML/Audio.hpp new file mode 100644 index 0000000..1129863 --- /dev/null +++ b/include/SFML/Audio.hpp @@ -0,0 +1,50 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_AUDIO_HPP +#define SFML_AUDIO_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include + + +#endif // SFML_AUDIO_HPP + +//////////////////////////////////////////////////////////// +/// \defgroup audio Audio module +/// +/// Sounds, streaming (musics or custom sources), recording, +/// spatialization. +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Audio/Export.hpp b/include/SFML/Audio/Export.hpp new file mode 100644 index 0000000..7c4b6ca --- /dev/null +++ b/include/SFML/Audio/Export.hpp @@ -0,0 +1,48 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_AUDIO_EXPORT_HPP +#define SFML_AUDIO_EXPORT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +//////////////////////////////////////////////////////////// +// Define portable import / export macros +//////////////////////////////////////////////////////////// +#if defined(SFML_AUDIO_EXPORTS) + + #define SFML_AUDIO_API SFML_API_EXPORT + +#else + + #define SFML_AUDIO_API SFML_API_IMPORT + +#endif + + +#endif // SFML_AUDIO_EXPORT_HPP diff --git a/include/SFML/Audio/Listener.hpp b/include/SFML/Audio/Listener.hpp new file mode 100644 index 0000000..213d96a --- /dev/null +++ b/include/SFML/Audio/Listener.hpp @@ -0,0 +1,184 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_LISTENER_HPP +#define SFML_LISTENER_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief The audio listener is the point in the scene +/// from where all the sounds are heard +/// +//////////////////////////////////////////////////////////// +class SFML_AUDIO_API Listener +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Change the global volume of all the sounds and musics + /// + /// The volume is a number between 0 and 100; it is combined with + /// the individual volume of each sound / music. + /// The default value for the volume is 100 (maximum). + /// + /// \param volume New global volume, in the range [0, 100] + /// + /// \see getGlobalVolume + /// + //////////////////////////////////////////////////////////// + static void setGlobalVolume(float volume); + + //////////////////////////////////////////////////////////// + /// \brief Get the current value of the global volume + /// + /// \return Current global volume, in the range [0, 100] + /// + /// \see setGlobalVolume + /// + //////////////////////////////////////////////////////////// + static float getGlobalVolume(); + + //////////////////////////////////////////////////////////// + /// \brief Set the position of the listener in the scene + /// + /// The default listener's position is (0, 0, 0). + /// + /// \param x X coordinate of the listener's position + /// \param y Y coordinate of the listener's position + /// \param z Z coordinate of the listener's position + /// + /// \see getPosition, setDirection + /// + //////////////////////////////////////////////////////////// + static void setPosition(float x, float y, float z); + + //////////////////////////////////////////////////////////// + /// \brief Set the position of the listener in the scene + /// + /// The default listener's position is (0, 0, 0). + /// + /// \param position New listener's position + /// + /// \see getPosition, setDirection + /// + //////////////////////////////////////////////////////////// + static void setPosition(const Vector3f& position); + + //////////////////////////////////////////////////////////// + /// \brief Get the current position of the listener in the scene + /// + /// \return Listener's position + /// + /// \see setPosition + /// + //////////////////////////////////////////////////////////// + static Vector3f getPosition(); + + //////////////////////////////////////////////////////////// + /// \brief Set the orientation of the listener in the scene + /// + /// The orientation defines the 3D axes of the listener + /// (left, up, front) in the scene. The orientation vector + /// doesn't have to be normalized. + /// The default listener's orientation is (0, 0, -1). + /// + /// \param x X coordinate of the listener's orientation + /// \param y Y coordinate of the listener's orientation + /// \param z Z coordinate of the listener's orientation + /// + /// \see getDirection, setPosition + /// + //////////////////////////////////////////////////////////// + static void setDirection(float x, float y, float z); + + //////////////////////////////////////////////////////////// + /// \brief Set the orientation of the listener in the scene + /// + /// The orientation defines the 3D axes of the listener + /// (left, up, front) in the scene. The orientation vector + /// doesn't have to be normalized. + /// The default listener's orientation is (0, 0, -1). + /// + /// \param direction New listener's orientation + /// + /// \see getDirection, setPosition + /// + //////////////////////////////////////////////////////////// + static void setDirection(const Vector3f& direction); + + //////////////////////////////////////////////////////////// + /// \brief Get the current orientation of the listener in the scene + /// + /// \return Listener's orientation + /// + /// \see setDirection + /// + //////////////////////////////////////////////////////////// + static Vector3f getDirection(); +}; + +} // namespace sf + + +#endif // SFML_LISTENER_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Listener +/// \ingroup audio +/// +/// The audio listener defines the global properties of the +/// audio environment, it defines where and how sounds and musics +/// are heard. If sf::View is the eyes of the user, then sf::Listener +/// is his ears (by the way, they are often linked together -- +/// same position, orientation, etc.). +/// +/// sf::Listener is a simple interface, which allows to setup the +/// listener in the 3D audio environment (position and direction), +/// and to adjust the global volume. +/// +/// Because the listener is unique in the scene, sf::Listener only +/// contains static functions and doesn't have to be instanciated. +/// +/// Usage example: +/// \code +/// // Move the listener to the position (1, 0, -5) +/// sf::Listener::setPosition(1, 0, -5); +/// +/// // Make it face the right axis (1, 0, 0) +/// sf::Listener::setDirection(1, 0, 0); +/// +/// // Reduce the global volume +/// sf::Listener::setGlobalVolume(50); +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Audio/Music.hpp b/include/SFML/Audio/Music.hpp new file mode 100644 index 0000000..ba922e9 --- /dev/null +++ b/include/SFML/Audio/Music.hpp @@ -0,0 +1,228 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_MUSIC_HPP +#define SFML_MUSIC_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include + + +namespace sf +{ +namespace priv +{ + class SoundFile; +} + +class InputStream; + +//////////////////////////////////////////////////////////// +/// \brief Streamed music played from an audio file +/// +//////////////////////////////////////////////////////////// +class SFML_AUDIO_API Music : public SoundStream +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + Music(); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + ~Music(); + + //////////////////////////////////////////////////////////// + /// \brief Open a music from an audio file + /// + /// This function doesn't start playing the music (call play() + /// to do so). + /// Here is a complete list of all the supported audio formats: + /// ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, + /// w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64. + /// + /// \param filename Path of the music file to open + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see openFromMemory, openFromStream + /// + //////////////////////////////////////////////////////////// + bool openFromFile(const std::string& filename); + + //////////////////////////////////////////////////////////// + /// \brief Open a music from an audio file in memory + /// + /// This function doesn't start playing the music (call play() + /// to do so). + /// Here is a complete list of all the supported audio formats: + /// ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, + /// w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64. + /// Since the music is not loaded completely but rather streamed + /// continuously, the \a data must remain available as long as the + /// music is playing (ie. you can't deallocate it right after calling + /// this function). + /// + /// \param data Pointer to the file data in memory + /// \param sizeInBytes Size of the data to load, in bytes + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see openFromFile, openFromStream + /// + //////////////////////////////////////////////////////////// + bool openFromMemory(const void* data, std::size_t sizeInBytes); + + //////////////////////////////////////////////////////////// + /// \brief Open a music from an audio file in a custom stream + /// + /// This function doesn't start playing the music (call play() + /// to do so). + /// Here is a complete list of all the supported audio formats: + /// ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, + /// w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64. + /// Since the music is not loaded completely but rather streamed + /// continuously, the \a stream must remain alive as long as the + /// music is playing (ie. you can't destroy it right after calling + /// this function). + /// + /// \param stream Source stream to read from + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see openFromFile, openFromMemory + /// + //////////////////////////////////////////////////////////// + bool openFromStream(InputStream& stream); + + //////////////////////////////////////////////////////////// + /// \brief Get the total duration of the music + /// + /// \return Music duration + /// + //////////////////////////////////////////////////////////// + Time getDuration() const; + +protected : + + //////////////////////////////////////////////////////////// + /// \brief Request a new chunk of audio samples from the stream source + /// + /// This function fills the chunk from the next samples + /// to read from the audio file. + /// + /// \param data Chunk of data to fill + /// + /// \return True to continue playback, false to stop + /// + //////////////////////////////////////////////////////////// + virtual bool onGetData(Chunk& data); + + //////////////////////////////////////////////////////////// + /// \brief Change the current playing position in the stream source + /// + /// \param timeOffset New playing position, from the beginning of the music + /// + //////////////////////////////////////////////////////////// + virtual void onSeek(Time timeOffset); + +private : + + //////////////////////////////////////////////////////////// + /// \brief Initialize the internal state after loading a new music + /// + //////////////////////////////////////////////////////////// + void initialize(); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + priv::SoundFile* m_file; ///< Sound file + Time m_duration; ///< Music duration + std::vector m_samples; ///< Temporary buffer of samples + Mutex m_mutex; ///< Mutex protecting the data +}; + +} // namespace sf + + +#endif // SFML_MUSIC_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Music +/// \ingroup audio +/// +/// Musics are sounds that are streamed rather than completely +/// loaded in memory. This is especially useful for compressed +/// musics that usually take hundreds of MB when they are +/// uncompressed: by streaming it instead of loading it entirely, +/// you avoid saturating the memory and have almost no loading delay. +/// +/// Apart from that, a sf::Music has almost the same features as +/// the sf::SoundBuffer / sf::Sound pair: you can play/pause/stop +/// it, request its parameters (channels, sample rate), change +/// the way it is played (pitch, volume, 3D position, ...), etc. +/// +/// As a sound stream, a music is played in its own thread in order +/// not to block the rest of the program. This means that you can +/// leave the music alone after calling play(), it will manage itself +/// very well. +/// +/// Usage example: +/// \code +/// // Declare a new music +/// sf::Music music; +/// +/// // Open it from an audio file +/// if (!music.openFromFile("music.ogg")) +/// { +/// // error... +/// } +/// +/// // Change some parameters +/// music.setPosition(0, 1, 10); // change its 3D position +/// music.setPitch(2); // increase the pitch +/// music.setVolume(50); // reduce the volume +/// music.setLoop(true); // make it loop +/// +/// // Play it +/// music.play(); +/// \endcode +/// +/// \see sf::Sound, sf::SoundStream +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Audio/Sound.hpp b/include/SFML/Audio/Sound.hpp new file mode 100644 index 0000000..1250f42 --- /dev/null +++ b/include/SFML/Audio/Sound.hpp @@ -0,0 +1,262 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOUND_HPP +#define SFML_SOUND_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include + + +namespace sf +{ +class SoundBuffer; + +//////////////////////////////////////////////////////////// +/// \brief Regular sound that can be played in the audio environment +/// +//////////////////////////////////////////////////////////// +class SFML_AUDIO_API Sound : public SoundSource +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + Sound(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the sound with a buffer + /// + /// \param buffer Sound buffer containing the audio data to play with the sound + /// + //////////////////////////////////////////////////////////// + explicit Sound(const SoundBuffer& buffer); + + //////////////////////////////////////////////////////////// + /// \brief Copy constructor + /// + /// \param copy Instance to copy + /// + //////////////////////////////////////////////////////////// + Sound(const Sound& copy); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + ~Sound(); + + //////////////////////////////////////////////////////////// + /// \brief Start or resume playing the sound + /// + /// This function starts the stream if it was stopped, resumes + /// it if it was paused, and restarts it from beginning if it + /// was it already playing. + /// This function uses its own thread so that it doesn't block + /// the rest of the program while the sound is played. + /// + /// \see pause, stop + /// + //////////////////////////////////////////////////////////// + void play(); + + //////////////////////////////////////////////////////////// + /// \brief Pause the sound + /// + /// This function pauses the sound if it was playing, + /// otherwise (sound already paused or stopped) it has no effect. + /// + /// \see play, stop + /// + //////////////////////////////////////////////////////////// + void pause(); + + //////////////////////////////////////////////////////////// + /// \brief stop playing the sound + /// + /// This function stops the sound if it was playing or paused, + /// and does nothing if it was already stopped. + /// It also resets the playing position (unlike pause()). + /// + /// \see play, pause + /// + //////////////////////////////////////////////////////////// + void stop(); + + //////////////////////////////////////////////////////////// + /// \brief Set the source buffer containing the audio data to play + /// + /// It is important to note that the sound buffer is not copied, + /// thus the sf::SoundBuffer instance must remain alive as long + /// as it is attached to the sound. + /// + /// \param buffer Sound buffer to attach to the sound + /// + /// \see getBuffer + /// + //////////////////////////////////////////////////////////// + void setBuffer(const SoundBuffer& buffer); + + //////////////////////////////////////////////////////////// + /// \brief Set whether or not the sound should loop after reaching the end + /// + /// If set, the sound will restart from beginning after + /// reaching the end and so on, until it is stopped or + /// setLoop(false) is called. + /// The default looping state for sound is false. + /// + /// \param loop True to play in loop, false to play once + /// + /// \see getLoop + /// + //////////////////////////////////////////////////////////// + void setLoop(bool loop); + + //////////////////////////////////////////////////////////// + /// \brief Change the current playing position of the sound + /// + /// The playing position can be changed when the sound is + /// either paused or playing. + /// + /// \param timeOffset New playing position, from the beginning of the sound + /// + /// \see getPlayingOffset + /// + //////////////////////////////////////////////////////////// + void setPlayingOffset(Time timeOffset); + + //////////////////////////////////////////////////////////// + /// \brief Get the audio buffer attached to the sound + /// + /// \return Sound buffer attached to the sound (can be NULL) + /// + //////////////////////////////////////////////////////////// + const SoundBuffer* getBuffer() const; + + //////////////////////////////////////////////////////////// + /// \brief Tell whether or not the sound is in loop mode + /// + /// \return True if the sound is looping, false otherwise + /// + /// \see setLoop + /// + //////////////////////////////////////////////////////////// + bool getLoop() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the current playing position of the sound + /// + /// \return Current playing position, from the beginning of the sound + /// + /// \see setPlayingOffset + /// + //////////////////////////////////////////////////////////// + Time getPlayingOffset() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the current status of the sound (stopped, paused, playing) + /// + /// \return Current status of the sound + /// + //////////////////////////////////////////////////////////// + Status getStatus() const; + + //////////////////////////////////////////////////////////// + /// \brief Overload of assignment operator + /// + /// \param right Instance to assign + /// + /// \return Reference to self + /// + //////////////////////////////////////////////////////////// + Sound& operator =(const Sound& right); + + //////////////////////////////////////////////////////////// + /// \brief Reset the internal buffer of the sound + /// + /// This function is for internal use only, you don't have + /// to use it. It is called by the sf::SoundBuffer that + /// this sound uses, when it is destroyed in order to prevent + /// the sound from using a dead buffer. + /// + //////////////////////////////////////////////////////////// + void resetBuffer(); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + const SoundBuffer* m_buffer; ///< Sound buffer bound to the source +}; + +} // namespace sf + + +#endif // SFML_SOUND_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Sound +/// \ingroup audio +/// +/// sf::Sound is the class to use to play sounds. +/// It provides: +/// \li Control (play, pause, stop) +/// \li Ability to modify output parameters in real-time (pitch, volume, ...) +/// \li 3D spatial features (position, attenuation, ...). +/// +/// sf::Sound is perfect for playing short sounds that can +/// fit in memory and require no latency, like foot steps or +/// gun shots. For longer sounds, like background musics +/// or long speeches, rather see sf::Music (which is based +/// on streaming). +/// +/// In order to work, a sound must be given a buffer of audio +/// data to play. Audio data (samples) is stored in sf::SoundBuffer, +/// and attached to a sound with the setBuffer() function. +/// The buffer object attached to a sound must remain alive +/// as long as the sound uses it. Note that multiple sounds +/// can use the same sound buffer at the same time. +/// +/// Usage example: +/// \code +/// sf::SoundBuffer buffer; +/// buffer.loadFromFile("sound.wav"); +/// +/// sf::Sound sound; +/// sound.setBuffer(buffer); +/// sound.play(); +/// \endcode +/// +/// \see sf::SoundBuffer, sf::Music +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Audio/SoundBuffer.hpp b/include/SFML/Audio/SoundBuffer.hpp new file mode 100644 index 0000000..23fed88 --- /dev/null +++ b/include/SFML/Audio/SoundBuffer.hpp @@ -0,0 +1,359 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOUNDBUFFER_HPP +#define SFML_SOUNDBUFFER_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include + + +namespace sf +{ +namespace priv +{ + class SoundFile; +} + +class Sound; +class InputStream; + +//////////////////////////////////////////////////////////// +/// \brief Storage for audio samples defining a sound +/// +//////////////////////////////////////////////////////////// +class SFML_AUDIO_API SoundBuffer +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + SoundBuffer(); + + //////////////////////////////////////////////////////////// + /// \brief Copy constructor + /// + /// \param copy Instance to copy + /// + //////////////////////////////////////////////////////////// + SoundBuffer(const SoundBuffer& copy); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + ~SoundBuffer(); + + //////////////////////////////////////////////////////////// + /// \brief Load the sound buffer from a file + /// + /// Here is a complete list of all the supported audio formats: + /// ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, + /// w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64. + /// + /// \param filename Path of the sound file to load + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromMemory, loadFromStream, loadFromSamples, saveToFile + /// + //////////////////////////////////////////////////////////// + bool loadFromFile(const std::string& filename); + + //////////////////////////////////////////////////////////// + /// \brief Load the sound buffer from a file in memory + /// + /// Here is a complete list of all the supported audio formats: + /// ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, + /// w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64. + /// + /// \param data Pointer to the file data in memory + /// \param sizeInBytes Size of the data to load, in bytes + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromFile, loadFromStream, loadFromSamples + /// + //////////////////////////////////////////////////////////// + bool loadFromMemory(const void* data, std::size_t sizeInBytes); + + //////////////////////////////////////////////////////////// + /// \brief Load the sound buffer from a custom stream + /// + /// Here is a complete list of all the supported audio formats: + /// ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, + /// w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64. + /// + /// \param stream Source stream to read from + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromFile, loadFromMemory, loadFromSamples + /// + //////////////////////////////////////////////////////////// + bool loadFromStream(InputStream& stream); + + //////////////////////////////////////////////////////////// + /// \brief Load the sound buffer from an array of audio samples + /// + /// The assumed format of the audio samples is 16 bits signed integer + /// (sf::Int16). + /// + /// \param samples Pointer to the array of samples in memory + /// \param sampleCount Number of samples in the array + /// \param channelCount Number of channels (1 = mono, 2 = stereo, ...) + /// \param sampleRate Sample rate (number of samples to play per second) + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromFile, loadFromMemory, saveToFile + /// + //////////////////////////////////////////////////////////// + bool loadFromSamples(const Int16* samples, std::size_t sampleCount, unsigned int channelCount, unsigned int sampleRate); + + //////////////////////////////////////////////////////////// + /// \brief Save the sound buffer to an audio file + /// + /// Here is a complete list of all the supported audio formats: + /// ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, + /// w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64. + /// + /// \param filename Path of the sound file to write + /// + /// \return True if saving succeeded, false if it failed + /// + /// \see loadFromFile, loadFromMemory, loadFromSamples + /// + //////////////////////////////////////////////////////////// + bool saveToFile(const std::string& filename) const; + + //////////////////////////////////////////////////////////// + /// \brief Get the array of audio samples stored in the buffer + /// + /// The format of the returned samples is 16 bits signed integer + /// (sf::Int16). The total number of samples in this array + /// is given by the getSampleCount() function. + /// + /// \return Read-only pointer to the array of sound samples + /// + /// \see getSampleCount + /// + //////////////////////////////////////////////////////////// + const Int16* getSamples() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the number of samples stored in the buffer + /// + /// The array of samples can be accessed with the getSamples() + /// function. + /// + /// \return Number of samples + /// + /// \see getSamples + /// + //////////////////////////////////////////////////////////// + std::size_t getSampleCount() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the sample rate of the sound + /// + /// The sample rate is the number of samples played per second. + /// The higher, the better the quality (for example, 44100 + /// samples/s is CD quality). + /// + /// \return Sample rate (number of samples per second) + /// + /// \see getChannelCount, getDuration + /// + //////////////////////////////////////////////////////////// + unsigned int getSampleRate() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the number of channels used by the sound + /// + /// If the sound is mono then the number of channels will + /// be 1, 2 for stereo, etc. + /// + /// \return Number of channels + /// + /// \see getSampleRate, getDuration + /// + //////////////////////////////////////////////////////////// + unsigned int getChannelCount() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the total duration of the sound + /// + /// \return Sound duration + /// + /// \see getSampleRate, getChannelCount + /// + //////////////////////////////////////////////////////////// + Time getDuration() const; + + //////////////////////////////////////////////////////////// + /// \brief Overload of assignment operator + /// + /// \param right Instance to assign + /// + /// \return Reference to self + /// + //////////////////////////////////////////////////////////// + SoundBuffer& operator =(const SoundBuffer& right); + +private : + + friend class Sound; + + //////////////////////////////////////////////////////////// + /// \brief Initialize the internal state after loading a new sound + /// + /// \param file Sound file providing access to the new loaded sound + /// + /// \return True on succesful initialization, false on failure + /// + //////////////////////////////////////////////////////////// + bool initialize(priv::SoundFile& file); + + //////////////////////////////////////////////////////////// + /// \brief Update the internal buffer with the cached audio samples + /// + /// \param channelCount Number of channels + /// \param sampleRate Sample rate (number of samples per second) + /// + /// \return True on success, false if any error happened + /// + //////////////////////////////////////////////////////////// + bool update(unsigned int channelCount, unsigned int sampleRate); + + //////////////////////////////////////////////////////////// + /// \brief Add a sound to the list of sounds that use this buffer + /// + /// \param sound Sound instance to attach + /// + //////////////////////////////////////////////////////////// + void attachSound(Sound* sound) const; + + //////////////////////////////////////////////////////////// + /// \brief Remove a sound from the list of sounds that use this buffer + /// + /// \param sound Sound instance to detach + /// + //////////////////////////////////////////////////////////// + void detachSound(Sound* sound) const; + + //////////////////////////////////////////////////////////// + // Types + //////////////////////////////////////////////////////////// + typedef std::set SoundList; ///< Set of unique sound instances + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + unsigned int m_buffer; ///< OpenAL buffer identifier + std::vector m_samples; ///< Samples buffer + Time m_duration; ///< Sound duration + mutable SoundList m_sounds; ///< List of sounds that are using this buffer +}; + +} // namespace sf + + +#endif // SFML_SOUNDBUFFER_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::SoundBuffer +/// \ingroup audio +/// +/// A sound buffer holds the data of a sound, which is +/// an array of audio samples. A sample is a 16 bits signed integer +/// that defines the amplitude of the sound at a given time. +/// The sound is then restituted by playing these samples at +/// a high rate (for example, 44100 samples per second is the +/// standard rate used for playing CDs). In short, audio samples +/// are like texture pixels, and a sf::SoundBuffer is similar to +/// a sf::Texture. +/// +/// A sound buffer can be loaded from a file (see loadFromFile() +/// for the complete list of supported formats), from memory, from +/// a custom stream (see sf::InputStream) or directly from an array +/// of samples. It can also be saved back to a file. +/// +/// Sound buffers alone are not very useful: they hold the audio data +/// but cannot be played. To do so, you need to use the sf::Sound class, +/// which provides functions to play/pause/stop the sound as well as +/// changing the way it is outputted (volume, pitch, 3D position, ...). +/// This separation allows more flexibility and better performances: +/// indeed a sf::SoundBuffer is a heavy resource, and any operation on it +/// is slow (often too slow for real-time applications). On the other +/// side, a sf::Sound is a lightweight object, which can use the audio data +/// of a sound buffer and change the way it is played without actually +/// modifying that data. Note that it is also possible to bind +/// several sf::Sound instances to the same sf::SoundBuffer. +/// +/// It is important to note that the sf::Sound instance doesn't +/// copy the buffer that it uses, it only keeps a reference to it. +/// Thus, a sf::SoundBuffer must not be destructed while it is +/// used by a sf::Sound (i.e. never write a function that +/// uses a local sf::SoundBuffer instance for loading a sound). +/// +/// Usage example: +/// \code +/// // Declare a new sound buffer +/// sf::SoundBuffer buffer; +/// +/// // Load it from a file +/// if (!buffer.loadFromFile("sound.wav")) +/// { +/// // error... +/// } +/// +/// // Create a sound source and bind it to the buffer +/// sf::Sound sound1; +/// sound1.setBuffer(buffer); +/// +/// // Play the sound +/// sound1.play(); +/// +/// // Create another sound source bound to the same buffer +/// sf::Sound sound2; +/// sound2.setBuffer(buffer); +/// +/// // Play it with a higher pitch -- the first sound remains unchanged +/// sound2.setPitch(2); +/// sound2.play(); +/// \endcode +/// +/// \see sf::Sound, sf::SoundBufferRecorder +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Audio/SoundBufferRecorder.hpp b/include/SFML/Audio/SoundBufferRecorder.hpp new file mode 100644 index 0000000..fa4ac4c --- /dev/null +++ b/include/SFML/Audio/SoundBufferRecorder.hpp @@ -0,0 +1,138 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOUNDBUFFERRECORDER_HPP +#define SFML_SOUNDBUFFERRECORDER_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Specialized SoundRecorder which stores the captured +/// audio data into a sound buffer +/// +//////////////////////////////////////////////////////////// +class SFML_AUDIO_API SoundBufferRecorder : public SoundRecorder +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Get the sound buffer containing the captured audio data + /// + /// The sound buffer is valid only after the capture has ended. + /// This function provides a read-only access to the internal + /// sound buffer, but it can be copied if you need to + /// make any modification to it. + /// + /// \return Read-only access to the sound buffer + /// + //////////////////////////////////////////////////////////// + const SoundBuffer& getBuffer() const; + +protected: + + //////////////////////////////////////////////////////////// + /// \brief Start capturing audio data + /// + /// \return True to start the capture, or false to abort it + /// + //////////////////////////////////////////////////////////// + virtual bool onStart(); + + //////////////////////////////////////////////////////////// + /// \brief Process a new chunk of recorded samples + /// + /// \param samples Pointer to the new chunk of recorded samples + /// \param sampleCount Number of samples pointed by \a samples + /// + /// \return True to continue the capture, or false to stop it + /// + //////////////////////////////////////////////////////////// + virtual bool onProcessSamples(const Int16* samples, std::size_t sampleCount); + + //////////////////////////////////////////////////////////// + /// \brief Stop capturing audio data + /// + //////////////////////////////////////////////////////////// + virtual void onStop(); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + std::vector m_samples; ///< Temporary sample buffer to hold the recorded data + SoundBuffer m_buffer; ///< Sound buffer that will contain the recorded data +}; + +} // namespace sf + +#endif // SFML_SOUNDBUFFERRECORDER_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::SoundBufferRecorder +/// \ingroup audio +/// +/// sf::SoundBufferRecorder allows to access a recorded sound +/// through a sf::SoundBuffer, so that it can be played, saved +/// to a file, etc. +/// +/// It has the same simple interface as its base class (start(), stop()) +/// and adds a function to retrieve the recorded sound buffer +/// (getBuffer()). +/// +/// As usual, don't forget to call the isAvailable() function +/// before using this class (see sf::SoundRecorder for more details +/// about this). +/// +/// Usage example: +/// \code +/// if (sf::SoundBufferRecorder::isAvailable()) +/// { +/// // Record some audio data +/// sf::SoundBufferRecorder recorder; +/// recorder.start(); +/// ... +/// recorder.stop(); +/// +/// // Get the buffer containing the captured audio data +/// const sf::SoundBuffer& buffer = recorder.getBuffer(); +/// +/// // Save it to a file (for example...) +/// buffer.saveToFile("my_record.ogg"); +/// } +/// \endcode +/// +/// \see sf::SoundRecorder +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Audio/SoundRecorder.hpp b/include/SFML/Audio/SoundRecorder.hpp new file mode 100644 index 0000000..eddf48e --- /dev/null +++ b/include/SFML/Audio/SoundRecorder.hpp @@ -0,0 +1,270 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOUNDRECORDER_HPP +#define SFML_SOUNDRECORDER_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Abstract base class for capturing sound data +/// +//////////////////////////////////////////////////////////// +class SFML_AUDIO_API SoundRecorder +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief destructor + /// + //////////////////////////////////////////////////////////// + virtual ~SoundRecorder(); + + //////////////////////////////////////////////////////////// + /// \brief Start the capture + /// + /// The \a sampleRate parameter defines the number of audio samples + /// captured per second. The higher, the better the quality + /// (for example, 44100 samples/sec is CD quality). + /// This function uses its own thread so that it doesn't block + /// the rest of the program while the capture runs. + /// Please note that only one capture can happen at the same time. + /// + /// \param sampleRate Desired capture rate, in number of samples per second + /// + /// \see stop + /// + //////////////////////////////////////////////////////////// + void start(unsigned int sampleRate = 44100); + + //////////////////////////////////////////////////////////// + /// \brief Stop the capture + /// + /// \see start + /// + //////////////////////////////////////////////////////////// + void stop(); + + //////////////////////////////////////////////////////////// + /// \brief Get the sample rate + /// + /// The sample rate defines the number of audio samples + /// captured per second. The higher, the better the quality + /// (for example, 44100 samples/sec is CD quality). + /// + /// \return Sample rate, in samples per second + /// + //////////////////////////////////////////////////////////// + unsigned int getSampleRate() const; + + //////////////////////////////////////////////////////////// + /// \brief Check if the system supports audio capture + /// + /// This function should always be called before using + /// the audio capture features. If it returns false, then + /// any attempt to use sf::SoundRecorder or one of its derived + /// classes will fail. + /// + /// \return True if audio capture is supported, false otherwise + /// + //////////////////////////////////////////////////////////// + static bool isAvailable(); + +protected : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor is only meant to be called by derived classes. + /// + //////////////////////////////////////////////////////////// + SoundRecorder(); + + //////////////////////////////////////////////////////////// + /// \brief Start capturing audio data + /// + /// This virtual function may be overriden by a derived class + /// if something has to be done every time a new capture + /// starts. If not, this function can be ignored; the default + /// implementation does nothing. + /// + /// \return True to start the capture, or false to abort it + /// + //////////////////////////////////////////////////////////// + virtual bool onStart(); + + //////////////////////////////////////////////////////////// + /// \brief Process a new chunk of recorded samples + /// + /// This virtual function is called every time a new chunk of + /// recorded data is available. The derived class can then do + /// whatever it wants with it (storing it, playing it, sending + /// it over the network, etc.). + /// + /// \param samples Pointer to the new chunk of recorded samples + /// \param sampleCount Number of samples pointed by \a samples + /// + /// \return True to continue the capture, or false to stop it + /// + //////////////////////////////////////////////////////////// + virtual bool onProcessSamples(const Int16* samples, std::size_t sampleCount) = 0; + + //////////////////////////////////////////////////////////// + /// \brief Stop capturing audio data + /// + /// This virtual function may be overriden by a derived class + /// if something has to be done every time the capture + /// ends. If not, this function can be ignored; the default + /// implementation does nothing. + /// + //////////////////////////////////////////////////////////// + virtual void onStop(); + +private : + + //////////////////////////////////////////////////////////// + /// \brief Function called as the entry point of the thread + /// + /// This function starts the recording loop, and returns + /// only when the capture is stopped. + /// + //////////////////////////////////////////////////////////// + void record(); + + //////////////////////////////////////////////////////////// + /// \brief Get the new available audio samples and process them + /// + /// This function is called continuously during the + /// capture loop. It retrieves the captured samples and + /// forwards them to the derived class. + /// + //////////////////////////////////////////////////////////// + void processCapturedSamples(); + + //////////////////////////////////////////////////////////// + /// \brief Clean up the recorder's internal resources + /// + /// This function is called when the capture stops. + /// + //////////////////////////////////////////////////////////// + void cleanup(); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Thread m_thread; ///< Thread running the background recording task + std::vector m_samples; ///< Buffer to store captured samples + unsigned int m_sampleRate; ///< Sample rate + bool m_isCapturing; ///< Capturing state +}; + +} // namespace sf + + +#endif // SFML_SOUNDRECORDER_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::SoundRecorder +/// \ingroup audio +/// +/// sf::SoundBuffer provides a simple interface to access +/// the audio recording capabilities of the computer +/// (the microphone). As an abstract base class, it only cares +/// about capturing sound samples, the task of making something +/// useful with them is left to the derived class. Note that +/// SFML provides a built-in specialization for saving the +/// captured data to a sound buffer (see sf::SoundBufferRecorder). +/// +/// A derived class has only one virtual function to override: +/// \li onProcessSamples provides the new chunks of audio samples while the capture happens +/// +/// Moreover, two additionnal virtual functions can be overriden +/// as well if necessary: +/// \li onStart is called before the capture happens, to perform custom initializations +/// \li onStop is called after the capture ends, to perform custom cleanup +/// +/// The audio capture feature may not be supported or activated +/// on every platform, thus it is recommended to check its +/// availability with the isAvailable() function. If it returns +/// false, then any attempt to use an audio recorder will fail. +/// +/// It is important to note that the audio capture happens in a +/// separate thread, so that it doesn't block the rest of the +/// program. In particular, the onProcessSamples and onStop +/// virtual functions (but not onStart) will be called +/// from this separate thread. It is important to keep this in +/// mind, because you may have to take care of synchronization +/// issues if you share data between threads. +/// +/// Usage example: +/// \code +/// class CustomRecorder : public sf::SoundRecorder +/// { +/// virtual bool onStart() // optional +/// { +/// // Initialize whatever has to be done before the capture starts +/// ... +/// +/// // Return true to start playing +/// return true; +/// } +/// +/// virtual bool onProcessSamples(const Int16* samples, std::size_t sampleCount) +/// { +/// // Do something with the new chunk of samples (store them, send them, ...) +/// ... +/// +/// // Return true to continue playing +/// return true; +/// } +/// +/// virtual void onStop() // optional +/// { +/// // Clean up whatever has to be done after the capture ends +/// ... +/// } +/// } +/// +/// // Usage +/// if (CustomRecorder::isAvailable()) +/// { +/// CustomRecorder recorder; +/// recorder.start(); +/// ... +/// recorder.stop(); +/// } +/// \endcode +/// +/// \see sf::SoundBufferRecorder +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Audio/SoundSource.hpp b/include/SFML/Audio/SoundSource.hpp new file mode 100644 index 0000000..8ccc0b7 --- /dev/null +++ b/include/SFML/Audio/SoundSource.hpp @@ -0,0 +1,286 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOUNDSOURCE_HPP +#define SFML_SOUNDSOURCE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Base class defining a sound's properties +/// +//////////////////////////////////////////////////////////// +class SFML_AUDIO_API SoundSource +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Enumeration of the sound source states + /// + //////////////////////////////////////////////////////////// + enum Status + { + Stopped, ///< Sound is not playing + Paused, ///< Sound is paused + Playing ///< Sound is playing + }; + + //////////////////////////////////////////////////////////// + /// \brief Copy constructor + /// + /// \param copy Instance to copy + /// + //////////////////////////////////////////////////////////// + SoundSource(const SoundSource& copy); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + virtual ~SoundSource(); + + //////////////////////////////////////////////////////////// + /// \brief Set the pitch of the sound + /// + /// The pitch represents the perceived fundamental frequency + /// of a sound; thus you can make a sound more acute or grave + /// by changing its pitch. A side effect of changing the pitch + /// is to modify the playing speed of the sound as well. + /// The default value for the pitch is 1. + /// + /// \param pitch New pitch to apply to the sound + /// + /// \see getPitch + /// + //////////////////////////////////////////////////////////// + void setPitch(float pitch); + + //////////////////////////////////////////////////////////// + /// \brief Set the volume of the sound + /// + /// The volume is a value between 0 (mute) and 100 (full volume). + /// The default value for the volume is 100. + /// + /// \param volume Volume of the sound + /// + /// \see getVolume + /// + //////////////////////////////////////////////////////////// + void setVolume(float volume); + + //////////////////////////////////////////////////////////// + /// \brief Set the 3D position of the sound in the audio scene + /// + /// Only sounds with one channel (mono sounds) can be + /// spatialized. + /// The default position of a sound is (0, 0, 0). + /// + /// \param x X coordinate of the position of the sound in the scene + /// \param y Y coordinate of the position of the sound in the scene + /// \param z Z coordinate of the position of the sound in the scene + /// + /// \see getPosition + /// + //////////////////////////////////////////////////////////// + void setPosition(float x, float y, float z); + + //////////////////////////////////////////////////////////// + /// \brief Set the 3D position of the sound in the audio scene + /// + /// Only sounds with one channel (mono sounds) can be + /// spatialized. + /// The default position of a sound is (0, 0, 0). + /// + /// \param position Position of the sound in the scene + /// + /// \see getPosition + /// + //////////////////////////////////////////////////////////// + void setPosition(const Vector3f& position); + + //////////////////////////////////////////////////////////// + /// \brief Make the sound's position relative to the listener or absolute + /// + /// Making a sound relative to the listener will ensure that it will always + /// be played the same way regardless the position of the listener. + /// This can be useful for non-spatialized sounds, sounds that are + /// produced by the listener, or sounds attached to it. + /// The default value is false (position is absolute). + /// + /// \param relative True to set the position relative, false to set it absolute + /// + /// \see isRelativeToListener + /// + //////////////////////////////////////////////////////////// + void setRelativeToListener(bool relative); + + //////////////////////////////////////////////////////////// + /// \brief Set the minimum distance of the sound + /// + /// The "minimum distance" of a sound is the maximum + /// distance at which it is heard at its maximum volume. Further + /// than the minimum distance, it will start to fade out according + /// to its attenuation factor. A value of 0 ("inside the head + /// of the listener") is an invalid value and is forbidden. + /// The default value of the minimum distance is 1. + /// + /// \param distance New minimum distance of the sound + /// + /// \see getMinDistance, setAttenuation + /// + //////////////////////////////////////////////////////////// + void setMinDistance(float distance); + + //////////////////////////////////////////////////////////// + /// \brief Set the attenuation factor of the sound + /// + /// The attenuation is a multiplicative factor which makes + /// the sound more or less loud according to its distance + /// from the listener. An attenuation of 0 will produce a + /// non-attenuated sound, i.e. its volume will always be the same + /// whether it is heard from near or from far. On the other hand, + /// an attenuation value such as 100 will make the sound fade out + /// very quickly as it gets further from the listener. + /// The default value of the attenuation is 1. + /// + /// \param attenuation New attenuation factor of the sound + /// + /// \see getAttenuation, setMinDistance + /// + //////////////////////////////////////////////////////////// + void setAttenuation(float attenuation); + + //////////////////////////////////////////////////////////// + /// \brief Get the pitch of the sound + /// + /// \return Pitch of the sound + /// + /// \see setPitch + /// + //////////////////////////////////////////////////////////// + float getPitch() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the volume of the sound + /// + /// \return Volume of the sound, in the range [0, 100] + /// + /// \see setVolume + /// + //////////////////////////////////////////////////////////// + float getVolume() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the 3D position of the sound in the audio scene + /// + /// \return Position of the sound + /// + /// \see setPosition + /// + //////////////////////////////////////////////////////////// + Vector3f getPosition() const; + + //////////////////////////////////////////////////////////// + /// \brief Tell whether the sound's position is relative to the + /// listener or is absolute + /// + /// \return True if the position is relative, false if it's absolute + /// + /// \see setRelativeToListener + /// + //////////////////////////////////////////////////////////// + bool isRelativeToListener() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the minimum distance of the sound + /// + /// \return Minimum distance of the sound + /// + /// \see setMinDistance, getAttenuation + /// + //////////////////////////////////////////////////////////// + float getMinDistance() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the attenuation factor of the sound + /// + /// \return Attenuation factor of the sound + /// + /// \see setAttenuation, getMinDistance + /// + //////////////////////////////////////////////////////////// + float getAttenuation() const; + +protected : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor is meant ot be called by derived classes only. + /// + //////////////////////////////////////////////////////////// + SoundSource(); + + //////////////////////////////////////////////////////////// + /// \brief Get the current status of the sound (stopped, paused, playing) + /// + /// \return Current status of the sound + /// + //////////////////////////////////////////////////////////// + Status getStatus() const; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + unsigned int m_source; ///< OpenAL source identifier +}; + +} // namespace sf + + +#endif // SFML_SOUNDSOURCE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::SoundSource +/// \ingroup audio +/// +/// sf::SoundSource is not meant to be used directly, it +/// only serves as a common base for all audio objects +/// that can live in the audio environment. +/// +/// It defines several properties for the sound: pitch, +/// volume, position, attenuation, etc. All of them can be +/// changed at any time with no impact on performances. +/// +/// \see sf::Sound, sf::SoundStream +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Audio/SoundStream.hpp b/include/SFML/Audio/SoundStream.hpp new file mode 100644 index 0000000..461dd92 --- /dev/null +++ b/include/SFML/Audio/SoundStream.hpp @@ -0,0 +1,377 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOUNDSTREAM_HPP +#define SFML_SOUNDSTREAM_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Abstract base class for streamed audio sources +/// +//////////////////////////////////////////////////////////// +class SFML_AUDIO_API SoundStream : public SoundSource +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Structure defining a chunk of audio data to stream + /// + //////////////////////////////////////////////////////////// + struct Chunk + { + const Int16* samples; ///< Pointer to the audio samples + std::size_t sampleCount; ///< Number of samples pointed by Samples + }; + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + virtual ~SoundStream(); + + //////////////////////////////////////////////////////////// + /// \brief Start or resume playing the audio stream + /// + /// This function starts the stream if it was stopped, resumes + /// it if it was paused, and restarts it from beginning if it + /// was it already playing. + /// This function uses its own thread so that it doesn't block + /// the rest of the program while the stream is played. + /// + /// \see pause, stop + /// + //////////////////////////////////////////////////////////// + void play(); + + //////////////////////////////////////////////////////////// + /// \brief Pause the audio stream + /// + /// This function pauses the stream if it was playing, + /// otherwise (stream already paused or stopped) it has no effect. + /// + /// \see play, stop + /// + //////////////////////////////////////////////////////////// + void pause(); + + //////////////////////////////////////////////////////////// + /// \brief Stop playing the audio stream + /// + /// This function stops the stream if it was playing or paused, + /// and does nothing if it was already stopped. + /// It also resets the playing position (unlike pause()). + /// + /// \see play, pause + /// + //////////////////////////////////////////////////////////// + void stop(); + + //////////////////////////////////////////////////////////// + /// \brief Return the number of channels of the stream + /// + /// 1 channel means a mono sound, 2 means stereo, etc. + /// + /// \return Number of channels + /// + //////////////////////////////////////////////////////////// + unsigned int getChannelCount() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the stream sample rate of the stream + /// + /// The sample rate is the number of audio samples played per + /// second. The higher, the better the quality. + /// + /// \return Sample rate, in number of samples per second + /// + //////////////////////////////////////////////////////////// + unsigned int getSampleRate() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the current status of the stream (stopped, paused, playing) + /// + /// \return Current status + /// + //////////////////////////////////////////////////////////// + Status getStatus() const; + + //////////////////////////////////////////////////////////// + /// \brief Change the current playing position of the stream + /// + /// The playing position can be changed when the stream is + /// either paused or playing. + /// + /// \param timeOffset New playing position, from the beginning of the stream + /// + /// \see getPlayingOffset + /// + //////////////////////////////////////////////////////////// + void setPlayingOffset(Time timeOffset); + + //////////////////////////////////////////////////////////// + /// \brief Get the current playing position of the stream + /// + /// \return Current playing position, from the beginning of the stream + /// + /// \see setPlayingOffset + /// + //////////////////////////////////////////////////////////// + Time getPlayingOffset() const; + + //////////////////////////////////////////////////////////// + /// \brief Set whether or not the stream should loop after reaching the end + /// + /// If set, the stream will restart from beginning after + /// reaching the end and so on, until it is stopped or + /// setLoop(false) is called. + /// The default looping state for streams is false. + /// + /// \param loop True to play in loop, false to play once + /// + /// \see getLoop + /// + //////////////////////////////////////////////////////////// + void setLoop(bool loop); + + //////////////////////////////////////////////////////////// + /// \brief Tell whether or not the stream is in loop mode + /// + /// \return True if the stream is looping, false otherwise + /// + /// \see setLoop + /// + //////////////////////////////////////////////////////////// + bool getLoop() const; + +protected : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor is only meant to be called by derived classes. + /// + //////////////////////////////////////////////////////////// + SoundStream(); + + //////////////////////////////////////////////////////////// + /// \brief Define the audio stream parameters + /// + /// This function must be called by derived classes as soon + /// as they know the audio settings of the stream to play. + /// Any attempt to manipulate the stream (play(), ...) before + /// calling this function will fail. + /// It can be called multiple times if the settings of the + /// audio stream change, but only when the stream is stopped. + /// + /// \param channelCount Number of channels of the stream + /// \param sampleRate Sample rate, in samples per second + /// + //////////////////////////////////////////////////////////// + void initialize(unsigned int channelCount, unsigned int sampleRate); + + //////////////////////////////////////////////////////////// + /// \brief Request a new chunk of audio samples from the stream source + /// + /// This function must be overriden by derived classes to provide + /// the audio samples to play. It is called continuously by the + /// streaming loop, in a separate thread. + /// The source can choose to stop the streaming loop at any time, by + /// returning false to the caller. + /// + /// \param data Chunk of data to fill + /// + /// \return True to continue playback, false to stop + /// + //////////////////////////////////////////////////////////// + virtual bool onGetData(Chunk& data) = 0; + + //////////////////////////////////////////////////////////// + /// \brief Change the current playing position in the stream source + /// + /// This function must be overriden by derived classes to + /// allow random seeking into the stream source. + /// + /// \param timeOffset New playing position, relative to the beginning of the stream + /// + //////////////////////////////////////////////////////////// + virtual void onSeek(Time timeOffset) = 0; + +private : + + //////////////////////////////////////////////////////////// + /// \brief Function called as the entry point of the thread + /// + /// This function starts the streaming loop, and returns + /// only when the sound is stopped. + /// + //////////////////////////////////////////////////////////// + void streamData(); + + //////////////////////////////////////////////////////////// + /// \brief Fill a new buffer with audio samples, and append + /// it to the playing queue + /// + /// This function is called as soon as a buffer has been fully + /// consumed; it fills it again and inserts it back into the + /// playing queue. + /// + /// \param buffer Number of the buffer to fill (in [0, BufferCount]) + /// + /// \return True if the stream source has requested to stop, false otherwise + /// + //////////////////////////////////////////////////////////// + bool fillAndPushBuffer(unsigned int bufferNum); + + //////////////////////////////////////////////////////////// + /// \brief Fill the audio buffers and put them all into the playing queue + /// + /// This function is called when playing starts and the + /// playing queue is empty. + /// + /// \return True if the derived class has requested to stop, false otherwise + /// + //////////////////////////////////////////////////////////// + bool fillQueue(); + + //////////////////////////////////////////////////////////// + /// \brief Clear all the audio buffers and empty the playing queue + /// + /// This function is called when the stream is stopped. + /// + //////////////////////////////////////////////////////////// + void clearQueue(); + + enum + { + BufferCount = 3 ///< Number of audio buffers used by the streaming loop + }; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Thread m_thread; ///< Thread running the background tasks + bool m_isStreaming; ///< Streaming state (true = playing, false = stopped) + unsigned int m_buffers[BufferCount]; ///< Sound buffers used to store temporary audio data + unsigned int m_channelCount; ///< Number of channels (1 = mono, 2 = stereo, ...) + unsigned int m_sampleRate; ///< Frequency (samples / second) + Uint32 m_format; ///< Format of the internal sound buffers + bool m_loop; ///< Loop flag (true to loop, false to play once) + Uint64 m_samplesProcessed; ///< Number of buffers processed since beginning of the stream + bool m_endBuffers[BufferCount]; ///< Each buffer is marked as "end buffer" or not, for proper duration calculation +}; + +} // namespace sf + + +#endif // SFML_SOUNDSTREAM_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::SoundStream +/// \ingroup audio +/// +/// Unlike audio buffers (see sf::SoundBuffer), audio streams +/// are never completely loaded in memory. Instead, the audio +/// data is acquired continuously while the stream is playing. +/// This behaviour allows to play a sound with no loading delay, +/// and keeps the memory consumption very low. +/// +/// Sound sources that need to be streamed are usually big files +/// (compressed audio musics that would eat hundreds of MB in memory) +/// or files that would take a lot of time to be received +/// (sounds played over the network). +/// +/// sf::SoundStream is a base class that doesn't care about the +/// stream source, which is left to the derived class. SFML provides +/// a built-in specialization for big files (see sf::Music). +/// No network stream source is provided, but you can write your own +/// by combining this class with the network module. +/// +/// A derived class has to override two virtual functions: +/// \li onGetData fills a new chunk of audio data to be played +/// \li onSeek changes the current playing position in the source +/// +/// It is important to note that each SoundStream is played in its +/// own separate thread, so that the streaming loop doesn't block the +/// rest of the program. In particular, the OnGetData and OnSeek +/// virtual functions may sometimes be called from this separate thread. +/// It is important to keep this in mind, because you may have to take +/// care of synchronization issues if you share data between threads. +/// +/// Usage example: +/// \code +/// class CustomStream : public sf::SoundStream +/// { +/// public : +/// +/// bool open(const std::string& location) +/// { +/// // Open the source and get audio settings +/// ... +/// unsigned int channelCount = ...; +/// unsigned int sampleRate = ...; +/// +/// // Initialize the stream -- important! +/// initialize(channelCount, sampleRate); +/// } +/// +/// private : +/// +/// virtual bool onGetData(Chunk& data) +/// { +/// // Fill the chunk with audio data from the stream source +/// data.samples = ...; +/// data.sampleCount = ...; +/// +/// // Return true to continue playing +/// return true; +/// } +/// +/// virtual void onSeek(Uint32 timeOffset) +/// { +/// // Change the current position in the stream source +/// ... +/// } +/// } +/// +/// // Usage +/// CustomStream stream; +/// stream.open("path/to/stream"); +/// stream.play(); +/// \endcode +/// +/// \see sf::Music +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Config.hpp b/include/SFML/Config.hpp new file mode 100644 index 0000000..ff265ef --- /dev/null +++ b/include/SFML/Config.hpp @@ -0,0 +1,159 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_CONFIG_HPP +#define SFML_CONFIG_HPP + + +//////////////////////////////////////////////////////////// +// Define the SFML version +//////////////////////////////////////////////////////////// +#define SFML_VERSION_MAJOR 2 +#define SFML_VERSION_MINOR 0 + + +//////////////////////////////////////////////////////////// +// Identify the operating system +//////////////////////////////////////////////////////////// +#if defined(_WIN32) || defined(__WIN32__) + + // Windows + #define SFML_SYSTEM_WINDOWS + #ifndef NOMINMAX + #define NOMINMAX + #endif + +#elif defined(linux) || defined(__linux) + + // Linux + #define SFML_SYSTEM_LINUX + +#elif defined(__APPLE__) || defined(MACOSX) || defined(macintosh) || defined(Macintosh) + + // MacOS + #define SFML_SYSTEM_MACOS + +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + + // FreeBSD + #define SFML_SYSTEM_FREEBSD + +#else + + // Unsupported system + #error This operating system is not supported by SFML library + +#endif + + +//////////////////////////////////////////////////////////// +// Define a portable debug macro +//////////////////////////////////////////////////////////// +#if !defined(NDEBUG) + + #define SFML_DEBUG + +#endif + + +//////////////////////////////////////////////////////////// +// Define helpers to create portable import / export macros for each module +//////////////////////////////////////////////////////////// +#if !defined(SFML_STATIC) + + #if defined(SFML_SYSTEM_WINDOWS) + + // Windows compilers need specific (and different) keywords for export and import + #define SFML_API_EXPORT __declspec(dllexport) + #define SFML_API_IMPORT __declspec(dllimport) + + // For Visual C++ compilers, we also need to turn off this annoying C4251 warning + #ifdef _MSC_VER + + #pragma warning(disable : 4251) + + #endif + + #else // Linux, FreeBSD, Mac OS X + + #if __GNUC__ >= 4 + + // GCC 4 has special keywords for showing/hidding symbols, + // the same keyword is used for both importing and exporting + #define SFML_API_EXPORT __attribute__ ((__visibility__ ("default"))) + #define SFML_API_IMPORT __attribute__ ((__visibility__ ("default"))) + + #else + + // GCC < 4 has no mechanism to explicitely hide symbols, everything's exported + #define SFML_API_EXPORT + #define SFML_API_IMPORT + + #endif + + #endif + +#else + + // Static build doesn't need import/export macros + #define SFML_API_EXPORT + #define SFML_API_IMPORT + +#endif + + +//////////////////////////////////////////////////////////// +// Define portable fixed-size types +//////////////////////////////////////////////////////////// +namespace sf +{ + // All "common" platforms use the same size for char, short and int + // (basically there are 3 types for 3 sizes, so no other match is possible), + // we can use them without doing any kind of check + + // 8 bits integer types + typedef signed char Int8; + typedef unsigned char Uint8; + + // 16 bits integer types + typedef signed short Int16; + typedef unsigned short Uint16; + + // 32 bits integer types + typedef signed int Int32; + typedef unsigned int Uint32; + + // 64 bits integer types + #if defined(_MSC_VER) + typedef signed __int64 Int64; + typedef unsigned __int64 Uint64; + #else + typedef signed long long Int64; + typedef unsigned long long Uint64; + #endif + +} // namespace sf + + +#endif // SFML_CONFIG_HPP diff --git a/include/SFML/Graphics.hpp b/include/SFML/Graphics.hpp new file mode 100644 index 0000000..0dc6534 --- /dev/null +++ b/include/SFML/Graphics.hpp @@ -0,0 +1,62 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_GRAPHICS_HPP +#define SFML_GRAPHICS_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#endif // SFML_GRAPHICS_HPP + +//////////////////////////////////////////////////////////// +/// \defgroup graphics Graphics module +/// +/// 2D graphics module: sprites, text, shapes, ... +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/BlendMode.hpp b/include/SFML/Graphics/BlendMode.hpp new file mode 100644 index 0000000..4b12e11 --- /dev/null +++ b/include/SFML/Graphics/BlendMode.hpp @@ -0,0 +1,46 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_BLENDMODE_HPP +#define SFML_BLENDMODE_HPP + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \ingroup graphics +/// \brief Available blending modes for drawing +/// +//////////////////////////////////////////////////////////// +enum BlendMode +{ + BlendAlpha, ///< Pixel = Source * Source.a + Dest * (1 - Source.a) + BlendAdd, ///< Pixel = Source + Dest + BlendMultiply, ///< Pixel = Source * Dest + BlendNone ///< Pixel = Source +}; + +} // namespace sf + + +#endif // SFML_BLENDMODE_HPP diff --git a/include/SFML/Graphics/CircleShape.hpp b/include/SFML/Graphics/CircleShape.hpp new file mode 100644 index 0000000..b82539e --- /dev/null +++ b/include/SFML/Graphics/CircleShape.hpp @@ -0,0 +1,151 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_CIRCLESHAPE_HPP +#define SFML_CIRCLESHAPE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Specialized shape representing a circle +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API CircleShape : public Shape +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// \param radius Radius of the circle + /// \param pointCount Number of points composing the circle + /// + //////////////////////////////////////////////////////////// + explicit CircleShape(float radius = 0, unsigned int pointCount = 30); + + //////////////////////////////////////////////////////////// + /// \brief Set the radius of the circle + /// + /// \param radius New radius of the circle + /// + /// \see getRadius + /// + //////////////////////////////////////////////////////////// + void setRadius(float radius); + + //////////////////////////////////////////////////////////// + /// \brief Get the radius of the circle + /// + /// \return Radius of the circle + /// + /// \see setRadius + /// + //////////////////////////////////////////////////////////// + float getRadius() const; + + //////////////////////////////////////////////////////////// + /// \brief Set the number of points of the circle + /// + /// \param count New number of points of the circle + /// + /// \see getPointCount + /// + //////////////////////////////////////////////////////////// + void setPointCount(unsigned int count); + + //////////////////////////////////////////////////////////// + /// \brief Get the number of points of the shape + /// + /// \return Number of points of the shape + /// + /// \see setPointCount + /// + //////////////////////////////////////////////////////////// + virtual unsigned int getPointCount() const; + + //////////////////////////////////////////////////////////// + /// \brief Get a point of the shape + /// + /// The result is undefined if \a index is out of the valid range. + /// + /// \param index Index of the point to get, in range [0 .. getPointCount() - 1] + /// + /// \return Index-th point of the shape + /// + //////////////////////////////////////////////////////////// + virtual Vector2f getPoint(unsigned int index) const; + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + float m_radius; ///< Radius of the circle + unsigned int m_pointCount; ///< Number of points composing the circle +}; + +} // namespace sf + + +#endif // SFML_CIRCLESHAPE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::CircleShape +/// \ingroup graphics +/// +/// This class inherits all the functions of sf::Transformable +/// (position, rotation, scale, bounds, ...) as well as the +/// functions of sf::Shape (outline, color, texture, ...). +/// +/// Usage example: +/// \code +/// sf::CircleShape circle; +/// circle.setRadius(150); +/// circle.setOutlineColor(sf::Color::Red); +/// circle.setOutlineThickness(5); +/// circle.setPosition(10, 20); +/// ... +/// window.draw(circle); +/// \endcode +/// +/// Since the graphics card can't draw perfect circles, we have to +/// fake them with multiple triangles connected to each other. The +/// "points count" property of sf::CircleShape defines how many of these +/// triangles to use, and therefore defines the quality of the circle. +/// +/// The number of points can also be used for another purpose; with +/// small numbers you can create any regular polygon shape: +/// equilateral triangle, square, pentagon, hexagon, ... +/// +/// \see sf::Shape, sf::RectangleShape, sf::ConvexShape +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/Color.hpp b/include/SFML/Graphics/Color.hpp new file mode 100644 index 0000000..fb2aa2d --- /dev/null +++ b/include/SFML/Graphics/Color.hpp @@ -0,0 +1,228 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_COLOR_HPP +#define SFML_COLOR_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Utility class for manpulating RGBA colors +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Color +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Constructs an opaque black color. It is equivalent to + /// sf::Color(0, 0, 0, 255). + /// + //////////////////////////////////////////////////////////// + Color(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the color from its 4 RGBA components + /// + /// \param red Red component (in the range [0, 255]) + /// \param green Green component (in the range [0, 255]) + /// \param blue Blue component (in the range [0, 255]) + /// \param alpha Alpha (opacity) component (in the range [0, 255]) + /// + //////////////////////////////////////////////////////////// + Color(Uint8 red, Uint8 green, Uint8 blue, Uint8 alpha = 255); + + //////////////////////////////////////////////////////////// + // Static member data + //////////////////////////////////////////////////////////// + static const Color Black; ///< Black predefined color + static const Color White; ///< White predefined color + static const Color Red; ///< Red predefined color + static const Color Green; ///< Green predefined color + static const Color Blue; ///< Blue predefined color + static const Color Yellow; ///< Yellow predefined color + static const Color Magenta; ///< Magenta predefined color + static const Color Cyan; ///< Cyan predefined color + static const Color Transparent; ///< Transparent (black) predefined color + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Uint8 r; ///< Red component + Uint8 g; ///< Green component + Uint8 b; ///< Blue component + Uint8 a; ///< Alpha (opacity) component +}; + +//////////////////////////////////////////////////////////// +/// \relates Color +/// \brief Overload of the == operator +/// +/// This operator compares two colors and check if they are equal. +/// +/// \param left Left operand +/// \param right Right operand +/// +/// \return True if colors are equal, false if they are different +/// +//////////////////////////////////////////////////////////// +SFML_GRAPHICS_API bool operator ==(const Color& left, const Color& right); + +//////////////////////////////////////////////////////////// +/// \relates Color +/// \brief Overload of the != operator +/// +/// This operator compares two colors and check if they are different. +/// +/// \param left Left operand +/// \param right Right operand +/// +/// \return True if colors are different, false if they are equal +/// +//////////////////////////////////////////////////////////// +SFML_GRAPHICS_API bool operator !=(const Color& left, const Color& right); + +//////////////////////////////////////////////////////////// +/// \relates Color +/// \brief Overload of the binary + operator +/// +/// This operator returns the component-wise sum of two colors. +/// Components that exceed 255 are clamped to 255. +/// +/// \param left Left operand +/// \param right Right operand +/// +/// \return Result of \a left + \a right +/// +//////////////////////////////////////////////////////////// +SFML_GRAPHICS_API Color operator +(const Color& left, const Color& right); + +//////////////////////////////////////////////////////////// +/// \relates Color +/// \brief Overload of the binary * operator +/// +/// This operator returns the component-wise multiplication +/// (also called "modulation") of two colors. +/// Components are then divided by 255 so that the result is +/// still in the range [0, 255]. +/// +/// \param left Left operand +/// \param right Right operand +/// +/// \return Result of \a left * \a right +/// +//////////////////////////////////////////////////////////// +SFML_GRAPHICS_API Color operator *(const Color& left, const Color& right); + +//////////////////////////////////////////////////////////// +/// \relates Color +/// \brief Overload of the binary += operator +/// +/// This operator computes the component-wise sum of two colors, +/// and assigns the result to the left operand. +/// Components that exceed 255 are clamped to 255. +/// +/// \param left Left operand +/// \param right Right operand +/// +/// \return Reference to \a left +/// +//////////////////////////////////////////////////////////// +SFML_GRAPHICS_API Color& operator +=(Color& left, const Color& right); + +//////////////////////////////////////////////////////////// +/// \relates Color +/// \brief Overload of the binary *= operator +/// +/// This operator returns the component-wise multiplication +/// (also called "modulation") of two colors, and assigns +/// the result to the left operand. +/// Components are then divided by 255 so that the result is +/// still in the range [0, 255]. +/// +/// \param left Left operand +/// \param right Right operand +/// +/// \return Reference to \a left +/// +//////////////////////////////////////////////////////////// +SFML_GRAPHICS_API Color& operator *=(Color& left, const Color& right); + +} // namespace sf + + +#endif // SFML_COLOR_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Color +/// \ingroup graphics +/// +/// sf::Color is a simple color class composed of 4 components: +/// \li Red +/// \li Green +/// \li Blue +/// \li Alpha (opacity) +/// +/// Each component is a public member, an unsigned integer in +/// the range [0, 255]. Thus, colors can be constructed and +/// manipulated very easily: +/// +/// \code +/// sf::Color color(255, 0, 0); // red +/// color.r = 0; // make it black +/// color.b = 128; // make it dark blue +/// \endcode +/// +/// The fourth component of colors, named "alpha", represents +/// the opacity of the color. A color with an alpha value of +/// 255 will be fully opaque, while an alpha value of 0 will +/// make a color fully transparent, whatever the value of the +/// other components is. +/// +/// The most common colors are already defined as static variables: +/// \code +/// sf::Color black = sf::Color::Black; +/// sf::Color white = sf::Color::White; +/// sf::Color red = sf::Color::Red; +/// sf::Color green = sf::Color::Green; +/// sf::Color blue = sf::Color::Blue; +/// sf::Color yellow = sf::Color::Yellow; +/// sf::Color magenta = sf::Color::Magenta; +/// sf::Color cyan = sf::Color::Cyan; +/// sf::Color transparent = sf::Color::Transparent; +/// \endcode +/// +/// Colors can also be added and modulated (multiplied) using the +/// overloaded operators + and *. +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/ConvexShape.hpp b/include/SFML/Graphics/ConvexShape.hpp new file mode 100644 index 0000000..03af57f --- /dev/null +++ b/include/SFML/Graphics/ConvexShape.hpp @@ -0,0 +1,150 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_CONVEXSHAPE_HPP +#define SFML_CONVEXSHAPE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Specialized shape representing a convex polygon +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API ConvexShape : public Shape +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// \param pointCount Number of points of the polygon + /// + //////////////////////////////////////////////////////////// + explicit ConvexShape(unsigned int pointCount = 0); + + //////////////////////////////////////////////////////////// + /// \brief Set the number of points of the polygon + /// + /// \a count must be greater than 2 to define a valid shape. + /// + /// \param count New number of points of the polygon + /// + /// \see getPointCount + /// + //////////////////////////////////////////////////////////// + void setPointCount(unsigned int count); + + //////////////////////////////////////////////////////////// + /// \brief Get the number of points of the polygon + /// + /// \return Number of points of the polygon + /// + /// \see setPointCount + /// + //////////////////////////////////////////////////////////// + virtual unsigned int getPointCount() const; + + //////////////////////////////////////////////////////////// + /// \brief Set the position of a point + /// + /// Don't forget that the polygon must remain convex, and + /// the points need to stay ordered! + /// setPointCount must be called first in order to set the total + /// number of points. The result is undefined if \a index is out + /// of the valid range. + /// + /// \param index Index of the point to change, in range [0 .. getPointCount() - 1] + /// \param point New position of the point + /// + /// \see getPoint + /// + //////////////////////////////////////////////////////////// + void setPoint(unsigned int index, const Vector2f& point); + + //////////////////////////////////////////////////////////// + /// \brief Get the position of a point + /// + /// The result is undefined if \a index is out of the valid range. + /// + /// \param index Index of the point to get, in range [0 .. getPointCount() - 1] + /// + /// \return Position of the index-th point of the polygon + /// + /// \see setPoint + /// + //////////////////////////////////////////////////////////// + virtual Vector2f getPoint(unsigned int index) const; + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + std::vector m_points; ///< Points composing the convex polygon +}; + +} // namespace sf + + +#endif // SFML_CONVEXSHAPE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::ConvexShape +/// \ingroup graphics +/// +/// This class inherits all the functions of sf::Transformable +/// (position, rotation, scale, bounds, ...) as well as the +/// functions of sf::Shape (outline, color, texture, ...). +/// +/// It is important to keep in mind that a convex shape must +/// always be... convex, otherwise it may not be drawn correctly. +/// Moreover, the points must be defined in order; using a random +/// order would result in an incorrect shape. +/// +/// Usage example: +/// \code +/// sf::ConvexShape polygon; +/// polygon.setPointCount(3); +/// polygon.setPoint(0, sf::Vector2f(0, 0)); +/// polygon.setPoint(1, sf::Vector2f(0, 10)); +/// polygon.setPoint(2, sf::Vector2f(25, 5)); +/// polygon.setOutlineColor(sf::Color::Red); +/// polygon.setOutlineThickness(5); +/// polygon.setPosition(10, 20); +/// ... +/// window.draw(polygon); +/// \endcode +/// +/// \see sf::Shape, sf::RectangleShape, sf::CircleShape +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/Drawable.hpp b/include/SFML/Graphics/Drawable.hpp new file mode 100644 index 0000000..accebfc --- /dev/null +++ b/include/SFML/Graphics/Drawable.hpp @@ -0,0 +1,126 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_DRAWABLE_HPP +#define SFML_DRAWABLE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +class RenderTarget; + +//////////////////////////////////////////////////////////// +/// \brief Abstract base class for objects that can be drawn +/// to a render target +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Drawable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Virtual destructor + /// + //////////////////////////////////////////////////////////// + virtual ~Drawable() {} + +protected : + + friend class RenderTarget; + + //////////////////////////////////////////////////////////// + /// \brief Draw the object to a render target + /// + /// This is a pure virtual function that has to be implemented + /// by the derived class to define how the drawable should be + /// drawn. + /// + /// \param target Render target to draw to + /// \param states Current render states + /// + //////////////////////////////////////////////////////////// + virtual void draw(RenderTarget& target, RenderStates states) const = 0; +}; + +} // namespace sf + + +#endif // SFML_DRAWABLE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Drawable +/// \ingroup graphics +/// +/// sf::Drawable is a very simple base class that allows objects +/// of derived classes to be drawn to a sf::RenderTarget. +/// +/// All you have to do in your derived class is to override the +/// draw virtual function. +/// +/// Note that inheriting from sf::Drawable is not mandatory, +/// but it allows this nice syntax "window.draw(object)" rather +/// than "object.draw(window)", which is more consistent with other +/// SFML classes. +/// +/// Example: +/// \code +/// class MyDrawable : public sf::Drawable +/// { +/// public : +/// +/// ... +/// +/// private : +/// +/// virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const +/// { +/// // You can draw other high-level objects +/// target.draw(m_sprite, states); +/// +/// // ... or use the low-level API +/// states.texture = &m_texture; +/// target.draw(m_vertices, states); +/// +/// // ... or draw with OpenGL directly +/// glBegin(GL_QUADS); +/// ... +/// glEnd(); +/// } +/// +/// sf::Sprite m_sprite; +/// sf::Texture m_texture; +/// sf::VertexArray m_vertices; +/// }; +/// \endcode +/// +/// \see sf::RenderTarget +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/Export.hpp b/include/SFML/Graphics/Export.hpp new file mode 100644 index 0000000..eb76ae8 --- /dev/null +++ b/include/SFML/Graphics/Export.hpp @@ -0,0 +1,48 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_GRAPHICS_EXPORT_HPP +#define SFML_GRAPHICS_EXPORT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +//////////////////////////////////////////////////////////// +// Define portable import / export macros +//////////////////////////////////////////////////////////// +#if defined(SFML_GRAPHICS_EXPORTS) + + #define SFML_GRAPHICS_API SFML_API_EXPORT + +#else + + #define SFML_GRAPHICS_API SFML_API_IMPORT + +#endif + + +#endif // SFML_GRAPHICS_EXPORT_HPP diff --git a/include/SFML/Graphics/Font.hpp b/include/SFML/Graphics/Font.hpp new file mode 100644 index 0000000..d3b1955 --- /dev/null +++ b/include/SFML/Graphics/Font.hpp @@ -0,0 +1,361 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_FONT_HPP +#define SFML_FONT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace sf +{ +class InputStream; + +//////////////////////////////////////////////////////////// +/// \brief Class for loading and manipulating character fonts +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Font +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor defines an empty font + /// + //////////////////////////////////////////////////////////// + Font(); + + //////////////////////////////////////////////////////////// + /// \brief Copy constructor + /// + /// \param copy Instance to copy + /// + //////////////////////////////////////////////////////////// + Font(const Font& copy); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + /// Cleans up all the internal resources used by the font + /// + //////////////////////////////////////////////////////////// + ~Font(); + + //////////////////////////////////////////////////////////// + /// \brief Load the font from a file + /// + /// The supported font formats are: TrueType, Type 1, CFF, + /// OpenType, SFNT, X11 PCF, Windows FNT, BDF, PFR and Type 42. + /// Note that this function know nothing about the standard + /// fonts installed on the user's system, thus you can't + /// load them directly. + /// + /// \param filename Path of the font file to load + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromMemory, loadFromStream + /// + //////////////////////////////////////////////////////////// + bool loadFromFile(const std::string& filename); + + //////////////////////////////////////////////////////////// + /// \brief Load the font from a file in memory + /// + /// The supported font formats are: TrueType, Type 1, CFF, + /// OpenType, SFNT, X11 PCF, Windows FNT, BDF, PFR and Type 42. + /// Warning: SFML cannot preload all the font data in this + /// function, so the buffer pointed by \a data has to remain + /// valid as long as the font is used. + /// + /// \param data Pointer to the file data in memory + /// \param sizeInBytes Size of the data to load, in bytes + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromFile, loadFromStream + /// + //////////////////////////////////////////////////////////// + bool loadFromMemory(const void* data, std::size_t sizeInBytes); + + //////////////////////////////////////////////////////////// + /// \brief Load the font from a custom stream + /// + /// The supported font formats are: TrueType, Type 1, CFF, + /// OpenType, SFNT, X11 PCF, Windows FNT, BDF, PFR and Type 42. + /// Warning: SFML cannot preload all the font data in this + /// function, so the contents of \a stream have to remain + /// valid as long as the font is used. + /// + /// \param stream Source stream to read from + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromFile, loadFromMemory + /// + //////////////////////////////////////////////////////////// + bool loadFromStream(InputStream& stream); + + //////////////////////////////////////////////////////////// + /// \brief Retrieve a glyph of the font + /// + /// \param codePoint Unicode code point of the character to get + /// \param characterSize Reference character size + /// \param bold Retrieve the bold version or the regular one? + /// + /// \return The glyph corresponding to \a codePoint and \a characterSize + /// + //////////////////////////////////////////////////////////// + const Glyph& getGlyph(Uint32 codePoint, unsigned int characterSize, bool bold) const; + + //////////////////////////////////////////////////////////// + /// \brief Get the kerning offset of two glyphs + /// + /// The kerning is an extra offset (negative) to apply between two + /// glyphs when rendering them, to make the pair look more "natural". + /// For example, the pair "AV" have a special kerning to make them + /// closer than other characters. Most of the glyphs pairs have a + /// kerning offset of zero, though. + /// + /// \param first Unicode code point of the first character + /// \param second Unicode code point of the second character + /// \param characterSize Reference character size + /// + /// \return Kerning value for \a first and \a second, in pixels + /// + //////////////////////////////////////////////////////////// + int getKerning(Uint32 first, Uint32 second, unsigned int characterSize) const; + + //////////////////////////////////////////////////////////// + /// \brief Get the line spacing + /// + /// Line spacing is the vertical offset to apply between two + /// consecutive lines of text. + /// + /// \param characterSize Reference character size + /// + /// \return Line spacing, in pixels + /// + //////////////////////////////////////////////////////////// + int getLineSpacing(unsigned int characterSize) const; + + //////////////////////////////////////////////////////////// + /// \brief Retrieve the texture containing the loaded glyphs of a certain size + /// + /// The contents of the returned texture changes as more glyphs + /// are requested, thus it is not very relevant. It is mainly + /// used internally by sf::Text. + /// + /// \param characterSize Reference character size + /// + /// \return Texture containing the glyphs of the requested size + /// + //////////////////////////////////////////////////////////// + const Texture& getTexture(unsigned int characterSize) const; + + //////////////////////////////////////////////////////////// + /// \brief Overload of assignment operator + /// + /// \param right Instance to assign + /// + /// \return Reference to self + /// + //////////////////////////////////////////////////////////// + Font& operator =(const Font& right); + +private : + + //////////////////////////////////////////////////////////// + /// \brief Structure defining a row of glyphs + /// + //////////////////////////////////////////////////////////// + struct Row + { + Row(unsigned int rowTop, unsigned int rowHeight) : width(0), top(rowTop), height(rowHeight) {} + + unsigned int width; ///< Current width of the row + unsigned int top; ///< Y position of the row into the texture + unsigned int height; ///< Height of the row + }; + + //////////////////////////////////////////////////////////// + // Types + //////////////////////////////////////////////////////////// + typedef std::map GlyphTable; ///< Table mapping a codepoint to its glyph + + //////////////////////////////////////////////////////////// + /// \brief Structure defining a page of glyphs + /// + //////////////////////////////////////////////////////////// + struct Page + { + Page(); + + GlyphTable glyphs; ///< Table mapping code points to their corresponding glyph + sf::Texture texture; ///< Texture containing the pixels of the glyphs + unsigned int nextRow; ///< Y position of the next new row in the texture + std::vector rows; ///< List containing the position of all the existing rows + }; + + //////////////////////////////////////////////////////////// + /// \brief Free all the internal resources + /// + //////////////////////////////////////////////////////////// + void cleanup(); + + //////////////////////////////////////////////////////////// + /// \brief Load a new glyph and store it in the cache + /// + /// \param codePoint Unicode code point of the character to load + /// \param characterSize Reference character size + /// \param bold Retrieve the bold version or the regular one? + /// + /// \return The glyph corresponding to \a codePoint and \a characterSize + /// + //////////////////////////////////////////////////////////// + Glyph loadGlyph(Uint32 codePoint, unsigned int characterSize, bool bold) const; + + //////////////////////////////////////////////////////////// + /// \brief Find a suitable rectangle within the texture for a glyph + /// + /// \param page Page of glyphs to search in + /// \param width Width of the rectangle + /// \param height Height of the rectangle + /// + /// \return Found rectangle within the texture + /// + //////////////////////////////////////////////////////////// + IntRect findGlyphRect(Page& page, unsigned int width, unsigned int height) const; + + //////////////////////////////////////////////////////////// + /// \brief Make sure that the given size is the current one + /// + /// \param characterSize Reference character size + /// + /// \return True on success, false if any error happened + /// + //////////////////////////////////////////////////////////// + bool setCurrentSize(unsigned int characterSize) const; + + //////////////////////////////////////////////////////////// + // Types + //////////////////////////////////////////////////////////// + typedef std::map PageTable; ///< Table mapping a character size to its page (texture) + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + void* m_library; ///< Pointer to the internal library interface (it is typeless to avoid exposing implementation details) + void* m_face; ///< Pointer to the internal font face (it is typeless to avoid exposing implementation details) + void* m_streamRec; ///< Pointer to the stream rec instance (it is typeless to avoid exposing implementation details) + int* m_refCount; ///< Reference counter used by implicit sharing + mutable PageTable m_pages; ///< Table containing the glyphs pages by character size + mutable std::vector m_pixelBuffer; ///< Pixel buffer holding a glyph's pixels before being written to the texture +}; + +} // namespace sf + + +#endif // SFML_FONT_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Font +/// \ingroup graphics +/// +/// Fonts can be loaded from a file, from memory or from a custom +/// stream, and supports the most common types of fonts. See +/// the loadFromFile function for the complete list of supported formats. +/// +/// Once it is loaded, a sf::Font instance provides three +/// types of information about the font: +/// \li Global metrics, such as the line spacing +/// \li Per-glyph metrics, such as bounding box or kerning +/// \li Pixel representation of glyphs +/// +/// Fonts alone are not very useful: they hold the font data +/// but cannot make anything useful of it. To do so you need to +/// use the sf::Text class, which is able to properly output text +/// with several options such as character size, style, color, +/// position, rotation, etc. +/// This separation allows more flexibility and better performances: +/// indeed a sf::Font is a heavy resource, and any operation on it +/// is slow (often too slow for real-time applications). On the other +/// side, a sf::Text is a lightweight object which can combine the +/// glyphs data and metrics of a sf::Font to display any text on a +/// render target. +/// Note that it is also possible to bind several sf::Text instances +/// to the same sf::Font. +/// +/// It is important to note that the sf::Text instance doesn't +/// copy the font that it uses, it only keeps a reference to it. +/// Thus, a sf::Font must not be destructed while it is +/// used by a sf::Text (i.e. never write a function that +/// uses a local sf::Font instance for creating a text). +/// +/// Usage example: +/// \code +/// // Declare a new font +/// sf::Font font; +/// +/// // Load it from a file +/// if (!font.loadFromFile("arial.ttf")) +/// { +/// // error... +/// } +/// +/// // Create a text which uses our font +/// sf::Text text1; +/// text1.setFont(font); +/// text1.setCharacterSize(30); +/// text1.setStyle(sf::Text::Regular); +/// +/// // Create another text using the same font, but with different parameters +/// sf::Text text2; +/// text2.setFont(font); +/// text2.setCharacterSize(50); +/// text1.setStyle(sf::Text::Italic); +/// \endcode +/// +/// Apart from loading font files, and passing them to instances +/// of sf::Text, you should normally not have to deal directly +/// with this class. However, it may be useful to access the +/// font metrics or rasterized glyphs for advanced usage. +/// +/// \see sf::Text +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/Glyph.hpp b/include/SFML/Graphics/Glyph.hpp new file mode 100644 index 0000000..d97616f --- /dev/null +++ b/include/SFML/Graphics/Glyph.hpp @@ -0,0 +1,79 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_GLYPH_HPP +#define SFML_GLYPH_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Structure describing a glyph +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Glyph +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + Glyph() : advance(0) {} + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + int advance; ///< Offset to move horizontically to the next character + IntRect bounds; ///< Bounding rectangle of the glyph, in coordinates relative to the baseline + IntRect textureRect; ///< Texture coordinates of the glyph inside the font's texture +}; + +} // namespace sf + + +#endif // SFML_GLYPH_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Glyph +/// \ingroup graphics +/// +/// A glyph is the visual representation of a character. +/// +/// The sf::Glyph structure provides the information needed +/// to handle the glyph: +/// \li its coordinates in the font's texture +/// \li its bounding rectangle +/// \li the offset to apply to get the starting position of the next glyph +/// +/// \see sf::Font +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/Image.hpp b/include/SFML/Graphics/Image.hpp new file mode 100644 index 0000000..5878546 --- /dev/null +++ b/include/SFML/Graphics/Image.hpp @@ -0,0 +1,319 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_IMAGE_HPP +#define SFML_IMAGE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include + + +namespace sf +{ +class InputStream; + +//////////////////////////////////////////////////////////// +/// \brief Class for loading, manipulating and saving images +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Image +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Creates an empty image. + /// + //////////////////////////////////////////////////////////// + Image(); + + //////////////////////////////////////////////////////////// + /// \brief Create the image and fill it with a unique color + /// + /// \param width Width of the image + /// \param height Height of the image + /// \param color Fill color + /// + //////////////////////////////////////////////////////////// + void create(unsigned int width, unsigned int height, const Color& color = Color(0, 0, 0)); + + //////////////////////////////////////////////////////////// + /// \brief Create the image from an array of pixels + /// + /// The \a pixel array is assumed to contain 32-bits RGBA pixels, + /// and have the given \a width and \a height. If not, this is + /// an undefined behaviour. + /// If \a pixels is null, an empty image is created. + /// + /// \param width Width of the image + /// \param height Height of the image + /// \param pixels Array of pixels to copy to the image + /// + //////////////////////////////////////////////////////////// + void create(unsigned int width, unsigned int height, const Uint8* pixels); + + //////////////////////////////////////////////////////////// + /// \brief Load the image from a file on disk + /// + /// The supported image formats are bmp, png, tga, jpg, gif, + /// psd, hdr and pic. Some format options are not supported, + /// like progressive jpeg. + /// If this function fails, the image is left unchanged. + /// + /// \param filename Path of the image file to load + /// + /// \return True if loading was successful + /// + /// \see loadFromMemory, loadFromStream, saveToFile + /// + //////////////////////////////////////////////////////////// + bool loadFromFile(const std::string& filename); + + //////////////////////////////////////////////////////////// + /// \brief Load the image from a file in memory + /// + /// The supported image formats are bmp, png, tga, jpg, gif, + /// psd, hdr and pic. Some format options are not supported, + /// like progressive jpeg. + /// If this function fails, the image is left unchanged. + /// + /// \param data Pointer to the file data in memory + /// \param size Size of the data to load, in bytes + /// + /// \return True if loading was successful + /// + /// \see loadFromFile, loadFromStream + /// + //////////////////////////////////////////////////////////// + bool loadFromMemory(const void* data, std::size_t size); + + //////////////////////////////////////////////////////////// + /// \brief Load the image from a custom stream + /// + /// The supported image formats are bmp, png, tga, jpg, gif, + /// psd, hdr and pic. Some format options are not supported, + /// like progressive jpeg. + /// If this function fails, the image is left unchanged. + /// + /// \param stream Source stream to read from + /// + /// \return True if loading was successful + /// + /// \see loadFromFile, loadFromMemory + /// + //////////////////////////////////////////////////////////// + bool loadFromStream(InputStream& stream); + + //////////////////////////////////////////////////////////// + /// \brief Save the image to a file on disk + /// + /// The format of the image is automatically deduced from + /// the extension. The supported image formats are bmp, png, + /// tga and jpg. The destination file is overwritten + /// if it already exists. This function fails if the image is empty. + /// + /// \param filename Path of the file to save + /// + /// \return True if saving was successful + /// + /// \see create, loadFromFile, loadFromMemory + /// + //////////////////////////////////////////////////////////// + bool saveToFile(const std::string& filename) const; + + //////////////////////////////////////////////////////////// + /// \brief Return the size (width and height) of the image + /// + /// \return Size of the image, in pixels + /// + //////////////////////////////////////////////////////////// + Vector2u getSize() const; + + //////////////////////////////////////////////////////////// + /// \brief Create a transparency mask from a specified color-key + /// + /// This function sets the alpha value of every pixel matching + /// the given color to \a alpha (0 by default), so that they + /// become transparent. + /// + /// \param color Color to make transparent + /// \param alpha Alpha value to assign to transparent pixels + /// + //////////////////////////////////////////////////////////// + void createMaskFromColor(const Color& color, Uint8 alpha = 0); + + //////////////////////////////////////////////////////////// + /// \brief Copy pixels from another image onto this one + /// + /// This function does a slow pixel copy and should not be + /// used intensively. It can be used to prepare a complex + /// static image from several others, but if you need this + /// kind of feature in real-time you'd better use sf::RenderTexture. + /// + /// If \a sourceRect is empty, the whole image is copied. + /// If \a applyAlpha is set to true, the transparency of + /// source pixels is applied. If it is false, the pixels are + /// copied unchanged with their alpha value. + /// + /// \param source Source image to copy + /// \param destX X coordinate of the destination position + /// \param destY Y coordinate of the destination position + /// \param sourceRect Sub-rectangle of the source image to copy + /// \param applyAlpha Should the copy take in account the source transparency? + /// + //////////////////////////////////////////////////////////// + void copy(const Image& source, unsigned int destX, unsigned int destY, const IntRect& sourceRect = IntRect(0, 0, 0, 0), bool applyAlpha = false); + + //////////////////////////////////////////////////////////// + /// \brief Change the color of a pixel + /// + /// This function doesn't check the validity of the pixel + /// coordinates, using out-of-range values will result in + /// an undefined behaviour. + /// + /// \param x X coordinate of pixel to change + /// \param y Y coordinate of pixel to change + /// \param color New color of the pixel + /// + /// \see getPixel + /// + //////////////////////////////////////////////////////////// + void setPixel(unsigned int x, unsigned int y, const Color& color); + + //////////////////////////////////////////////////////////// + /// \brief Get the color of a pixel + /// + /// This function doesn't check the validity of the pixel + /// coordinates, using out-of-range values will result in + /// an undefined behaviour. + /// + /// \param x X coordinate of pixel to get + /// \param y Y coordinate of pixel to get + /// + /// \return Color of the pixel at coordinates (x, y) + /// + /// \see setPixel + /// + //////////////////////////////////////////////////////////// + Color getPixel(unsigned int x, unsigned int y) const; + + //////////////////////////////////////////////////////////// + /// \brief Get a read-only pointer to the array of pixels + /// + /// The returned value points to an array of RGBA pixels made of + /// 8 bits integers components. The size of the array is + /// width * height * 4 (getSize().x * getSize().y * 4). + /// Warning: the returned pointer may become invalid if you + /// modify the image, so you should never store it for too long. + /// If the image is empty, a null pointer is returned. + /// + /// \return Read-only pointer to the array of pixels + /// + //////////////////////////////////////////////////////////// + const Uint8* getPixelsPtr() const; + + //////////////////////////////////////////////////////////// + /// \brief Flip the image horizontally (left <-> right) + /// + //////////////////////////////////////////////////////////// + void flipHorizontally(); + + //////////////////////////////////////////////////////////// + /// \brief Flip the image vertically (top <-> bottom) + /// + //////////////////////////////////////////////////////////// + void flipVertically(); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Vector2u m_size; ///< Image size + std::vector m_pixels; ///< Pixels of the image +}; + +} // namespace sf + + +#endif // SFML_IMAGE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Image +/// \ingroup graphics +/// +/// sf::Image is an abstraction to manipulate images +/// as bidimensional arrays of pixels. The class provides +/// functions to load, read, write and save pixels, as well +/// as many other useful functions. +/// +/// sf::Image can handle a unique internal representation of +/// pixels, which is RGBA 32 bits. This means that a pixel +/// must be composed of 8 bits red, green, blue and alpha +/// channels -- just like a sf::Color. +/// All the functions that return an array of pixels follow +/// this rule, and all parameters that you pass to sf::Image +/// functions (such as loadFromPixels) must use this +/// representation as well. +/// +/// A sf::Image can be copied, but it is a heavy resource and +/// if possible you should always use [const] references to +/// pass or return them to avoid useless copies. +/// +/// Usage example: +/// \code +/// // Load an image file from a file +/// sf::Image background; +/// if (!background.loadFromFile("background.jpg")) +/// return -1; +/// +/// // Create a 20x20 image filled with black color +/// sf::Image image; +/// if (!image.create(20, 20, sf::Color::Black)) +/// return -1; +/// +/// // Copy image1 on image2 at position (10, 10) +/// image.copy(background, 10, 10); +/// +/// // Make the top-left pixel transparent +/// sf::Color color = image.getPixel(0, 0); +/// color.a = 0; +/// image.setPixel(0, 0, color); +/// +/// // Save the image to a file +/// if (!image.saveToFile("result.png")) +/// return -1; +/// \endcode +/// +/// \see sf::Texture +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/PrimitiveType.hpp b/include/SFML/Graphics/PrimitiveType.hpp new file mode 100644 index 0000000..8f3cfb2 --- /dev/null +++ b/include/SFML/Graphics/PrimitiveType.hpp @@ -0,0 +1,53 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_PRIMITIVETYPE_HPP +#define SFML_PRIMITIVETYPE_HPP + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \ingroup graphics +/// \brief Types of primitives that a sf::VertexArray can render +/// +/// Points and lines have no area, therefore their thickness +/// will always be 1 pixel, regarldess the current transform +/// and view. +/// +//////////////////////////////////////////////////////////// +enum PrimitiveType +{ + Points, ///< List of individual points + Lines, ///< List of individual lines + LinesStrip, ///< List of connected lines, a point uses the previous point to form a line + Triangles, ///< List of individual triangles + TrianglesStrip, ///< List of connected triangles, a point uses the two previous points to form a triangle + TrianglesFan, ///< List of connected triangles, a point uses the common center and the previous point to form a triangle + Quads ///< List of individual quads +}; + +} // namespace sf + + +#endif // SFML_PRIMITIVETYPE_HPP diff --git a/include/SFML/Graphics/Rect.hpp b/include/SFML/Graphics/Rect.hpp new file mode 100644 index 0000000..3a3acc7 --- /dev/null +++ b/include/SFML/Graphics/Rect.hpp @@ -0,0 +1,248 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_RECT_HPP +#define SFML_RECT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Utility class for manipulating 2D axis aligned rectangles +/// +//////////////////////////////////////////////////////////// +template +class Rect +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Creates an empty rectangle (it is equivalent to calling + /// Rect(0, 0, 0, 0)). + /// + //////////////////////////////////////////////////////////// + Rect(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the rectangle from its coordinates + /// + /// Be careful, the last two parameters are the width + /// and height, not the right and bottom coordinates! + /// + /// \param rectLeft Left coordinate of the rectangle + /// \param rectTop Top coordinate of the rectangle + /// \param rectWidth Width of the rectangle + /// \param rectHeight Height of the rectangle + /// + //////////////////////////////////////////////////////////// + Rect(T rectLeft, T rectTop, T rectWidth, T rectHeight); + + //////////////////////////////////////////////////////////// + /// \brief Construct the rectangle from position and size + /// + /// Be careful, the last parameter is the size, + /// not the bottom-right corner! + /// + /// \param position Position of the top-left corner of the rectangle + /// \param size Size of the rectangle + /// + //////////////////////////////////////////////////////////// + Rect(const Vector2& position, const Vector2& size); + + //////////////////////////////////////////////////////////// + /// \brief Construct the rectangle from another type of rectangle + /// + /// This constructor doesn't replace the copy constructor, + /// it's called only when U != T. + /// A call to this constructor will fail to compile if U + /// is not convertible to T. + /// + /// \param rectangle Rectangle to convert + /// + //////////////////////////////////////////////////////////// + template + explicit Rect(const Rect& rectangle); + + //////////////////////////////////////////////////////////// + /// \brief Check if a point is inside the rectangle's area + /// + /// \param x X coordinate of the point to test + /// \param y Y coordinate of the point to test + /// + /// \return True if the point is inside, false otherwise + /// + /// \see intersects + /// + //////////////////////////////////////////////////////////// + bool contains(T x, T y) const; + + //////////////////////////////////////////////////////////// + /// \brief Check if a point is inside the rectangle's area + /// + /// \param point Point to test + /// + /// \return True if the point is inside, false otherwise + /// + /// \see intersects + /// + //////////////////////////////////////////////////////////// + bool contains(const Vector2& point) const; + + //////////////////////////////////////////////////////////// + /// \brief Check the intersection between two rectangles + /// + /// \param rectangle Rectangle to test + /// + /// \return True if rectangles overlap, false otherwise + /// + /// \see contains + /// + //////////////////////////////////////////////////////////// + bool intersects(const Rect& rectangle) const; + + //////////////////////////////////////////////////////////// + /// \brief Check the intersection between two rectangles + /// + /// This overload returns the overlapped rectangle in the + /// \a intersection parameter. + /// + /// \param rectangle Rectangle to test + /// \param intersection Rectangle to be filled with the intersection + /// + /// \return True if rectangles overlap, false otherwise + /// + /// \see contains + /// + //////////////////////////////////////////////////////////// + bool intersects(const Rect& rectangle, Rect& intersection) const; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + T left; ///< Left coordinate of the rectangle + T top; ///< Top coordinate of the rectangle + T width; ///< Width of the rectangle + T height; ///< Height of the rectangle +}; + +//////////////////////////////////////////////////////////// +/// \relates Rect +/// \brief Overload of binary operator == +/// +/// This operator compares strict equality between two rectangles. +/// +/// \param left Left operand (a rectangle) +/// \param right Right operand (a rectangle) +/// +/// \return True if \a left is equal to \a right +/// +//////////////////////////////////////////////////////////// +template +bool operator ==(const Rect& left, const Rect& right); + +//////////////////////////////////////////////////////////// +/// \relates Rect +/// \brief Overload of binary operator != +/// +/// This operator compares strict difference between two rectangles. +/// +/// \param left Left operand (a rectangle) +/// \param right Right operand (a rectangle) +/// +/// \return True if \a left is not equal to \a right +/// +//////////////////////////////////////////////////////////// +template +bool operator !=(const Rect& left, const Rect& right); + +#include + +// Create typedefs for the most common types +typedef Rect IntRect; +typedef Rect FloatRect; + +} // namespace sf + + +#endif // SFML_RECT_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Rect +/// \ingroup graphics +/// +/// A rectangle is defined by its top-left corner and its size. +/// It is a very simple class defined for convenience, so +/// its member variables (left, top, width and height) are public +/// and can be accessed directly, just like the vector classes +/// (Vector2 and Vector3). +/// +/// To keep things simple, sf::Rect doesn't define +/// functions to emulate the properties that are not directly +/// members (such as right, bottom, center, etc.), it rather +/// only provides intersection functions. +/// +/// sf::Rect uses the usual rules for its boundaries: +/// \li The left and top edges are included in the rectangle's area +/// \li The right (left + width) and bottom (top + height) edges are excluded from the rectangle's area +/// +/// This means that sf::IntRect(0, 0, 1, 1) and sf::IntRect(1, 1, 1, 1) +/// don't intersect. +/// +/// sf::Rect is a template and may be used with any numeric type, but +/// for simplicity the instanciations used by SFML are typedefed: +/// \li sf::Rect is sf::IntRect +/// \li sf::Rect is sf::FloatRect +/// +/// So that you don't have to care about the template syntax. +/// +/// Usage example: +/// \code +/// // Define a rectangle, located at (0, 0) with a size of 20x5 +/// sf::IntRect r1(0, 0, 20, 5); +/// +/// // Define another rectangle, located at (4, 2) with a size of 18x10 +/// sf::Vector2i position(4, 2); +/// sf::Vector2i size(18, 10); +/// sf::IntRect r2(position, size); +/// +/// // Test intersections with the point (3, 1) +/// bool b1 = r1.contains(3, 1); // true +/// bool b2 = r2.contains(3, 1); // false +/// +/// // Test the intersection between r1 and r2 +/// sf::IntRect result; +/// bool b3 = r1.intersects(r2, result); // true +/// // result == (4, 2, 16, 3) +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/Rect.inl b/include/SFML/Graphics/Rect.inl new file mode 100644 index 0000000..b8f23aa --- /dev/null +++ b/include/SFML/Graphics/Rect.inl @@ -0,0 +1,137 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2012 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////// +template +Rect::Rect() : +left (0), +top (0), +width (0), +height(0) +{ + +} + + +//////////////////////////////////////////////////////////// +template +Rect::Rect(T rectLeft, T rectTop, T rectWidth, T rectHeight) : +left (rectLeft), +top (rectTop), +width (rectWidth), +height(rectHeight) +{ + +} + + +//////////////////////////////////////////////////////////// +template +Rect::Rect(const Vector2& position, const Vector2& size) : +left (position.x), +top (position.y), +width (size.x), +height(size.y) +{ + +} + + +//////////////////////////////////////////////////////////// +template +template +Rect::Rect(const Rect& rectangle) : +left (static_cast(rectangle.left)), +top (static_cast(rectangle.top)), +width (static_cast(rectangle.width)), +height(static_cast(rectangle.height)) +{ +} + + +//////////////////////////////////////////////////////////// +template +bool Rect::contains(T x, T y) const +{ + return (x >= left) && (x < left + width) && (y >= top) && (y < top + height); +} + + +//////////////////////////////////////////////////////////// +template +bool Rect::contains(const Vector2& point) const +{ + return contains(point.x, point.y); +} + + +//////////////////////////////////////////////////////////// +template +bool Rect::intersects(const Rect& rectangle) const +{ + Rect intersection; + return intersects(rectangle, intersection); +} + + +//////////////////////////////////////////////////////////// +template +bool Rect::intersects(const Rect& rectangle, Rect& intersection) const +{ + // Compute the intersection boundaries + T interLeft = std::max(left, rectangle.left); + T interTop = std::max(top, rectangle.top); + T interRight = std::min(left + width, rectangle.left + rectangle.width); + T interBottom = std::min(top + height, rectangle.top + rectangle.height); + + // If the intersection is valid (positive non zero area), then there is an intersection + if ((interLeft < interRight) && (interTop < interBottom)) + { + intersection = Rect(interLeft, interTop, interRight - interLeft, interBottom - interTop); + return true; + } + else + { + intersection = Rect(0, 0, 0, 0); + return false; + } +} + + +//////////////////////////////////////////////////////////// +template +inline bool operator ==(const Rect& left, const Rect& right) +{ + return (left.left == right.left) && (left.width == right.width) && + (left.top == right.top) && (left.height == right.height); +} + + +//////////////////////////////////////////////////////////// +template +inline bool operator !=(const Rect& left, const Rect& right) +{ + return !(left == right); +} diff --git a/include/SFML/Graphics/RectangleShape.hpp b/include/SFML/Graphics/RectangleShape.hpp new file mode 100644 index 0000000..2140e91 --- /dev/null +++ b/include/SFML/Graphics/RectangleShape.hpp @@ -0,0 +1,128 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_RECTANGLESHAPE_HPP +#define SFML_RECTANGLESHAPE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Specialized shape representing a rectangle +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API RectangleShape : public Shape +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// \param size Size of the rectangle + /// + //////////////////////////////////////////////////////////// + explicit RectangleShape(const Vector2f& size = Vector2f(0, 0)); + + //////////////////////////////////////////////////////////// + /// \brief Set the size of the rectangle + /// + /// \param size New size of the rectangle + /// + /// \see getSize + /// + //////////////////////////////////////////////////////////// + void setSize(const Vector2f& size); + + //////////////////////////////////////////////////////////// + /// \brief Get the size of the rectangle + /// + /// \return Size of the rectangle + /// + /// \see setSize + /// + //////////////////////////////////////////////////////////// + const Vector2f& getSize() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the number of points defining the shape + /// + /// \return Number of points of the shape + /// + //////////////////////////////////////////////////////////// + virtual unsigned int getPointCount() const; + + //////////////////////////////////////////////////////////// + /// \brief Get a point of the shape + /// + /// The result is undefined if \a index is out of the valid range. + /// + /// \param index Index of the point to get, in range [0 .. getPointCount() - 1] + /// + /// \return Index-th point of the shape + /// + //////////////////////////////////////////////////////////// + virtual Vector2f getPoint(unsigned int index) const; + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Vector2f m_size; ///< Size of the rectangle +}; + +} // namespace sf + + +#endif // SFML_RECTANGLESHAPE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::RectangleShape +/// \ingroup graphics +/// +/// This class inherits all the functions of sf::Transformable +/// (position, rotation, scale, bounds, ...) as well as the +/// functions of sf::Shape (outline, color, texture, ...). +/// +/// Usage example: +/// \code +/// sf::RectangleShape rectangle; +/// rectangle.setSize(sf::Vector2f(100, 50)); +/// rectangle.setOutlineColor(sf::Color::Red); +/// rectangle.setOutlineThickness(5); +/// rectangle.setPosition(10, 20); +/// ... +/// window.draw(rectangle); +/// \endcode +/// +/// \see sf::Shape, sf::CircleShape, sf::ConvexShape +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/RenderStates.hpp b/include/SFML/Graphics/RenderStates.hpp new file mode 100644 index 0000000..bf4183c --- /dev/null +++ b/include/SFML/Graphics/RenderStates.hpp @@ -0,0 +1,174 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_RENDERSTATES_HPP +#define SFML_RENDERSTATES_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +class Shader; +class Texture; + +//////////////////////////////////////////////////////////// +/// \brief Define the states used for drawing to a RenderTarget +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API RenderStates +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Constructing a default set of render states is equivalent + /// to using sf::RenderStates::Default. + /// The default set defines: + /// \li the BlendAlpha blend mode + /// \li the identity transform + /// \li a null texture + /// \li a null shader + /// + //////////////////////////////////////////////////////////// + RenderStates(); + + //////////////////////////////////////////////////////////// + /// \brief Construct a default set of render states with a custom blend mode + /// + /// \param theBlendMode Blend mode to use + /// + //////////////////////////////////////////////////////////// + RenderStates(BlendMode theBlendMode); + + //////////////////////////////////////////////////////////// + /// \brief Construct a default set of render states with a custom transform + /// + /// \param theTransform Transform to use + /// + //////////////////////////////////////////////////////////// + RenderStates(const Transform& theTransform); + + //////////////////////////////////////////////////////////// + /// \brief Construct a default set of render states with a custom texture + /// + /// \param theTexture Texture to use + /// + //////////////////////////////////////////////////////////// + RenderStates(const Texture* theTexture); + + //////////////////////////////////////////////////////////// + /// \brief Construct a default set of render states with a custom shader + /// + /// \param theShader Shader to use + /// + //////////////////////////////////////////////////////////// + RenderStates(const Shader* theShader); + + //////////////////////////////////////////////////////////// + /// \brief Construct a set of render states with all its attributes + /// + /// \param theBlendMode Blend mode to use + /// \param theTransform Transform to use + /// \param theTexture Texture to use + /// \param theShader Shader to use + /// + //////////////////////////////////////////////////////////// + RenderStates(BlendMode theBlendMode, const Transform& theTransform, + const Texture* theTexture, const Shader* theShader); + + //////////////////////////////////////////////////////////// + // Static member data + //////////////////////////////////////////////////////////// + static const RenderStates Default; ///< Special instance holding the default render states + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + BlendMode blendMode; ///< Blending mode + Transform transform; ///< Transform + const Texture* texture; ///< Texture + const Shader* shader; ///< Shader +}; + +} // namespace sf + + +#endif // SFML_RENDERSTATES_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::RenderStates +/// \ingroup graphics +/// +/// There are four global states that can be applied to +/// the drawn objects: +/// \li the blend mode: how pixels of the object are blended with the background +/// \li the transform: how the object is positioned/rotated/scaled +/// \li the texture: what image is mapped to the object +/// \li the shader: what custom effect is applied to the object +/// +/// High-level objects such as sprites or text force some of +/// these states when they are drawn. For example, a sprite +/// will set its own texture, so that you don't have to care +/// about it when drawing the sprite. +/// +/// The transform is a special case: sprites, texts and shapes +/// (and it's a good idea to do it with your own drawable classes +/// too) combine their transform with the one that is passed in the +/// RenderStates structure. So that you can use a "global" transform +/// on top of each object's transform. +/// +/// Most objects, especially high-level drawables, can be drawn +/// directly without defining render states explicitely -- the +/// default set of states is ok in most cases. +/// \code +/// window.Draw(sprite); +/// \endcode +/// +/// If you want to use a single specific render state, +/// for example a shader, you can pass it directly to the Draw +/// function: sf::RenderStates has an implicit one-argument +/// constructor for each state. +/// \code +/// window.draw(sprite, shader); +/// \endcode +/// +/// When you're inside the Draw function of a drawable +/// object (inherited from sf::Drawable), you can +/// either pass the render states unmodified, or change +/// some of them. +/// For example, a transformable object will combine the +/// current transform with its own transform. A sprite will +/// set its texture. Etc. +/// +/// \see sf::RenderTarget, sf::Drawable +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/RenderTarget.hpp b/include/SFML/Graphics/RenderTarget.hpp new file mode 100644 index 0000000..5f69e7f --- /dev/null +++ b/include/SFML/Graphics/RenderTarget.hpp @@ -0,0 +1,451 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_RENDERTARGET_HPP +#define SFML_RENDERTARGET_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace sf +{ +class Drawable; + +//////////////////////////////////////////////////////////// +/// \brief Base class for all render targets (window, texture, ...) +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API RenderTarget : NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + virtual ~RenderTarget(); + + //////////////////////////////////////////////////////////// + /// \brief Clear the entire target with a single color + /// + /// This function is usually called once every frame, + /// to clear the previous contents of the target. + /// + /// \param color Fill color to use to clear the render target + /// + //////////////////////////////////////////////////////////// + void clear(const Color& color = Color(0, 0, 0, 255)); + + //////////////////////////////////////////////////////////// + /// \brief Change the current active view + /// + /// The view is like a 2D camera, it controls which part of + /// the 2D scene is visible, and how it is viewed in the + /// render-target. + /// The new view will affect everything that is drawn, until + /// another view is set. + /// The render target keeps its own copy of the view object, + /// so it is not necessary to keep the original one alive + /// after calling this function. + /// To restore the original view of the target, you can pass + /// the result of getDefaultView() to this function. + /// + /// \param view New view to use + /// + /// \see getView, getDefaultView + /// + //////////////////////////////////////////////////////////// + void setView(const View& view); + + //////////////////////////////////////////////////////////// + /// \brief Get the view currently in use in the render target + /// + /// \return The view object that is currently used + /// + /// \see setView, getDefaultView + /// + //////////////////////////////////////////////////////////// + const View& getView() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the default view of the render target + /// + /// The default view has the initial size of the render target, + /// and never changes after the target has been created. + /// + /// \return The default view of the render target + /// + /// \see setView, getView + /// + //////////////////////////////////////////////////////////// + const View& getDefaultView() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the viewport of a view, applied to this render target + /// + /// The viewport is defined in the view as a ratio, this function + /// simply applies this ratio to the current dimensions of the + /// render target to calculate the pixels rectangle that the viewport + /// actually covers in the target. + /// + /// \param view The view for which we want to compute the viewport + /// + /// \return Viewport rectangle, expressed in pixels + /// + //////////////////////////////////////////////////////////// + IntRect getViewport(const View& view) const; + + //////////////////////////////////////////////////////////// + /// \brief Convert a point from target coordinates to world + /// coordinates, using the current view + /// + /// This function is an overload of the mapPixelToCoords + /// function that implicitely uses the current view. + /// It is equivalent to: + /// \code + /// target.mapPixelToCoords(point, target.getView()); + /// \endcode + /// + /// \param point Pixel to convert + /// + /// \return The converted point, in "world" coordinates + /// + /// \see mapCoordsToPixel + /// + //////////////////////////////////////////////////////////// + Vector2f mapPixelToCoords(const Vector2i& point) const; + + //////////////////////////////////////////////////////////// + /// \brief Convert a point from target coordinates to world coordinates + /// + /// This function finds the 2D position that matches the + /// given pixel of the render-target. In other words, it does + /// the inverse of what the graphics card does, to find the + /// initial position of a rendered pixel. + /// + /// Initially, both coordinate systems (world units and target pixels) + /// match perfectly. But if you define a custom view or resize your + /// render-target, this assertion is not true anymore, ie. a point + /// located at (10, 50) in your render-target may map to the point + /// (150, 75) in your 2D world -- if the view is translated by (140, 25). + /// + /// For render-windows, this function is typically used to find + /// which point (or object) is located below the mouse cursor. + /// + /// This version uses a custom view for calculations, see the other + /// overload of the function if you want to use the current view of the + /// render-target. + /// + /// \param point Pixel to convert + /// \param view The view to use for converting the point + /// + /// \return The converted point, in "world" units + /// + /// \see mapCoordsToPixel + /// + //////////////////////////////////////////////////////////// + Vector2f mapPixelToCoords(const Vector2i& point, const View& view) const; + + //////////////////////////////////////////////////////////// + /// \brief Convert a point from world coordinates to target + /// coordinates, using the current view + /// + /// This function is an overload of the mapCoordsToPixel + /// function that implicitely uses the current view. + /// It is equivalent to: + /// \code + /// target.mapCoordsToPixel(point, target.getView()); + /// \endcode + /// + /// \param point Point to convert + /// + /// \return The converted point, in target coordinates (pixels) + /// + /// \see mapPixelToCoords + /// + //////////////////////////////////////////////////////////// + Vector2i mapCoordsToPixel(const Vector2f& point) const; + + //////////////////////////////////////////////////////////// + /// \brief Convert a point from world coordinates to target coordinates + /// + /// This function finds the pixel of the render-target that matches + /// the given 2D point. In other words, it goes through the same process + /// as the graphics card, to compute the final position of a rendered point. + /// + /// Initially, both coordinate systems (world units and target pixels) + /// match perfectly. But if you define a custom view or resize your + /// render-target, this assertion is not true anymore, ie. a point + /// located at (150, 75) in your 2D world may map to the pixel + /// (10, 50) of your render-target -- if the view is translated by (140, 25). + /// + /// This version uses a custom view for calculations, see the other + /// overload of the function if you want to use the current view of the + /// render-target. + /// + /// \param point Point to convert + /// \param view The view to use for converting the point + /// + /// \return The converted point, in target coordinates (pixels) + /// + /// \see mapPixelToCoords + /// + //////////////////////////////////////////////////////////// + Vector2i mapCoordsToPixel(const Vector2f& point, const View& view) const; + + //////////////////////////////////////////////////////////// + /// \brief Draw a drawable object to the render-target + /// + /// \param drawable Object to draw + /// \param states Render states to use for drawing + /// + //////////////////////////////////////////////////////////// + void draw(const Drawable& drawable, const RenderStates& states = RenderStates::Default); + + //////////////////////////////////////////////////////////// + /// \brief Draw primitives defined by an array of vertices + /// + /// \param vertices Pointer to the vertices + /// \param vertexCount Number of vertices in the array + /// \param type Type of primitives to draw + /// \param states Render states to use for drawing + /// + //////////////////////////////////////////////////////////// + void draw(const Vertex* vertices, unsigned int vertexCount, + PrimitiveType type, const RenderStates& states = RenderStates::Default); + + //////////////////////////////////////////////////////////// + /// \brief Return the size of the rendering region of the target + /// + /// \return Size in pixels + /// + //////////////////////////////////////////////////////////// + virtual Vector2u getSize() const = 0; + + //////////////////////////////////////////////////////////// + /// \brief Save the current OpenGL render states and matrices + /// + /// This function can be used when you mix SFML drawing + /// and direct OpenGL rendering. Combined with PopGLStates, + /// it ensures that: + /// \li SFML's internal states are not messed up by your OpenGL code + /// \li your OpenGL states are not modified by a call to a SFML function + /// + /// More specifically, it must be used around code that + /// calls Draw functions. Example: + /// \code + /// // OpenGL code here... + /// window.pushGLStates(); + /// window.draw(...); + /// window.draw(...); + /// window.popGLStates(); + /// // OpenGL code here... + /// \endcode + /// + /// Note that this function is quite expensive: it saves all the + /// possible OpenGL states and matrices, even the ones you + /// don't care about. Therefore it should be used wisely. + /// It is provided for convenience, but the best results will + /// be achieved if you handle OpenGL states yourself (because + /// you know which states have really changed, and need to be + /// saved and restored). Take a look at the ResetGLStates + /// function if you do so. + /// + /// \see popGLStates + /// + //////////////////////////////////////////////////////////// + void pushGLStates(); + + //////////////////////////////////////////////////////////// + /// \brief Restore the previously saved OpenGL render states and matrices + /// + /// See the description of pushGLStates to get a detailed + /// description of these functions. + /// + /// \see pushGLStates + /// + //////////////////////////////////////////////////////////// + void popGLStates(); + + //////////////////////////////////////////////////////////// + /// \brief Reset the internal OpenGL states so that the target is ready for drawing + /// + /// This function can be used when you mix SFML drawing + /// and direct OpenGL rendering, if you choose not to use + /// pushGLStates/popGLStates. It makes sure that all OpenGL + /// states needed by SFML are set, so that subsequent draw() + /// calls will work as expected. + /// + /// Example: + /// \code + /// // OpenGL code here... + /// glPushAttrib(...); + /// window.resetGLStates(); + /// window.draw(...); + /// window.draw(...); + /// glPopAttrib(...); + /// // OpenGL code here... + /// \endcode + /// + //////////////////////////////////////////////////////////// + void resetGLStates(); + +protected : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + RenderTarget(); + + //////////////////////////////////////////////////////////// + /// \brief Performs the common initialization step after creation + /// + /// The derived classes must call this function after the + /// target is created and ready for drawing. + /// + //////////////////////////////////////////////////////////// + void initialize(); + +private: + + //////////////////////////////////////////////////////////// + /// \brief Apply the current view + /// + //////////////////////////////////////////////////////////// + void applyCurrentView(); + + //////////////////////////////////////////////////////////// + /// \brief Apply a new blending mode + /// + /// \param mode Blending mode to apply + /// + //////////////////////////////////////////////////////////// + void applyBlendMode(BlendMode mode); + + //////////////////////////////////////////////////////////// + /// \brief Apply a new transform + /// + /// \param transform Transform to apply + /// + //////////////////////////////////////////////////////////// + void applyTransform(const Transform& transform); + + //////////////////////////////////////////////////////////// + /// \brief Apply a new texture + /// + /// \param texture Texture to apply + /// + //////////////////////////////////////////////////////////// + void applyTexture(const Texture* texture); + + //////////////////////////////////////////////////////////// + /// \brief Apply a new shader + /// + /// \param shader Shader to apply + /// + //////////////////////////////////////////////////////////// + void applyShader(const Shader* shader); + + //////////////////////////////////////////////////////////// + /// \brief Activate the target for rendering + /// + /// This function must be implemented by derived classes to make + /// their OpenGL context current; it is called by the base class + /// everytime it's going to use OpenGL calls. + /// + /// \param active True to make the target active, false to deactivate it + /// + /// \return True if the function succeeded + /// + //////////////////////////////////////////////////////////// + virtual bool activate(bool active) = 0; + + //////////////////////////////////////////////////////////// + /// \brief Render states cache + /// + //////////////////////////////////////////////////////////// + struct StatesCache + { + enum {VertexCacheSize = 4}; + + bool glStatesSet; ///< Are our internal GL states set yet? + bool viewChanged; ///< Has the current view changed since last draw? + BlendMode lastBlendMode; ///< Cached blending mode + Uint64 lastTextureId; ///< Cached texture + bool useVertexCache; ///< Did we previously use the vertex cache? + Vertex vertexCache[VertexCacheSize]; ///< Pre-transformed vertices cache + }; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + View m_defaultView; ///< Default view + View m_view; ///< Current view + StatesCache m_cache; ///< Render states cache +}; + +} // namespace sf + + +#endif // SFML_RENDERTARGET_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::RenderTarget +/// \ingroup graphics +/// +/// sf::RenderTarget defines the common behaviour of all the +/// 2D render targets usable in the graphics module. It makes +/// it possible to draw 2D entities like sprites, shapes, text +/// without using any OpenGL command directly. +/// +/// A sf::RenderTarget is also able to use views (sf::View), +/// which are a kind of 2D cameras. With views you can globally +/// scroll, rotate or zoom everything that is drawn, +/// without having to transform every single entity. See the +/// documentation of sf::View for more details and sample pieces of +/// code about this class. +/// +/// On top of that, render targets are still able to render direct +/// OpenGL stuff. It is even possible to mix together OpenGL calls +/// and regular SFML drawing commands. When doing so, make sure that +/// OpenGL states are not messed up by calling the +/// pushGLStates/popGLStates functions. +/// +/// \see sf::RenderWindow, sf::RenderTexture, sf::View +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/RenderTexture.hpp b/include/SFML/Graphics/RenderTexture.hpp new file mode 100644 index 0000000..384e459 --- /dev/null +++ b/include/SFML/Graphics/RenderTexture.hpp @@ -0,0 +1,280 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_RENDERTEXTURE_HPP +#define SFML_RENDERTEXTURE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +namespace priv +{ + class RenderTextureImpl; +} + +//////////////////////////////////////////////////////////// +/// \brief Target for off-screen 2D rendering into a texture +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API RenderTexture : public RenderTarget +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Constructs an empty, invalid render-texture. You must + /// call create to have a valid render-texture. + /// + /// \see create + /// + //////////////////////////////////////////////////////////// + RenderTexture(); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + virtual ~RenderTexture(); + + //////////////////////////////////////////////////////////// + /// \brief Create the render-texture + /// + /// Before calling this function, the render-texture is in + /// an invalid state, thus it is mandatory to call it before + /// doing anything with the render-texture. + /// The last parameter, \a depthBuffer, is useful if you want + /// to use the render-texture for 3D OpenGL rendering that requires + /// a depth-buffer. Otherwise it is unnecessary, and you should + /// leave this parameter to false (which is its default value). + /// + /// \param width Width of the render-texture + /// \param height Height of the render-texture + /// \param depthBuffer Do you want this render-texture to have a depth buffer? + /// + /// \return True if creation has been successful + /// + //////////////////////////////////////////////////////////// + bool create(unsigned int width, unsigned int height, bool depthBuffer = false); + + //////////////////////////////////////////////////////////// + /// \brief Enable or disable texture smoothing + /// + /// This function is similar to Texture::setSmooth. + /// This parameter is disabled by default. + /// + /// \param smooth True to enable smoothing, false to disable it + /// + /// \see isSmooth + /// + //////////////////////////////////////////////////////////// + void setSmooth(bool smooth); + + //////////////////////////////////////////////////////////// + /// \brief Tell whether the smooth filtering is enabled or not + /// + /// \return True if texture smoothing is enabled + /// + /// \see setSmooth + /// + //////////////////////////////////////////////////////////// + bool isSmooth() const; + + //////////////////////////////////////////////////////////// + /// \brief Enable or disable texture repeating + /// + /// This function is similar to Texture::setRepeated. + /// This parameter is disabled by default. + /// + /// \param repeated True to enable repeating, false to disable it + /// + /// \see isRepeated + /// + //////////////////////////////////////////////////////////// + void setRepeated(bool repeated); + + //////////////////////////////////////////////////////////// + /// \brief Tell whether the texture is repeated or not + /// + /// \return True if texture is repeated + /// + /// \see setRepeated + /// + //////////////////////////////////////////////////////////// + bool isRepeated() const; + + //////////////////////////////////////////////////////////// + /// \brief Activate of deactivate the render-texture for rendering + /// + /// This function makes the render-texture's context current for + /// future OpenGL rendering operations (so you shouldn't care + /// about it if you're not doing direct OpenGL stuff). + /// Only one context can be current in a thread, so if you + /// want to draw OpenGL geometry to another render target + /// (like a RenderWindow) don't forget to activate it again. + /// + /// \param active True to activate, false to deactivate + /// + /// \return True if operation was successful, false otherwise + /// + //////////////////////////////////////////////////////////// + bool setActive(bool active = true); + + //////////////////////////////////////////////////////////// + /// \brief Update the contents of the target texture + /// + /// This function updates the target texture with what + /// has been drawn so far. Like for windows, calling this + /// function is mandatory at the end of rendering. Not calling + /// it may leave the texture in an undefined state. + /// + //////////////////////////////////////////////////////////// + void display(); + + //////////////////////////////////////////////////////////// + /// \brief Return the size of the rendering region of the texture + /// + /// The returned value is the size that you passed to + /// the create function. + /// + /// \return Size in pixels + /// + //////////////////////////////////////////////////////////// + virtual Vector2u getSize() const; + + //////////////////////////////////////////////////////////// + /// \brief Get a read-only reference to the target texture + /// + /// After drawing to the render-texture and calling Display, + /// you can retrieve the updated texture using this function, + /// and draw it using a sprite (for example). + /// The internal sf::Texture of a render-texture is always the + /// same instance, so that it is possible to call this function + /// once and keep a reference to the texture even after it is + /// modified. + /// + /// \return Const reference to the texture + /// + //////////////////////////////////////////////////////////// + const Texture& getTexture() const; + +private : + + //////////////////////////////////////////////////////////// + /// \brief Activate the target for rendering + /// + /// This function is called by the base class + /// everytime it's going to use OpenGL calls. + /// + /// \param active True to make the target active, false to deactivate it + /// + /// \return True if the function succeeded + /// + //////////////////////////////////////////////////////////// + virtual bool activate(bool active); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + priv::RenderTextureImpl* m_impl; ///< Platform/hardware specific implementation + Texture m_texture; ///< Target texture to draw on +}; + +} // namespace sf + + +#endif // SFML_RENDERTEXTURE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::RenderTexture +/// \ingroup graphics +/// +/// sf::RenderTexture is the little brother of sf::RenderWindow. +/// It implements the same 2D drawing and OpenGL-related functions +/// (see their base class sf::RenderTarget for more details), +/// the difference is that the result is stored in an off-screen +/// texture rather than being show in a window. +/// +/// Rendering to a texture can be useful in a variety of situations: +/// \li precomputing a complex static texture (like a level's background from multiple tiles) +/// \li applying post-effects to the whole scene with shaders +/// \li creating a sprite from a 3D object rendered with OpenGL +/// \li etc. +/// +/// Usage example: +/// +/// \code +/// // Create a new render-window +/// sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window"); +/// +/// // Create a new render-texture +/// sf::RenderTexture texture; +/// if (!texture.create(500, 500)) +/// return -1; +/// +/// // The main loop +/// while (window.isOpen()) +/// { +/// // Event processing +/// // ... +/// +/// // Clear the whole texture with red color +/// texture.clear(sf::Color::Red); +/// +/// // Draw stuff to the texture +/// texture.draw(sprite); // sprite is a sf::Sprite +/// texture.draw(shape); // shape is a sf::Shape +/// texture.draw(text); // text is a sf::Text +/// +/// // We're done drawing to the texture +/// texture.display(); +/// +/// // Now we start rendering to the window, clear it first +/// window.clear(); +/// +/// // Draw the texture +/// sf::Sprite sprite(texture.getTexture()); +/// window.draw(sprite); +/// +/// // End the current frame and display its contents on screen +/// window.display(); +/// } +/// \endcode +/// +/// Like sf::RenderWindow, sf::RenderTexture is still able to render direct +/// OpenGL stuff. It is even possible to mix together OpenGL calls +/// and regular SFML drawing commands. If you need a depth buffer for +/// 3D rendering, don't forget to request it when calling RenderTexture::create. +/// +/// \see sf::RenderTarget, sf::RenderWindow, sf::View, sf::Texture +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/RenderWindow.hpp b/include/SFML/Graphics/RenderWindow.hpp new file mode 100644 index 0000000..b069347 --- /dev/null +++ b/include/SFML/Graphics/RenderWindow.hpp @@ -0,0 +1,266 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_RENDERWINDOW_HPP +#define SFML_RENDERWINDOW_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Window that can serve as a target for 2D drawing +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API RenderWindow : public Window, public RenderTarget +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor doesn't actually create the window, + /// use the other constructors or call "create" to do so. + /// + //////////////////////////////////////////////////////////// + RenderWindow(); + + //////////////////////////////////////////////////////////// + /// \brief Construct a new window + /// + /// This constructor creates the window with the size and pixel + /// depth defined in \a mode. An optional style can be passed to + /// customize the look and behaviour of the window (borders, + /// title bar, resizable, closable, ...). + /// + /// The fourth parameter is an optional structure specifying + /// advanced OpenGL context settings such as antialiasing, + /// depth-buffer bits, etc. You shouldn't care about these + /// parameters for a regular usage of the graphics module. + /// + /// \param mode Video mode to use (defines the width, height and depth of the rendering area of the window) + /// \param title Title of the window + /// \param style Window style + /// \param settings Additional settings for the underlying OpenGL context + /// + //////////////////////////////////////////////////////////// + RenderWindow(VideoMode mode, const String& title, Uint32 style = Style::Default, const ContextSettings& settings = ContextSettings()); + + //////////////////////////////////////////////////////////// + /// \brief Construct the window from an existing control + /// + /// Use this constructor if you want to create an SFML + /// rendering area into an already existing control. + /// + /// The fourth parameter is an optional structure specifying + /// advanced OpenGL context settings such as antialiasing, + /// depth-buffer bits, etc. You shouldn't care about these + /// parameters for a regular usage of the graphics module. + /// + /// \param handle Platform-specific handle of the control + /// \param settings Additional settings for the underlying OpenGL context + /// + //////////////////////////////////////////////////////////// + explicit RenderWindow(WindowHandle handle, const ContextSettings& settings = ContextSettings()); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + /// Closes the window and free all the resources attached to it. + /// + //////////////////////////////////////////////////////////// + virtual ~RenderWindow(); + + //////////////////////////////////////////////////////////// + /// \brief Get the size of the rendering region of the window + /// + /// The size doesn't include the titlebar and borders + /// of the window. + /// + /// \return Size in pixels + /// + //////////////////////////////////////////////////////////// + virtual Vector2u getSize() const; + + //////////////////////////////////////////////////////////// + /// \brief Copy the current contents of the window to an image + /// + /// This is a slow operation, whose main purpose is to make + /// screenshots of the application. If you want to update an + /// image with the contents of the window and then use it for + /// drawing, you should rather use a sf::Texture and its + /// update(Window&) function. + /// You can also draw things directly to a texture with the + /// sf::RenderTexture class. + /// + /// \return Image containing the captured contents + /// + //////////////////////////////////////////////////////////// + Image capture() const; + +protected: + + //////////////////////////////////////////////////////////// + /// \brief Function called after the window has been created + /// + /// This function is called so that derived classes can + /// perform their own specific initialization as soon as + /// the window is created. + /// + //////////////////////////////////////////////////////////// + virtual void onCreate(); + + //////////////////////////////////////////////////////////// + /// \brief Function called after the window has been resized + /// + /// This function is called so that derived classes can + /// perform custom actions when the size of the window changes. + /// + //////////////////////////////////////////////////////////// + virtual void onResize(); + +private : + + //////////////////////////////////////////////////////////// + /// \brief Activate the target for rendering + /// + /// \param active True to make the target active, false to deactivate it + /// + /// \return True if the function succeeded + /// + //////////////////////////////////////////////////////////// + virtual bool activate(bool active); +}; + +} // namespace sf + + +#endif // SFML_RENDERWINDOW_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::RenderWindow +/// \ingroup graphics +/// +/// sf::RenderWindow is the main class of the Graphics module. +/// It defines an OS window that can be painted using the other +/// classes of the graphics module. +/// +/// sf::RenderWindow is derived from sf::Window, thus it inherits +/// all its features: events, window management, OpenGL rendering, +/// etc. See the documentation of sf::Window for a more complete +/// description of all these features, as well as code examples. +/// +/// On top of that, sf::RenderWindow adds more features related to +/// 2D drawing with the graphics module (see its base class +/// sf::RenderTarget for more details). +/// Here is a typical rendering and event loop with a sf::RenderWindow: +/// +/// \code +/// // Declare and create a new render-window +/// sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window"); +/// +/// // Limit the framerate to 60 frames per second (this step is optional) +/// window.setFramerateLimit(60); +/// +/// // The main loop - ends as soon as the window is closed +/// while (window.isOpen()) +/// { +/// // Event processing +/// sf::Event event; +/// while (window.pollEvent(event)) +/// { +/// // Request for closing the window +/// if (event.type == sf::Event::Closed) +/// window.close(); +/// } +/// +/// // Clear the whole window before rendering a new frame +/// window.clear(); +/// +/// // Draw some graphical entities +/// window.draw(sprite); +/// window.draw(circle); +/// window.draw(text); +/// +/// // End the current frame and display its contents on screen +/// window.display(); +/// } +/// \endcode +/// +/// Like sf::Window, sf::RenderWindow is still able to render direct +/// OpenGL stuff. It is even possible to mix together OpenGL calls +/// and regular SFML drawing commands. +/// +/// \code +/// // Create the render window +/// sf::RenderWindow window(sf::VideoMode(800, 600), "SFML OpenGL"); +/// +/// // Create a sprite and a text to display +/// sf::Sprite sprite; +/// sf::Text text; +/// ... +/// +/// // Perform OpenGL initializations +/// glMatrixMode(GL_PROJECTION); +/// ... +/// +/// // Start the rendering loop +/// while (window.isOpen()) +/// { +/// // Process events +/// ... +/// +/// // Draw a background sprite +/// window.pushGLStates(); +/// window.draw(sprite); +/// window.popGLStates(); +/// +/// // Draw a 3D object using OpenGL +/// glBegin(GL_QUADS); +/// glVertex3f(...); +/// ... +/// glEnd(); +/// +/// // Draw text on top of the 3D object +/// window.pushGLStates(); +/// window.draw(text); +/// window.popGLStates(); +/// +/// // Finally, display the rendered frame on screen +/// window.display(); +/// } +/// \endcode +/// +/// \see sf::Window, sf::RenderTarget, sf::RenderTexture, sf::View +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/Shader.hpp b/include/SFML/Graphics/Shader.hpp new file mode 100644 index 0000000..532f103 --- /dev/null +++ b/include/SFML/Graphics/Shader.hpp @@ -0,0 +1,623 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SHADER_HPP +#define SFML_SHADER_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace sf +{ +class InputStream; +class Texture; + +//////////////////////////////////////////////////////////// +/// \brief Shader class (vertex and fragment) +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Shader : GlResource, NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Types of shaders + /// + //////////////////////////////////////////////////////////// + enum Type + { + Vertex, ///< Vertex shader + Fragment ///< Fragment (pixel) shader + }; + + //////////////////////////////////////////////////////////// + /// \brief Special type/value that can be passed to setParameter, + /// and that represents the texture of the object being drawn + /// + //////////////////////////////////////////////////////////// + struct CurrentTextureType {}; + static CurrentTextureType CurrentTexture; + +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor creates an invalid shader. + /// + //////////////////////////////////////////////////////////// + Shader(); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + ~Shader(); + + //////////////////////////////////////////////////////////// + /// \brief Load either the vertex or fragment shader from a file + /// + /// This function loads a single shader, either vertex or + /// fragment, identified by the second argument. + /// The source must be a text file containing a valid + /// shader in GLSL language. GLSL is a C-like language + /// dedicated to OpenGL shaders; you'll probably need to + /// read a good documentation for it before writing your + /// own shaders. + /// + /// \param filename Path of the vertex or fragment shader file to load + /// \param type Type of shader (vertex or fragment) + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromMemory, loadFromStream + /// + //////////////////////////////////////////////////////////// + bool loadFromFile(const std::string& filename, Type type); + + //////////////////////////////////////////////////////////// + /// \brief Load both the vertex and fragment shaders from files + /// + /// This function loads both the vertex and the fragment + /// shaders. If one of them fails to load, the shader is left + /// empty (the valid shader is unloaded). + /// The sources must be text files containing valid shaders + /// in GLSL language. GLSL is a C-like language dedicated to + /// OpenGL shaders; you'll probably need to read a good documentation + /// for it before writing your own shaders. + /// + /// \param vertexShaderFilename Path of the vertex shader file to load + /// \param fragmentShaderFilename Path of the fragment shader file to load + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromMemory, loadFromStream + /// + //////////////////////////////////////////////////////////// + bool loadFromFile(const std::string& vertexShaderFilename, const std::string& fragmentShaderFilename); + + //////////////////////////////////////////////////////////// + /// \brief Load either the vertex or fragment shader from a source code in memory + /// + /// This function loads a single shader, either vertex or + /// fragment, identified by the second argument. + /// The source code must be a valid shader in GLSL language. + /// GLSL is a C-like language dedicated to OpenGL shaders; + /// you'll probably need to read a good documentation for + /// it before writing your own shaders. + /// + /// \param shader String containing the source code of the shader + /// \param type Type of shader (vertex or fragment) + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromFile, loadFromStream + /// + //////////////////////////////////////////////////////////// + bool loadFromMemory(const std::string& shader, Type type); + + //////////////////////////////////////////////////////////// + /// \brief Load both the vertex and fragment shaders from source codes in memory + /// + /// This function loads both the vertex and the fragment + /// shaders. If one of them fails to load, the shader is left + /// empty (the valid shader is unloaded). + /// The sources must be valid shaders in GLSL language. GLSL is + /// a C-like language dedicated to OpenGL shaders; you'll + /// probably need to read a good documentation for it before + /// writing your own shaders. + /// + /// \param vertexShader String containing the source code of the vertex shader + /// \param fragmentShader String containing the source code of the fragment shader + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromFile, loadFromStream + /// + //////////////////////////////////////////////////////////// + bool loadFromMemory(const std::string& vertexShader, const std::string& fragmentShader); + + //////////////////////////////////////////////////////////// + /// \brief Load either the vertex or fragment shader from a custom stream + /// + /// This function loads a single shader, either vertex or + /// fragment, identified by the second argument. + /// The source code must be a valid shader in GLSL language. + /// GLSL is a C-like language dedicated to OpenGL shaders; + /// you'll probably need to read a good documentation for it + /// before writing your own shaders. + /// + /// \param stream Source stream to read from + /// \param type Type of shader (vertex or fragment) + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromFile, loadFromMemory + /// + //////////////////////////////////////////////////////////// + bool loadFromStream(InputStream& stream, Type type); + + //////////////////////////////////////////////////////////// + /// \brief Load both the vertex and fragment shaders from custom streams + /// + /// This function loads both the vertex and the fragment + /// shaders. If one of them fails to load, the shader is left + /// empty (the valid shader is unloaded). + /// The source codes must be valid shaders in GLSL language. + /// GLSL is a C-like language dedicated to OpenGL shaders; + /// you'll probably need to read a good documentation for + /// it before writing your own shaders. + /// + /// \param vertexShaderStream Source stream to read the vertex shader from + /// \param fragmentShaderStream Source stream to read the fragment shader from + /// + /// \return True if loading succeeded, false if it failed + /// + /// \see loadFromFile, loadFromMemory + /// + //////////////////////////////////////////////////////////// + bool loadFromStream(InputStream& vertexShaderStream, InputStream& fragmentShaderStream); + + //////////////////////////////////////////////////////////// + /// \brief Change a float parameter of the shader + /// + /// \a name is the name of the variable to change in the shader. + /// The corresponding parameter in the shader must be a float + /// (float GLSL type). + /// + /// Example: + /// \code + /// uniform float myparam; // this is the variable in the shader + /// \endcode + /// \code + /// shader.setParameter("myparam", 5.2f); + /// \endcode + /// + /// \param name Name of the parameter in the shader + /// \param x Value to assign + /// + //////////////////////////////////////////////////////////// + void setParameter(const std::string& name, float x); + + //////////////////////////////////////////////////////////// + /// \brief Change a 2-components vector parameter of the shader + /// + /// \a name is the name of the variable to change in the shader. + /// The corresponding parameter in the shader must be a 2x1 vector + /// (vec2 GLSL type). + /// + /// Example: + /// \code + /// uniform vec2 myparam; // this is the variable in the shader + /// \endcode + /// \code + /// shader.setParameter("myparam", 5.2f, 6.0f); + /// \endcode + /// + /// \param name Name of the parameter in the shader + /// \param x First component of the value to assign + /// \param y Second component of the value to assign + /// + //////////////////////////////////////////////////////////// + void setParameter(const std::string& name, float x, float y); + + //////////////////////////////////////////////////////////// + /// \brief Change a 3-components vector parameter of the shader + /// + /// \a name is the name of the variable to change in the shader. + /// The corresponding parameter in the shader must be a 3x1 vector + /// (vec3 GLSL type). + /// + /// Example: + /// \code + /// uniform vec3 myparam; // this is the variable in the shader + /// \endcode + /// \code + /// shader.setParameter("myparam", 5.2f, 6.0f, -8.1f); + /// \endcode + /// + /// \param name Name of the parameter in the shader + /// \param x First component of the value to assign + /// \param y Second component of the value to assign + /// \param z Third component of the value to assign + /// + //////////////////////////////////////////////////////////// + void setParameter(const std::string& name, float x, float y, float z); + + //////////////////////////////////////////////////////////// + /// \brief Change a 4-components vector parameter of the shader + /// + /// \a name is the name of the variable to change in the shader. + /// The corresponding parameter in the shader must be a 4x1 vector + /// (vec4 GLSL type). + /// + /// Example: + /// \code + /// uniform vec4 myparam; // this is the variable in the shader + /// \endcode + /// \code + /// shader.setParameter("myparam", 5.2f, 6.0f, -8.1f, 0.4f); + /// \endcode + /// + /// \param name Name of the parameter in the shader + /// \param x First component of the value to assign + /// \param y Second component of the value to assign + /// \param z Third component of the value to assign + /// \param w Fourth component of the value to assign + /// + //////////////////////////////////////////////////////////// + void setParameter(const std::string& name, float x, float y, float z, float w); + + //////////////////////////////////////////////////////////// + /// \brief Change a 2-components vector parameter of the shader + /// + /// \a name is the name of the variable to change in the shader. + /// The corresponding parameter in the shader must be a 2x1 vector + /// (vec2 GLSL type). + /// + /// Example: + /// \code + /// uniform vec2 myparam; // this is the variable in the shader + /// \endcode + /// \code + /// shader.setParameter("myparam", sf::Vector2f(5.2f, 6.0f)); + /// \endcode + /// + /// \param name Name of the parameter in the shader + /// \param vector Vector to assign + /// + //////////////////////////////////////////////////////////// + void setParameter(const std::string& name, const Vector2f& vector); + + //////////////////////////////////////////////////////////// + /// \brief Change a 3-components vector parameter of the shader + /// + /// \a name is the name of the variable to change in the shader. + /// The corresponding parameter in the shader must be a 3x1 vector + /// (vec3 GLSL type). + /// + /// Example: + /// \code + /// uniform vec3 myparam; // this is the variable in the shader + /// \endcode + /// \code + /// shader.setParameter("myparam", sf::Vector3f(5.2f, 6.0f, -8.1f)); + /// \endcode + /// + /// \param name Name of the parameter in the shader + /// \param vector Vector to assign + /// + //////////////////////////////////////////////////////////// + void setParameter(const std::string& name, const Vector3f& vector); + + //////////////////////////////////////////////////////////// + /// \brief Change a color parameter of the shader + /// + /// \a name is the name of the variable to change in the shader. + /// The corresponding parameter in the shader must be a 4x1 vector + /// (vec4 GLSL type). + /// + /// It is important to note that the components of the color are + /// normalized before being passed to the shader. Therefore, + /// they are converted from range [0 .. 255] to range [0 .. 1]. + /// For example, a sf::Color(255, 125, 0, 255) will be transformed + /// to a vec4(1.0, 0.5, 0.0, 1.0) in the shader. + /// + /// Example: + /// \code + /// uniform vec4 color; // this is the variable in the shader + /// \endcode + /// \code + /// shader.setParameter("color", sf::Color(255, 128, 0, 255)); + /// \endcode + /// + /// \param name Name of the parameter in the shader + /// \param color Color to assign + /// + //////////////////////////////////////////////////////////// + void setParameter(const std::string& name, const Color& color); + + //////////////////////////////////////////////////////////// + /// \brief Change a matrix parameter of the shader + /// + /// \a name is the name of the variable to change in the shader. + /// The corresponding parameter in the shader must be a 4x4 matrix + /// (mat4 GLSL type). + /// + /// Example: + /// \code + /// uniform mat4 matrix; // this is the variable in the shader + /// \endcode + /// \code + /// sf::Transform transform; + /// transform.translate(5, 10); + /// shader.setParameter("matrix", transform); + /// \endcode + /// + /// \param name Name of the parameter in the shader + /// \param transform Transform to assign + /// + //////////////////////////////////////////////////////////// + void setParameter(const std::string& name, const sf::Transform& transform); + + //////////////////////////////////////////////////////////// + /// \brief Change a texture parameter of the shader + /// + /// \a name is the name of the variable to change in the shader. + /// The corresponding parameter in the shader must be a 2D texture + /// (sampler2D GLSL type). + /// + /// Example: + /// \code + /// uniform sampler2D the_texture; // this is the variable in the shader + /// \endcode + /// \code + /// sf::Texture texture; + /// ... + /// shader.setParameter("the_texture", texture); + /// \endcode + /// It is important to note that \a texture must remain alive as long + /// as the shader uses it, no copy is made internally. + /// + /// To use the texture of the object being draw, which cannot be + /// known in advance, you can pass the special value + /// sf::Shader::CurrentTexture: + /// \code + /// shader.setParameter("the_texture", sf::Shader::CurrentTexture). + /// \endcode + /// + /// \param name Name of the texture in the shader + /// \param texture Texture to assign + /// + //////////////////////////////////////////////////////////// + void setParameter(const std::string& name, const Texture& texture); + + //////////////////////////////////////////////////////////// + /// \brief Change a texture parameter of the shader + /// + /// This overload maps a shader texture variable to the + /// texture of the object being drawn, which cannot be + /// known in advance. The second argument must be + /// sf::Shader::CurrentTexture. + /// The corresponding parameter in the shader must be a 2D texture + /// (sampler2D GLSL type). + /// + /// Example: + /// \code + /// uniform sampler2D current; // this is the variable in the shader + /// \endcode + /// \code + /// shader.setParameter("current", sf::Shader::CurrentTexture); + /// \endcode + /// + /// \param name Name of the texture in the shader + /// + //////////////////////////////////////////////////////////// + void setParameter(const std::string& name, CurrentTextureType); + + //////////////////////////////////////////////////////////// + /// \brief Bind a shader for rendering + /// + /// This function is not part of the graphics API, it mustn't be + /// used when drawing SFML entities. It must be used only if you + /// mix sf::Shader with OpenGL code. + /// + /// \code + /// sf::Shader s1, s2; + /// ... + /// sf::Shader::bind(&s1); + /// // draw OpenGL stuff that use s1... + /// sf::Shader::bind(&s2); + /// // draw OpenGL stuff that use s2... + /// sf::Shader::bind(NULL); + /// // draw OpenGL stuff that use no shader... + /// \endcode + /// + /// \param shader Shader to bind, can be null to use no shader + /// + //////////////////////////////////////////////////////////// + static void bind(const Shader* shader); + + //////////////////////////////////////////////////////////// + /// \brief Tell whether or not the system supports shaders + /// + /// This function should always be called before using + /// the shader features. If it returns false, then + /// any attempt to use sf::Shader will fail. + /// + /// \return True if shaders are supported, false otherwise + /// + //////////////////////////////////////////////////////////// + static bool isAvailable(); + +private : + + //////////////////////////////////////////////////////////// + /// \brief Compile the shader(s) and create the program + /// + /// If one of the arguments is NULL, the corresponding shader + /// is not created. + /// + /// \param vertexShaderCode Source code of the vertex shader + /// \param fragmentShaderCode Source code of the fragment shader + /// + /// \return True on success, false if any error happened + /// + //////////////////////////////////////////////////////////// + bool compile(const char* vertexShaderCode, const char* fragmentShaderCode); + + //////////////////////////////////////////////////////////// + /// \brief Bind all the textures used by the shader + /// + /// This function each texture to a different unit, and + /// updates the corresponding variables in the shader accordingly. + /// + //////////////////////////////////////////////////////////// + void bindTextures() const; + + //////////////////////////////////////////////////////////// + // Types + //////////////////////////////////////////////////////////// + typedef std::map TextureTable; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + unsigned int m_shaderProgram; ///< OpenGL identifier for the program + int m_currentTexture; ///< Location of the current texture in the shader + TextureTable m_textures; ///< Texture variables in the shader, mapped to their location +}; + +} // namespace sf + + +#endif // SFML_SHADER_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Shader +/// \ingroup graphics +/// +/// Shaders are programs written using a specific language, +/// executed directly by the graphics card and allowing +/// to apply real-time operations to the rendered entities. +/// +/// There are two kinds of shaders: +/// \li Vertex shaders, that process vertices +/// \li Fragment (pixel) shaders, that process pixels +/// +/// A sf::Shader can be composed of either a vertex shader +/// alone, a fragment shader alone, or both combined +/// (see the variants of the load functions). +/// +/// Shaders are written in GLSL, which is a C-like +/// language dedicated to OpenGL shaders. You'll probably +/// need to learn its basics before writing your own shaders +/// for SFML. +/// +/// Like any C/C++ program, a shader has its own variables +/// that you can set from your C++ application. sf::Shader +/// handles 5 different types of variables: +/// \li floats +/// \li vectors (2, 3 or 4 components) +/// \li colors +/// \li textures +/// \li transforms (matrices) +/// +/// The value of the variables can be changed at any time +/// with the various overloads of the setParameter function: +/// \code +/// shader.setParameter("offset", 2.f); +/// shader.setParameter("point", 0.5f, 0.8f, 0.3f); +/// shader.setParameter("color", sf::Color(128, 50, 255)); +/// shader.setParameter("matrix", transform); // transform is a sf::Transform +/// shader.setParameter("overlay", texture); // texture is a sf::Texture +/// shader.setParameter("texture", sf::Shader::CurrentTexture); +/// \endcode +/// +/// The special Shader::CurrentTexture argument maps the +/// given texture variable to the current texture of the +/// object being drawn (which cannot be known in advance). +/// +/// To apply a shader to a drawable, you must pass it as an +/// additional parameter to the Draw function: +/// \code +/// window.draw(sprite, &shader); +/// \endcode +/// +/// ... which is in fact just a shortcut for this: +/// \code +/// sf::RenderStates states; +/// states.shader = &shader; +/// window.draw(sprite, states); +/// \endcode +/// +/// In the code above we pass a pointer to the shader, because it may +/// be null (which means "no shader"). +/// +/// Shaders can be used on any drawable, but some combinations are +/// not interesting. For example, using a vertex shader on a sf::Sprite +/// is limited because there are only 4 vertices, the sprite would +/// have to be subdivided in order to apply wave effects. +/// Another bad example is a fragment shader with sf::Text: the texture +/// of the text is not the actual text that you see on screen, it is +/// a big texture containing all the characters of the font in an +/// arbitrary order; thus, texture lookups on pixels other than the +/// current one may not give you the expected result. +/// +/// Shaders can also be used to apply global post-effects to the +/// current contents of the target (like the old sf::PostFx class +/// in SFML 1). This can be done in two different ways: +/// \li draw everything to a sf::RenderTexture, then draw it to +/// the main target using the shader +/// \li draw everything directly to the main target, then use +/// sf::Texture::update(Window&) to copy its contents to a texture +/// and draw it to the main target using the shader +/// +/// The first technique is more optimized because it doesn't involve +/// retrieving the target's pixels to system memory, but the +/// second one doesn't impact the rendering process and can be +/// easily inserted anywhere without impacting all the code. +/// +/// Like sf::Texture that can be used as a raw OpenGL texture, +/// sf::Shader can also be used directly as a raw shader for +/// custom OpenGL geometry. +/// \code +/// sf::Shader::bind(&shader); +/// ... render OpenGL geometry ... +/// sf::Shader::bind(NULL); +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/Shape.hpp b/include/SFML/Graphics/Shape.hpp new file mode 100644 index 0000000..bc38775 --- /dev/null +++ b/include/SFML/Graphics/Shape.hpp @@ -0,0 +1,345 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SHAPE_HPP +#define SFML_SHAPE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Base class for textured shapes with outline +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Shape : public Drawable, public Transformable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Virtual destructor + /// + //////////////////////////////////////////////////////////// + virtual ~Shape(); + + //////////////////////////////////////////////////////////// + /// \brief Change the source texture of the shape + /// + /// The \a texture argument refers to a texture that must + /// exist as long as the shape uses it. Indeed, the shape + /// doesn't store its own copy of the texture, but rather keeps + /// a pointer to the one that you passed to this function. + /// If the source texture is destroyed and the shape tries to + /// use it, the behaviour is undefined. + /// \a texture can be NULL to disable texturing. + /// If \a resetRect is true, the TextureRect property of + /// the shape is automatically adjusted to the size of the new + /// texture. If it is false, the texture rect is left unchanged. + /// + /// \param texture New texture + /// \param resetRect Should the texture rect be reset to the size of the new texture? + /// + /// \see getTexture, setTextureRect + /// + //////////////////////////////////////////////////////////// + void setTexture(const Texture* texture, bool resetRect = false); + + //////////////////////////////////////////////////////////// + /// \brief Set the sub-rectangle of the texture that the shape will display + /// + /// The texture rect is useful when you don't want to display + /// the whole texture, but rather a part of it. + /// By default, the texture rect covers the entire texture. + /// + /// \param rect Rectangle defining the region of the texture to display + /// + /// \see getTextureRect, setTexture + /// + //////////////////////////////////////////////////////////// + void setTextureRect(const IntRect& rect); + + //////////////////////////////////////////////////////////// + /// \brief Set the fill color of the shape + /// + /// This color is modulated (multiplied) with the shape's + /// texture if any. It can be used to colorize the shape, + /// or change its global opacity. + /// You can use sf::Color::Transparent to make the inside of + /// the shape transparent, and have the outline alone. + /// By default, the shape's fill color is opaque white. + /// + /// \param color New color of the shape + /// + /// \see getFillColor, setOutlineColor + /// + //////////////////////////////////////////////////////////// + void setFillColor(const Color& color); + + //////////////////////////////////////////////////////////// + /// \brief Set the outline color of the shape + /// + /// By default, the shape's outline color is opaque white. + /// + /// \param color New outline color of the shape + /// + /// \see getOutlineColor, setFillColor + /// + //////////////////////////////////////////////////////////// + void setOutlineColor(const Color& color); + + //////////////////////////////////////////////////////////// + /// \brief Set the thickness of the shape's outline + /// + /// Note that negative values are allowed (so that the outline + /// expands towards the center of the shape), and using zero + /// disables the outline. + /// By default, the outline thickness is 0. + /// + /// \param thickness New outline thickness + /// + /// \see getOutlineThickness + /// + //////////////////////////////////////////////////////////// + void setOutlineThickness(float thickness); + + //////////////////////////////////////////////////////////// + /// \brief Get the source texture of the shape + /// + /// If the shape has no source texture, a NULL pointer is returned. + /// The returned pointer is const, which means that you can't + /// modify the texture when you retrieve it with this function. + /// + /// \return Pointer to the shape's texture + /// + /// \see setTexture + /// + //////////////////////////////////////////////////////////// + const Texture* getTexture() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the sub-rectangle of the texture displayed by the shape + /// + /// \return Texture rectangle of the shape + /// + /// \see setTextureRect + /// + //////////////////////////////////////////////////////////// + const IntRect& getTextureRect() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the fill color of the shape + /// + /// \return Fill color of the shape + /// + /// \see setFillColor + /// + //////////////////////////////////////////////////////////// + const Color& getFillColor() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the outline color of the shape + /// + /// \return Outline color of the shape + /// + /// \see setOutlineColor + /// + //////////////////////////////////////////////////////////// + const Color& getOutlineColor() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the outline thickness of the shape + /// + /// \return Outline thickness of the shape + /// + /// \see setOutlineThickness + /// + //////////////////////////////////////////////////////////// + float getOutlineThickness() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the total number of points of the shape + /// + /// \return Number of points of the shape + /// + /// \see getPoint + /// + //////////////////////////////////////////////////////////// + virtual unsigned int getPointCount() const = 0; + + //////////////////////////////////////////////////////////// + /// \brief Get a point of the shape + /// + /// The result is undefined if \a index is out of the valid range. + /// + /// \param index Index of the point to get, in range [0 .. getPointCount() - 1] + /// + /// \return Index-th point of the shape + /// + /// \see getPointCount + /// + //////////////////////////////////////////////////////////// + virtual Vector2f getPoint(unsigned int index) const = 0; + + //////////////////////////////////////////////////////////// + /// \brief Get the local bounding rectangle of the entity + /// + /// The returned rectangle is in local coordinates, which means + /// that it ignores the transformations (translation, rotation, + /// scale, ...) that are applied to the entity. + /// In other words, this function returns the bounds of the + /// entity in the entity's coordinate system. + /// + /// \return Local bounding rectangle of the entity + /// + //////////////////////////////////////////////////////////// + FloatRect getLocalBounds() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the global bounding rectangle of the entity + /// + /// The returned rectangle is in global coordinates, which means + /// that it takes in account the transformations (translation, + /// rotation, scale, ...) that are applied to the entity. + /// In other words, this function returns the bounds of the + /// sprite in the global 2D world's coordinate system. + /// + /// \return Global bounding rectangle of the entity + /// + //////////////////////////////////////////////////////////// + FloatRect getGlobalBounds() const; + +protected : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + Shape(); + + //////////////////////////////////////////////////////////// + /// \brief Recompute the internal geometry of the shape + /// + /// This function must be called by the derived class everytime + /// the shape's points change (ie. the result of either + /// getPointCount or getPoint is different). + /// + //////////////////////////////////////////////////////////// + void update(); + +private : + + //////////////////////////////////////////////////////////// + /// \brief Draw the shape to a render target + /// + /// \param target Render target to draw to + /// \param states Current render states + /// + //////////////////////////////////////////////////////////// + virtual void draw(RenderTarget& target, RenderStates states) const; + + //////////////////////////////////////////////////////////// + /// \brief Update the fill vertices' color + /// + //////////////////////////////////////////////////////////// + void updateFillColors(); + + //////////////////////////////////////////////////////////// + /// \brief Update the fill vertices' texture coordinates + /// + //////////////////////////////////////////////////////////// + void updateTexCoords(); + + //////////////////////////////////////////////////////////// + /// \brief Update the outline vertices' position + /// + //////////////////////////////////////////////////////////// + void updateOutline(); + + //////////////////////////////////////////////////////////// + /// \brief Update the outline vertices' color + /// + //////////////////////////////////////////////////////////// + void updateOutlineColors(); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + const Texture* m_texture; ///< Texture of the shape + IntRect m_textureRect; ///< Rectangle defining the area of the source texture to display + Color m_fillColor; ///< Fill color + Color m_outlineColor; ///< Outline color + float m_outlineThickness; ///< Thickness of the shape's outline + VertexArray m_vertices; ///< Vertex array containing the fill geometry + VertexArray m_outlineVertices; ///< Vertex array containing the outline geometry + FloatRect m_insideBounds; ///< Bounding rectangle of the inside (fill) + FloatRect m_bounds; ///< Bounding rectangle of the whole shape (outline + fill) +}; + +} // namespace sf + + +#endif // SFML_SHAPE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Shape +/// \ingroup graphics +/// +/// sf::Shape is a drawable class that allows to define and +/// display a custom convex shape on a render target. +/// It's only an abstract base, it needs to be specialized for +/// concrete types of shapes (circle, rectangle, convex polygon, +/// star, ...). +/// +/// In addition to the attributes provided by the specialized +/// shape classes, a shape always has the following attributes: +/// \li a texture +/// \li a texture rectangle +/// \li a fill color +/// \li an outline color +/// \li an outline thickness +/// +/// Each feature is optional, and can be disabled easily: +/// \li the texture can be null +/// \li the fill/outline colors can be sf::Color::Transparent +/// \li the outline thickness can be zero +/// +/// You can write your own derived shape class, there are only +/// two virtual functions to override: +/// \li getPointCount must return the number of points of the shape +/// \li getPoint must return the points of the shape +/// +/// \see sf::RectangleShape, sf::CircleShape, sf::ConvexShape, sf::Transformable +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/Sprite.hpp b/include/SFML/Graphics/Sprite.hpp new file mode 100644 index 0000000..954881d --- /dev/null +++ b/include/SFML/Graphics/Sprite.hpp @@ -0,0 +1,277 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SPRITE_HPP +#define SFML_SPRITE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include + + +namespace sf +{ +class Texture; + +//////////////////////////////////////////////////////////// +/// \brief Drawable representation of a texture, with its +/// own transformations, color, etc. +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Sprite : public Drawable, public Transformable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Creates an empty sprite with no source texture. + /// + //////////////////////////////////////////////////////////// + Sprite(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the sprite from a source texture + /// + /// \param texture Source texture + /// + /// \see setTexture + /// + //////////////////////////////////////////////////////////// + explicit Sprite(const Texture& texture); + + //////////////////////////////////////////////////////////// + /// \brief Construct the sprite from a sub-rectangle of a source texture + /// + /// \param texture Source texture + /// \param rectangle Sub-rectangle of the texture to assign to the sprite + /// + /// \see setTexture, setTextureRect + /// + //////////////////////////////////////////////////////////// + Sprite(const Texture& texture, const IntRect& rectangle); + + //////////////////////////////////////////////////////////// + /// \brief Change the source texture of the sprite + /// + /// The \a texture argument refers to a texture that must + /// exist as long as the sprite uses it. Indeed, the sprite + /// doesn't store its own copy of the texture, but rather keeps + /// a pointer to the one that you passed to this function. + /// If the source texture is destroyed and the sprite tries to + /// use it, the behaviour is undefined. + /// If \a resetRect is true, the TextureRect property of + /// the sprite is automatically adjusted to the size of the new + /// texture. If it is false, the texture rect is left unchanged. + /// + /// \param texture New texture + /// \param resetRect Should the texture rect be reset to the size of the new texture? + /// + /// \see getTexture, setTextureRect + /// + //////////////////////////////////////////////////////////// + void setTexture(const Texture& texture, bool resetRect = false); + + //////////////////////////////////////////////////////////// + /// \brief Set the sub-rectangle of the texture that the sprite will display + /// + /// The texture rect is useful when you don't want to display + /// the whole texture, but rather a part of it. + /// By default, the texture rect covers the entire texture. + /// + /// \param rectangle Rectangle defining the region of the texture to display + /// + /// \see getTextureRect, setTexture + /// + //////////////////////////////////////////////////////////// + void setTextureRect(const IntRect& rectangle); + + //////////////////////////////////////////////////////////// + /// \brief Set the global color of the sprite + /// + /// This color is modulated (multiplied) with the sprite's + /// texture. It can be used to colorize the sprite, or change + /// its global opacity. + /// By default, the sprite's color is opaque white. + /// + /// \param color New color of the sprite + /// + /// \see getColor + /// + //////////////////////////////////////////////////////////// + void setColor(const Color& color); + + //////////////////////////////////////////////////////////// + /// \brief Get the source texture of the sprite + /// + /// If the sprite has no source texture, a NULL pointer is returned. + /// The returned pointer is const, which means that you can't + /// modify the texture when you retrieve it with this function. + /// + /// \return Pointer to the sprite's texture + /// + /// \see setTexture + /// + //////////////////////////////////////////////////////////// + const Texture* getTexture() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the sub-rectangle of the texture displayed by the sprite + /// + /// \return Texture rectangle of the sprite + /// + /// \see setTextureRect + /// + //////////////////////////////////////////////////////////// + const IntRect& getTextureRect() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the global color of the sprite + /// + /// \return Global color of the sprite + /// + /// \see setColor + /// + //////////////////////////////////////////////////////////// + const Color& getColor() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the local bounding rectangle of the entity + /// + /// The returned rectangle is in local coordinates, which means + /// that it ignores the transformations (translation, rotation, + /// scale, ...) that are applied to the entity. + /// In other words, this function returns the bounds of the + /// entity in the entity's coordinate system. + /// + /// \return Local bounding rectangle of the entity + /// + //////////////////////////////////////////////////////////// + FloatRect getLocalBounds() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the global bounding rectangle of the entity + /// + /// The returned rectangle is in global coordinates, which means + /// that it takes in account the transformations (translation, + /// rotation, scale, ...) that are applied to the entity. + /// In other words, this function returns the bounds of the + /// sprite in the global 2D world's coordinate system. + /// + /// \return Global bounding rectangle of the entity + /// + //////////////////////////////////////////////////////////// + FloatRect getGlobalBounds() const; + +private : + + //////////////////////////////////////////////////////////// + /// \brief Draw the sprite to a render target + /// + /// \param target Render target to draw to + /// \param states Current render states + /// + //////////////////////////////////////////////////////////// + virtual void draw(RenderTarget& target, RenderStates states) const; + + //////////////////////////////////////////////////////////// + /// \brief Update the vertices' positions + /// + //////////////////////////////////////////////////////////// + void updatePositions(); + + //////////////////////////////////////////////////////////// + /// \brief Update the vertices' texture coordinates + /// + //////////////////////////////////////////////////////////// + void updateTexCoords(); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Vertex m_vertices[4]; ///< Vertices defining the sprite's geometry + const Texture* m_texture; ///< Texture of the sprite + IntRect m_textureRect; ///< Rectangle defining the area of the source texture to display +}; + +} // namespace sf + + +#endif // SFML_SPRITE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Sprite +/// \ingroup graphics +/// +/// sf::Sprite is a drawable class that allows to easily display +/// a texture (or a part of it) on a render target. +/// +/// It inherits all the functions from sf::Transformable: +/// position, rotation, scale, origin. It also adds sprite-specific +/// properties such as the texture to use, the part of it to display, +/// and some convenience functions to change the overall color of the +/// sprite, or to get its bounding rectangle. +/// +/// sf::Sprite works in combination with the sf::Texture class, which +/// loads and provides the pixel data of a given texture. +/// +/// The separation of sf::Sprite and sf::Texture allows more flexibility +/// and better performances: indeed a sf::Texture is a heavy resource, +/// and any operation on it is slow (often too slow for real-time +/// applications). On the other side, a sf::Sprite is a lightweight +/// object which can use the pixel data of a sf::Texture and draw +/// it with its own transformation/color/blending attributes. +/// +/// It is important to note that the sf::Sprite instance doesn't +/// copy the texture that it uses, it only keeps a reference to it. +/// Thus, a sf::Texture must not be destroyed while it is +/// used by a sf::Sprite (i.e. never write a function that +/// uses a local sf::Texture instance for creating a sprite). +/// +/// Usage example: +/// \code +/// // Declare and load a texture +/// sf::Texture texture; +/// texture.loadFromFile("texture.png"); +/// +/// // Create a sprite +/// sf::Sprite sprite; +/// sprite.setTexture(texture); +/// sprite.setTextureRect(sf::IntRect(10, 10, 50, 30)); +/// sprite.setColor(sf::Color(255, 255, 255, 200)); +/// sprite.setPosition(100, 25); +/// +/// // Draw it +/// window.draw(sprite); +/// \endcode +/// +/// \see sf::Texture, sf::Transformable +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/Text.hpp b/include/SFML/Graphics/Text.hpp new file mode 100644 index 0000000..04abd24 --- /dev/null +++ b/include/SFML/Graphics/Text.hpp @@ -0,0 +1,351 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_TEXT_HPP +#define SFML_TEXT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Graphical text that can be drawn to a render target +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Text : public Drawable, public Transformable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Enumeration of the string drawing styles + /// + //////////////////////////////////////////////////////////// + enum Style + { + Regular = 0, ///< Regular characters, no style + Bold = 1 << 0, ///< Bold characters + Italic = 1 << 1, ///< Italic characters + Underlined = 1 << 2 ///< Underlined characters + }; + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Creates an empty text. + /// + //////////////////////////////////////////////////////////// + Text(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the text from a string, font and size + /// + /// \param string Text assigned to the string + /// \param font Font used to draw the string + /// \param characterSize Base size of characters, in pixels + /// + //////////////////////////////////////////////////////////// + Text(const String& string, const Font& font, unsigned int characterSize = 30); + + //////////////////////////////////////////////////////////// + /// \brief Set the text's string + /// + /// The \a string argument is a sf::String, which can + /// automatically be constructed from standard string types. + /// So, the following calls are all valid: + /// \code + /// text.setString("hello"); + /// text.setString(L"hello"); + /// text.setString(std::string("hello")); + /// text.setString(std::wstring(L"hello")); + /// \endcode + /// A text's string is empty by default. + /// + /// \param string New string + /// + /// \see getString + /// + //////////////////////////////////////////////////////////// + void setString(const String& string); + + //////////////////////////////////////////////////////////// + /// \brief Set the text's font + /// + /// The \a font argument refers to a font that must + /// exist as long as the text uses it. Indeed, the text + /// doesn't store its own copy of the font, but rather keeps + /// a pointer to the one that you passed to this function. + /// If the font is destroyed and the text tries to + /// use it, the behaviour is undefined. + /// + /// \param font New font + /// + /// \see getFont + /// + //////////////////////////////////////////////////////////// + void setFont(const Font& font); + + //////////////////////////////////////////////////////////// + /// \brief Set the character size + /// + /// The default size is 30. + /// + /// \param size New character size, in pixels + /// + /// \see getCharacterSize + /// + //////////////////////////////////////////////////////////// + void setCharacterSize(unsigned int size); + + //////////////////////////////////////////////////////////// + /// \brief Set the text's style + /// + /// You can pass a combination of one or more styles, for + /// example sf::Text::Bold | sf::Text::Italic. + /// The default style is sf::Text::Regular. + /// + /// \param style New style + /// + /// \see getStyle + /// + //////////////////////////////////////////////////////////// + void setStyle(Uint32 style); + + //////////////////////////////////////////////////////////// + /// \brief Set the global color of the text + /// + /// By default, the text's color is opaque white. + /// + /// \param color New color of the text + /// + /// \see getColor + /// + //////////////////////////////////////////////////////////// + void setColor(const Color& color); + + //////////////////////////////////////////////////////////// + /// \brief Get the text's string + /// + /// The returned string is a sf::String, which can automatically + /// be converted to standard string types. So, the following + /// lines of code are all valid: + /// \code + /// sf::String s1 = text.getString(); + /// std::string s2 = text.getString(); + /// std::wstring s3 = text.getString(); + /// \endcode + /// + /// \return Text's string + /// + /// \see setString + /// + //////////////////////////////////////////////////////////// + const String& getString() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the text's font + /// + /// If the text has no font attached, a NULL pointer is returned. + /// The returned reference is const, which means that you + /// cannot modify the font when you get it from this function. + /// + /// \return Pointer to the text's font + /// + /// \see setFont + /// + //////////////////////////////////////////////////////////// + const Font* getFont() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the character size + /// + /// \return Size of the characters, in pixels + /// + /// \see setCharacterSize + /// + //////////////////////////////////////////////////////////// + unsigned int getCharacterSize() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the text's style + /// + /// \return Text's style + /// + /// \see setStyle + /// + //////////////////////////////////////////////////////////// + Uint32 getStyle() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the global color of the text + /// + /// \return Global color of the text + /// + /// \see setColor + /// + //////////////////////////////////////////////////////////// + const Color& getColor() const; + + //////////////////////////////////////////////////////////// + /// \brief Return the position of the \a index-th character + /// + /// This function computes the visual position of a character + /// from its index in the string. The returned position is + /// in global coordinates (translation, rotation, scale and + /// origin are applied). + /// If \a index is out of range, the position of the end of + /// the string is returned. + /// + /// \param index Index of the character + /// + /// \return Position of the character + /// + //////////////////////////////////////////////////////////// + Vector2f findCharacterPos(std::size_t index) const; + + //////////////////////////////////////////////////////////// + /// \brief Get the local bounding rectangle of the entity + /// + /// The returned rectangle is in local coordinates, which means + /// that it ignores the transformations (translation, rotation, + /// scale, ...) that are applied to the entity. + /// In other words, this function returns the bounds of the + /// entity in the entity's coordinate system. + /// + /// \return Local bounding rectangle of the entity + /// + //////////////////////////////////////////////////////////// + FloatRect getLocalBounds() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the global bounding rectangle of the entity + /// + /// The returned rectangle is in global coordinates, which means + /// that it takes in account the transformations (translation, + /// rotation, scale, ...) that are applied to the entity. + /// In other words, this function returns the bounds of the + /// sprite in the global 2D world's coordinate system. + /// + /// \return Global bounding rectangle of the entity + /// + //////////////////////////////////////////////////////////// + FloatRect getGlobalBounds() const; + +private : + + //////////////////////////////////////////////////////////// + /// \brief Draw the text to a render target + /// + /// \param target Render target to draw to + /// \param states Current render states + /// + //////////////////////////////////////////////////////////// + virtual void draw(RenderTarget& target, RenderStates states) const; + + //////////////////////////////////////////////////////////// + /// \brief Update the text's geometry + /// + //////////////////////////////////////////////////////////// + void updateGeometry(); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + String m_string; ///< String to display + const Font* m_font; ///< Font used to display the string + unsigned int m_characterSize; ///< Base size of characters, in pixels + Uint32 m_style; ///< Text style (see Style enum) + Color m_color; ///< Text color + VertexArray m_vertices; ///< Vertex array containing the text's geometry + FloatRect m_bounds; ///< Bounding rectangle of the text (in local coordinates) +}; + +} // namespace sf + + +#endif // SFML_TEXT_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Text +/// \ingroup graphics +/// +/// sf::Text is a drawable class that allows to easily display +/// some text with custom style and color on a render target. +/// +/// It inherits all the functions from sf::Transformable: +/// position, rotation, scale, origin. It also adds text-specific +/// properties such as the font to use, the character size, +/// the font style (bold, italic, underlined), the global color +/// and the text to display of course. +/// It also provides convenience functions to calculate the +/// graphical size of the text, or to get the global position +/// of a given character. +/// +/// sf::Text works in combination with the sf::Font class, which +/// loads and provides the glyphs (visual characters) of a given font. +/// +/// The separation of sf::Font and sf::Text allows more flexibility +/// and better performances: indeed a sf::Font is a heavy resource, +/// and any operation on it is slow (often too slow for real-time +/// applications). On the other side, a sf::Text is a lightweight +/// object which can combine the glyphs data and metrics of a sf::Font +/// to display any text on a render target. +/// +/// It is important to note that the sf::Text instance doesn't +/// copy the font that it uses, it only keeps a reference to it. +/// Thus, a sf::Font must not be destructed while it is +/// used by a sf::Text (i.e. never write a function that +/// uses a local sf::Font instance for creating a text). +/// +/// Usage example: +/// \code +/// // Declare and load a font +/// sf::Font font; +/// font.loadFromFile("arial.ttf"); +/// +/// // Create a text +/// sf::Text text("hello", font); +/// text.setCharacterSize(30); +/// text.setStyle(sf::Text::Bold); +/// text.setColor(sf::Color::Red); +/// +/// // Draw it +/// window.draw(text); +/// \endcode +/// +/// \see sf::Font, sf::Transformable +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/Texture.hpp b/include/SFML/Graphics/Texture.hpp new file mode 100644 index 0000000..ba61f54 --- /dev/null +++ b/include/SFML/Graphics/Texture.hpp @@ -0,0 +1,602 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_TEXTURE_HPP +#define SFML_TEXTURE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +class Window; +class RenderTarget; +class RenderTexture; +class InputStream; + +//////////////////////////////////////////////////////////// +/// \brief Image living on the graphics card that can be used for drawing +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Texture : GlResource +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Types of texture coordinates that can be used for rendering + /// + //////////////////////////////////////////////////////////// + enum CoordinateType + { + Normalized, ///< Texture coordinates in range [0 .. 1] + Pixels ///< Texture coordinates in range [0 .. size] + }; + +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Creates an empty texture. + /// + //////////////////////////////////////////////////////////// + Texture(); + + //////////////////////////////////////////////////////////// + /// \brief Copy constructor + /// + /// \param copy instance to copy + /// + //////////////////////////////////////////////////////////// + Texture(const Texture& copy); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + ~Texture(); + + //////////////////////////////////////////////////////////// + /// \brief Create the texture + /// + /// If this function fails, the texture is left unchanged. + /// + /// \param width Width of the texture + /// \param height Height of the texture + /// + /// \return True if creation was successful + /// + //////////////////////////////////////////////////////////// + bool create(unsigned int width, unsigned int height); + + //////////////////////////////////////////////////////////// + /// \brief Load the texture from a file on disk + /// + /// This function is a shortcut for the following code: + /// \code + /// sf::Image image; + /// image.loadFromFile(filename); + /// texture.loadFromImage(image, area); + /// \endcode + /// + /// The \a area argument can be used to load only a sub-rectangle + /// of the whole image. If you want the entire image then leave + /// the default value (which is an empty IntRect). + /// If the \a area rectangle crosses the bounds of the image, it + /// is adjusted to fit the image size. + /// + /// The maximum size for a texture depends on the graphics + /// driver and can be retrieved with the getMaximumSize function. + /// + /// If this function fails, the texture is left unchanged. + /// + /// \param filename Path of the image file to load + /// \param area Area of the image to load + /// + /// \return True if loading was successful + /// + /// \see loadFromMemory, loadFromStream, loadFromImage + /// + //////////////////////////////////////////////////////////// + bool loadFromFile(const std::string& filename, const IntRect& area = IntRect()); + + //////////////////////////////////////////////////////////// + /// \brief Load the texture from a file in memory + /// + /// This function is a shortcut for the following code: + /// \code + /// sf::Image image; + /// image.loadFromMemory(data, size); + /// texture.loadFromImage(image, area); + /// \endcode + /// + /// The \a area argument can be used to load only a sub-rectangle + /// of the whole image. If you want the entire image then leave + /// the default value (which is an empty IntRect). + /// If the \a area rectangle crosses the bounds of the image, it + /// is adjusted to fit the image size. + /// + /// The maximum size for a texture depends on the graphics + /// driver and can be retrieved with the getMaximumSize function. + /// + /// If this function fails, the texture is left unchanged. + /// + /// \param data Pointer to the file data in memory + /// \param size Size of the data to load, in bytes + /// \param area Area of the image to load + /// + /// \return True if loading was successful + /// + /// \see loadFromFile, loadFromStream, loadFromImage + /// + //////////////////////////////////////////////////////////// + bool loadFromMemory(const void* data, std::size_t size, const IntRect& area = IntRect()); + + //////////////////////////////////////////////////////////// + /// \brief Load the texture from a custom stream + /// + /// This function is a shortcut for the following code: + /// \code + /// sf::Image image; + /// image.loadFromStream(stream); + /// texture.loadFromImage(image, area); + /// \endcode + /// + /// The \a area argument can be used to load only a sub-rectangle + /// of the whole image. If you want the entire image then leave + /// the default value (which is an empty IntRect). + /// If the \a area rectangle crosses the bounds of the image, it + /// is adjusted to fit the image size. + /// + /// The maximum size for a texture depends on the graphics + /// driver and can be retrieved with the getMaximumSize function. + /// + /// If this function fails, the texture is left unchanged. + /// + /// \param stream Source stream to read from + /// \param area Area of the image to load + /// + /// \return True if loading was successful + /// + /// \see loadFromFile, loadFromMemory, loadFromImage + /// + //////////////////////////////////////////////////////////// + bool loadFromStream(sf::InputStream& stream, const IntRect& area = IntRect()); + + //////////////////////////////////////////////////////////// + /// \brief Load the texture from an image + /// + /// The \a area argument can be used to load only a sub-rectangle + /// of the whole image. If you want the entire image then leave + /// the default value (which is an empty IntRect). + /// If the \a area rectangle crosses the bounds of the image, it + /// is adjusted to fit the image size. + /// + /// The maximum size for a texture depends on the graphics + /// driver and can be retrieved with the getMaximumSize function. + /// + /// If this function fails, the texture is left unchanged. + /// + /// \param image Image to load into the texture + /// \param area Area of the image to load + /// + /// \return True if loading was successful + /// + /// \see loadFromFile, loadFromMemory + /// + //////////////////////////////////////////////////////////// + bool loadFromImage(const Image& image, const IntRect& area = IntRect()); + + //////////////////////////////////////////////////////////// + /// \brief Return the size of the texture + /// + /// \return Size in pixels + /// + //////////////////////////////////////////////////////////// + Vector2u getSize() const; + + //////////////////////////////////////////////////////////// + /// \brief Copy the texture pixels to an image + /// + /// This function performs a slow operation that downloads + /// the texture's pixels from the graphics card and copies + /// them to a new image, potentially applying transformations + /// to pixels if necessary (texture may be padded or flipped). + /// + /// \return Image containing the texture's pixels + /// + /// \see loadFromImage + /// + //////////////////////////////////////////////////////////// + Image copyToImage() const; + + //////////////////////////////////////////////////////////// + /// \brief Update the whole texture from an array of pixels + /// + /// The \a pixel array is assumed to have the same size as + /// the \a area rectangle, and to contain 32-bits RGBA pixels. + /// + /// No additional check is performed on the size of the pixel + /// array, passing invalid arguments will lead to an undefined + /// behaviour. + /// + /// This function does nothing if \a pixels is null or if the + /// texture was not previously created. + /// + /// \param pixels Array of pixels to copy to the texture + /// + //////////////////////////////////////////////////////////// + void update(const Uint8* pixels); + + //////////////////////////////////////////////////////////// + /// \brief Update a part of the texture from an array of pixels + /// + /// The size of the \a pixel array must match the \a width and + /// \a height arguments, and it must contain 32-bits RGBA pixels. + /// + /// No additional check is performed on the size of the pixel + /// array or the bounds of the area to update, passing invalid + /// arguments will lead to an undefined behaviour. + /// + /// This function does nothing if \a pixels is null or if the + /// texture was not previously created. + /// + /// \param pixels Array of pixels to copy to the texture + /// \param width Width of the pixel region contained in \a pixels + /// \param height Height of the pixel region contained in \a pixels + /// \param x X offset in the texture where to copy the source pixels + /// \param y Y offset in the texture where to copy the source pixels + /// + //////////////////////////////////////////////////////////// + void update(const Uint8* pixels, unsigned int width, unsigned int height, unsigned int x, unsigned int y); + + //////////////////////////////////////////////////////////// + /// \brief Update the texture from an image + /// + /// Although the source image can be smaller than the texture, + /// this function is usually used for updating the whole texture. + /// The other overload, which has (x, y) additional arguments, + /// is more convenient for updating a sub-area of the texture. + /// + /// No additional check is performed on the size of the image, + /// passing an image bigger than the texture will lead to an + /// undefined behaviour. + /// + /// This function does nothing if the texture was not + /// previously created. + /// + /// \param image Image to copy to the texture + /// + //////////////////////////////////////////////////////////// + void update(const Image& image); + + //////////////////////////////////////////////////////////// + /// \brief Update a part of the texture from an image + /// + /// No additional check is performed on the size of the image, + /// passing an invalid combination of image size and offset + /// will lead to an undefined behaviour. + /// + /// This function does nothing if the texture was not + /// previously created. + /// + /// \param image Image to copy to the texture + /// \param x X offset in the texture where to copy the source image + /// \param y Y offset in the texture where to copy the source image + /// + //////////////////////////////////////////////////////////// + void update(const Image& image, unsigned int x, unsigned int y); + + //////////////////////////////////////////////////////////// + /// \brief Update the texture from the contents of a window + /// + /// Although the source window can be smaller than the texture, + /// this function is usually used for updating the whole texture. + /// The other overload, which has (x, y) additional arguments, + /// is more convenient for updating a sub-area of the texture. + /// + /// No additional check is performed on the size of the window, + /// passing a window bigger than the texture will lead to an + /// undefined behaviour. + /// + /// This function does nothing if either the texture or the window + /// was not previously created. + /// + /// \param window Window to copy to the texture + /// + //////////////////////////////////////////////////////////// + void update(const Window& window); + + //////////////////////////////////////////////////////////// + /// \brief Update a part of the texture from the contents of a window + /// + /// No additional check is performed on the size of the window, + /// passing an invalid combination of window size and offset + /// will lead to an undefined behaviour. + /// + /// This function does nothing if either the texture or the window + /// was not previously created. + /// + /// \param window Window to copy to the texture + /// \param x X offset in the texture where to copy the source window + /// \param y Y offset in the texture where to copy the source window + /// + //////////////////////////////////////////////////////////// + void update(const Window& window, unsigned int x, unsigned int y); + + //////////////////////////////////////////////////////////// + /// \brief Enable or disable the smooth filter + /// + /// When the filter is activated, the texture appears smoother + /// so that pixels are less noticeable. However if you want + /// the texture to look exactly the same as its source file, + /// you should leave it disabled. + /// The smooth filter is disabled by default. + /// + /// \param smooth True to enable smoothing, false to disable it + /// + /// \see isSmooth + /// + //////////////////////////////////////////////////////////// + void setSmooth(bool smooth); + + //////////////////////////////////////////////////////////// + /// \brief Tell whether the smooth filter is enabled or not + /// + /// \return True if smoothing is enabled, false if it is disabled + /// + /// \see setSmooth + /// + //////////////////////////////////////////////////////////// + bool isSmooth() const; + + //////////////////////////////////////////////////////////// + /// \brief Enable or disable repeating + /// + /// Repeating is involved when using texture coordinates + /// outside the texture rectangle [0, 0, width, height]. + /// In this case, if repeat mode is enabled, the whole texture + /// will be repeated as many times as needed to reach the + /// coordinate (for example, if the X texture coordinate is + /// 3 * width, the texture will be repeated 3 times). + /// If repeat mode is disabled, the "extra space" will instead + /// be filled with border pixels. + /// Warning: on very old graphics cards, white pixels may appear + /// when the texture is repeated. With such cards, repeat mode + /// can be used reliably only if the texture has power-of-two + /// dimensions (such as 256x128). + /// Repeating is disabled by default. + /// + /// \param repeated True to repeat the texture, false to disable repeating + /// + /// \see isRepeated + /// + //////////////////////////////////////////////////////////// + void setRepeated(bool repeated); + + //////////////////////////////////////////////////////////// + /// \brief Tell whether the texture is repeated or not + /// + /// \return True if repeat mode is enabled, false if it is disabled + /// + /// \see setRepeated + /// + //////////////////////////////////////////////////////////// + bool isRepeated() const; + + //////////////////////////////////////////////////////////// + /// \brief Overload of assignment operator + /// + /// \param right Instance to assign + /// + /// \return Reference to self + /// + //////////////////////////////////////////////////////////// + Texture& operator =(const Texture& right); + + //////////////////////////////////////////////////////////// + /// \brief Bind a texture for rendering + /// + /// This function is not part of the graphics API, it mustn't be + /// used when drawing SFML entities. It must be used only if you + /// mix sf::Texture with OpenGL code. + /// + /// \code + /// sf::Texture t1, t2; + /// ... + /// sf::Texture::bind(&t1); + /// // draw OpenGL stuff that use t1... + /// sf::Texture::bind(&t2); + /// // draw OpenGL stuff that use t2... + /// sf::Texture::bind(NULL); + /// // draw OpenGL stuff that use no texture... + /// \endcode + /// + /// The \a coordinateType argument controls how texture + /// coordinates will be interpreted. If Normalized (the default), they + /// must be in range [0 .. 1], which is the default way of handling + /// texture coordinates with OpenGL. If Pixels, they must be given + /// in pixels (range [0 .. size]). This mode is used internally by + /// the graphics classes of SFML, it makes the definition of texture + /// coordinates more intuitive for the high-level API, users don't need + /// to compute normalized values. + /// + /// \param texture Pointer to the texture to bind, can be null to use no texture + /// \param coordinateType Type of texture coordinates to use + /// + //////////////////////////////////////////////////////////// + static void bind(const Texture* texture, CoordinateType coordinateType = Normalized); + + //////////////////////////////////////////////////////////// + /// \brief Get the maximum texture size allowed + /// + /// This maximum size is defined by the graphics driver. + /// You can expect a value of 512 pixels for low-end graphics + /// card, and up to 8192 pixels or more for newer hardware. + /// + /// \return Maximum size allowed for textures, in pixels + /// + //////////////////////////////////////////////////////////// + static unsigned int getMaximumSize(); + +private : + + friend class RenderTexture; + friend class RenderTarget; + + //////////////////////////////////////////////////////////// + /// \brief Get a valid image size according to hardware support + /// + /// This function checks whether the graphics driver supports + /// non power of two sizes or not, and adjusts the size + /// accordingly. + /// The returned size is greater than or equal to the original size. + /// + /// \param Size size to convert + /// + /// \return Valid nearest size (greater than or equal to specified size) + /// + //////////////////////////////////////////////////////////// + static unsigned int getValidSize(unsigned int size); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Vector2u m_size; ///< Public texture size + Vector2u m_actualSize; ///< Actual texture size (can be greater than public size because of padding) + unsigned int m_texture; ///< Internal texture identifier + bool m_isSmooth; ///< Status of the smooth filter + bool m_isRepeated; ///< Is the texture in repeat mode? + mutable bool m_pixelsFlipped; ///< To work around the inconsistency in Y orientation + Uint64 m_cacheId; ///< Unique number that identifies the texture to the render target's cache +}; + +} // namespace sf + + +#endif // SFML_TEXTURE_HPP + +//////////////////////////////////////////////////////////// +/// \class sf::Texture +/// \ingroup graphics +/// +/// sf::Texture stores pixels that can be drawn, with a sprite +/// for example. A texture lives in the graphics card memory, +/// therefore it is very fast to draw a texture to a render target, +/// or copy a render target to a texture (the graphics card can +/// access both directly). +/// +/// Being stored in the graphics card memory has some drawbacks. +/// A texture cannot be manipulated as freely as a sf::Image, +/// you need to prepare the pixels first and then upload them +/// to the texture in a single operation (see Texture::update). +/// +/// sf::Texture makes it easy to convert from/to sf::Image, but +/// keep in mind that these calls require transfers between +/// the graphics card and the central memory, therefore they are +/// slow operations. +/// +/// A texture can be loaded from an image, but also directly +/// from a file/memory/stream. The necessary shortcuts are defined +/// so that you don't need an image first for the most common cases. +/// However, if you want to perform some modifications on the pixels +/// before creating the final texture, you can load your file to a +/// sf::Image, do whatever you need with the pixels, and then call +/// Texture::loadFromImage. +/// +/// Since they live in the graphics card memory, the pixels of a texture +/// cannot be accessed without a slow copy first. And they cannot be +/// accessed individually. Therefore, if you need to read the texture's +/// pixels (like for pixel-perfect collisions), it is recommended to +/// store the collision information separately, for example in an array +/// of booleans. +/// +/// Like sf::Image, sf::Texture can handle a unique internal +/// representation of pixels, which is RGBA 32 bits. This means +/// that a pixel must be composed of 8 bits red, green, blue and +/// alpha channels -- just like a sf::Color. +/// +/// Usage example: +/// \code +/// // This example shows the most common use of sf::Texture: +/// // drawing a sprite +/// +/// // Load a texture from a file +/// sf::Texture texture; +/// if (!texture.loadFromFile("texture.png")) +/// return -1; +/// +/// // Assign it to a sprite +/// sf::Sprite sprite; +/// sprite.setTexture(texture); +/// +/// // Draw the textured sprite +/// window.draw(sprite); +/// \endcode +/// +/// \code +/// // This example shows another common use of sf::Texture: +/// // streaming real-time data, like video frames +/// +/// // Create an empty texture +/// sf::Texture texture; +/// if (!texture.create(640, 480)) +/// return -1; +/// +/// // Create a sprite that will display the texture +/// sf::Sprite sprite(texture); +/// +/// while (...) // the main loop +/// { +/// ... +/// +/// // update the texture +/// sf::Uint8* pixels = ...; // get a fresh chunk of pixels (the next frame of a movie, for example) +/// texture.update(pixels); +/// +/// // draw it +/// window.draw(sprite); +/// +/// ... +/// } +/// +/// \endcode +/// +/// Like sf::Shader that can be used as a raw OpenGL shader, +/// sf::Texture can also be used directly as a raw texture for +/// custom OpenGL geometry. +/// \code +/// sf::Texture::bind(&texture); +/// ... render OpenGL geometry ... +/// sf::Texture::bind(NULL); +/// \endcode +/// +/// \see sf::Sprite, sf::Image, sf::RenderTexture +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/Transform.hpp b/include/SFML/Graphics/Transform.hpp new file mode 100644 index 0000000..3b91a8a --- /dev/null +++ b/include/SFML/Graphics/Transform.hpp @@ -0,0 +1,450 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_TRANSFORM_HPP +#define SFML_TRANSFORM_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Define a 3x3 transform matrix +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Transform +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Creates an identity transform (a transform that does nothing). + /// + //////////////////////////////////////////////////////////// + Transform(); + + //////////////////////////////////////////////////////////// + /// \brief Construct a transform from a 3x3 matrix + /// + /// \param a00 Element (0, 0) of the matrix + /// \param a01 Element (0, 1) of the matrix + /// \param a02 Element (0, 2) of the matrix + /// \param a10 Element (1, 0) of the matrix + /// \param a11 Element (1, 1) of the matrix + /// \param a12 Element (1, 2) of the matrix + /// \param a20 Element (2, 0) of the matrix + /// \param a21 Element (2, 1) of the matrix + /// \param a22 Element (2, 2) of the matrix + /// + //////////////////////////////////////////////////////////// + Transform(float a00, float a01, float a02, + float a10, float a11, float a12, + float a20, float a21, float a22); + + //////////////////////////////////////////////////////////// + /// \brief Return the transform as a 4x4 matrix + /// + /// This function returns a pointer to an array of 16 floats + /// containing the transform elements as a 4x4 matrix, which + /// is directly compatible with OpenGL functions. + /// + /// \code + /// sf::Transform transform = ...; + /// glLoadMatrixf(transform.getMatrix()); + /// \endcode + /// + /// \return Pointer to a 4x4 matrix + /// + //////////////////////////////////////////////////////////// + const float* getMatrix() const; + + //////////////////////////////////////////////////////////// + /// \brief Return the inverse of the transform + /// + /// If the inverse cannot be computed, an identity transform + /// is returned. + /// + /// \return A new transform which is the inverse of self + /// + //////////////////////////////////////////////////////////// + Transform getInverse() const; + + //////////////////////////////////////////////////////////// + /// \brief Transform a 2D point + /// + /// \param x X coordinate of the point to transform + /// \param y Y coordinate of the point to transform + /// + /// \return Transformed point + /// + //////////////////////////////////////////////////////////// + Vector2f transformPoint(float x, float y) const; + + //////////////////////////////////////////////////////////// + /// \brief Transform a 2D point + /// + /// \param point Point to transform + /// + /// \return Transformed point + /// + //////////////////////////////////////////////////////////// + Vector2f transformPoint(const Vector2f& point) const; + + //////////////////////////////////////////////////////////// + /// \brief Transform a rectangle + /// + /// Since SFML doesn't provide support for oriented rectangles, + /// the result of this function is always an axis-aligned + /// rectangle. Which means that if the transform contains a + /// rotation, the bounding rectangle of the transformed rectangle + /// is returned. + /// + /// \param rectangle Rectangle to transform + /// + /// \return Transformed rectangle + /// + //////////////////////////////////////////////////////////// + FloatRect transformRect(const FloatRect& rectangle) const; + + //////////////////////////////////////////////////////////// + /// \brief Combine the current transform with another one + /// + /// The result is a transform that is equivalent to applying + /// *this followed by \a transform. Mathematically, it is + /// equivalent to a matrix multiplication. + /// + /// \param transform Transform to combine with this transform + /// + /// \return Reference to *this + /// + //////////////////////////////////////////////////////////// + Transform& combine(const Transform& transform); + + //////////////////////////////////////////////////////////// + /// \brief Combine the current transform with a translation + /// + /// This function returns a reference to *this, so that calls + /// can be chained. + /// \code + /// sf::Transform transform; + /// transform.translate(100, 200).rotate(45); + /// \endcode + /// + /// \param x Offset to apply on X axis + /// \param y Offset to apply on Y axis + /// + /// \return Reference to *this + /// + /// \see rotate, scale + /// + //////////////////////////////////////////////////////////// + Transform& translate(float x, float y); + + //////////////////////////////////////////////////////////// + /// \brief Combine the current transform with a translation + /// + /// This function returns a reference to *this, so that calls + /// can be chained. + /// \code + /// sf::Transform transform; + /// transform.translate(sf::Vector2f(100, 200)).rotate(45); + /// \endcode + /// + /// \param offset Translation offset to apply + /// + /// \return Reference to *this + /// + /// \see rotate, scale + /// + //////////////////////////////////////////////////////////// + Transform& translate(const Vector2f& offset); + + //////////////////////////////////////////////////////////// + /// \brief Combine the current transform with a rotation + /// + /// This function returns a reference to *this, so that calls + /// can be chained. + /// \code + /// sf::Transform transform; + /// transform.rotate(90).translate(50, 20); + /// \endcode + /// + /// \param angle Rotation angle, in degrees + /// + /// \return Reference to *this + /// + /// \see translate, scale + /// + //////////////////////////////////////////////////////////// + Transform& rotate(float angle); + + //////////////////////////////////////////////////////////// + /// \brief Combine the current transform with a rotation + /// + /// The center of rotation is provided for convenience as a second + /// argument, so that you can build rotations around arbitrary points + /// more easily (and efficiently) than the usual + /// translate(-center).rotate(angle).translate(center). + /// + /// This function returns a reference to *this, so that calls + /// can be chained. + /// \code + /// sf::Transform transform; + /// transform.rotate(90, 8, 3).translate(50, 20); + /// \endcode + /// + /// \param angle Rotation angle, in degrees + /// \param centerX X coordinate of the center of rotation + /// \param centerY Y coordinate of the center of rotation + /// + /// \return Reference to *this + /// + /// \see translate, scale + /// + //////////////////////////////////////////////////////////// + Transform& rotate(float angle, float centerX, float centerY); + + //////////////////////////////////////////////////////////// + /// \brief Combine the current transform with a rotation + /// + /// The center of rotation is provided for convenience as a second + /// argument, so that you can build rotations around arbitrary points + /// more easily (and efficiently) than the usual + /// translate(-center).rotate(angle).translate(center). + /// + /// This function returns a reference to *this, so that calls + /// can be chained. + /// \code + /// sf::Transform transform; + /// transform.rotate(90, sf::Vector2f(8, 3)).translate(sf::Vector2f(50, 20)); + /// \endcode + /// + /// \param angle Rotation angle, in degrees + /// \param center Center of rotation + /// + /// \return Reference to *this + /// + /// \see translate, scale + /// + //////////////////////////////////////////////////////////// + Transform& rotate(float angle, const Vector2f& center); + + //////////////////////////////////////////////////////////// + /// \brief Combine the current transform with a scaling + /// + /// This function returns a reference to *this, so that calls + /// can be chained. + /// \code + /// sf::Transform transform; + /// transform.scale(2, 1).rotate(45); + /// \endcode + /// + /// \param scaleX Scaling factor on the X axis + /// \param scaleY Scaling factor on the Y axis + /// + /// \return Reference to *this + /// + /// \see translate, rotate + /// + //////////////////////////////////////////////////////////// + Transform& scale(float scaleX, float scaleY); + + //////////////////////////////////////////////////////////// + /// \brief Combine the current transform with a scaling + /// + /// The center of scaling is provided for convenience as a second + /// argument, so that you can build scaling around arbitrary points + /// more easily (and efficiently) than the usual + /// translate(-center).scale(factors).translate(center). + /// + /// This function returns a reference to *this, so that calls + /// can be chained. + /// \code + /// sf::Transform transform; + /// transform.scale(2, 1, 8, 3).rotate(45); + /// \endcode + /// + /// \param scaleX Scaling factor on X axis + /// \param scaleY Scaling factor on Y axis + /// \param centerX X coordinate of the center of scaling + /// \param centerY Y coordinate of the center of scaling + /// + /// \return Reference to *this + /// + /// \see translate, rotate + /// + //////////////////////////////////////////////////////////// + Transform& scale(float scaleX, float scaleY, float centerX, float centerY); + + //////////////////////////////////////////////////////////// + /// \brief Combine the current transform with a scaling + /// + /// This function returns a reference to *this, so that calls + /// can be chained. + /// \code + /// sf::Transform transform; + /// transform.scale(sf::Vector2f(2, 1)).rotate(45); + /// \endcode + /// + /// \param factors Scaling factors + /// + /// \return Reference to *this + /// + /// \see translate, rotate + /// + //////////////////////////////////////////////////////////// + Transform& scale(const Vector2f& factors); + + //////////////////////////////////////////////////////////// + /// \brief Combine the current transform with a scaling + /// + /// The center of scaling is provided for convenience as a second + /// argument, so that you can build scaling around arbitrary points + /// more easily (and efficiently) than the usual + /// translate(-center).scale(factors).translate(center). + /// + /// This function returns a reference to *this, so that calls + /// can be chained. + /// \code + /// sf::Transform transform; + /// transform.scale(sf::Vector2f(2, 1), sf::Vector2f(8, 3)).rotate(45); + /// \endcode + /// + /// \param factors Scaling factors + /// \param center Center of scaling + /// + /// \return Reference to *this + /// + /// \see translate, rotate + /// + //////////////////////////////////////////////////////////// + Transform& scale(const Vector2f& factors, const Vector2f& center); + + //////////////////////////////////////////////////////////// + // Static member data + //////////////////////////////////////////////////////////// + static const Transform Identity; ///< The identity transform (does nothing) + +private: + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + float m_matrix[16]; ///< 4x4 matrix defining the transformation +}; + +//////////////////////////////////////////////////////////// +/// \relates sf::Transform +/// \brief Overload of binary operator * to combine two transforms +/// +/// This call is equivalent to calling Transform(left).combine(right). +/// +/// \param left Left operand (the first transform) +/// \param right Right operand (the second transform) +/// +/// \return New combined transform +/// +//////////////////////////////////////////////////////////// +SFML_GRAPHICS_API Transform operator *(const Transform& left, const Transform& right); + +//////////////////////////////////////////////////////////// +/// \relates sf::Transform +/// \brief Overload of binary operator *= to combine two transforms +/// +/// This call is equivalent to calling left.combine(right). +/// +/// \param left Left operand (the first transform) +/// \param right Right operand (the second transform) +/// +/// \return The combined transform +/// +//////////////////////////////////////////////////////////// +SFML_GRAPHICS_API Transform& operator *=(Transform& left, const Transform& right); + +//////////////////////////////////////////////////////////// +/// \relates sf::Transform +/// \brief Overload of binary operator * to transform a point +/// +/// This call is equivalent to calling left.transformPoint(right). +/// +/// \param left Left operand (the transform) +/// \param right Right operand (the point to transform) +/// +/// \return New transformed point +/// +//////////////////////////////////////////////////////////// +SFML_GRAPHICS_API Vector2f operator *(const Transform& left, const Vector2f& right); + +} // namespace sf + + +#endif // SFML_TRANSFORM_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Transform +/// \ingroup graphics +/// +/// A sf::Transform specifies how to translate, rotate, scale, +/// shear, project, whatever things. In mathematical terms, it defines +/// how to transform a coordinate system into another. +/// +/// For example, if you apply a rotation transform to a sprite, the +/// result will be a rotated sprite. And anything that is transformed +/// by this rotation transform will be rotated the same way, according +/// to its initial position. +/// +/// Transforms are typically used for drawing. But they can also be +/// used for any computation that requires to transform points between +/// the local and global coordinate systems of an entity (like collision +/// detection). +/// +/// Example: +/// \code +/// // define a translation transform +/// sf::Transform translation; +/// translation.translate(20, 50); +/// +/// // define a rotation transform +/// sf::Transform rotation; +/// rotation.rotate(45); +/// +/// // combine them +/// sf::Transform transform = translation * rotation; +/// +/// // use the result to transform stuff... +/// sf::Vector2f point = transform.transformPoint(10, 20); +/// sf::FloatRect rect = transform.transformRect(sf::FloatRect(0, 0, 10, 100)); +/// \endcode +/// +/// \see sf::Transformable, sf::RenderStates +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/Transformable.hpp b/include/SFML/Graphics/Transformable.hpp new file mode 100644 index 0000000..6a136ed --- /dev/null +++ b/include/SFML/Graphics/Transformable.hpp @@ -0,0 +1,417 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_TRANSFORMABLE_HPP +#define SFML_TRANSFORMABLE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Decomposed transform defined by a position, a rotation and a scale +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Transformable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + Transformable(); + + //////////////////////////////////////////////////////////// + /// \brief Virtual destructor + /// + //////////////////////////////////////////////////////////// + virtual ~Transformable(); + + //////////////////////////////////////////////////////////// + /// \brief set the position of the object + /// + /// This function completely overwrites the previous position. + /// See the move function to apply an offset based on the previous position instead. + /// The default position of a transformable object is (0, 0). + /// + /// \param x X coordinate of the new position + /// \param y Y coordinate of the new position + /// + /// \see move, getPosition + /// + //////////////////////////////////////////////////////////// + void setPosition(float x, float y); + + //////////////////////////////////////////////////////////// + /// \brief set the position of the object + /// + /// This function completely overwrites the previous position. + /// See the move function to apply an offset based on the previous position instead. + /// The default position of a transformable object is (0, 0). + /// + /// \param position New position + /// + /// \see move, getPosition + /// + //////////////////////////////////////////////////////////// + void setPosition(const Vector2f& position); + + //////////////////////////////////////////////////////////// + /// \brief set the orientation of the object + /// + /// This function completely overwrites the previous rotation. + /// See the rotate function to add an angle based on the previous rotation instead. + /// The default rotation of a transformable object is 0. + /// + /// \param angle New rotation, in degrees + /// + /// \see rotate, getRotation + /// + //////////////////////////////////////////////////////////// + void setRotation(float angle); + + //////////////////////////////////////////////////////////// + /// \brief set the scale factors of the object + /// + /// This function completely overwrites the previous scale. + /// See the scale function to add a factor based on the previous scale instead. + /// The default scale of a transformable object is (1, 1). + /// + /// \param factorX New horizontal scale factor + /// \param factorY New vertical scale factor + /// + /// \see scale, getScale + /// + //////////////////////////////////////////////////////////// + void setScale(float factorX, float factorY); + + //////////////////////////////////////////////////////////// + /// \brief set the scale factors of the object + /// + /// This function completely overwrites the previous scale. + /// See the scale function to add a factor based on the previous scale instead. + /// The default scale of a transformable object is (1, 1). + /// + /// \param factors New scale factors + /// + /// \see scale, getScale + /// + //////////////////////////////////////////////////////////// + void setScale(const Vector2f& factors); + + //////////////////////////////////////////////////////////// + /// \brief set the local origin of the object + /// + /// The origin of an object defines the center point for + /// all transformations (position, scale, rotation). + /// The coordinates of this point must be relative to the + /// top-left corner of the object, and ignore all + /// transformations (position, scale, rotation). + /// The default origin of a transformable object is (0, 0). + /// + /// \param x X coordinate of the new origin + /// \param y Y coordinate of the new origin + /// + /// \see getOrigin + /// + //////////////////////////////////////////////////////////// + void setOrigin(float x, float y); + + //////////////////////////////////////////////////////////// + /// \brief set the local origin of the object + /// + /// The origin of an object defines the center point for + /// all transformations (position, scale, rotation). + /// The coordinates of this point must be relative to the + /// top-left corner of the object, and ignore all + /// transformations (position, scale, rotation). + /// The default origin of a transformable object is (0, 0). + /// + /// \param origin New origin + /// + /// \see getOrigin + /// + //////////////////////////////////////////////////////////// + void setOrigin(const Vector2f& origin); + + //////////////////////////////////////////////////////////// + /// \brief get the position of the object + /// + /// \return Current position + /// + /// \see setPosition + /// + //////////////////////////////////////////////////////////// + const Vector2f& getPosition() const; + + //////////////////////////////////////////////////////////// + /// \brief get the orientation of the object + /// + /// The rotation is always in the range [0, 360]. + /// + /// \return Current rotation, in degrees + /// + /// \see setRotation + /// + //////////////////////////////////////////////////////////// + float getRotation() const; + + //////////////////////////////////////////////////////////// + /// \brief get the current scale of the object + /// + /// \return Current scale factors + /// + /// \see setScale + /// + //////////////////////////////////////////////////////////// + const Vector2f& getScale() const; + + //////////////////////////////////////////////////////////// + /// \brief get the local origin of the object + /// + /// \return Current origin + /// + /// \see setOrigin + /// + //////////////////////////////////////////////////////////// + const Vector2f& getOrigin() const; + + //////////////////////////////////////////////////////////// + /// \brief Move the object by a given offset + /// + /// This function adds to the current position of the object, + /// unlike setPosition which overwrites it. + /// Thus, it is equivalent to the following code: + /// \code + /// sf::Vector2f pos = object.getPosition(); + /// object.setPosition(pos.x + offsetX, pos.y + offsetY); + /// \endcode + /// + /// \param offsetX X offset + /// \param offsetY Y offset + /// + /// \see setPosition + /// + //////////////////////////////////////////////////////////// + void move(float offsetX, float offsetY); + + //////////////////////////////////////////////////////////// + /// \brief Move the object by a given offset + /// + /// This function adds to the current position of the object, + /// unlike setPosition which overwrites it. + /// Thus, it is equivalent to the following code: + /// \code + /// object.setPosition(object.getPosition() + offset); + /// \endcode + /// + /// \param offset Offset + /// + /// \see setPosition + /// + //////////////////////////////////////////////////////////// + void move(const Vector2f& offset); + + //////////////////////////////////////////////////////////// + /// \brief Rotate the object + /// + /// This function adds to the current rotation of the object, + /// unlike setRotation which overwrites it. + /// Thus, it is equivalent to the following code: + /// \code + /// object.setRotation(object.getRotation() + angle); + /// \endcode + /// + /// \param angle Angle of rotation, in degrees + /// + //////////////////////////////////////////////////////////// + void rotate(float angle); + + //////////////////////////////////////////////////////////// + /// \brief Scale the object + /// + /// This function multiplies the current scale of the object, + /// unlike setScale which overwrites it. + /// Thus, it is equivalent to the following code: + /// \code + /// sf::Vector2f scale = object.getScale(); + /// object.setScale(scale.x * factorX, scale.y * factorY); + /// \endcode + /// + /// \param factorX Horizontal scale factor + /// \param factorY Vertical scale factor + /// + /// \see setScale + /// + //////////////////////////////////////////////////////////// + void scale(float factorX, float factorY); + + //////////////////////////////////////////////////////////// + /// \brief Scale the object + /// + /// This function multiplies the current scale of the object, + /// unlike setScale which overwrites it. + /// Thus, it is equivalent to the following code: + /// \code + /// sf::Vector2f scale = object.getScale(); + /// object.setScale(scale.x * factor.x, scale.y * factor.y); + /// \endcode + /// + /// \param factor Scale factors + /// + /// \see setScale + /// + //////////////////////////////////////////////////////////// + void scale(const Vector2f& factor); + + //////////////////////////////////////////////////////////// + /// \brief get the combined transform of the object + /// + /// \return Transform combining the position/rotation/scale/origin of the object + /// + /// \see getInverseTransform + /// + //////////////////////////////////////////////////////////// + const Transform& getTransform() const; + + //////////////////////////////////////////////////////////// + /// \brief get the inverse of the combined transform of the object + /// + /// \return Inverse of the combined transformations applied to the object + /// + /// \see getTransform + /// + //////////////////////////////////////////////////////////// + const Transform& getInverseTransform() const; + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Vector2f m_origin; ///< Origin of translation/rotation/scaling of the object + Vector2f m_position; ///< Position of the object in the 2D world + float m_rotation; ///< Orientation of the object, in degrees + Vector2f m_scale; ///< Scale of the object + mutable Transform m_transform; ///< Combined transformation of the object + mutable bool m_transformNeedUpdate; ///< Does the transform need to be recomputed? + mutable Transform m_inverseTransform; ///< Combined transformation of the object + mutable bool m_inverseTransformNeedUpdate; ///< Does the transform need to be recomputed? +}; + +} // namespace sf + + +#endif // SFML_TRANSFORMABLE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Transformable +/// \ingroup graphics +/// +/// This class is provided for convenience, on top of sf::Transform. +/// +/// sf::Transform, as a low-level class, offers a great level of +/// flexibility but it is not always convenient to manage. Indeed, +/// one can easily combine any kind of operation, such as a translation +/// followed by a rotation followed by a scaling, but once the result +/// transform is built, there's no way to go backward and, let's say, +/// change only the rotation without modifying the translation and scaling. +/// The entire transform must be recomputed, which means that you +/// need to retrieve the initial translation and scale factors as +/// well, and combine them the same way you did before updating the +/// rotation. This is a tedious operation, and it requires to store +/// all the individual components of the final transform. +/// +/// That's exactly what sf::Transformable was written for: it hides +/// these variables and the composed transform behind an easy to use +/// interface. You can set or get any of the individual components +/// without worrying about the others. It also provides the composed +/// transform (as a sf::Transform), and keeps it up-to-date. +/// +/// In addition to the position, rotation and scale, sf::Transformable +/// provides an "origin" component, which represents the local origin +/// of the three other components. Let's take an example with a 10x10 +/// pixels sprite. By default, the sprite is positionned/rotated/scaled +/// relatively to its top-left corner, because it is the local point +/// (0, 0). But if we change the origin to be (5, 5), the sprite will +/// be positionned/rotated/scaled around its center instead. And if +/// we set the origin to (10, 10), it will be transformed around its +/// bottom-right corner. +/// +/// To keep the sf::Transformable class simple, there's only one +/// origin for all the components. You cannot position the sprite +/// relatively to its top-left corner while rotating it around its +/// center, for example. To do such things, use sf::Transform directly. +/// +/// sf::Transformable can be used as a base class. It is often +/// combined with sf::Drawable -- that's what SFML's sprites, +/// texts and shapes do. +/// \code +/// class MyEntity : public sf::Transformable, public sf::Drawable +/// { +/// virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const +/// { +/// states.transform *= getTransform(); +/// target.draw(..., states); +/// } +/// }; +/// +/// MyEntity entity; +/// entity.setPosition(10, 20); +/// entity.setRotation(45); +/// window.draw(entity); +/// \endcode +/// +/// It can also be used as a member, if you don't want to use +/// its API directly (because you don't need all its functions, +/// or you have different naming conventions for example). +/// \code +/// class MyEntity +/// { +/// public : +/// void SetPosition(const MyVector& v) +/// { +/// myTransform.setPosition(v.x(), v.y()); +/// } +/// +/// void Draw(sf::RenderTarget& target) const +/// { +/// target.draw(..., myTransform.getTransform()); +/// } +/// +/// private : +/// sf::Transformable myTransform; +/// }; +/// \endcode +/// +/// \see sf::Transform +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/Vertex.hpp b/include/SFML/Graphics/Vertex.hpp new file mode 100644 index 0000000..b983ef2 --- /dev/null +++ b/include/SFML/Graphics/Vertex.hpp @@ -0,0 +1,148 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_VERTEX_HPP +#define SFML_VERTEX_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Define a point with color and texture coordinates +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API Vertex +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + Vertex(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the vertex from its position + /// + /// The vertex color is white and texture coordinates are (0, 0). + /// + /// \param thePosition Vertex position + /// + //////////////////////////////////////////////////////////// + Vertex(const Vector2f& thePosition); + + //////////////////////////////////////////////////////////// + /// \brief Construct the vertex from its position and color + /// + /// The texture coordinates are (0, 0). + /// + /// \param thePosition Vertex position + /// \param theColor Vertex color + /// + //////////////////////////////////////////////////////////// + Vertex(const Vector2f& thePosition, const Color& theColor); + + //////////////////////////////////////////////////////////// + /// \brief Construct the vertex from its position and texture coordinates + /// + /// The vertex color is white. + /// + /// \param thePosition Vertex position + /// \param theTexCoords Vertex texture coordinates + /// + //////////////////////////////////////////////////////////// + Vertex(const Vector2f& thePosition, const Vector2f& theTexCoords); + + //////////////////////////////////////////////////////////// + /// \brief Construct the vertex from its position, color and texture coordinates + /// + /// \param thePosition Vertex position + /// \param theColor Vertex color + /// \param theTexCoords Vertex texture coordinates + /// + //////////////////////////////////////////////////////////// + Vertex(const Vector2f& thePosition, const Color& theColor, const Vector2f& theTexCoords); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Vector2f position; ///< 2D position of the vertex + Color color; ///< Color of the vertex + Vector2f texCoords; ///< Coordinates of the texture's pixel to map to the vertex +}; + +} // namespace sf + + +#endif // SFML_VERTEX_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Vertex +/// \ingroup graphics +/// +/// A vertex is an improved point. It has a position and other +/// extra attributes that will be used for drawing: in SFML, +/// vertices also have a color and a pair of texture coordinates. +/// +/// The vertex is the building block of drawing. Everything which +/// is visible on screen is made of vertices. They are grouped +/// as 2D primitives (triangles, quads, ...), and these primitives +/// are grouped to create even more complex 2D entities such as +/// sprites, texts, etc. +/// +/// If you use the graphical entities of SFML (sprite, text, shape) +/// you won't have to deal with vertices directly. But if you want +/// to define your own 2D entities, such as tiled maps or particle +/// systems, using vertices will allow you to get maximum performances. +/// +/// Example: +/// \code +/// // define a 100x100 square, red, with a 10x10 texture mapped on it +/// sf::Vertex vertices[] = +/// { +/// sf::Vertex(sf::Vector2f( 0, 0), sf::Color::Red, sf::Vector2f( 0, 0)), +/// sf::Vertex(sf::Vector2f( 0, 100), sf::Color::Red, sf::Vector2f( 0, 10)), +/// sf::Vertex(sf::Vector2f(100, 100), sf::Color::Red, sf::Vector2f(10, 10)), +/// sf::Vertex(sf::Vector2f(100, 0), sf::Color::Red, sf::Vector2f(10, 0)) +/// }; +/// +/// // draw it +/// window.draw(vertices, 4, sf::Quads); +/// \endcode +/// +/// Note: although texture coordinates are supposed to be an integer +/// amount of pixels, their type is float because of some buggy graphics +/// drivers that are not able to process integer coordinates correctly. +/// +/// \see sf::VertexArray +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/VertexArray.hpp b/include/SFML/Graphics/VertexArray.hpp new file mode 100644 index 0000000..fc67845 --- /dev/null +++ b/include/SFML/Graphics/VertexArray.hpp @@ -0,0 +1,223 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_VERTEXARRAY_HPP +#define SFML_VERTEXARRAY_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Define a set of one or more 2D primitives +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API VertexArray : public Drawable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Creates an empty vertex array. + /// + //////////////////////////////////////////////////////////// + VertexArray(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the vertex array with a type and an initial number of vertices + /// + /// \param type Type of primitives + /// \param vertexCount Initial number of vertices in the array + /// + //////////////////////////////////////////////////////////// + explicit VertexArray(PrimitiveType type, unsigned int vertexCount = 0); + + //////////////////////////////////////////////////////////// + /// \brief Return the vertex count + /// + /// \return Number of vertices in the array + /// + //////////////////////////////////////////////////////////// + unsigned int getVertexCount() const; + + //////////////////////////////////////////////////////////// + /// \brief Get a read-write access to a vertex by its index + /// + /// This function doesn't check \a index, it must be in range + /// [0, getVertexCount() - 1]. The behaviour is undefined + /// otherwise. + /// + /// \param index Index of the vertex to get + /// + /// \return Reference to the index-th vertex + /// + /// \see getVertexCount + /// + //////////////////////////////////////////////////////////// + Vertex& operator [](unsigned int index); + + //////////////////////////////////////////////////////////// + /// \brief Get a read-only access to a vertex by its index + /// + /// This function doesn't check \a index, it must be in range + /// [0, getVertexCount() - 1]. The behaviour is undefined + /// otherwise. + /// + /// \param index Index of the vertex to get + /// + /// \return Const reference to the index-th vertex + /// + /// \see getVertexCount + /// + //////////////////////////////////////////////////////////// + const Vertex& operator [](unsigned int index) const; + + //////////////////////////////////////////////////////////// + /// \brief Clear the vertex array + /// + /// This function removes all the vertices from the array. + /// It doesn't deallocate the corresponding memory, so that + /// adding new vertices after clearing doesn't involve + /// reallocating all the memory. + /// + //////////////////////////////////////////////////////////// + void clear(); + + //////////////////////////////////////////////////////////// + /// \brief Resize the vertex array + /// + /// If \a vertexCount is greater than the current size, the previous + /// vertices are kept and new (default-constructed) vertices are + /// added. + /// If \a vertexCount is less than the current size, existing vertices + /// are removed from the array. + /// + /// \param vertexCount New size of the array (number of vertices) + /// + //////////////////////////////////////////////////////////// + void resize(unsigned int vertexCount); + + //////////////////////////////////////////////////////////// + /// \brief Add a vertex to the array + /// + /// \param vertex Vertex to add + /// + //////////////////////////////////////////////////////////// + void append(const Vertex& vertex); + + //////////////////////////////////////////////////////////// + /// \brief Set the type of primitives to draw + /// + /// This function defines how the vertices must be interpreted + /// when it's time to draw them: + /// \li As points + /// \li As lines + /// \li As triangles + /// \li As quads + /// The default primitive type is sf::Points. + /// + /// \param type Type of primitive + /// + //////////////////////////////////////////////////////////// + void setPrimitiveType(PrimitiveType type); + + //////////////////////////////////////////////////////////// + /// \brief Get the type of primitives drawn by the vertex array + /// + /// \return Primitive type + /// + //////////////////////////////////////////////////////////// + PrimitiveType getPrimitiveType() const; + + //////////////////////////////////////////////////////////// + /// \brief Compute the bounding rectangle of the vertex array + /// + /// This function returns the axis-aligned rectangle that + /// contains all the vertices of the array. + /// + /// \return Bounding rectangle of the vertex array + /// + //////////////////////////////////////////////////////////// + FloatRect getBounds() const; + +private : + + //////////////////////////////////////////////////////////// + /// \brief Draw the vertex array to a render target + /// + /// \param target Render target to draw to + /// \param states Current render states + /// + //////////////////////////////////////////////////////////// + virtual void draw(RenderTarget& target, RenderStates states) const; + +private: + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + std::vector m_vertices; ///< Vertices contained in the array + PrimitiveType m_primitiveType; ///< Type of primitives to draw +}; + +} // namespace sf + + +#endif // SFML_VERTEXARRAY_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::VertexArray +/// \ingroup graphics +/// +/// sf::VertexArray is a very simple wrapper around a dynamic +/// array of vertices and a primitives type. +/// +/// It inherits sf::Drawable, but unlike other drawables it +/// is not transformable. +/// +/// Example: +/// \code +/// sf::VertexArray lines(sf::LinesStrip, 4); +/// lines[0].position = sf::Vector2f(10, 0); +/// lines[1].position = sf::Vector2f(20, 0); +/// lines[2].position = sf::Vector2f(30, 5); +/// lines[3].position = sf::Vector2f(40, 2); +/// +/// window.draw(lines); +/// \endcode +/// +/// \see sf::Vertex +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Graphics/View.hpp b/include/SFML/Graphics/View.hpp new file mode 100644 index 0000000..7713aef --- /dev/null +++ b/include/SFML/Graphics/View.hpp @@ -0,0 +1,341 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_VIEW_HPP +#define SFML_VIEW_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief 2D camera that defines what region is shown on screen +/// +//////////////////////////////////////////////////////////// +class SFML_GRAPHICS_API View +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor creates a default view of (0, 0, 1000, 1000) + /// + //////////////////////////////////////////////////////////// + View(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the view from a rectangle + /// + /// \param rectangle Rectangle defining the zone to display + /// + //////////////////////////////////////////////////////////// + explicit View(const FloatRect& rectangle); + + //////////////////////////////////////////////////////////// + /// \brief Construct the view from its center and size + /// + /// \param center Center of the zone to display + /// \param size Size of zone to display + /// + //////////////////////////////////////////////////////////// + View(const Vector2f& center, const Vector2f& size); + + //////////////////////////////////////////////////////////// + /// \brief Set the center of the view + /// + /// \param x X coordinate of the new center + /// \param y Y coordinate of the new center + /// + /// \see setSize, getCenter + /// + //////////////////////////////////////////////////////////// + void setCenter(float x, float y); + + //////////////////////////////////////////////////////////// + /// \brief Set the center of the view + /// + /// \param center New center + /// + /// \see setSize, getCenter + /// + //////////////////////////////////////////////////////////// + void setCenter(const Vector2f& center); + + //////////////////////////////////////////////////////////// + /// \brief Set the size of the view + /// + /// \param width New width of the view + /// \param height New height of the view + /// + /// \see setCenter, getCenter + /// + //////////////////////////////////////////////////////////// + void setSize(float width, float height); + + //////////////////////////////////////////////////////////// + /// \brief Set the size of the view + /// + /// \param size New size + /// + /// \see setCenter, getCenter + /// + //////////////////////////////////////////////////////////// + void setSize(const Vector2f& size); + + //////////////////////////////////////////////////////////// + /// \brief Set the orientation of the view + /// + /// The default rotation of a view is 0 degree. + /// + /// \param angle New angle, in degrees + /// + /// \see getRotation + /// + //////////////////////////////////////////////////////////// + void setRotation(float angle); + + //////////////////////////////////////////////////////////// + /// \brief Set the target viewport + /// + /// The viewport is the rectangle into which the contents of the + /// view are displayed, expressed as a factor (between 0 and 1) + /// of the size of the RenderTarget to which the view is applied. + /// For example, a view which takes the left side of the target would + /// be defined with View.setViewport(sf::FloatRect(0, 0, 0.5, 1)). + /// By default, a view has a viewport which covers the entire target. + /// + /// \param viewport New viewport rectangle + /// + /// \see getViewport + /// + //////////////////////////////////////////////////////////// + void setViewport(const FloatRect& viewport); + + //////////////////////////////////////////////////////////// + /// \brief Reset the view to the given rectangle + /// + /// Note that this function resets the rotation angle to 0. + /// + /// \param rectangle Rectangle defining the zone to display + /// + /// \see setCenter, setSize, setRotation + /// + //////////////////////////////////////////////////////////// + void reset(const FloatRect& rectangle); + + //////////////////////////////////////////////////////////// + /// \brief Get the center of the view + /// + /// \return Center of the view + /// + /// \see getSize, setCenter + /// + //////////////////////////////////////////////////////////// + const Vector2f& getCenter() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the size of the view + /// + /// \return Size of the view + /// + /// \see getCenter, setSize + /// + //////////////////////////////////////////////////////////// + const Vector2f& getSize() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the current orientation of the view + /// + /// \return Rotation angle of the view, in degrees + /// + /// \see setRotation + /// + //////////////////////////////////////////////////////////// + float getRotation() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the target viewport rectangle of the view + /// + /// \return Viewport rectangle, expressed as a factor of the target size + /// + /// \see setViewport + /// + //////////////////////////////////////////////////////////// + const FloatRect& getViewport() const; + + //////////////////////////////////////////////////////////// + /// \brief Move the view relatively to its current position + /// + /// \param offsetX X coordinate of the move offset + /// \param offsetY Y coordinate of the move offset + /// + /// \see setCenter, rotate, zoom + /// + //////////////////////////////////////////////////////////// + void move(float offsetX, float offsetY); + + //////////////////////////////////////////////////////////// + /// \brief Move the view relatively to its current position + /// + /// \param offset Move offset + /// + /// \see setCenter, rotate, zoom + /// + //////////////////////////////////////////////////////////// + void move(const Vector2f& offset); + + //////////////////////////////////////////////////////////// + /// \brief Rotate the view relatively to its current orientation + /// + /// \param angle Angle to rotate, in degrees + /// + /// \see setRotation, move, zoom + /// + //////////////////////////////////////////////////////////// + void rotate(float angle); + + //////////////////////////////////////////////////////////// + /// \brief Resize the view rectangle relatively to its current size + /// + /// Resizing the view simulates a zoom, as the zone displayed on + /// screen grows or shrinks. + /// \a factor is a multiplier: + /// \li 1 keeps the size unchanged + /// \li > 1 makes the view bigger (objects appear smaller) + /// \li < 1 makes the view smaller (objects appear bigger) + /// + /// \param factor Zoom factor to apply + /// + /// \see setSize, move, rotate + /// + //////////////////////////////////////////////////////////// + void zoom(float factor); + + //////////////////////////////////////////////////////////// + /// \brief Get the projection transform of the view + /// + /// This function is meant for internal use only. + /// + /// \return Projection transform defining the view + /// + /// \see getInverseTransform + /// + //////////////////////////////////////////////////////////// + const Transform& getTransform() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the inverse projection transform of the view + /// + /// This function is meant for internal use only. + /// + /// \return Inverse of the projection transform defining the view + /// + /// \see getTransform + /// + //////////////////////////////////////////////////////////// + const Transform& getInverseTransform() const; + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Vector2f m_center; ///< Center of the view, in scene coordinates + Vector2f m_size; ///< Size of the view, in scene coordinates + float m_rotation; ///< Angle of rotation of the view rectangle, in degrees + FloatRect m_viewport; ///< Viewport rectangle, expressed as a factor of the render-target's size + mutable Transform m_transform; ///< Precomputed projection transform corresponding to the view + mutable Transform m_inverseTransform; ///< Precomputed inverse projection transform corresponding to the view + mutable bool m_transformUpdated; ///< Internal state telling if the transform needs to be updated + mutable bool m_invTransformUpdated; ///< Internal state telling if the inverse transform needs to be updated +}; + +} // namespace sf + + +#endif // SFML_VIEW_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::View +/// \ingroup graphics +/// +/// sf::View defines a camera in the 2D scene. This is a +/// very powerful concept: you can scroll, rotate or zoom +/// the entire scene without altering the way that your +/// drawable objects are drawn. +/// +/// A view is composed of a source rectangle, which defines +/// what part of the 2D scene is shown, and a target viewport, +/// which defines where the contents of the source rectangle +/// will be displayed on the render target (window or texture). +/// +/// The viewport allows to map the scene to a custom part +/// of the render target, and can be used for split-screen +/// or for displaying a minimap, for example. If the source +/// rectangle has not the same size as the viewport, its +/// contents will be stretched to fit in. +/// +/// To apply a view, you have to assign it to the render target. +/// Then, every objects drawn in this render target will be +/// affected by the view until you use another view. +/// +/// Usage example: +/// \code +/// sf::RenderWindow window; +/// sf::View view; +/// +/// // Initialize the view to a rectangle located at (100, 100) and with a size of 400x200 +/// view.reset(sf::FloatRect(100, 100, 400, 200)); +/// +/// // Rotate it by 45 degrees +/// view.rotate(45); +/// +/// // Set its target viewport to be half of the window +/// view.setViewport(sf::FloatRect(0.f, 0.f, 0.5f, 1.f)); +/// +/// // Apply it +/// window.setView(view); +/// +/// // Render stuff +/// window.draw(someSprite); +/// +/// // Set the default view back +/// window.setView(window.getDefaultView()); +/// +/// // Render stuff not affected by the view +/// window.draw(someText); +/// \endcode +/// +/// \see sf::RenderWindow, sf::RenderTexture +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Network.hpp b/include/SFML/Network.hpp new file mode 100644 index 0000000..66b3b85 --- /dev/null +++ b/include/SFML/Network.hpp @@ -0,0 +1,51 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_NETWORK_HPP +#define SFML_NETWORK_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#endif // SFML_NETWORK_HPP + +//////////////////////////////////////////////////////////// +/// \defgroup network Network module +/// +/// Socket-based communication, utilities and higher-level +/// network protocols (HTTP, FTP). +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Network/Export.hpp b/include/SFML/Network/Export.hpp new file mode 100644 index 0000000..7dcd1d0 --- /dev/null +++ b/include/SFML/Network/Export.hpp @@ -0,0 +1,48 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_NETWORK_EXPORT_HPP +#define SFML_NETWORK_EXPORT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +//////////////////////////////////////////////////////////// +// Define portable import / export macros +//////////////////////////////////////////////////////////// +#if defined(SFML_NETWORK_EXPORTS) + + #define SFML_NETWORK_API SFML_API_EXPORT + +#else + + #define SFML_NETWORK_API SFML_API_IMPORT + +#endif + + +#endif // SFML_NETWORK_EXPORT_HPP diff --git a/include/SFML/Network/Ftp.hpp b/include/SFML/Network/Ftp.hpp new file mode 100644 index 0000000..9b8ed9b --- /dev/null +++ b/include/SFML/Network/Ftp.hpp @@ -0,0 +1,591 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_FTP_HPP +#define SFML_FTP_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include + + +namespace sf +{ +class IpAddress; + +//////////////////////////////////////////////////////////// +/// \brief A FTP client +/// +//////////////////////////////////////////////////////////// +class SFML_NETWORK_API Ftp : NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Enumeration of transfer modes + /// + //////////////////////////////////////////////////////////// + enum TransferMode + { + Binary, ///< Binary mode (file is transfered as a sequence of bytes) + Ascii, ///< Text mode using ASCII encoding + Ebcdic ///< Text mode using EBCDIC encoding + }; + + //////////////////////////////////////////////////////////// + /// \brief Define a FTP response + /// + //////////////////////////////////////////////////////////// + class SFML_NETWORK_API Response + { + public : + + //////////////////////////////////////////////////////////// + /// \brief Status codes possibly returned by a FTP response + /// + //////////////////////////////////////////////////////////// + enum Status + { + // 1xx: the requested action is being initiated, + // expect another reply before proceeding with a new command + RestartMarkerReply = 110, ///< Restart marker reply + ServiceReadySoon = 120, ///< Service ready in N minutes + DataConnectionAlreadyOpened = 125, ///< Data connection already opened, transfer starting + OpeningDataConnection = 150, ///< File status ok, about to open data connection + + // 2xx: the requested action has been successfully completed + Ok = 200, ///< Command ok + PointlessCommand = 202, ///< Command not implemented + SystemStatus = 211, ///< System status, or system help reply + DirectoryStatus = 212, ///< Directory status + FileStatus = 213, ///< File status + HelpMessage = 214, ///< Help message + SystemType = 215, ///< NAME system type, where NAME is an official system name from the list in the Assigned Numbers document + ServiceReady = 220, ///< Service ready for new user + ClosingConnection = 221, ///< Service closing control connection + DataConnectionOpened = 225, ///< Data connection open, no transfer in progress + ClosingDataConnection = 226, ///< Closing data connection, requested file action successful + EnteringPassiveMode = 227, ///< Entering passive mode + LoggedIn = 230, ///< User logged in, proceed. Logged out if appropriate + FileActionOk = 250, ///< Requested file action ok + DirectoryOk = 257, ///< PATHNAME created + + // 3xx: the command has been accepted, but the requested action + // is dormant, pending receipt of further information + NeedPassword = 331, ///< User name ok, need password + NeedAccountToLogIn = 332, ///< Need account for login + NeedInformation = 350, ///< Requested file action pending further information + + // 4xx: the command was not accepted and the requested action did not take place, + // but the error condition is temporary and the action may be requested again + ServiceUnavailable = 421, ///< Service not available, closing control connection + DataConnectionUnavailable = 425, ///< Can't open data connection + TransferAborted = 426, ///< Connection closed, transfer aborted + FileActionAborted = 450, ///< Requested file action not taken + LocalError = 451, ///< Requested action aborted, local error in processing + InsufficientStorageSpace = 452, ///< Requested action not taken; insufficient storage space in system, file unavailable + + // 5xx: the command was not accepted and + // the requested action did not take place + CommandUnknown = 500, ///< Syntax error, command unrecognized + ParametersUnknown = 501, ///< Syntax error in parameters or arguments + CommandNotImplemented = 502, ///< Command not implemented + BadCommandSequence = 503, ///< Bad sequence of commands + ParameterNotImplemented = 504, ///< Command not implemented for that parameter + NotLoggedIn = 530, ///< Not logged in + NeedAccountToStore = 532, ///< Need account for storing files + FileUnavailable = 550, ///< Requested action not taken, file unavailable + PageTypeUnknown = 551, ///< Requested action aborted, page type unknown + NotEnoughMemory = 552, ///< Requested file action aborted, exceeded storage allocation + FilenameNotAllowed = 553, ///< Requested action not taken, file name not allowed + + // 10xx: SFML custom codes + InvalidResponse = 1000, ///< Response is not a valid FTP one + ConnectionFailed = 1001, ///< Connection with server failed + ConnectionClosed = 1002, ///< Connection with server closed + InvalidFile = 1003 ///< Invalid file to upload / download + }; + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor is used by the FTP client to build + /// the response. + /// + /// \param code Response status code + /// \param message Response message + /// + //////////////////////////////////////////////////////////// + explicit Response(Status code = InvalidResponse, const std::string& message = ""); + + //////////////////////////////////////////////////////////// + /// \brief Check if the status code means a success + /// + /// This function is defined for convenience, it is + /// equivalent to testing if the status code is < 400. + /// + /// \return True if the status is a success, false if it is a failure + /// + //////////////////////////////////////////////////////////// + bool isOk() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the status code of the response + /// + /// \return Status code + /// + //////////////////////////////////////////////////////////// + Status getStatus() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the full message contained in the response + /// + /// \return The response message + /// + //////////////////////////////////////////////////////////// + const std::string& getMessage() const; + + private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Status m_status; ///< Status code returned from the server + std::string m_message; ///< Last message received from the server + }; + + //////////////////////////////////////////////////////////// + /// \brief Specialization of FTP response returning a directory + /// + //////////////////////////////////////////////////////////// + class SFML_NETWORK_API DirectoryResponse : public Response + { + public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// \param response Source response + /// + //////////////////////////////////////////////////////////// + DirectoryResponse(const Response& response); + + //////////////////////////////////////////////////////////// + /// \brief Get the directory returned in the response + /// + /// \return Directory name + /// + //////////////////////////////////////////////////////////// + const std::string& getDirectory() const; + + private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + std::string m_directory; ///< Directory extracted from the response message + }; + + + //////////////////////////////////////////////////////////// + /// \brief Specialization of FTP response returning a + /// filename lisiting + //////////////////////////////////////////////////////////// + class SFML_NETWORK_API ListingResponse : public Response + { + public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// \param response Source response + /// \param data Data containing the raw listing + /// + //////////////////////////////////////////////////////////// + ListingResponse(const Response& response, const std::vector& data); + + //////////////////////////////////////////////////////////// + /// \brief Return the array of directory/file names + /// + /// \return Array containing the requested listing + /// + //////////////////////////////////////////////////////////// + const std::vector& getListing() const; + + private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + std::vector m_listing; ///< Directory/file names extracted from the data + }; + + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + /// Automatically closes the connection with the server if + /// it is still opened. + /// + //////////////////////////////////////////////////////////// + ~Ftp(); + + //////////////////////////////////////////////////////////// + /// \brief Connect to the specified FTP server + /// + /// The port has a default value of 21, which is the standard + /// port used by the FTP protocol. You shouldn't use a different + /// value, unless you really know what you do. + /// This function tries to connect to the server so it may take + /// a while to complete, especially if the server is not + /// reachable. To avoid blocking your application for too long, + /// you can use a timeout. The default value, Time::Zero, means that the + /// system timeout will be used (which is usually pretty long). + /// + /// \param server Name or address of the FTP server to connect to + /// \param port Port used for the connection + /// \param timeout Maximum time to wait + /// + /// \return Server response to the request + /// + /// \see disconnect + /// + //////////////////////////////////////////////////////////// + Response connect(const IpAddress& server, unsigned short port = 21, Time timeout = Time::Zero); + + //////////////////////////////////////////////////////////// + /// \brief Close the connection with the server + /// + /// \return Server response to the request + /// + /// \see connect + /// + //////////////////////////////////////////////////////////// + Response disconnect(); + + //////////////////////////////////////////////////////////// + /// \brief Log in using an anonymous account + /// + /// Logging in is mandatory after connecting to the server. + /// Users that are not logged in cannot perform any operation. + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response login(); + + //////////////////////////////////////////////////////////// + /// \brief Log in using a username and a password + /// + /// Logging in is mandatory after connecting to the server. + /// Users that are not logged in cannot perform any operation. + /// + /// \param name User name + /// \param password Password + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response login(const std::string& name, const std::string& password); + + //////////////////////////////////////////////////////////// + /// \brief Send a null command to keep the connection alive + /// + /// This command is useful because the server may close the + /// connection automatically if no command is sent. + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response keepAlive(); + + //////////////////////////////////////////////////////////// + /// \brief Get the current working directory + /// + /// The working directory is the root path for subsequent + /// operations involving directories and/or filenames. + /// + /// \return Server response to the request + /// + /// \see getDirectoryListing, changeDirectory, parentDirectory + /// + //////////////////////////////////////////////////////////// + DirectoryResponse getWorkingDirectory(); + + //////////////////////////////////////////////////////////// + /// \brief Get the contents of the given directory + /// + /// This function retrieves the sub-directories and files + /// contained in the given directory. It is not recursive. + /// The \a directory parameter is relative to the current + /// working directory. + /// + /// \param directory Directory to list + /// + /// \return Server response to the request + /// + /// \see getWorkingDirectory, changeDirectory, parentDirectory + /// + //////////////////////////////////////////////////////////// + ListingResponse getDirectoryListing(const std::string& directory = ""); + + //////////////////////////////////////////////////////////// + /// \brief Change the current working directory + /// + /// The new directory must be relative to the current one. + /// + /// \param directory New working directory + /// + /// \return Server response to the request + /// + /// \see getWorkingDirectory, getDirectoryListing, parentDirectory + /// + //////////////////////////////////////////////////////////// + Response changeDirectory(const std::string& directory); + + //////////////////////////////////////////////////////////// + /// \brief Go to the parent directory of the current one + /// + /// \return Server response to the request + /// + /// \see getWorkingDirectory, getDirectoryListing, changeDirectory + /// + //////////////////////////////////////////////////////////// + Response parentDirectory(); + + //////////////////////////////////////////////////////////// + /// \brief Create a new directory + /// + /// The new directory is created as a child of the current + /// working directory. + /// + /// \param name Name of the directory to create + /// + /// \return Server response to the request + /// + /// \see deleteDirectory + /// + //////////////////////////////////////////////////////////// + Response createDirectory(const std::string& name); + + //////////////////////////////////////////////////////////// + /// \brief Remove an existing directory + /// + /// The directory to remove must be relative to the + /// current working directory. + /// Use this function with caution, the directory will + /// be removed permanently! + /// + /// \param name Name of the directory to remove + /// + /// \return Server response to the request + /// + /// \see createDirectory + /// + //////////////////////////////////////////////////////////// + Response deleteDirectory(const std::string& name); + + //////////////////////////////////////////////////////////// + /// \brief Rename an existing file + /// + /// The filenames must be relative to the current working + /// directory. + /// + /// \param file File to rename + /// \param newName New name of the file + /// + /// \return Server response to the request + /// + /// \see deleteFile + /// + //////////////////////////////////////////////////////////// + Response renameFile(const std::string& file, const std::string& newName); + + //////////////////////////////////////////////////////////// + /// \brief Remove an existing file + /// + /// The file name must be relative to the current working + /// directory. + /// Use this function with caution, the file will be + /// removed permanently! + /// + /// \param name File to remove + /// + /// \return Server response to the request + /// + /// \see renameFile + /// + //////////////////////////////////////////////////////////// + Response deleteFile(const std::string& name); + + //////////////////////////////////////////////////////////// + /// \brief Download a file from the server + /// + /// The filename of the distant file is relative to the + /// current working directory of the server, and the local + /// destination path is relative to the current directory + /// of your application. + /// + /// \param remoteFile Filename of the distant file to download + /// \param localPath Where to put to file on the local computer + /// \param mode Transfer mode + /// + /// \return Server response to the request + /// + /// \see upload + /// + //////////////////////////////////////////////////////////// + Response download(const std::string& remoteFile, const std::string& localPath, TransferMode mode = Binary); + + //////////////////////////////////////////////////////////// + /// \brief Upload a file to the server + /// + /// The name of the local file is relative to the current + /// working directory of your application, and the + /// remote path is relative to the current directory of the + /// FTP server. + /// + /// \param localFile Path of the local file to upload + /// \param remotePath Where to put to file on the server + /// \param mode Transfer mode + /// + /// \return Server response to the request + /// + /// \see download + /// + //////////////////////////////////////////////////////////// + Response upload(const std::string& localFile, const std::string& remotePath, TransferMode mode = Binary); + +private : + + //////////////////////////////////////////////////////////// + /// \brief Send a command to the FTP server + /// + /// \param command Command to send + /// \param parameter Command parameter + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response sendCommand(const std::string& command, const std::string& parameter = ""); + + //////////////////////////////////////////////////////////// + /// \brief Receive a response from the server + /// + /// This function must be called after each call to + /// SendCommand that expects a response. + /// + /// \return Server response to the request + /// + //////////////////////////////////////////////////////////// + Response getResponse(); + + //////////////////////////////////////////////////////////// + /// \brief Utility class for exchanging datas with the server + /// on the data channel + /// + //////////////////////////////////////////////////////////// + class DataChannel; + + friend class DataChannel; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + TcpSocket m_commandSocket; ///< Socket holding the control connection with the server +}; + +} // namespace sf + + +#endif // SFML_FTP_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Ftp +/// \ingroup network +/// +/// sf::Ftp is a very simple FTP client that allows you +/// to communicate with a FTP server. The FTP protocol allows +/// you to manipulate a remote file system (list files, +/// upload, download, create, remove, ...). +/// +/// Using the FTP client consists of 4 parts: +/// \li Connecting to the FTP server +/// \li Logging in (either as a registered user or anonymously) +/// \li Sending commands to the server +/// \li Disconnecting (this part can be done implicitely by the destructor) +/// +/// Every command returns a FTP response, which contains the +/// status code as well as a message from the server. Some +/// commands such as getWorkingDirectory and getDirectoryListing +/// return additional data, and use a class derived from +/// sf::Ftp::Response to provide this data. +/// +/// All commands, especially upload and download, may take some +/// time to complete. This is important to know if you don't want +/// to block your application while the server is completing +/// the task. +/// +/// Usage example: +/// \code +/// // Create a new FTP client +/// sf::Ftp ftp; +/// +/// // Connect to the server +/// sf::Ftp::Response response = ftp.connect("ftp://ftp.myserver.com"); +/// if (response.isOk()) +/// std::cout << "Connected" << std::endl; +/// +/// // Log in +/// response = ftp.login("laurent", "dF6Zm89D"); +/// if (response.isOk()) +/// std::cout << "Logged in" << std::endl; +/// +/// // Print the working directory +/// sf::Ftp::DirectoryResponse directory = ftp.getWorkingDirectory(); +/// if (directory.isOk()) +/// std::cout << "Working directory: " << directory.getDirectory() << std::endl; +/// +/// // Create a new directory +/// response = ftp.createDirectory("files"); +/// if (response.isOk()) +/// std::cout << "Created new directory" << std::endl; +/// +/// // Upload a file to this new directory +/// response = ftp.upload("local-path/file.txt", "files", sf::Ftp::Ascii); +/// if (response.isOk()) +/// std::cout << "File uploaded" << std::endl; +/// +/// // Disconnect from the server (optional) +/// ftp.disconnect(); +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Network/Http.hpp b/include/SFML/Network/Http.hpp new file mode 100644 index 0000000..7338f5a --- /dev/null +++ b/include/SFML/Network/Http.hpp @@ -0,0 +1,467 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_HTTP_HPP +#define SFML_HTTP_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief A HTTP client +/// +//////////////////////////////////////////////////////////// +class SFML_NETWORK_API Http : NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Define a HTTP request + /// + //////////////////////////////////////////////////////////// + class SFML_NETWORK_API Request + { + public : + + //////////////////////////////////////////////////////////// + /// \brief Enumerate the available HTTP methods for a request + /// + //////////////////////////////////////////////////////////// + enum Method + { + Get, ///< Request in get mode, standard method to retrieve a page + Post, ///< Request in post mode, usually to send data to a page + Head ///< Request a page's header only + }; + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor creates a GET request, with the root + /// URI ("/") and an empty body. + /// + /// \param uri Target URI + /// \param method Method to use for the request + /// \param body Content of the request's body + /// + //////////////////////////////////////////////////////////// + Request(const std::string& uri = "/", Method method = Get, const std::string& body = ""); + + //////////////////////////////////////////////////////////// + /// \brief Set the value of a field + /// + /// The field is created if it doesn't exist. The name of + /// the field is case insensitive. + /// By default, a request doesn't contain any field (but the + /// mandatory fields are added later by the HTTP client when + /// sending the request). + /// + /// \param field Name of the field to set + /// \param value Value of the field + /// + //////////////////////////////////////////////////////////// + void setField(const std::string& field, const std::string& value); + + //////////////////////////////////////////////////////////// + /// \brief Set the request method + /// + /// See the Method enumeration for a complete list of all + /// the availale methods. + /// The method is Http::Request::Get by default. + /// + /// \param method Method to use for the request + /// + //////////////////////////////////////////////////////////// + void setMethod(Method method); + + //////////////////////////////////////////////////////////// + /// \brief Set the requested URI + /// + /// The URI is the resource (usually a web page or a file) + /// that you want to get or post. + /// The URI is "/" (the root page) by default. + /// + /// \param uri URI to request, relative to the host + /// + //////////////////////////////////////////////////////////// + void setUri(const std::string& uri); + + //////////////////////////////////////////////////////////// + /// \brief Set the HTTP version for the request + /// + /// The HTTP version is 1.0 by default. + /// + /// \param major Major HTTP version number + /// \param minor Minor HTTP version number + /// + //////////////////////////////////////////////////////////// + void setHttpVersion(unsigned int major, unsigned int minor); + + //////////////////////////////////////////////////////////// + /// \brief Set the body of the request + /// + /// The body of a request is optional and only makes sense + /// for POST requests. It is ignored for all other methods. + /// The body is empty by default. + /// + /// \param body Content of the body + /// + //////////////////////////////////////////////////////////// + void setBody(const std::string& body); + + private : + + friend class Http; + + //////////////////////////////////////////////////////////// + /// \brief Prepare the final request to send to the server + /// + /// This is used internally by Http before sending the + /// request to the web server. + /// + /// \return String containing the request, ready to be sent + /// + //////////////////////////////////////////////////////////// + std::string prepare() const; + + //////////////////////////////////////////////////////////// + /// \brief Check if the request defines a field + /// + /// This function uses case-insensitive comparisons. + /// + /// \param field Name of the field to test + /// + /// \return True if the field exists, false otherwise + /// + //////////////////////////////////////////////////////////// + bool hasField(const std::string& field) const; + + //////////////////////////////////////////////////////////// + // Types + //////////////////////////////////////////////////////////// + typedef std::map FieldTable; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + FieldTable m_fields; ///< Fields of the header associated to their value + Method m_method; ///< Method to use for the request + std::string m_uri; ///< Target URI of the request + unsigned int m_majorVersion; ///< Major HTTP version + unsigned int m_minorVersion; ///< Minor HTTP version + std::string m_body; ///< Body of the request + }; + + //////////////////////////////////////////////////////////// + /// \brief Define a HTTP response + /// + //////////////////////////////////////////////////////////// + class SFML_NETWORK_API Response + { + public : + + //////////////////////////////////////////////////////////// + /// \brief Enumerate all the valid status codes for a response + /// + //////////////////////////////////////////////////////////// + enum Status + { + // 2xx: success + Ok = 200, ///< Most common code returned when operation was successful + Created = 201, ///< The resource has successfully been created + Accepted = 202, ///< The request has been accepted, but will be processed later by the server + NoContent = 204, ///< The server didn't send any data in return + ResetContent = 205, ///< The server informs the client that it should clear the view (form) that caused the request to be sent + PartialContent = 206, ///< The server has sent a part of the resource, as a response to a partial GET request + + // 3xx: redirection + MultipleChoices = 300, ///< The requested page can be accessed from several locations + MovedPermanently = 301, ///< The requested page has permanently moved to a new location + MovedTemporarily = 302, ///< The requested page has temporarily moved to a new location + NotModified = 304, ///< For conditionnal requests, means the requested page hasn't changed and doesn't need to be refreshed + + // 4xx: client error + BadRequest = 400, ///< The server couldn't understand the request (syntax error) + Unauthorized = 401, ///< The requested page needs an authentification to be accessed + Forbidden = 403, ///< The requested page cannot be accessed at all, even with authentification + NotFound = 404, ///< The requested page doesn't exist + RangeNotSatisfiable = 407, ///< The server can't satisfy the partial GET request (with a "Range" header field) + + // 5xx: server error + InternalServerError = 500, ///< The server encountered an unexpected error + NotImplemented = 501, ///< The server doesn't implement a requested feature + BadGateway = 502, ///< The gateway server has received an error from the source server + ServiceNotAvailable = 503, ///< The server is temporarily unavailable (overloaded, in maintenance, ...) + GatewayTimeout = 504, ///< The gateway server couldn't receive a response from the source server + VersionNotSupported = 505, ///< The server doesn't support the requested HTTP version + + // 10xx: SFML custom codes + InvalidResponse = 1000, ///< Response is not a valid HTTP one + ConnectionFailed = 1001 ///< Connection with server failed + }; + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Constructs an empty response. + /// + //////////////////////////////////////////////////////////// + Response(); + + //////////////////////////////////////////////////////////// + /// \brief Get the value of a field + /// + /// If the field \a field is not found in the response header, + /// the empty string is returned. This function uses + /// case-insensitive comparisons. + /// + /// \param field Name of the field to get + /// + /// \return Value of the field, or empty string if not found + /// + //////////////////////////////////////////////////////////// + const std::string& getField(const std::string& field) const; + + //////////////////////////////////////////////////////////// + /// \brief Get the response status code + /// + /// The status code should be the first thing to be checked + /// after receiving a response, it defines whether it is a + /// success, a failure or anything else (see the Status + /// enumeration). + /// + /// \return Status code of the response + /// + //////////////////////////////////////////////////////////// + Status getStatus() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the major HTTP version number of the response + /// + /// \return Major HTTP version number + /// + /// \see getMinorHttpVersion + /// + //////////////////////////////////////////////////////////// + unsigned int getMajorHttpVersion() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the minor HTTP version number of the response + /// + /// \return Minor HTTP version number + /// + /// \see getMajorHttpVersion + /// + //////////////////////////////////////////////////////////// + unsigned int getMinorHttpVersion() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the body of the response + /// + /// The body of a response may contain: + /// \li the requested page (for GET requests) + /// \li a response from the server (for POST requests) + /// \li nothing (for HEAD requests) + /// \li an error message (in case of an error) + /// + /// \return The response body + /// + //////////////////////////////////////////////////////////// + const std::string& getBody() const; + + private : + + friend class Http; + + //////////////////////////////////////////////////////////// + /// \brief Construct the header from a response string + /// + /// This function is used by Http to build the response + /// of a request. + /// + /// \param data Content of the response to parse + /// + //////////////////////////////////////////////////////////// + void parse(const std::string& data); + + //////////////////////////////////////////////////////////// + // Types + //////////////////////////////////////////////////////////// + typedef std::map FieldTable; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + FieldTable m_fields; ///< Fields of the header + Status m_status; ///< Status code + unsigned int m_majorVersion; ///< Major HTTP version + unsigned int m_minorVersion; ///< Minor HTTP version + std::string m_body; ///< Body of the response + }; + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + Http(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the HTTP client with the target host + /// + /// This is equivalent to calling setHost(host, port). + /// The port has a default value of 0, which means that the + /// HTTP client will use the right port according to the + /// protocol used (80 for HTTP, 443 for HTTPS). You should + /// leave it like this unless you really need a port other + /// than the standard one, or use an unknown protocol. + /// + /// \param host Web server to connect to + /// \param port Port to use for connection + /// + //////////////////////////////////////////////////////////// + Http(const std::string& host, unsigned short port = 0); + + //////////////////////////////////////////////////////////// + /// \brief Set the target host + /// + /// This function just stores the host address and port, it + /// doesn't actually connect to it until you send a request. + /// The port has a default value of 0, which means that the + /// HTTP client will use the right port according to the + /// protocol used (80 for HTTP, 443 for HTTPS). You should + /// leave it like this unless you really need a port other + /// than the standard one, or use an unknown protocol. + /// + /// \param host Web server to connect to + /// \param port Port to use for connection + /// + //////////////////////////////////////////////////////////// + void setHost(const std::string& host, unsigned short port = 0); + + //////////////////////////////////////////////////////////// + /// \brief Send a HTTP request and return the server's response. + /// + /// You must have a valid host before sending a request (see setHost). + /// Any missing mandatory header field in the request will be added + /// with an appropriate value. + /// Warning: this function waits for the server's response and may + /// not return instantly; use a thread if you don't want to block your + /// application, or use a timeout to limit the time to wait. A value + /// of Time::Zero means that the client will use the system defaut timeout + /// (which is usually pretty long). + /// + /// \param request Request to send + /// \param timeout Maximum time to wait + /// + /// \return Server's response + /// + //////////////////////////////////////////////////////////// + Response sendRequest(const Request& request, Time timeout = Time::Zero); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + TcpSocket m_connection; ///< Connection to the host + IpAddress m_host; ///< Web host address + std::string m_hostName; ///< Web host name + unsigned short m_port; ///< Port used for connection with host +}; + +} // namespace sf + + +#endif // SFML_HTTP_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Http +/// \ingroup network +/// +/// sf::Http is a very simple HTTP client that allows you +/// to communicate with a web server. You can retrieve +/// web pages, send data to an interactive resource, +/// download a remote file, etc. +/// +/// The HTTP client is split into 3 classes: +/// \li sf::Http::Request +/// \li sf::Http::Response +/// \li sf::Http +/// +/// sf::Http::Request builds the request that will be +/// sent to the server. A request is made of: +/// \li a method (what you want to do) +/// \li a target URI (usually the name of the web page or file) +/// \li one or more header fields (options that you can pass to the server) +/// \li an optional body (for POST requests) +/// +/// sf::Http::Response parse the response from the web server +/// and provides getters to read them. The response contains: +/// \li a status code +/// \li header fields (that may be answers to the ones that you requested) +/// \li a body, which contains the contents of the requested resource +/// +/// sf::Http provides a simple function, SendRequest, to send a +/// sf::Http::Request and return the corresponding sf::Http::Response +/// from the server. +/// +/// Usage example: +/// \code +/// // Create a new HTTP client +/// sf::Http http; +/// +/// // We'll work on http://www.sfml-dev.org +/// http.setHost("http://www.sfml-dev.org"); +/// +/// // Prepare a request to get the 'features.php' page +/// sf::Http::Request request("features.php"); +/// +/// // Send the request +/// sf::Http::Response response = http.sendRequest(request); +/// +/// // Check the status code and display the result +/// sf::Http::Response::Status status = response.getStatus(); +/// if (status == sf::Http::Response::Ok) +/// { +/// std::cout << response.getBody() << std::endl; +/// } +/// else +/// { +/// std::cout << "Error " << status << std::endl; +/// } +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Network/IpAddress.hpp b/include/SFML/Network/IpAddress.hpp new file mode 100644 index 0000000..15c4ac3 --- /dev/null +++ b/include/SFML/Network/IpAddress.hpp @@ -0,0 +1,316 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_IPADDRESS_HPP +#define SFML_IPADDRESS_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Encapsulate an IPv4 network address +/// +//////////////////////////////////////////////////////////// +class SFML_NETWORK_API IpAddress +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor creates an empty (invalid) address + /// + //////////////////////////////////////////////////////////// + IpAddress(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the address from a string + /// + /// Here \a address can be either a decimal address + /// (ex: "192.168.1.56") or a network name (ex: "localhost"). + /// + /// \param address IP address or network name + /// + //////////////////////////////////////////////////////////// + IpAddress(const std::string& address); + + //////////////////////////////////////////////////////////// + /// \brief Construct the address from a string + /// + /// Here \a address can be either a decimal address + /// (ex: "192.168.1.56") or a network name (ex: "localhost"). + /// This is equivalent to the constructor taking a std::string + /// parameter, it is defined for convenience so that the + /// implicit conversions from literal strings to IpAddress work. + /// + /// \param address IP address or network name + /// + //////////////////////////////////////////////////////////// + IpAddress(const char* address); + + //////////////////////////////////////////////////////////// + /// \brief Construct the address from 4 bytes + /// + /// Calling IpAddress(a, b, c, d) is equivalent to calling + /// IpAddress("a.b.c.d"), but safer as it doesn't have to + /// parse a string to get the address components. + /// + /// \param byte0 First byte of the address + /// \param byte1 Second byte of the address + /// \param byte2 Third byte of the address + /// \param byte3 Fourth byte of the address + /// + //////////////////////////////////////////////////////////// + IpAddress(Uint8 byte0, Uint8 byte1, Uint8 byte2, Uint8 byte3); + + //////////////////////////////////////////////////////////// + /// \brief Construct the address from a 32-bits integer + /// + /// This constructor uses the internal representation of + /// the address directly. It should be used for optimization + /// purposes, and only if you got that representation from + /// IpAddress::ToInteger(). + /// + /// \param address 4 bytes of the address packed into a 32-bits integer + /// + /// \see toInteger + /// + //////////////////////////////////////////////////////////// + explicit IpAddress(Uint32 address); + + //////////////////////////////////////////////////////////// + /// \brief Get a string representation of the address + /// + /// The returned string is the decimal representation of the + /// IP address (like "192.168.1.56"), even if it was constructed + /// from a host name. + /// + /// \return String representation of the address + /// + /// \see toInteger + /// + //////////////////////////////////////////////////////////// + std::string toString() const; + + //////////////////////////////////////////////////////////// + /// \brief Get an integer representation of the address + /// + /// The returned number is the internal representation of the + /// address, and should be used for optimization purposes only + /// (like sending the address through a socket). + /// The integer produced by this function can then be converted + /// back to a sf::IpAddress with the proper constructor. + /// + /// \return 32-bits unsigned integer representation of the address + /// + /// \see toString + /// + //////////////////////////////////////////////////////////// + Uint32 toInteger() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the computer's local address + /// + /// The local address is the address of the computer from the + /// LAN point of view, i.e. something like 192.168.1.56. It is + /// meaningful only for communications over the local network. + /// Unlike getPublicAddress, this function is fast and may be + /// used safely anywhere. + /// + /// \return Local IP address of the computer + /// + /// \see getPublicAddress + /// + //////////////////////////////////////////////////////////// + static IpAddress getLocalAddress(); + + //////////////////////////////////////////////////////////// + /// \brief Get the computer's public address + /// + /// The public address is the address of the computer from the + /// internet point of view, i.e. something like 89.54.1.169. + /// It is necessary for communications over the world wide web. + /// The only way to get a public address is to ask it to a + /// distant website; as a consequence, this function depends on + /// both your network connection and the server, and may be + /// very slow. You should use it as few as possible. Because + /// this function depends on the network connection and on a distant + /// server, you may use a time limit if you don't want your program + /// to be possibly stuck waiting in case there is a problem; this + /// limit is deactivated by default. + /// + /// \param timeout Maximum time to wait + /// + /// \return Public IP address of the computer + /// + /// \see getLocalAddress + /// + //////////////////////////////////////////////////////////// + static IpAddress getPublicAddress(Time timeout = Time::Zero); + + //////////////////////////////////////////////////////////// + // Static member data + //////////////////////////////////////////////////////////// + static const IpAddress None; ///< Value representing an empty/invalid address + static const IpAddress LocalHost; ///< The "localhost" address (for connecting a computer to itself locally) + static const IpAddress Broadcast; ///< The "broadcast" address (for sending UDP messages to everyone on a local network) + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Uint32 m_address; ///< Address stored as an unsigned 32 bits integer +}; + +//////////////////////////////////////////////////////////// +/// \brief Overload of == operator to compare two IP addresses +/// +/// \param left Left operand (a IP address) +/// \param right Right operand (a IP address) +/// +/// \return True if both addresses are equal +/// +//////////////////////////////////////////////////////////// +SFML_NETWORK_API bool operator ==(const IpAddress& left, const IpAddress& right); + +//////////////////////////////////////////////////////////// +/// \brief Overload of != operator to compare two IP addresses +/// +/// \param left Left operand (a IP address) +/// \param right Right operand (a IP address) +/// +/// \return True if both addresses are different +/// +//////////////////////////////////////////////////////////// +SFML_NETWORK_API bool operator !=(const IpAddress& left, const IpAddress& right); + +//////////////////////////////////////////////////////////// +/// \brief Overload of < operator to compare two IP addresses +/// +/// \param left Left operand (a IP address) +/// \param right Right operand (a IP address) +/// +/// \return True if \a left is lesser than \a right +/// +//////////////////////////////////////////////////////////// +SFML_NETWORK_API bool operator <(const IpAddress& left, const IpAddress& right); + +//////////////////////////////////////////////////////////// +/// \brief Overload of > operator to compare two IP addresses +/// +/// \param left Left operand (a IP address) +/// \param right Right operand (a IP address) +/// +/// \return True if \a left is greater than \a right +/// +//////////////////////////////////////////////////////////// +SFML_NETWORK_API bool operator >(const IpAddress& left, const IpAddress& right); + +//////////////////////////////////////////////////////////// +/// \brief Overload of <= operator to compare two IP addresses +/// +/// \param left Left operand (a IP address) +/// \param right Right operand (a IP address) +/// +/// \return True if \a left is lesser or equal than \a right +/// +//////////////////////////////////////////////////////////// +SFML_NETWORK_API bool operator <=(const IpAddress& left, const IpAddress& right); + +//////////////////////////////////////////////////////////// +/// \brief Overload of >= operator to compare two IP addresses +/// +/// \param left Left operand (a IP address) +/// \param right Right operand (a IP address) +/// +/// \return True if \a left is greater or equal than \a right +/// +//////////////////////////////////////////////////////////// +SFML_NETWORK_API bool operator >=(const IpAddress& left, const IpAddress& right); + +//////////////////////////////////////////////////////////// +/// \brief Overload of >> operator to extract an IP address from an input stream +/// +/// \param stream Input stream +/// \param address IP address to extract +/// +/// \return Reference to the input stream +/// +//////////////////////////////////////////////////////////// +SFML_NETWORK_API std::istream& operator >>(std::istream& stream, IpAddress& address); + +//////////////////////////////////////////////////////////// +/// \brief Overload of << operator to print an IP address to an output stream +/// +/// \param stream Output stream +/// \param address IP address to print +/// +/// \return Reference to the output stream +/// +//////////////////////////////////////////////////////////// +SFML_NETWORK_API std::ostream& operator <<(std::ostream& stream, const IpAddress& address); + +} // namespace sf + + +#endif // SFML_IPADDRESS_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::IpAddress +/// \ingroup network +/// +/// sf::IpAddress is a utility class for manipulating network +/// addresses. It provides a set a implicit constructors and +/// conversion functions to easily build or transform an IP +/// address from/to various representations. +/// +/// Usage example: +/// \code +/// sf::IpAddress a0; // an invalid address +/// sf::IpAddress a1 = sf::IpAddress::None; // an invalid address (same as a0) +/// sf::IpAddress a2("127.0.0.1"); // the local host address +/// sf::IpAddress a3 = sf::IpAddress::Broadcast; // the broadcast address +/// sf::IpAddress a4(192, 168, 1, 56); // a local address +/// sf::IpAddress a5("my_computer"); // a local address created from a network name +/// sf::IpAddress a6("89.54.1.169"); // a distant address +/// sf::IpAddress a7("www.google.com"); // a distant address created from a network name +/// sf::IpAddress a8 = sf::IpAddress::getLocalAddress(); // my address on the local network +/// sf::IpAddress a9 = sf::IpAddress::getPublicAddress(); // my address on the internet +/// \endcode +/// +/// Note that sf::IpAddress currently doesn't support IPv6 +/// nor other types of network addresses. +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Network/Packet.hpp b/include/SFML/Network/Packet.hpp new file mode 100644 index 0000000..2d3e201 --- /dev/null +++ b/include/SFML/Network/Packet.hpp @@ -0,0 +1,407 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_PACKET_HPP +#define SFML_PACKET_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +class String; +class TcpSocket; +class UdpSocket; + +//////////////////////////////////////////////////////////// +/// \brief Utility class to build blocks of data to transfer +/// over the network +/// +//////////////////////////////////////////////////////////// +class SFML_NETWORK_API Packet +{ + // A bool-like type that cannot be converted to integer or pointer types + typedef bool (Packet::*BoolType)(std::size_t); + +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Creates an empty packet. + /// + //////////////////////////////////////////////////////////// + Packet(); + + //////////////////////////////////////////////////////////// + /// \brief Virtual destructor + /// + //////////////////////////////////////////////////////////// + virtual ~Packet(); + + //////////////////////////////////////////////////////////// + /// \brief Append data to the end of the packet + /// + /// \param data Pointer to the sequence of bytes to append + /// \param sizeInBytes Number of bytes to append + /// + /// \see clear + /// + //////////////////////////////////////////////////////////// + void append(const void* data, std::size_t sizeInBytes); + + //////////////////////////////////////////////////////////// + /// \brief Clear the packet + /// + /// After calling Clear, the packet is empty. + /// + /// \see append + /// + //////////////////////////////////////////////////////////// + void clear(); + + //////////////////////////////////////////////////////////// + /// \brief Get a pointer to the data contained in the packet + /// + /// Warning: the returned pointer may become invalid after + /// you append data to the packet, therefore it should never + /// be stored. + /// The return pointer is NULL if the packet is empty. + /// + /// \return Pointer to the data + /// + /// \see getDataSize + /// + //////////////////////////////////////////////////////////// + const void* getData() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the size of the data contained in the packet + /// + /// This function returns the number of bytes pointed to by + /// what getData returns. + /// + /// \return Data size, in bytes + /// + /// \see getData + /// + //////////////////////////////////////////////////////////// + std::size_t getDataSize() const; + + //////////////////////////////////////////////////////////// + /// \brief Tell if the reading position has reached the + /// end of the packet + /// + /// This function is useful to know if there is some data + /// left to be read, without actually reading it. + /// + /// \return True if all data was read, false otherwise + /// + /// \see operator bool + /// + //////////////////////////////////////////////////////////// + bool endOfPacket() const; + +public: + + //////////////////////////////////////////////////////////// + /// \brief Test the validity of the packet, for reading + /// + /// This operator allows to test the packet as a boolean + /// variable, to check if a reading operation was successful. + /// + /// A packet will be in an invalid state if it has no more + /// data to read. + /// + /// This behaviour is the same as standard C++ streams. + /// + /// Usage example: + /// \code + /// float x; + /// packet >> x; + /// if (packet) + /// { + /// // ok, x was extracted successfully + /// } + /// + /// // -- or -- + /// + /// float x; + /// if (packet >> x) + /// { + /// // ok, x was extracted successfully + /// } + /// \endcode + /// + /// Don't focus on the return type, it's equivalent to bool but + /// it disallows unwanted implicit conversions to integer or + /// pointer types. + /// + /// \return True if last data extraction from packet was successful + /// + /// \see endOfPacket + /// + //////////////////////////////////////////////////////////// + operator BoolType() const; + + //////////////////////////////////////////////////////////// + /// Overloads of operator >> to read data from the packet + /// + //////////////////////////////////////////////////////////// + Packet& operator >>(bool& data); + Packet& operator >>(Int8& data); + Packet& operator >>(Uint8& data); + Packet& operator >>(Int16& data); + Packet& operator >>(Uint16& data); + Packet& operator >>(Int32& data); + Packet& operator >>(Uint32& data); + Packet& operator >>(float& data); + Packet& operator >>(double& data); + Packet& operator >>(char* data); + Packet& operator >>(std::string& data); + Packet& operator >>(wchar_t* data); + Packet& operator >>(std::wstring& data); + Packet& operator >>(String& data); + + //////////////////////////////////////////////////////////// + /// Overloads of operator << to write data into the packet + /// + //////////////////////////////////////////////////////////// + Packet& operator <<(bool data); + Packet& operator <<(Int8 data); + Packet& operator <<(Uint8 data); + Packet& operator <<(Int16 data); + Packet& operator <<(Uint16 data); + Packet& operator <<(Int32 data); + Packet& operator <<(Uint32 data); + Packet& operator <<(float data); + Packet& operator <<(double data); + Packet& operator <<(const char* data); + Packet& operator <<(const std::string& data); + Packet& operator <<(const wchar_t* data); + Packet& operator <<(const std::wstring& data); + Packet& operator <<(const String& data); + +protected: + + friend class TcpSocket; + friend class UdpSocket; + + //////////////////////////////////////////////////////////// + /// \brief Called before the packet is sent over the network + /// + /// This function can be defined by derived classes to + /// transform the data before it is sent; this can be + /// used for compression, encryption, etc. + /// The function must return a pointer to the modified data, + /// as well as the number of bytes pointed. + /// The default implementation provides the packet's data + /// without transforming it. + /// + /// \param size Variable to fill with the size of data to send + /// + /// \return Pointer to the array of bytes to send + /// + /// \see onReceive + /// + //////////////////////////////////////////////////////////// + virtual const void* onSend(std::size_t& size); + + //////////////////////////////////////////////////////////// + /// \brief Called after the packet is received over the network + /// + /// This function can be defined by derived classes to + /// transform the data after it is received; this can be + /// used for uncompression, decryption, etc. + /// The function receives a pointer to the received data, + /// and must fill the packet with the transformed bytes. + /// The default implementation fills the packet directly + /// without transforming the data. + /// + /// \param data Pointer to the received bytes + /// \param size Number of bytes + /// + /// \see onSend + /// + //////////////////////////////////////////////////////////// + virtual void onReceive(const void* data, std::size_t size); + +private : + + //////////////////////////////////////////////////////////// + /// Disallow comparisons between packets + /// + //////////////////////////////////////////////////////////// + bool operator ==(const Packet& right) const; + bool operator !=(const Packet& right) const; + + //////////////////////////////////////////////////////////// + /// \brief Check if the packet can extract a given number of bytes + /// + /// This function updates accordingly the state of the packet. + /// + /// \param size Size to check + /// + /// \return True if \a size bytes can be read from the packet + /// + //////////////////////////////////////////////////////////// + bool checkSize(std::size_t size); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + std::vector m_data; ///< Data stored in the packet + std::size_t m_readPos; ///< Current reading position in the packet + bool m_isValid; ///< Reading state of the packet +}; + +} // namespace sf + + +#endif // SFML_PACKET_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Packet +/// \ingroup network +/// +/// Packets provide a safe and easy way to serialize data, +/// in order to send it over the network using sockets +/// (sf::TcpSocket, sf::UdpSocket). +/// +/// Packets solve 2 fundamental problems that arise when +/// transfering data over the network: +/// \li data is interpreted correctly according to the endianness +/// \li the bounds of the packet are preserved (one send == one receive) +/// +/// The sf::Packet class provides both input and output modes. +/// It is designed to follow the behaviour of standard C++ streams, +/// using operators >> and << to extract and insert data. +/// +/// It is recommended to use only fixed-size types (like sf::Int32, etc.), +/// to avoid possible differences between the sender and the receiver. +/// Indeed, the native C++ types may have different sizes on two platforms +/// and your data may be corrupted if that happens. +/// +/// Usage example: +/// \code +/// sf::Uint32 x = 24; +/// std::string s = "hello"; +/// double d = 5.89; +/// +/// // Group the variables to send into a packet +/// sf::Packet packet; +/// packet << x << s << d; +/// +/// // Send it over the network (socket is a valid sf::TcpSocket) +/// socket.send(packet); +/// +/// ----------------------------------------------------------------- +/// +/// // Receive the packet at the other end +/// sf::Packet packet; +/// socket.receive(packet); +/// +/// // Extract the variables contained in the packet +/// sf::Uint32 x; +/// std::string s; +/// double d; +/// if (packet >> x >> s >> d) +/// { +/// // Data extracted successfully... +/// } +/// \endcode +/// +/// Packets have built-in operator >> and << overloads for +/// standard types: +/// \li bool +/// \li fixed-size integer types (sf::Int8/16/32, sf::Uint8/16/32) +/// \li floating point numbers (float, double) +/// \li string types (char*, wchar_t*, std::string, std::wstring, sf::String) +/// +/// Like standard streams, it is also possible to define your own +/// overloads of operators >> and << in order to handle your +/// custom types. +/// +/// \code +/// struct MyStruct +/// { +/// float number; +/// sf::Int8 integer; +/// std::string str; +/// }; +/// +/// sf::Packet& operator <<(sf::Packet& packet, const MyStruct& m) +/// { +/// return packet << m.number << m.integer << m.str; +/// } +/// +/// sf::Packet& operator >>(sf::Packet& packet, MyStruct& m) +/// { +/// return packet >> m.number >> m.integer >> m.str; +/// } +/// \endcode +/// +/// Packets also provide an extra feature that allows to apply +/// custom transformations to the data before it is sent, +/// and after it is received. This is typically used to +/// handle automatic compression or encryption of the data. +/// This is achieved by inheriting from sf::Packet, and overriding +/// the onSend and onReceive functions. +/// +/// Here is an example: +/// \code +/// class ZipPacket : public sf::Packet +/// { +/// virtual const void* onSend(std::size_t& size) +/// { +/// const void* srcData = getData(); +/// std::size_t srcSize = getDataSize(); +/// +/// return MySuperZipFunction(srcData, srcSize, &size); +/// } +/// +/// virtual void onReceive(const void* data, std::size_t size) +/// { +/// std::size_t dstSize; +/// const void* dstData = MySuperUnzipFunction(data, size, &dstSize); +/// +/// append(dstData, dstSize); +/// } +/// }; +/// +/// // Use like regular packets: +/// ZipPacket packet; +/// packet << x << s << d; +/// ... +/// \endcode +/// +/// \see sf::TcpSocket, sf::UdpSocket +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Network/Socket.hpp b/include/SFML/Network/Socket.hpp new file mode 100644 index 0000000..4b30307 --- /dev/null +++ b/include/SFML/Network/Socket.hpp @@ -0,0 +1,218 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOCKET_HPP +#define SFML_SOCKET_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include + + +namespace sf +{ +class SocketSelector; + +//////////////////////////////////////////////////////////// +/// \brief Base class for all the socket types +/// +//////////////////////////////////////////////////////////// +class SFML_NETWORK_API Socket : NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Status codes that may be returned by socket functions + /// + //////////////////////////////////////////////////////////// + enum Status + { + Done, ///< The socket has sent / received the data + NotReady, ///< The socket is not ready to send / receive data yet + Disconnected, ///< The TCP socket has been disconnected + Error ///< An unexpected error happened + }; + + //////////////////////////////////////////////////////////// + /// \brief Some special values used by sockets + /// + //////////////////////////////////////////////////////////// + enum + { + AnyPort = 0 ///< Special value that tells the system to pick any available port + }; + +public : + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + virtual ~Socket(); + + //////////////////////////////////////////////////////////// + /// \brief Set the blocking state of the socket + /// + /// In blocking mode, calls will not return until they have + /// completed their task. For example, a call to Receive in + /// blocking mode won't return until some data was actually + /// received. + /// In non-blocking mode, calls will always return immediately, + /// using the return code to signal whether there was data + /// available or not. + /// By default, all sockets are blocking. + /// + /// \param blocking True to set the socket as blocking, false for non-blocking + /// + /// \see isBlocking + /// + //////////////////////////////////////////////////////////// + void setBlocking(bool blocking); + + //////////////////////////////////////////////////////////// + /// \brief Tell whether the socket is in blocking or non-blocking mode + /// + /// \return True if the socket is blocking, false otherwise + /// + /// \see setBlocking + /// + //////////////////////////////////////////////////////////// + bool isBlocking() const; + +protected : + + //////////////////////////////////////////////////////////// + /// \brief Types of protocols that the socket can use + /// + //////////////////////////////////////////////////////////// + enum Type + { + Tcp, ///< TCP protocol + Udp ///< UDP protocol + }; + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor can only be accessed by derived classes. + /// + /// \param type Type of the socket (TCP or UDP) + /// + //////////////////////////////////////////////////////////// + Socket(Type type); + + //////////////////////////////////////////////////////////// + /// \brief Return the internal handle of the socket + /// + /// The returned handle may be invalid if the socket + /// was not created yet (or already destroyed). + /// This function can only be accessed by derived classes. + /// + /// \return The internal (OS-specific) handle of the socket + /// + //////////////////////////////////////////////////////////// + SocketHandle getHandle() const; + + //////////////////////////////////////////////////////////// + /// \brief Create the internal representation of the socket + /// + /// This function can only be accessed by derived classes. + /// + //////////////////////////////////////////////////////////// + void create(); + + //////////////////////////////////////////////////////////// + /// \brief Create the internal representation of the socket + /// from a socket handle + /// + /// This function can only be accessed by derived classes. + /// + /// \param handle OS-specific handle of the socket to wrap + /// + //////////////////////////////////////////////////////////// + void create(SocketHandle handle); + + //////////////////////////////////////////////////////////// + /// \brief Close the socket gracefully + /// + /// This function can only be accessed by derived classes. + /// + //////////////////////////////////////////////////////////// + void close(); + +private : + + friend class SocketSelector; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Type m_type; ///< Type of the socket (TCP or UDP) + SocketHandle m_socket; ///< Socket descriptor + bool m_isBlocking; ///< Current blocking mode of the socket +}; + +} // namespace sf + + +#endif // SFML_SOCKET_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Socket +/// \ingroup network +/// +/// This class mainly defines internal stuff to be used by +/// derived classes. +/// +/// The only public features that it defines, and which +/// is therefore common to all the socket classes, is the +/// blocking state. All sockets can be set as blocking or +/// non-blocking. +/// +/// In blocking mode, socket functions will hang until +/// the operation completes, which means that the entire +/// program (well, in fact the current thread if you use +/// multiple ones) will be stuck waiting for your socket +/// operation to complete. +/// +/// In non-blocking mode, all the socket functions will +/// return immediately. If the socket is not ready to complete +/// the requested operation, the function simply returns +/// the proper status code (Socket::NotReady). +/// +/// The default mode, which is blocking, is the one that is +/// generally used, in combination with threads or selectors. +/// The non-blocking mode is rather used in real-time +/// applications that run an endless loop that can poll +/// the socket often enough, and cannot afford blocking +/// this loop. +/// +/// \see sf::TcpListener, sf::TcpSocket, sf::UdpSocket +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Network/SocketHandle.hpp b/include/SFML/Network/SocketHandle.hpp new file mode 100644 index 0000000..8edd46a --- /dev/null +++ b/include/SFML/Network/SocketHandle.hpp @@ -0,0 +1,57 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOCKETHANDLE_HPP +#define SFML_SOCKETHANDLE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + +#if defined(SFML_SYSTEM_WINDOWS) + #include +#endif + + +namespace sf +{ +//////////////////////////////////////////////////////////// +// Define the low-level socket handle type, specific to +// each platform +//////////////////////////////////////////////////////////// +#if defined(SFML_SYSTEM_WINDOWS) + + typedef UINT_PTR SocketHandle; + +#else + + typedef int SocketHandle; + +#endif + +} // namespace sf + + +#endif // SFML_SOCKETHANDLE_HPP diff --git a/include/SFML/Network/SocketSelector.hpp b/include/SFML/Network/SocketSelector.hpp new file mode 100644 index 0000000..414a941 --- /dev/null +++ b/include/SFML/Network/SocketSelector.hpp @@ -0,0 +1,263 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SOCKETSELECTOR_HPP +#define SFML_SOCKETSELECTOR_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +class Socket; + +//////////////////////////////////////////////////////////// +/// \brief Multiplexer that allows to read from multiple sockets +/// +//////////////////////////////////////////////////////////// +class SFML_NETWORK_API SocketSelector +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + SocketSelector(); + + //////////////////////////////////////////////////////////// + /// \brief Copy constructor + /// + /// \param copy Instance to copy + /// + //////////////////////////////////////////////////////////// + SocketSelector(const SocketSelector& copy); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + ~SocketSelector(); + + //////////////////////////////////////////////////////////// + /// \brief Add a new socket to the selector + /// + /// This function keeps a weak reference to the socket, + /// so you have to make sure that the socket is not destroyed + /// while it is stored in the selector. + /// This function does nothing if the socket is not valid. + /// + /// \param socket Reference to the socket to add + /// + /// \see remove, clear + /// + //////////////////////////////////////////////////////////// + void add(Socket& socket); + + //////////////////////////////////////////////////////////// + /// \brief Remove a socket from the selector + /// + /// This function doesn't destroy the socket, it simply + /// removes the reference that the selector has to it. + /// + /// \param socket Reference to the socket to remove + /// + /// \see add, clear + /// + //////////////////////////////////////////////////////////// + void remove(Socket& socket); + + //////////////////////////////////////////////////////////// + /// \brief Remove all the sockets stored in the selector + /// + /// This function doesn't destroy any instance, it simply + /// removes all the references that the selector has to + /// external sockets. + /// + /// \see add, remove + /// + //////////////////////////////////////////////////////////// + void clear(); + + //////////////////////////////////////////////////////////// + /// \brief Wait until one or more sockets are ready to receive + /// + /// This function returns as soon as at least one socket has + /// some data available to be received. To know which sockets are + /// ready, use the isReady function. + /// If you use a timeout and no socket is ready before the timeout + /// is over, the function returns false. + /// + /// \param timeout Maximum time to wait, (use Time::Zero for infinity) + /// + /// \return True if there are sockets ready, false otherwise + /// + /// \see isReady + /// + //////////////////////////////////////////////////////////// + bool wait(Time timeout = Time::Zero); + + //////////////////////////////////////////////////////////// + /// \brief Test a socket to know if it is ready to receive data + /// + /// This function must be used after a call to Wait, to know + /// which sockets are ready to receive data. If a socket is + /// ready, a call to receive will never block because we know + /// that there is data available to read. + /// Note that if this function returns true for a TcpListener, + /// this means that it is ready to accept a new connection. + /// + /// \param socket Socket to test + /// + /// \return True if the socket is ready to read, false otherwise + /// + /// \see isReady + /// + //////////////////////////////////////////////////////////// + bool isReady(Socket& socket) const; + + //////////////////////////////////////////////////////////// + /// \brief Overload of assignment operator + /// + /// \param right Instance to assign + /// + /// \return Reference to self + /// + //////////////////////////////////////////////////////////// + SocketSelector& operator =(const SocketSelector& right); + +private : + + struct SocketSelectorImpl; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + SocketSelectorImpl* m_impl; ///< Opaque pointer to the implementation (which requires OS-specific types) +}; + +} // namespace sf + + +#endif // SFML_SOCKETSELECTOR_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::SocketSelector +/// \ingroup network +/// +/// Socket selectors provide a way to wait until some data is +/// available on a set of sockets, instead of just one. This +/// is convenient when you have multiple sockets that may +/// possibly receive data, but you don't know which one will +/// be ready first. In particular, it avoids to use a thread +/// for each socket; with selectors, a single thread can handle +/// all the sockets. +/// +/// All types of sockets can be used in a selector: +/// \li sf::TcpListener +/// \li sf::TcpSocket +/// \li sf::UdpSocket +/// +/// A selector doesn't store its own copies of the sockets +/// (socket classes are not copyable anyway), it simply keeps +/// a reference to the original sockets that you pass to the +/// "add" function. Therefore, you can't use the selector as a +/// socket container, you must store them oustide and make sure +/// that they are alive as long as they are used in the selector. +/// +/// Using a selector is simple: +/// \li populate the selector with all the sockets that you want to observe +/// \li make it wait until there is data available on any of the sockets +/// \li test each socket to find out which ones are ready +/// +/// Usage example: +/// \code +/// // Create a socket to listen to new connections +/// sf::TcpListener listener; +/// listener.listen(55001); +/// +/// // Create a list to store the future clients +/// std::list clients; +/// +/// // Create a selector +/// sf::SocketSelector selector; +/// +/// // Add the listener to the selector +/// selector.add(listener); +/// +/// // Endless loop that waits for new connections +/// while (running) +/// { +/// // Make the selector wait for data on any socket +/// if (selector.wait()) +/// { +/// // Test the listener +/// if (selector.isReady(listener)) +/// { +/// // The listener is ready: there is a pending connection +/// sf::TcpSocket* client = new sf::TcpSocket; +/// if (listener.accept(*client) == sf::Socket::Done) +/// { +/// // Add the new client to the clients list +/// clients.push_back(client); +/// +/// // Add the new client to the selector so that we will +/// // be notified when he sends something +/// selector.add(*client); +/// } +/// else +/// { +/// // Error, we won't get a new connection, delete the socket +/// delete client; +/// } +/// } +/// else +/// { +/// // The listener socket is not ready, test all other sockets (the clients) +/// for (std::list::iterator it = clients.begin(); it != clients.end(); ++it) +/// { +/// sf::TcpSocket& client = **it; +/// if (selector.isReady(client)) +/// { +/// // The client has sent some data, we can receive it +/// sf::Packet packet; +/// if (client.receive(packet) == sf::Socket::Done) +/// { +/// ... +/// } +/// } +/// } +/// } +/// } +/// } +/// \endcode +/// +/// \see sf::Socket +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Network/TcpListener.hpp b/include/SFML/Network/TcpListener.hpp new file mode 100644 index 0000000..5a5bdb3 --- /dev/null +++ b/include/SFML/Network/TcpListener.hpp @@ -0,0 +1,162 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_TCPLISTENER_HPP +#define SFML_TCPLISTENER_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +class TcpSocket; + +//////////////////////////////////////////////////////////// +/// \brief Socket that listens to new TCP connections +/// +//////////////////////////////////////////////////////////// +class SFML_NETWORK_API TcpListener : public Socket +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + TcpListener(); + + //////////////////////////////////////////////////////////// + /// \brief Get the port to which the socket is bound locally + /// + /// If the socket is not listening to a port, this function + /// returns 0. + /// + /// \return Port to which the socket is bound + /// + /// \see listen + /// + //////////////////////////////////////////////////////////// + unsigned short getLocalPort() const; + + //////////////////////////////////////////////////////////// + /// \brief Start listening for connections + /// + /// This functions makes the socket listen to the specified + /// port, waiting for new connections. + /// If the socket was previously listening to another port, + /// it will be stopped first and bound to the new port. + /// + /// \param port Port to listen for new connections + /// + /// \return Status code + /// + /// \see accept, close + /// + //////////////////////////////////////////////////////////// + Status listen(unsigned short port); + + //////////////////////////////////////////////////////////// + /// \brief Stop listening and close the socket + /// + /// This function gracefully stops the listener. If the + /// socket is not listening, this function has no effect. + /// + /// \see listen + /// + //////////////////////////////////////////////////////////// + void close(); + + //////////////////////////////////////////////////////////// + /// \brief Accept a new connection + /// + /// If the socket is in blocking mode, this function will + /// not return until a connection is actually received. + /// + /// \param socket Socket that will hold the new connection + /// + /// \return Status code + /// + /// \see listen + /// + //////////////////////////////////////////////////////////// + Status accept(TcpSocket& socket); +}; + + +} // namespace sf + + +#endif // SFML_TCPLISTENER_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::TcpListener +/// \ingroup network +/// +/// A listener socket is a special type of socket that listens to +/// a given port and waits for connections on that port. +/// This is all it can do. +/// +/// When a new connection is received, you must call accept and +/// the listener returns a new instance of sf::TcpSocket that +/// is properly initialized and can be used to communicate with +/// the new client. +/// +/// Listener sockets are specific to the TCP protocol, +/// UDP sockets are connectionless and can therefore communicate +/// directly. As a consequence, a listener socket will always +/// return the new connections as sf::TcpSocket instances. +/// +/// A listener is automatically closed on destruction, like all +/// other types of socket. However if you want to stop listening +/// before the socket is destroyed, you can call its close() +/// function. +/// +/// Usage example: +/// \code +/// // Create a listener socket and make it wait for new +/// // connections on port 55001 +/// sf::TcpListener listener; +/// listener.listen(55001); +/// +/// // Endless loop that waits for new connections +/// while (running) +/// { +/// sf::TcpSocket client; +/// if (listener.accept(client) == sf::Socket::Done) +/// { +/// // A new client just connected! +/// std::cout << "New connection received from " << client.getRemoteAddress() << std::endl; +/// doSomethingWith(client); +/// } +/// } +/// \endcode +/// +/// \see sf::TcpSocket, sf::Socket +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Network/TcpSocket.hpp b/include/SFML/Network/TcpSocket.hpp new file mode 100644 index 0000000..2db2b72 --- /dev/null +++ b/include/SFML/Network/TcpSocket.hpp @@ -0,0 +1,292 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_TCPSOCKET_HPP +#define SFML_TCPSOCKET_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +class TcpListener; +class IpAddress; +class Packet; + +//////////////////////////////////////////////////////////// +/// \brief Specialized socket using the TCP protocol +/// +//////////////////////////////////////////////////////////// +class SFML_NETWORK_API TcpSocket : public Socket +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + TcpSocket(); + + //////////////////////////////////////////////////////////// + /// \brief Get the port to which the socket is bound locally + /// + /// If the socket is not connected, this function returns 0. + /// + /// \return Port to which the socket is bound + /// + /// \see connect, getRemotePort + /// + //////////////////////////////////////////////////////////// + unsigned short getLocalPort() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the address of the connected peer + /// + /// It the socket is not connected, this function returns + /// sf::IpAddress::None. + /// + /// \return Address of the remote peer + /// + /// \see getRemotePort + /// + //////////////////////////////////////////////////////////// + IpAddress getRemoteAddress() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the port of the connected peer to which + /// the socket is connected + /// + /// If the socket is not connected, this function returns 0. + /// + /// \return Remote port to which the socket is connected + /// + /// \see getRemoteAddress + /// + //////////////////////////////////////////////////////////// + unsigned short getRemotePort() const; + + //////////////////////////////////////////////////////////// + /// \brief Connect the socket to a remote peer + /// + /// In blocking mode, this function may take a while, especially + /// if the remote peer is not reachable. The last parameter allows + /// you to stop trying to connect after a given timeout. + /// If the socket was previously connected, it is first disconnected. + /// + /// \param remoteAddress Address of the remote peer + /// \param remotePort Port of the remote peer + /// \param timeout Optional maximum time to wait + /// + /// \return Status code + /// + /// \see disconnect + /// + //////////////////////////////////////////////////////////// + Status connect(const IpAddress& remoteAddress, unsigned short remotePort, Time timeout = Time::Zero); + + //////////////////////////////////////////////////////////// + /// \brief Disconnect the socket from its remote peer + /// + /// This function gracefully closes the connection. If the + /// socket is not connected, this function has no effect. + /// + /// \see connect + /// + //////////////////////////////////////////////////////////// + void disconnect(); + + //////////////////////////////////////////////////////////// + /// \brief Send raw data to the remote peer + /// + /// This function will fail if the socket is not connected. + /// + /// \param data Pointer to the sequence of bytes to send + /// \param size Number of bytes to send + /// + /// \return Status code + /// + /// \see receive + /// + //////////////////////////////////////////////////////////// + Status send(const void* data, std::size_t size); + + //////////////////////////////////////////////////////////// + /// \brief Receive raw data from the remote peer + /// + /// In blocking mode, this function will wait until some + /// bytes are actually received. + /// This function will fail if the socket is not connected. + /// + /// \param data Pointer to the array to fill with the received bytes + /// \param size Maximum number of bytes that can be received + /// \param received This variable is filled with the actual number of bytes received + /// + /// \return Status code + /// + /// \see send + /// + //////////////////////////////////////////////////////////// + Status receive(void* data, std::size_t size, std::size_t& received); + + //////////////////////////////////////////////////////////// + /// \brief Send a formatted packet of data to the remote peer + /// + /// This function will fail if the socket is not connected. + /// + /// \param packet Packet to send + /// + /// \return Status code + /// + /// \see receive + /// + //////////////////////////////////////////////////////////// + Status send(Packet& packet); + + //////////////////////////////////////////////////////////// + /// \brief Receive a formatted packet of data from the remote peer + /// + /// In blocking mode, this function will wait until the whole packet + /// has been received. + /// This function will fail if the socket is not connected. + /// + /// \param packet Packet to fill with the received data + /// + /// \return Status code + /// + /// \see send + /// + //////////////////////////////////////////////////////////// + Status receive(Packet& packet); + +private: + + friend class TcpListener; + + //////////////////////////////////////////////////////////// + /// \brief Structure holding the data of a pending packet + /// + //////////////////////////////////////////////////////////// + struct PendingPacket + { + PendingPacket(); + + Uint32 Size; ///< Data of packet size + std::size_t SizeReceived; ///< Number of size bytes received so far + std::vector Data; ///< Data of the packet + }; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + PendingPacket m_pendingPacket; ///< Temporary data of the packet currently being received +}; + +} // namespace sf + + +#endif // SFML_TCPSOCKET_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::TcpSocket +/// \ingroup network +/// +/// TCP is a connected protocol, which means that a TCP +/// socket can only communicate with the host it is connected +/// to. It can't send or receive anything if it is not connected. +/// +/// The TCP protocol is reliable but adds a slight overhead. +/// It ensures that your data will always be received in order +/// and without errors (no data corrupted, lost or duplicated). +/// +/// When a socket is connected to a remote host, you can +/// retrieve informations about this host with the +/// getRemoteAddress and getRemotePort functions. You can +/// also get the local port to which the socket is bound +/// (which is automatically chosen when the socket is connected), +/// with the getLocalPort function. +/// +/// Sending and receiving data can use either the low-level +/// or the high-level functions. The low-level functions +/// process a raw sequence of bytes, and cannot ensure that +/// one call to Send will exactly match one call to Receive +/// at the other end of the socket. +/// +/// The high-level interface uses packets (see sf::Packet), +/// which are easier to use and provide more safety regarding +/// the data that is exchanged. You can look at the sf::Packet +/// class to get more details about how they work. +/// +/// The socket is automatically disconnected when it is destroyed, +/// but if you want to explicitely close the connection while +/// the socket instance is still alive, you can call disconnect. +/// +/// Usage example: +/// \code +/// // ----- The client ----- +/// +/// // Create a socket and connect it to 192.168.1.50 on port 55001 +/// sf::TcpSocket socket; +/// socket.connect("192.168.1.50", 55001); +/// +/// // Send a message to the connected host +/// std::string message = "Hi, I am a client"; +/// socket.send(message.c_str(), message.size() + 1); +/// +/// // Receive an answer from the server +/// char buffer[1024]; +/// std::size_t received = 0; +/// socket.receive(buffer, sizeof(buffer), received); +/// std::cout << "The server said: " << buffer << std::endl; +/// +/// // ----- The server ----- +/// +/// // Create a listener to wait for incoming connections on port 55001 +/// sf::TcpListener listener; +/// listener.listen(55001); +/// +/// // Wait for a connection +/// sf::TcpSocket socket; +/// listener.accept(socket); +/// std::cout << "New client connected: " << socket.getRemoteAddress() << std::endl; +/// +/// // Receive a message from the client +/// char buffer[1024]; +/// std::size_t received = 0; +/// socket.receive(buffer, sizeof(buffer), received); +/// std::cout << "The client said: " << buffer << std::endl; +/// +/// // Send an answer +/// std::string message = "Welcome, client"; +/// socket.send(message.c_str(), message.size() + 1); +/// \endcode +/// +/// \see sf::Socket, sf::UdpSocket, sf::Packet +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Network/UdpSocket.hpp b/include/SFML/Network/UdpSocket.hpp new file mode 100644 index 0000000..e5fa3b0 --- /dev/null +++ b/include/SFML/Network/UdpSocket.hpp @@ -0,0 +1,283 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_UDPSOCKET_HPP +#define SFML_UDPSOCKET_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +class IpAddress; +class Packet; + +//////////////////////////////////////////////////////////// +/// \brief Specialized socket using the UDP protocol +/// +//////////////////////////////////////////////////////////// +class SFML_NETWORK_API UdpSocket : public Socket +{ +public : + + //////////////////////////////////////////////////////////// + // Constants + //////////////////////////////////////////////////////////// + enum + { + MaxDatagramSize = 65507 ///< The maximum number of bytes that can be sent in a single UDP datagram + }; + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + UdpSocket(); + + //////////////////////////////////////////////////////////// + /// \brief Get the port to which the socket is bound locally + /// + /// If the socket is not bound to a port, this function + /// returns 0. + /// + /// \return Port to which the socket is bound + /// + /// \see bind + /// + //////////////////////////////////////////////////////////// + unsigned short getLocalPort() const; + + //////////////////////////////////////////////////////////// + /// \brief Bind the socket to a specific port + /// + /// Binding the socket to a port is necessary for being + /// able to receive data on that port. + /// You can use the special value Socket::AnyPort to tell the + /// system to automatically pick an available port, and then + /// call getLocalPort to retrieve the chosen port. + /// + /// \param port Port to bind the socket to + /// + /// \return Status code + /// + /// \see unbind, getLocalPort + /// + //////////////////////////////////////////////////////////// + Status bind(unsigned short port); + + //////////////////////////////////////////////////////////// + /// \brief Unbind the socket from the local port to which it is bound + /// + /// The port that the socket was previously using is immediately + /// available after this function is called. If the + /// socket is not bound to a port, this function has no effect. + /// + /// \see bind + /// + //////////////////////////////////////////////////////////// + void unbind(); + + //////////////////////////////////////////////////////////// + /// \brief Send raw data to a remote peer + /// + /// Make sure that \a size is not greater than + /// UdpSocket::MaxDatagramSize, otherwise this function will + /// fail and no data will be sent. + /// + /// \param data Pointer to the sequence of bytes to send + /// \param size Number of bytes to send + /// \param remoteAddress Address of the receiver + /// \param remotePort Port of the receiver to send the data to + /// + /// \return Status code + /// + /// \see receive + /// + //////////////////////////////////////////////////////////// + Status send(const void* data, std::size_t size, const IpAddress& remoteAddress, unsigned short remotePort); + + //////////////////////////////////////////////////////////// + /// \brief Receive raw data from a remote peer + /// + /// In blocking mode, this function will wait until some + /// bytes are actually received. + /// Be careful to use a buffer which is large enough for + /// the data that you intend to receive, if it is too small + /// then an error will be returned and *all* the data will + /// be lost. + /// + /// \param data Pointer to the array to fill with the received bytes + /// \param size Maximum number of bytes that can be received + /// \param received This variable is filled with the actual number of bytes received + /// \param remoteAddress Address of the peer that sent the data + /// \param remotePort Port of the peer that sent the data + /// + /// \return Status code + /// + /// \see send + /// + //////////////////////////////////////////////////////////// + Status receive(void* data, std::size_t size, std::size_t& received, IpAddress& remoteAddress, unsigned short& remotePort); + + //////////////////////////////////////////////////////////// + /// \brief Send a formatted packet of data to a remote peer + /// + /// Make sure that the packet size is not greater than + /// UdpSocket::MaxDatagramSize, otherwise this function will + /// fail and no data will be sent. + /// + /// \param packet Packet to send + /// \param remoteAddress Address of the receiver + /// \param remotePort Port of the receiver to send the data to + /// + /// \return Status code + /// + /// \see receive + /// + //////////////////////////////////////////////////////////// + Status send(Packet& packet, const IpAddress& remoteAddress, unsigned short remotePort); + + //////////////////////////////////////////////////////////// + /// \brief Receive a formatted packet of data from a remote peer + /// + /// In blocking mode, this function will wait until the whole packet + /// has been received. + /// + /// \param packet Packet to fill with the received data + /// \param remoteAddress Address of the peer that sent the data + /// \param remotePort Port of the peer that sent the data + /// + /// \return Status code + /// + /// \see send + /// + //////////////////////////////////////////////////////////// + Status receive(Packet& packet, IpAddress& remoteAddress, unsigned short& remotePort); + +private: + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + std::vector m_buffer; ///< Temporary buffer holding the received data in Receive(Packet) +}; + +} // namespace sf + + +#endif // SFML_UDPSOCKET_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::UdpSocket +/// \ingroup network +/// +/// A UDP socket is a connectionless socket. Instead of +/// connecting once to a remote host, like TCP sockets, +/// it can send to and receive from any host at any time. +/// +/// It is a datagram protocol: bounded blocks of data (datagrams) +/// are transfered over the network rather than a continuous +/// stream of data (TCP). Therefore, one call to send will always +/// match one call to receive (if the datagram is not lost), +/// with the same data that was sent. +/// +/// The UDP protocol is lightweight but unreliable. Unreliable +/// means that datagrams may be duplicated, be lost or +/// arrive reordered. However, if a datagram arrives, its +/// data is guaranteed to be valid. +/// +/// UDP is generally used for real-time communication +/// (audio or video streaming, real-time games, etc.) where +/// speed is crucial and lost data doesn't matter much. +/// +/// Sending and receiving data can use either the low-level +/// or the high-level functions. The low-level functions +/// process a raw sequence of bytes, whereas the high-level +/// interface uses packets (see sf::Packet), which are easier +/// to use and provide more safety regarding the data that is +/// exchanged. You can look at the sf::Packet class to get +/// more details about how they work. +/// +/// It is important to note that UdpSocket is unable to send +/// datagrams bigger than MaxDatagramSize. In this case, it +/// returns an error and doesn't send anything. This applies +/// to both raw data and packets. Indeed, even packets are +/// unable to split and recompose data, due to the unreliability +/// of the protocol (dropped, mixed or duplicated datagrams may +/// lead to a big mess when trying to recompose a packet). +/// +/// If the socket is bound to a port, it is automatically +/// unbound from it when the socket is destroyed. However, +/// you can unbind the socket explicitely with the Unbind +/// function if necessary, to stop receiving messages or +/// make the port available for other sockets. +/// +/// Usage example: +/// \code +/// // ----- The client ----- +/// +/// // Create a socket and bind it to the port 55001 +/// sf::UdpSocket socket; +/// socket.bind(55001); +/// +/// // Send a message to 192.168.1.50 on port 55002 +/// std::string message = "Hi, I am " + sf::IpAddress::getLocalAddress().toString(); +/// socket.send(message.c_str(), message.size() + 1, "192.168.1.50", 55002); +/// +/// // Receive an answer (most likely from 192.168.1.50, but could be anyone else) +/// char buffer[1024]; +/// std::size_t received = 0; +/// sf::IpAddress sender; +/// unsigned short port; +/// socket.receive(buffer, sizeof(buffer), received, sender, port); +/// std::cout << sender.ToString() << " said: " << buffer << std::endl; +/// +/// // ----- The server ----- +/// +/// // Create a socket and bind it to the port 55002 +/// sf::UdpSocket socket; +/// socket.bind(55002); +/// +/// // Receive a message from anyone +/// char buffer[1024]; +/// std::size_t received = 0; +/// sf::IpAddress sender; +/// unsigned short port; +/// socket.receive(buffer, sizeof(buffer), received, sender, port); +/// std::cout << sender.ToString() << " said: " << buffer << std::endl; +/// +/// // Send an answer +/// std::string message = "Welcome " + sender.toString(); +/// socket.send(message.c_str(), message.size() + 1, sender, port); +/// \endcode +/// +/// \see sf::Socket, sf::TcpSocket, sf::Packet +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/OpenGL.hpp b/include/SFML/OpenGL.hpp new file mode 100644 index 0000000..3d04603 --- /dev/null +++ b/include/SFML/OpenGL.hpp @@ -0,0 +1,62 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_OPENGL_HPP +#define SFML_OPENGL_HPP + + +//////////////////////////////////////////////////////////// +/// Headers +//////////////////////////////////////////////////////////// +#include + + +//////////////////////////////////////////////////////////// +/// This file just includes the OpenGL (GL and GLU) headers, +/// which have actually different paths on each system +//////////////////////////////////////////////////////////// +#if defined(SFML_SYSTEM_WINDOWS) + + // The Visual C++ version of gl.h uses WINGDIAPI and APIENTRY but doesn't define them + #ifdef _MSC_VER + #include + #endif + + #include + #include + +#elif defined(SFML_SYSTEM_LINUX) || defined(SFML_SYSTEM_FREEBSD) + + #include + #include + +#elif defined(SFML_SYSTEM_MACOS) + + #include + #include + +#endif + + +#endif // SFML_OPENGL_HPP diff --git a/include/SFML/System.hpp b/include/SFML/System.hpp new file mode 100644 index 0000000..9d2166b --- /dev/null +++ b/include/SFML/System.hpp @@ -0,0 +1,56 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SYSTEM_HPP +#define SFML_SYSTEM_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif // SFML_SYSTEM_HPP + +//////////////////////////////////////////////////////////// +/// \defgroup system System module +/// +/// Base module of SFML, defining various utilities. It provides +/// vector classes, unicode strings and conversion functions, +/// threads and mutexes, timing classes. +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/System/Clock.hpp b/include/SFML/System/Clock.hpp new file mode 100644 index 0000000..4ae0f2d --- /dev/null +++ b/include/SFML/System/Clock.hpp @@ -0,0 +1,117 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_CLOCK_HPP +#define SFML_CLOCK_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Utility class that measures the elapsed time +/// +//////////////////////////////////////////////////////////// +class SFML_SYSTEM_API Clock +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// The clock starts automatically after being constructed. + /// + //////////////////////////////////////////////////////////// + Clock(); + + //////////////////////////////////////////////////////////// + /// \brief Get the elapsed time + /// + /// This function returns the time elapsed since the last call + /// to restart() (or the construction of the instance if restart() + /// has not been called). + /// + /// \return Time elapsed + /// + //////////////////////////////////////////////////////////// + Time getElapsedTime() const; + + //////////////////////////////////////////////////////////// + /// \brief Restart the clock + /// + /// This function puts the time counter back to zero. + /// It also returns the time elapsed since the clock was started. + /// + /// \return Time elapsed + /// + //////////////////////////////////////////////////////////// + Time restart(); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Time m_startTime; ///< Time of last reset, in microseconds +}; + +} // namespace sf + + +#endif // SFML_CLOCK_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Clock +/// \ingroup system +/// +/// sf::Clock is a lightweight class for measuring time. +/// +/// Its provides the most precise time that the underlying +/// OS can achieve (generally microseconds or nanoseconds). +/// It also ensures monotonicity, which means that the returned +/// time can never go backward, even if the system time is +/// changed. +/// +/// Usage example: +/// \code +/// sf::Clock clock; +/// ... +/// Time time1 = clock.getElapsedTime(); +/// ... +/// Time time2 = clock.restart(); +/// \endcode +/// +/// The sf::Time value returned by the clock can then be +/// converted to a number of seconds, milliseconds or even +/// microseconds. +/// +/// \see sf::Time +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/System/Err.hpp b/include/SFML/System/Err.hpp new file mode 100644 index 0000000..7903020 --- /dev/null +++ b/include/SFML/System/Err.hpp @@ -0,0 +1,78 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_ERR_HPP +#define SFML_ERR_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Standard stream used by SFML to output warnings and errors +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API std::ostream& err(); + +} // namespace sf + + +#endif // SFML_ERR_HPP + + +//////////////////////////////////////////////////////////// +/// \fn sf::err +/// \ingroup system +/// +/// By default, sf::err() outputs to the same location as std::cerr, +/// (-> the stderr descriptor) which is the console if there's +/// one available. +/// +/// It is a standard std::ostream instance, so it supports all the +/// insertion operations defined by the STL +/// (operator <<, manipulators, etc.). +/// +/// sf::err() can be redirected to write to another output, independantly +/// of std::cerr, by using the rdbuf() function provided by the +/// std::ostream class. +/// +/// Example: +/// \code +/// // Redirect to a file +/// std::ofstream file("sfml-log.txt"); +/// std::streambuf* previous = sf::err().rdbuf(file.rdbuf()); +/// +/// // Redirect to nothing +/// sf::err().rdbuf(NULL); +/// +/// // Restore the original output +/// sf::err().rdbuf(previous); +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/System/Export.hpp b/include/SFML/System/Export.hpp new file mode 100644 index 0000000..ec08fbe --- /dev/null +++ b/include/SFML/System/Export.hpp @@ -0,0 +1,48 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SYSTEM_EXPORT_HPP +#define SFML_SYSTEM_EXPORT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +//////////////////////////////////////////////////////////// +// Define portable import / export macros +//////////////////////////////////////////////////////////// +#if defined(SFML_SYSTEM_EXPORTS) + + #define SFML_SYSTEM_API SFML_API_EXPORT + +#else + + #define SFML_SYSTEM_API SFML_API_IMPORT + +#endif + + +#endif // SFML_SYSTEM_EXPORT_HPP diff --git a/include/SFML/System/InputStream.hpp b/include/SFML/System/InputStream.hpp new file mode 100644 index 0000000..406b2bb --- /dev/null +++ b/include/SFML/System/InputStream.hpp @@ -0,0 +1,148 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_INPUTSTREAM_HPP +#define SFML_INPUTSTREAM_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Abstract class for custom file input streams +/// +//////////////////////////////////////////////////////////// +class InputStream +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Virtual destructor + /// + //////////////////////////////////////////////////////////// + virtual ~InputStream() {} + + //////////////////////////////////////////////////////////// + /// \brief Read data from the stream + /// + /// \param data Buffer where to copy the read data + /// \param size Desired number of bytes to read + /// + /// \return The number of bytes actually read, or -1 on error + /// + //////////////////////////////////////////////////////////// + virtual Int64 read(void* data, Int64 size) = 0; + + //////////////////////////////////////////////////////////// + /// \brief Change the current reading position + /// + /// \param position The position to seek to, from the beginning + /// + /// \return The position actually sought to, or -1 on error + /// + //////////////////////////////////////////////////////////// + virtual Int64 seek(Int64 position) = 0; + + //////////////////////////////////////////////////////////// + /// \brief Get the current reading position in the stream + /// + /// \return The current position, or -1 on error. + /// + //////////////////////////////////////////////////////////// + virtual Int64 tell() = 0; + + //////////////////////////////////////////////////////////// + /// \brief Return the size of the stream + /// + /// \return The total number of bytes available in the stream, or -1 on error + /// + //////////////////////////////////////////////////////////// + virtual Int64 getSize() = 0; +}; + +} // namespace sf + + +#endif // SFML_INPUTSTREAM_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::InputStream +/// \ingroup system +/// +/// This class allows users to define their own file input sources +/// from which SFML can load resources. +/// +/// SFML resource classes like sf::Texture and +/// sf::SoundBuffer provide loadFromFile and loadFromMemory functions, +/// which read data from conventional sources. However, if you +/// have data coming from a different source (over a network, +/// embedded, encrypted, compressed, etc) you can derive your +/// own class from sf::InputStream and load SFML resources with +/// their loadFromStream function. +/// +/// Usage example: +/// \code +/// // custom stream class that reads from inside a zip file +/// class ZipStream : public sf::InputStream +/// { +/// public : +/// +/// ZipStream(std::string archive); +/// +/// bool open(std::string filename); +/// +/// Int64 read(void* data, Int64 size); +/// +/// Int64 seek(Int64 position); +/// +/// Int64 tell(); +/// +/// Int64 getSize(); +/// +/// private : +/// +/// ... +/// }; +/// +/// // now you can load textures... +/// sf::Texture texture; +/// ZipStream stream("resources.zip"); +/// stream.open("images/img.png"); +/// texture.loadFromStream(stream); +/// +/// // musics... +/// sf::Music music; +/// ZipStream stream("resources.zip"); +/// stream.open("musics/msc.ogg"); +/// music.openFromStream(stream); +/// +/// // etc. +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/System/Lock.hpp b/include/SFML/System/Lock.hpp new file mode 100644 index 0000000..09c2a8e --- /dev/null +++ b/include/SFML/System/Lock.hpp @@ -0,0 +1,139 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_LOCK_HPP +#define SFML_LOCK_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +class Mutex; + +//////////////////////////////////////////////////////////// +/// \brief Automatic wrapper for locking and unlocking mutexes +/// +//////////////////////////////////////////////////////////// +class SFML_SYSTEM_API Lock : NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Construct the lock with a target mutex + /// + /// The mutex passed to sf::Lock is automatically locked. + /// + /// \param mutex Mutex to lock + /// + //////////////////////////////////////////////////////////// + explicit Lock(Mutex& mutex); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + /// The destructor of sf::Lock automatically unlocks its mutex. + /// + //////////////////////////////////////////////////////////// + ~Lock(); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Mutex& m_mutex; ///< Mutex to lock / unlock +}; + +} // namespace sf + + +#endif // SFML_LOCK_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Lock +/// \ingroup system +/// +/// sf::Lock is a RAII wrapper for sf::Mutex. By unlocking +/// it in its destructor, it ensures that the mutex will +/// always be released when the current scope (most likely +/// a function) ends. +/// This is even more important when an exception or an early +/// return statement can interrupt the execution flow of the +/// function. +/// +/// For maximum robustness, sf::Lock should always be used +/// to lock/unlock a mutex. +/// +/// Usage example: +/// \code +/// sf::Mutex mutex; +/// +/// void function() +/// { +/// sf::Lock lock(mutex); // mutex is now locked +/// +/// functionThatMayThrowAnException(); // mutex is unlocked if this function throws +/// +/// if (someCondition) +/// return; // mutex is unlocked +/// +/// } // mutex is unlocked +/// \endcode +/// +/// Because the mutex is not explicitely unlocked in the code, +/// it may remain locked longer than needed. If the region +/// of the code that needs to be protected by the mutex is +/// not the entire function, a good practice is to create a +/// smaller, inner scope so that the lock is limited to this +/// part of the code. +/// +/// \code +/// sf::Mutex mutex; +/// +/// void function() +/// { +/// { +/// sf::Lock lock(mutex); +/// codeThatRequiresProtection(); +/// +/// } // mutex is unlocked here +/// +/// codeThatDoesntCareAboutTheMutex(); +/// } +/// \endcode +/// +/// Having a mutex locked longer than required is a bad practice +/// which can lead to bad performances. Don't forget that when +/// a mutex is locked, other threads may be waiting doing nothing +/// until it is released. +/// +/// \see sf::Mutex +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/System/Mutex.hpp b/include/SFML/System/Mutex.hpp new file mode 100644 index 0000000..ac95236 --- /dev/null +++ b/include/SFML/System/Mutex.hpp @@ -0,0 +1,148 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_MUTEX_HPP +#define SFML_MUTEX_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +namespace priv +{ + class MutexImpl; +} + +//////////////////////////////////////////////////////////// +/// \brief Blocks concurrent access to shared resources +/// from multiple threads +/// +//////////////////////////////////////////////////////////// +class SFML_SYSTEM_API Mutex : NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + Mutex(); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + ~Mutex(); + + //////////////////////////////////////////////////////////// + /// \brief Lock the mutex + /// + /// If the mutex is already locked in another thread, + /// this call will block the execution until the mutex + /// is released. + /// + /// \see unlock + /// + //////////////////////////////////////////////////////////// + void lock(); + + //////////////////////////////////////////////////////////// + /// \brief Unlock the mutex + /// + /// \see lock + /// + //////////////////////////////////////////////////////////// + void unlock(); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + priv::MutexImpl* m_mutexImpl; ///< OS-specific implementation +}; + +} // namespace sf + + +#endif // SFML_MUTEX_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Mutex +/// \ingroup system +/// +/// Mutex stands for "MUTual EXclusion". A mutex is a +/// synchronization object, used when multiple threads are involved. +/// +/// When you want to protect a part of the code from being accessed +/// simultaneously by multiple threads, you typically use a +/// mutex. When a thread is locked by a mutex, any other thread +/// trying to lock it will be blocked until the mutex is released +/// by the thread that locked it. This way, you can allow only +/// one thread at a time to access a critical region of your code. +/// +/// Usage example: +/// \code +/// Database database; // this is a critical resource that needs some protection +/// sf::Mutex mutex; +/// +/// void thread1() +/// { +/// mutex.lock(); // this call will block the thread if the mutex is already locked by thread2 +/// database.write(...); +/// mutex.unlock(); // if thread2 was waiting, it will now be unblocked +/// } +/// +/// void thread2() +/// { +/// mutex.lock(); // this call will block the thread if the mutex is already locked by thread1 +/// database.write(...); +/// mutex.unlock(); // if thread1 was waiting, it will now be unblocked +/// } +/// \endcode +/// +/// Be very careful with mutexes. A bad usage can lead to bad problems, +/// like deadlocks (two threads are waiting for each other and the +/// application is globally stuck). +/// +/// To make the usage of mutexes more robust, particularly in +/// environments where exceptions can be thrown, you should +/// use the helper class sf::Lock to lock/unlock mutexes. +/// +/// SFML mutexes are recursive, which means that you can lock +/// a mutex multiple times in the same thread without creating +/// a deadlock. In this case, the first call to lock() behaves +/// as usual, and the following ones have no effect. +/// However, you must call unlock() exactly as many times as you +/// called lock(). If you don't, the mutex won't be released. +/// +/// \see sf::Lock +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/System/NonCopyable.hpp b/include/SFML/System/NonCopyable.hpp new file mode 100644 index 0000000..8c9cdb6 --- /dev/null +++ b/include/SFML/System/NonCopyable.hpp @@ -0,0 +1,119 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_NONCOPYABLE_HPP +#define SFML_NONCOPYABLE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Utility class that makes any derived +/// class non-copyable +/// +//////////////////////////////////////////////////////////// +class SFML_SYSTEM_API NonCopyable +{ +protected : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Because this class has a copy constructor, the compiler + /// will not automatically generate the default constructor. + /// That's why we must define it explicitely. + /// + //////////////////////////////////////////////////////////// + NonCopyable() {} + +private : + + //////////////////////////////////////////////////////////// + /// \brief Disabled copy constructor + /// + /// By making the copy constructor private, the compiler will + /// trigger an error if anyone outside tries to use it. + /// To prevent NonCopyable or friend classes from using it, + /// we also give no definition, so that the linker will + /// produce an error if the first protection was inefficient. + /// + //////////////////////////////////////////////////////////// + NonCopyable(const NonCopyable&); + + //////////////////////////////////////////////////////////// + /// \brief Disabled assignment operator + /// + /// By making the assignment operator private, the compiler will + /// trigger an error if anyone outside tries to use it. + /// To prevent NonCopyable or friend classes from using it, + /// we also give no definition, so that the linker will + /// produce an error if the first protection was inefficient. + /// + //////////////////////////////////////////////////////////// + NonCopyable& operator =(const NonCopyable&); +}; + +} // namespace sf + + +#endif // SFML_NONCOPYABLE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::NonCopyable +/// \ingroup system +/// +/// This class makes its instances non-copyable, by explicitely +/// disabling its copy constructor and its assignment operator. +/// +/// To create a non-copyable class, simply inherit from +/// sf::NonCopyable. +/// +/// The type of inheritance (public or private) doesn't matter, +/// the copy constructor and assignment operator are declared private +/// in sf::NonCopyable so they will end up being inaccessible in both +/// cases. Thus you can use a shorter syntax for inheriting from it +/// (see below). +/// +/// Usage example: +/// \code +/// class MyNonCopyableClass : sf::NonCopyable +/// { +/// ... +/// }; +/// \endcode +/// +/// Deciding whether the instances of a class can be copied +/// or not is a very important design choice. You are strongly +/// encouraged to think about it before writing a class, +/// and to use sf::NonCopyable when necessary to prevent +/// many potential future errors when using it. This is also +/// a very important indication to users of your class. +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/System/Sleep.hpp b/include/SFML/System/Sleep.hpp new file mode 100644 index 0000000..47567a9 --- /dev/null +++ b/include/SFML/System/Sleep.hpp @@ -0,0 +1,52 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SLEEP_HPP +#define SFML_SLEEP_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \ingroup system +/// \brief Make the current thread sleep for a given duration +/// +/// sf::sleep is the best way to block a program or one of its +/// threads, as it doesn't consume any CPU power. +/// +/// \param duration Time to sleep +/// +//////////////////////////////////////////////////////////// +void SFML_SYSTEM_API sleep(Time duration); + +} // namespace sf + + +#endif // SFML_SLEEP_HPP diff --git a/include/SFML/System/String.hpp b/include/SFML/System/String.hpp new file mode 100644 index 0000000..080a809 --- /dev/null +++ b/include/SFML/System/String.hpp @@ -0,0 +1,543 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_STRING_HPP +#define SFML_STRING_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Utility string class that automatically handles +/// conversions between types and encodings +/// +//////////////////////////////////////////////////////////// +class SFML_SYSTEM_API String +{ +public : + + //////////////////////////////////////////////////////////// + // Types + //////////////////////////////////////////////////////////// + typedef std::basic_string::iterator Iterator; ///< Iterator type + typedef std::basic_string::const_iterator ConstIterator; ///< Constant iterator type + + //////////////////////////////////////////////////////////// + // Static member data + //////////////////////////////////////////////////////////// + static const std::size_t InvalidPos; ///< Represents an invalid position in the string + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor creates an empty string. + /// + //////////////////////////////////////////////////////////// + String(); + + //////////////////////////////////////////////////////////// + /// \brief Construct from a single ANSI character and a locale + /// + /// The source character is converted to UTF-32 according + /// to the given locale. + /// + /// \param ansiChar ANSI character to convert + /// \param locale Locale to use for conversion + /// + //////////////////////////////////////////////////////////// + String(char ansiChar, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Construct from single wide character + /// + /// \param wideChar Wide character to convert + /// + //////////////////////////////////////////////////////////// + String(wchar_t wideChar); + + //////////////////////////////////////////////////////////// + /// \brief Construct from single UTF-32 character + /// + /// \param utf32Char UTF-32 character to convert + /// + //////////////////////////////////////////////////////////// + String(Uint32 utf32Char); + + //////////////////////////////////////////////////////////// + /// \brief Construct from a null-terminated C-style ANSI string and a locale + /// + /// The source string is converted to UTF-32 according + /// to the given locale. + /// + /// \param ansiString ANSI string to convert + /// \param locale Locale to use for conversion + /// + //////////////////////////////////////////////////////////// + String(const char* ansiString, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Construct from an ANSI string and a locale + /// + /// The source string is converted to UTF-32 according + /// to the given locale. + /// + /// \param ansiString ANSI string to convert + /// \param locale Locale to use for conversion + /// + //////////////////////////////////////////////////////////// + String(const std::string& ansiString, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Construct from null-terminated C-style wide string + /// + /// \param wideString Wide string to convert + /// + //////////////////////////////////////////////////////////// + String(const wchar_t* wideString); + + //////////////////////////////////////////////////////////// + /// \brief Construct from a wide string + /// + /// \param wideString Wide string to convert + /// + //////////////////////////////////////////////////////////// + String(const std::wstring& wideString); + + //////////////////////////////////////////////////////////// + /// \brief Construct from a null-terminated C-style UTF-32 string + /// + /// \param utf32String UTF-32 string to assign + /// + //////////////////////////////////////////////////////////// + String(const Uint32* utf32String); + + //////////////////////////////////////////////////////////// + /// \brief Construct from an UTF-32 string + /// + /// \param utf32String UTF-32 string to assign + /// + //////////////////////////////////////////////////////////// + String(const std::basic_string& utf32String); + + //////////////////////////////////////////////////////////// + /// \brief Copy constructor + /// + /// \param copy Instance to copy + /// + //////////////////////////////////////////////////////////// + String(const String& copy); + + //////////////////////////////////////////////////////////// + /// \brief Implicit cast operator to std::string (ANSI string) + /// + /// The current global locale is used for conversion. If you + /// want to explicitely specify a locale, see toAnsiString. + /// Characters that do not fit in the target encoding are + /// discarded from the returned string. + /// This operator is defined for convenience, and is equivalent + /// to calling toAnsiString(). + /// + /// \return Converted ANSI string + /// + /// \see toAnsiString, operator std::wstring + /// + //////////////////////////////////////////////////////////// + operator std::string() const; + + //////////////////////////////////////////////////////////// + /// \brief Implicit cast operator to std::wstring (wide string) + /// + /// Characters that do not fit in the target encoding are + /// discarded from the returned string. + /// This operator is defined for convenience, and is equivalent + /// to calling toWideString(). + /// + /// \return Converted wide string + /// + /// \see toWideString, operator std::string + /// + //////////////////////////////////////////////////////////// + operator std::wstring() const; + + //////////////////////////////////////////////////////////// + /// \brief Convert the unicode string to an ANSI string + /// + /// The UTF-32 string is converted to an ANSI string in + /// the encoding defined by \a locale. + /// Characters that do not fit in the target encoding are + /// discarded from the returned string. + /// + /// \param locale Locale to use for conversion + /// + /// \return Converted ANSI string + /// + /// \see toWideString, operator std::string + /// + //////////////////////////////////////////////////////////// + std::string toAnsiString(const std::locale& locale = std::locale()) const; + + //////////////////////////////////////////////////////////// + /// \brief Convert the unicode string to a wide string + /// + /// Characters that do not fit in the target encoding are + /// discarded from the returned string. + /// + /// \return Converted wide string + /// + /// \see toAnsiString, operator std::wstring + /// + //////////////////////////////////////////////////////////// + std::wstring toWideString() const; + + //////////////////////////////////////////////////////////// + /// \brief Overload of assignment operator + /// + /// \param right Instance to assign + /// + /// \return Reference to self + /// + //////////////////////////////////////////////////////////// + String& operator =(const String& right); + + //////////////////////////////////////////////////////////// + /// \brief Overload of += operator to append an UTF-32 string + /// + /// \param right String to append + /// + /// \return Reference to self + /// + //////////////////////////////////////////////////////////// + String& operator +=(const String& right); + + //////////////////////////////////////////////////////////// + /// \brief Overload of [] operator to access a character by its position + /// + /// This function provides read-only access to characters. + /// Note: this function doesn't throw if \a index is out of range. + /// + /// \param index Index of the character to get + /// + /// \return Character at position \a index + /// + //////////////////////////////////////////////////////////// + Uint32 operator [](std::size_t index) const; + + //////////////////////////////////////////////////////////// + /// \brief Overload of [] operator to access a character by its position + /// + /// This function provides read and write access to characters. + /// Note: this function doesn't throw if \a index is out of range. + /// + /// \param index Index of the character to get + /// + /// \return Reference to the character at position \a index + /// + //////////////////////////////////////////////////////////// + Uint32& operator [](std::size_t index); + + //////////////////////////////////////////////////////////// + /// \brief Clear the string + /// + /// This function removes all the characters from the string. + /// + /// \see isEmpty, erase + /// + //////////////////////////////////////////////////////////// + void clear(); + + //////////////////////////////////////////////////////////// + /// \brief Get the size of the string + /// + /// \return Number of characters in the string + /// + /// \see isEmpty + /// + //////////////////////////////////////////////////////////// + std::size_t getSize() const; + + //////////////////////////////////////////////////////////// + /// \brief Check whether the string is empty or not + /// + /// \return True if the string is empty (i.e. contains no character) + /// + /// \see clear, getSize + /// + //////////////////////////////////////////////////////////// + bool isEmpty() const; + + //////////////////////////////////////////////////////////// + /// \brief Erase one or more characters from the string + /// + /// This function removes a sequence of \a count characters + /// starting from \a position. + /// + /// \param position Position of the first character to erase + /// \param count Number of characters to erase + /// + //////////////////////////////////////////////////////////// + void erase(std::size_t position, std::size_t count = 1); + + //////////////////////////////////////////////////////////// + /// \brief Insert one or more characters into the string + /// + /// This function inserts the characters of \a str + /// into the string, starting from \a position. + /// + /// \param position Position of insertion + /// \param str Characters to insert + /// + //////////////////////////////////////////////////////////// + void insert(std::size_t position, const String& str); + + //////////////////////////////////////////////////////////// + /// \brief Find a sequence of one or more characters in the string + /// + /// This function searches for the characters of \a str + /// into the string, starting from \a start. + /// + /// \param str Characters to find + /// \param start Where to begin searching + /// + /// \return Position of \a str in the string, or String::InvalidPos if not found + /// + //////////////////////////////////////////////////////////// + std::size_t find(const String& str, std::size_t start = 0) const; + + //////////////////////////////////////////////////////////// + /// \brief Get a pointer to the C-style array of characters + /// + /// This functions provides a read-only access to a + /// null-terminated C-style representation of the string. + /// The returned pointer is temporary and is meant only for + /// immediate use, thus it is not recommended to store it. + /// + /// \return Read-only pointer to the array of characters + /// + //////////////////////////////////////////////////////////// + const Uint32* getData() const; + + //////////////////////////////////////////////////////////// + /// \brief Return an iterator to the beginning of the string + /// + /// \return Read-write iterator to the beginning of the string characters + /// + /// \see end + /// + //////////////////////////////////////////////////////////// + Iterator begin(); + + //////////////////////////////////////////////////////////// + /// \brief Return an iterator to the beginning of the string + /// + /// \return Read-only iterator to the beginning of the string characters + /// + /// \see end + /// + //////////////////////////////////////////////////////////// + ConstIterator begin() const; + + //////////////////////////////////////////////////////////// + /// \brief Return an iterator to the beginning of the string + /// + /// The end iterator refers to 1 position past the last character; + /// thus it represents an invalid character and should never be + /// accessed. + /// + /// \return Read-write iterator to the end of the string characters + /// + /// \see begin + /// + //////////////////////////////////////////////////////////// + Iterator end(); + + //////////////////////////////////////////////////////////// + /// \brief Return an iterator to the beginning of the string + /// + /// The end iterator refers to 1 position past the last character; + /// thus it represents an invalid character and should never be + /// accessed. + /// + /// \return Read-only iterator to the end of the string characters + /// + /// \see begin + /// + //////////////////////////////////////////////////////////// + ConstIterator end() const; + +private : + + friend SFML_SYSTEM_API bool operator ==(const String& left, const String& right); + friend SFML_SYSTEM_API bool operator <(const String& left, const String& right); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + std::basic_string m_string; ///< Internal string of UTF-32 characters +}; + +//////////////////////////////////////////////////////////// +/// \relates String +/// \brief Overload of == operator to compare two UTF-32 strings +/// +/// \param left Left operand (a string) +/// \param right Right operand (a string) +/// +/// \return True if both strings are equal +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator ==(const String& left, const String& right); + +//////////////////////////////////////////////////////////// +/// \relates String +/// \brief Overload of != operator to compare two UTF-32 strings +/// +/// \param left Left operand (a string) +/// \param right Right operand (a string) +/// +/// \return True if both strings are different +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator !=(const String& left, const String& right); + +//////////////////////////////////////////////////////////// +/// \relates String +/// \brief Overload of < operator to compare two UTF-32 strings +/// +/// \param left Left operand (a string) +/// \param right Right operand (a string) +/// +/// \return True if \a left is alphabetically lesser than \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator <(const String& left, const String& right); + +//////////////////////////////////////////////////////////// +/// \relates String +/// \brief Overload of > operator to compare two UTF-32 strings +/// +/// \param left Left operand (a string) +/// \param right Right operand (a string) +/// +/// \return True if \a left is alphabetically greater than \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator >(const String& left, const String& right); + +//////////////////////////////////////////////////////////// +/// \relates String +/// \brief Overload of <= operator to compare two UTF-32 strings +/// +/// \param left Left operand (a string) +/// \param right Right operand (a string) +/// +/// \return True if \a left is alphabetically lesser or equal than \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator <=(const String& left, const String& right); + +//////////////////////////////////////////////////////////// +/// \relates String +/// \brief Overload of >= operator to compare two UTF-32 strings +/// +/// \param left Left operand (a string) +/// \param right Right operand (a string) +/// +/// \return True if \a left is alphabetically greater or equal than \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator >=(const String& left, const String& right); + +//////////////////////////////////////////////////////////// +/// \relates String +/// \brief Overload of binary + operator to concatenate two strings +/// +/// \param left Left operand (a string) +/// \param right Right operand (a string) +/// +/// \return Concatenated string +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API String operator +(const String& left, const String& right); + +} // namespace sf + + +#endif // SFML_STRING_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::String +/// \ingroup system +/// +/// sf::String is a utility string class defined mainly for +/// convenience. It is a Unicode string (implemented using +/// UTF-32), thus it can store any character in the world +/// (european, chinese, arabic, hebrew, etc.). +/// +/// It automatically handles conversions from/to ANSI and +/// wide strings, so that you can work with standard string +/// classes and still be compatible with functions taking a +/// sf::String. +/// +/// \code +/// sf::String s; +/// +/// std::string s1 = s; // automatically converted to ANSI string +/// std::wstring s2 = s; // automatically converted to wide string +/// s = "hello"; // automatically converted from ANSI string +/// s = L"hello"; // automatically converted from wide string +/// s += 'a'; // automatically converted from ANSI string +/// s += L'a'; // automatically converted from wide string +/// \endcode +/// +/// Conversions involving ANSI strings use the default user locale. However +/// it is possible to use a custom locale if necessary: +/// \code +/// std::locale locale; +/// sf::String s; +/// ... +/// std::string s1 = s.toAnsiString(locale); +/// s = sf::String("hello", locale); +/// \endcode +/// +/// sf::String defines the most important functions of the +/// standard std::string class: removing, random access, iterating, +/// appending, comparing, etc. However it is a simple class +/// provided for convenience, and you may have to consider using +/// a more optimized class if your program requires complex string +/// handling. The automatic conversion functions will then take +/// care of converting your string to sf::String whenever SFML +/// requires it. +/// +/// Please note that SFML also defines a low-level, generic +/// interface for Unicode handling, see the sf::Utf classes. +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/System/Thread.hpp b/include/SFML/System/Thread.hpp new file mode 100644 index 0000000..8313646 --- /dev/null +++ b/include/SFML/System/Thread.hpp @@ -0,0 +1,282 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_THREAD_HPP +#define SFML_THREAD_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +namespace priv +{ + class ThreadImpl; + struct ThreadFunc; +} + +//////////////////////////////////////////////////////////// +/// \brief Utility class to manipulate threads +/// +//////////////////////////////////////////////////////////// +class SFML_SYSTEM_API Thread : NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Construct the thread from a functor with no argument + /// + /// This constructor works for function objects, as well + /// as free function. + /// + /// Use this constructor for this kind of function: + /// \code + /// void function(); + /// + /// // --- or ---- + /// + /// struct Functor + /// { + /// void operator()(); + /// }; + /// \endcode + /// Note: this does *not* run the thread, use Launch(). + /// + /// \param function Functor or free function to use as the entry point of the thread + /// + //////////////////////////////////////////////////////////// + template + Thread(F function); + + //////////////////////////////////////////////////////////// + /// \brief Construct the thread from a functor with an argument + /// + /// This constructor works for function objects, as well + /// as free function. + /// It is a template, which means that the argument can + /// have any type (int, std::string, void*, Toto, ...). + /// + /// Use this constructor for this kind of function: + /// \code + /// void function(int arg); + /// + /// // --- or ---- + /// + /// struct Functor + /// { + /// void operator()(std::string arg); + /// }; + /// \endcode + /// Note: this does *not* run the thread, use Launch(). + /// + /// \param function Functor or free function to use as the entry point of the thread + /// \param argument argument to forward to the function + /// + //////////////////////////////////////////////////////////// + template + Thread(F function, A argument); + + //////////////////////////////////////////////////////////// + /// \brief Construct the thread from a member function and an object + /// + /// This constructor is template, which means that you can + /// use it with any class. + /// Use this constructor for this kind of function: + /// \code + /// class MyClass + /// { + /// public : + /// + /// void function(); + /// }; + /// \endcode + /// Note: this does *not* run the thread, use Launch(). + /// + /// \param function Entry point of the thread + /// \param object Pointer to the object to use + /// + //////////////////////////////////////////////////////////// + template + Thread(void(C::*function)(), C* object); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + /// This destructor calls Wait(), so that the internal thread + /// cannot survive after its sf::Thread instance is destroyed. + /// + //////////////////////////////////////////////////////////// + ~Thread(); + + //////////////////////////////////////////////////////////// + /// \brief Run the thread + /// + /// This function starts the entry point passed to the + /// thread's constructor, and returns immediately. + /// After this function returns, the thread's function is + /// running in parallel to the calling code. + /// + //////////////////////////////////////////////////////////// + void launch(); + + //////////////////////////////////////////////////////////// + /// \brief Wait until the thread finishes + /// + /// This function will block the execution until the + /// thread's function ends. + /// Warning: if the thread function never ends, the calling + /// thread will block forever. + /// If this function is called from its owner thread, it + /// returns without doing anything. + /// + //////////////////////////////////////////////////////////// + void wait(); + + //////////////////////////////////////////////////////////// + /// \brief Terminate the thread + /// + /// This function immediately stops the thread, without waiting + /// for its function to finish. + /// Terminating a thread with this function is not safe, + /// and can lead to local variables not being destroyed + /// on some operating systems. You should rather try to make + /// the thread function terminate by itself. + /// + //////////////////////////////////////////////////////////// + void terminate(); + +private : + + friend class priv::ThreadImpl; + + //////////////////////////////////////////////////////////// + /// \brief Internal entry point of the thread + /// + /// This function is called by the thread implementation. + /// + //////////////////////////////////////////////////////////// + void run(); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + priv::ThreadImpl* m_impl; ///< OS-specific implementation of the thread + priv::ThreadFunc* m_entryPoint; ///< Abstraction of the function to run +}; + +#include + +} // namespace sf + +#endif // SFML_THREAD_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Thread +/// \ingroup system +/// +/// Threads provide a way to run multiple parts of the code +/// in parallel. When you launch a new thread, the execution +/// is split and both the new thread and the caller run +/// in parallel. +/// +/// To use a sf::Thread, you construct it directly with the +/// function to execute as the entry point of the thread. +/// sf::Thread has multiple template constructors, which means +/// that you can use several types of entry points: +/// \li non-member functions with no argument +/// \li non-member functions with one argument of any type +/// \li functors with no argument (this one is particularly useful for compatibility with boost/std::bind) +/// \li functors with one argument of any type +/// \li member functions from any class with no argument +/// +/// The function argument, if any, is copied in the sf::Thread +/// instance, as well as the functor (if the corresponding +/// constructor is used). Class instances, however, are passed +/// by pointer so you must make sure that the object won't be +/// destroyed while the thread is still using it. +/// +/// The thread ends when its function is terminated. If the +/// owner sf::Thread instance is destroyed before the +/// thread is finished, the destructor will wait (see wait()) +/// +/// Usage examples: +/// \code +/// // example 1: non member function with one argument +/// +/// void threadFunc(int argument) +/// { +/// ... +/// } +/// +/// sf::Thread thread(&threadFunc, 5); +/// thread.launch(); // start the thread (internally calls threadFunc(5)) +/// \endcode +/// +/// \code +/// // example 2: member function +/// +/// class Task +/// { +/// public : +/// void run() +/// { +/// ... +/// } +/// }; +/// +/// Task task; +/// sf::Thread thread(&Task::run, &task); +/// thread.launch(); // start the thread (internally calls task.run()) +/// \endcode +/// +/// \code +/// // example 3: functor +/// +/// struct Task +/// { +/// void operator()() +/// { +/// ... +/// } +/// }; +/// +/// sf::Thread thread(Task()); +/// thread.launch(); // start the thread (internally calls operator() on the Task instance) +/// \endcode +/// +/// Creating parallel threads of execution can be dangerous: +/// all threads inside the same process share the same memory space, +/// which means that you may end up accessing the same variable +/// from multiple threads at the same time. To prevent this +/// kind of situations, you can use mutexes (see sf::Mutex). +/// +/// \see sf::Mutex +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/System/Thread.inl b/include/SFML/System/Thread.inl new file mode 100644 index 0000000..126228a --- /dev/null +++ b/include/SFML/System/Thread.inl @@ -0,0 +1,90 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2012 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +namespace priv +{ +// Base class for abstract thread functions +struct ThreadFunc +{ + virtual ~ThreadFunc() {} + virtual void run() = 0; +}; + +// Specialization using a functor (including free functions) with no argument +template +struct ThreadFunctor : ThreadFunc +{ + ThreadFunctor(T functor) : m_functor(functor) {} + virtual void run() {m_functor();} + T m_functor; +}; + +// Specialization using a functor (including free functions) with one argument +template +struct ThreadFunctorWithArg : ThreadFunc +{ + ThreadFunctorWithArg(F function, A arg) : m_function(function), m_arg(arg) {} + virtual void run() {m_function(m_arg);} + F m_function; + A m_arg; +}; + +// Specialization using a member function +template +struct ThreadMemberFunc : ThreadFunc +{ + ThreadMemberFunc(void(C::*function)(), C* object) : m_function(function), m_object(object) {} + virtual void run() {(m_object->*m_function)();} + void(C::*m_function)(); + C* m_object; +}; + +} // namespace priv + + +//////////////////////////////////////////////////////////// +template +Thread::Thread(F functor) : +m_impl (NULL), +m_entryPoint(new priv::ThreadFunctor(functor)) +{ +} + + +//////////////////////////////////////////////////////////// +template +Thread::Thread(F function, A argument) : +m_impl (NULL), +m_entryPoint(new priv::ThreadFunctorWithArg(function, argument)) +{ +} + + +//////////////////////////////////////////////////////////// +template +Thread::Thread(void(C::*function)(), C* object) : +m_impl (NULL), +m_entryPoint(new priv::ThreadMemberFunc(function, object)) +{ +} diff --git a/include/SFML/System/ThreadLocal.hpp b/include/SFML/System/ThreadLocal.hpp new file mode 100644 index 0000000..fe2ba82 --- /dev/null +++ b/include/SFML/System/ThreadLocal.hpp @@ -0,0 +1,103 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_THREADLOCAL_HPP +#define SFML_THREADLOCAL_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + + +namespace sf +{ +namespace priv +{ + class ThreadLocalImpl; +} + +//////////////////////////////////////////////////////////// +/// \brief Defines variables with thread-local storage +/// +//////////////////////////////////////////////////////////// +class SFML_SYSTEM_API ThreadLocal : NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// \param value Optional value to initalize the variable + /// + //////////////////////////////////////////////////////////// + ThreadLocal(void* value = NULL); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + ~ThreadLocal(); + + //////////////////////////////////////////////////////////// + /// \brief Set the thread-specific value of the variable + /// + /// \param value Value of the variable for the current thread + /// + //////////////////////////////////////////////////////////// + void setValue(void* value); + + //////////////////////////////////////////////////////////// + /// \brief Retrieve the thread-specific value of the variable + /// + /// \return Value of the variable for the current thread + /// + //////////////////////////////////////////////////////////// + void* getValue() const; + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + priv::ThreadLocalImpl* m_impl; ///< Pointer to the OS specific implementation +}; + +} // namespace sf + + +#endif // SFML_THREADLOCAL_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::ThreadLocal +/// \ingroup system +/// +/// This class manipulates void* parameters and thus is not +/// appropriate for strongly-typed variables. You should rather +/// use the sf::ThreadLocalPtr template class. +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/System/ThreadLocalPtr.hpp b/include/SFML/System/ThreadLocalPtr.hpp new file mode 100644 index 0000000..e6dc1eb --- /dev/null +++ b/include/SFML/System/ThreadLocalPtr.hpp @@ -0,0 +1,158 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_THREADLOCALPTR_HPP +#define SFML_THREADLOCALPTR_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Pointer to a thread-local variable +/// +//////////////////////////////////////////////////////////// +template +class ThreadLocalPtr : private ThreadLocal +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// \param value Optional value to initalize the variable + /// + //////////////////////////////////////////////////////////// + ThreadLocalPtr(T* value = NULL); + + //////////////////////////////////////////////////////////// + /// \brief Overload of unary operator * + /// + /// Like raw pointers, applying the * operator returns a + /// reference to the pointed object. + /// + /// \return Reference to the pointed object + /// + //////////////////////////////////////////////////////////// + T& operator *() const; + + //////////////////////////////////////////////////////////// + /// \brief Overload of operator -> + /// + /// Like raw pointers, applying the -> operator returns the + /// pointed object. + /// + /// \return Pointed object + /// + //////////////////////////////////////////////////////////// + T* operator ->() const; + + //////////////////////////////////////////////////////////// + /// \brief Cast operator to implicitely convert the + /// pointer to its raw pointer type (T*) + /// + /// \return Pointer to the actual object + /// + //////////////////////////////////////////////////////////// + operator T*() const; + + //////////////////////////////////////////////////////////// + /// \brief Assignment operator for a raw pointer parameter + /// + /// \param value Pointer to assign + /// + /// \return Reference to self + /// + //////////////////////////////////////////////////////////// + ThreadLocalPtr& operator =(T* value); + + //////////////////////////////////////////////////////////// + /// \brief Assignment operator for a ThreadLocalPtr parameter + /// + /// \param right ThreadLocalPtr to assign + /// + /// \return Reference to self + /// + //////////////////////////////////////////////////////////// + ThreadLocalPtr& operator =(const ThreadLocalPtr& right); +}; + +} // namespace sf + +#include + + +#endif // SFML_THREADLOCALPTR_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::ThreadLocalPtr +/// \ingroup system +/// +/// sf::ThreadLocalPtr is a type-safe wrapper for storing +/// pointers to thread-local variables. A thread-local +/// variable holds a different value for each different +/// thread, unlike normal variable that are shared. +/// +/// Its usage is completely transparent, so that it is similar +/// to manipulating the raw pointer directly (like any smart pointer). +/// +/// Usage example: +/// \code +/// MyClass object1; +/// MyClass object2; +/// sf::ThreadLocalPtr objectPtr; +/// +/// void thread1() +/// { +/// objectPtr = &object1; // doesn't impact thread2 +/// ... +/// } +/// +/// void thread2() +/// { +/// objectPtr = &object2; // doesn't impact thread1 +/// ... +/// } +/// +/// int main() +/// { +/// // Create and launch the two threads +/// sf::Thread t1(&thread1); +/// sf::Thread t2(&thread2); +/// t1.launch(); +/// t2.launch(); +/// +/// return 0; +/// } +/// \endcode +/// +/// ThreadLocalPtr is designed for internal use; however you +/// can use it if you feel like it fits well your implementation. +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/System/ThreadLocalPtr.inl b/include/SFML/System/ThreadLocalPtr.inl new file mode 100644 index 0000000..8442025 --- /dev/null +++ b/include/SFML/System/ThreadLocalPtr.inl @@ -0,0 +1,77 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2012 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + + +namespace sf +{ +//////////////////////////////////////////////////////////// +template +ThreadLocalPtr::ThreadLocalPtr(T* value) : +ThreadLocal(value) +{ +} + + +//////////////////////////////////////////////////////////// +template +T& ThreadLocalPtr::operator *() const +{ + return *static_cast(getValue()); +} + + +//////////////////////////////////////////////////////////// +template +T* ThreadLocalPtr::operator ->() const +{ + return static_cast(getValue()); +} + + +//////////////////////////////////////////////////////////// +template +ThreadLocalPtr::operator T*() const +{ + return static_cast(getValue()); +} + + +//////////////////////////////////////////////////////////// +template +ThreadLocalPtr& ThreadLocalPtr::operator =(T* value) +{ + setValue(value); + return *this; +} + + +//////////////////////////////////////////////////////////// +template +ThreadLocalPtr& ThreadLocalPtr::operator =(const ThreadLocalPtr& right) +{ + setValue(right.getValue()); + return *this; +} + +} // namespace sf diff --git a/include/SFML/System/Time.hpp b/include/SFML/System/Time.hpp new file mode 100644 index 0000000..5037f52 --- /dev/null +++ b/include/SFML/System/Time.hpp @@ -0,0 +1,452 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_TIME_HPP +#define SFML_TIME_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Represents a time value +/// +//////////////////////////////////////////////////////////// +class SFML_SYSTEM_API Time +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Sets the time value to zero. + /// + //////////////////////////////////////////////////////////// + Time(); + + //////////////////////////////////////////////////////////// + /// \brief Return the time value as a number of seconds + /// + /// \return Time in seconds + /// + /// \see asMilliseconds, asMicroseconds + /// + //////////////////////////////////////////////////////////// + float asSeconds() const; + + //////////////////////////////////////////////////////////// + /// \brief Return the time value as a number of milliseconds + /// + /// \return Time in milliseconds + /// + /// \see asSeconds, asMicroseconds + /// + //////////////////////////////////////////////////////////// + Int32 asMilliseconds() const; + + //////////////////////////////////////////////////////////// + /// \brief Return the time value as a number of microseconds + /// + /// \return Time in microseconds + /// + /// \see asSeconds, asMilliseconds + /// + //////////////////////////////////////////////////////////// + Int64 asMicroseconds() const; + + //////////////////////////////////////////////////////////// + // Static member data + //////////////////////////////////////////////////////////// + static const Time Zero; ///< Predefined "zero" time value + +private : + + friend SFML_SYSTEM_API Time seconds(float); + friend SFML_SYSTEM_API Time milliseconds(Int32); + friend SFML_SYSTEM_API Time microseconds(Int64); + + //////////////////////////////////////////////////////////// + /// \brief Construct from a number of microseconds + /// + /// This function is internal. To construct time values, + /// use sf::seconds, sf::milliseconds or sf::microseconds instead. + /// + /// \param microseconds Number of microseconds + /// + //////////////////////////////////////////////////////////// + explicit Time(Int64 microseconds); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + Int64 m_microseconds; ///< Time value stored as microseconds +}; + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Construct a time value from a number of seconds +/// +/// \param amount Number of seconds +/// +/// \return Time value constructed from the amount of seconds +/// +/// \see milliseconds, microseconds +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time seconds(float amount); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Construct a time value from a number of milliseconds +/// +/// \param amount Number of milliseconds +/// +/// \return Time value constructed from the amount of milliseconds +/// +/// \see seconds, microseconds +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time milliseconds(Int32 amount); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Construct a time value from a number of microseconds +/// +/// \param amount Number of microseconds +/// +/// \return Time value constructed from the amount of microseconds +/// +/// \see seconds, milliseconds +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time microseconds(Int64 amount); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of == operator to compare two time values +/// +/// \param left Left operand (a time) +/// \param right Right operand (a time) +/// +/// \return True if both time values are equal +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator ==(Time left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of != operator to compare two time values +/// +/// \param left Left operand (a time) +/// \param right Right operand (a time) +/// +/// \return True if both time values are different +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator !=(Time left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of < operator to compare two time values +/// +/// \param left Left operand (a time) +/// \param right Right operand (a time) +/// +/// \return True if \a left is lesser than \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator <(Time left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of > operator to compare two time values +/// +/// \param left Left operand (a time) +/// \param right Right operand (a time) +/// +/// \return True if \a left is greater than \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator >(Time left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of <= operator to compare two time values +/// +/// \param left Left operand (a time) +/// \param right Right operand (a time) +/// +/// \return True if \a left is lesser or equal than \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator <=(Time left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of >= operator to compare two time values +/// +/// \param left Left operand (a time) +/// \param right Right operand (a time) +/// +/// \return True if \a left is greater or equal than \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API bool operator >=(Time left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of unary - operator to negate a time value +/// +/// \param right Right operand (a time) +/// +/// \return Opposite of the time value +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time operator -(Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary + operator to add two time values +/// +/// \param left Left operand (a time) +/// \param right Right operand (a time) +/// +/// \return Sum of the two times values +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time operator +(Time left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary += operator to add/assign two time values +/// +/// \param left Left operand (a time) +/// \param right Right operand (a time) +/// +/// \return Sum of the two times values +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time& operator +=(Time& left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary - operator to subtract two time values +/// +/// \param left Left operand (a time) +/// \param right Right operand (a time) +/// +/// \return Difference of the two times values +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time operator -(Time left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary -= operator to subtract/assign two time values +/// +/// \param left Left operand (a time) +/// \param right Right operand (a time) +/// +/// \return Difference of the two times values +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time& operator -=(Time& left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary * operator to scale a time value +/// +/// \param left Left operand (a time) +/// \param right Right operand (a number) +/// +/// \return \a left multiplied by \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time operator *(Time left, float right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary * operator to scale a time value +/// +/// \param left Left operand (a time) +/// \param right Right operand (a number) +/// +/// \return \a left multiplied by \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time operator *(Time left, Int64 right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary * operator to scale a time value +/// +/// \param left Left operand (a number) +/// \param right Right operand (a time) +/// +/// \return \a left multiplied by \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time operator *(float left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary * operator to scale a time value +/// +/// \param left Left operand (a number) +/// \param right Right operand (a time) +/// +/// \return \a left multiplied by \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time operator *(Int64 left, Time right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary *= operator to scale/assign a time value +/// +/// \param left Left operand (a time) +/// \param right Right operand (a number) +/// +/// \return \a left multiplied by \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time& operator *=(Time& left, float right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary *= operator to scale/assign a time value +/// +/// \param left Left operand (a time) +/// \param right Right operand (a number) +/// +/// \return \a left multiplied by \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time& operator *=(Time& left, Int64 right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary / operator to scale a time value +/// +/// \param left Left operand (a time) +/// \param right Right operand (a number) +/// +/// \return \a left divided by \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time operator /(Time left, float right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary / operator to scale a time value +/// +/// \param left Left operand (a time) +/// \param right Right operand (a number) +/// +/// \return \a left divided by \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time operator /(Time left, Int64 right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary /= operator to scale/assign a time value +/// +/// \param left Left operand (a time) +/// \param right Right operand (a number) +/// +/// \return \a left divided by \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time& operator /=(Time& left, float right); + +//////////////////////////////////////////////////////////// +/// \relates Time +/// \brief Overload of binary /= operator to scale/assign a time value +/// +/// \param left Left operand (a time) +/// \param right Right operand (a number) +/// +/// \return \a left divided by \a right +/// +//////////////////////////////////////////////////////////// +SFML_SYSTEM_API Time& operator /=(Time& left, Int64 right); + +} // namespace sf + + +#endif // SFML_TIME_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Time +/// \ingroup system +/// +/// sf::Time encapsulates a time value in a flexible way. +/// It allows to define a time value either as a number of +/// seconds, milliseconds or microseconds. It also works the +/// other way round: you can read a time value as either +/// a number of seconds, milliseconds or microseconds. +/// +/// By using such a flexible interface, the API doesn't +/// impose any fixed type or resolution for time values, +/// and let the user choose its own favorite representation. +/// +/// Time values support the usual mathematical operations: +/// you can add or subtract two times, multiply or divide +/// a time by a number, compare two times, etc. +/// +/// Since they represent a time span and not an absolute time +/// value, times can also be negative. +/// +/// Usage example: +/// \code +/// sf::Time t1 = sf::seconds(0.1f); +/// Int32 milli = t1.asMilliseconds(); // 100 +/// +/// sf::Time t2 = sf::milliseconds(30); +/// Int64 micro = t2.asMicroseconds(); // 30000 +/// +/// sf::Time t3 = sf::microseconds(-800000); +/// float sec = t3.asSeconds(); // -0.8 +/// \endcode +/// +/// \code +/// void update(sf::Time elapsed) +/// { +/// position += speed * elapsed.asSeconds(); +/// } +/// +/// update(sf::milliseconds(100)); +/// \endcode +/// +/// \see sf::Clock +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/System/Utf.hpp b/include/SFML/System/Utf.hpp new file mode 100644 index 0000000..48e6e1b --- /dev/null +++ b/include/SFML/System/Utf.hpp @@ -0,0 +1,763 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_UTF_HPP +#define SFML_UTF_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include + + +namespace sf +{ +template +class Utf; + +//////////////////////////////////////////////////////////// +/// \brief Specialization of the Utf template for UTF-8 +/// +//////////////////////////////////////////////////////////// +template <> +class Utf<8> +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Decode a single UTF-8 character + /// + /// Decoding a character means finding its unique 32-bits + /// code (called the codepoint) in the Unicode standard. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Codepoint of the decoded UTF-8 character + /// \param replacement Replacement character to use in case the UTF-8 sequence is invalid + /// + /// \return Iterator pointing to one past the last read element of the input sequence + /// + //////////////////////////////////////////////////////////// + template + static In decode(In begin, In end, Uint32& output, Uint32 replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Encode a single UTF-8 character + /// + /// Encoding a character means converting a unique 32-bits + /// code (called the codepoint) in the target encoding, UTF-8. + /// + /// \param input Codepoint to encode as UTF-8 + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to UTF-8 (use 0 to skip them) + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out encode(Uint32 input, Out output, Uint8 replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Advance to the next UTF-8 character + /// + /// This function is necessary for multi-elements encodings, as + /// a single character may use more than 1 storage element. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// + /// \return Iterator pointing to one past the last read element of the input sequence + /// + //////////////////////////////////////////////////////////// + template + static In next(In begin, In end); + + //////////////////////////////////////////////////////////// + /// \brief Count the number of characters of a UTF-8 sequence + /// + /// This function is necessary for multi-elements encodings, as + /// a single character may use more than 1 storage element, thus the + /// total size can be different from (begin - end). + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// + /// \return Iterator pointing to one past the last read element of the input sequence + /// + //////////////////////////////////////////////////////////// + template + static std::size_t count(In begin, In end); + + //////////////////////////////////////////////////////////// + /// \brief Convert an ANSI characters range to UTF-8 + /// + /// The current global locale will be used by default, unless you + /// pass a custom one in the \a locale parameter. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param locale Locale to use for conversion + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out fromAnsi(In begin, In end, Out output, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Convert a wide characters range to UTF-8 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out fromWide(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert a latin-1 (ISO-5589-1) characters range to UTF-8 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out fromLatin1(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert an UTF-8 characters range to ANSI characters + /// + /// The current global locale will be used by default, unless you + /// pass a custom one in the \a locale parameter. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to ANSI (use 0 to skip them) + /// \param locale Locale to use for conversion + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toAnsi(In begin, In end, Out output, char replacement = 0, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Convert an UTF-8 characters range to wide characters + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to wide (use 0 to skip them) + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toWide(In begin, In end, Out output, wchar_t replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Convert an UTF-8 characters range to latin-1 (ISO-5589-1) characters + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to wide (use 0 to skip them) + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toLatin1(In begin, In end, Out output, char replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Convert a UTF-8 characters range to UTF-8 + /// + /// This functions does nothing more than a direct copy; + /// it is defined only to provide the same interface as other + /// specializations of the sf::Utf<> template, and allow + /// generic code to be written on top of it. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toUtf8(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert a UTF-8 characters range to UTF-16 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toUtf16(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert a UTF-8 characters range to UTF-32 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toUtf32(In begin, In end, Out output); +}; + +//////////////////////////////////////////////////////////// +/// \brief Specialization of the Utf template for UTF-16 +/// +//////////////////////////////////////////////////////////// +template <> +class Utf<16> +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Decode a single UTF-16 character + /// + /// Decoding a character means finding its unique 32-bits + /// code (called the codepoint) in the Unicode standard. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Codepoint of the decoded UTF-16 character + /// \param replacement Replacement character to use in case the UTF-8 sequence is invalid + /// + /// \return Iterator pointing to one past the last read element of the input sequence + /// + //////////////////////////////////////////////////////////// + template + static In decode(In begin, In end, Uint32& output, Uint32 replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Encode a single UTF-16 character + /// + /// Encoding a character means converting a unique 32-bits + /// code (called the codepoint) in the target encoding, UTF-16. + /// + /// \param input Codepoint to encode as UTF-16 + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to UTF-16 (use 0 to skip them) + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out encode(Uint32 input, Out output, Uint16 replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Advance to the next UTF-16 character + /// + /// This function is necessary for multi-elements encodings, as + /// a single character may use more than 1 storage element. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// + /// \return Iterator pointing to one past the last read element of the input sequence + /// + //////////////////////////////////////////////////////////// + template + static In next(In begin, In end); + + //////////////////////////////////////////////////////////// + /// \brief Count the number of characters of a UTF-16 sequence + /// + /// This function is necessary for multi-elements encodings, as + /// a single character may use more than 1 storage element, thus the + /// total size can be different from (begin - end). + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// + /// \return Iterator pointing to one past the last read element of the input sequence + /// + //////////////////////////////////////////////////////////// + template + static std::size_t count(In begin, In end); + + //////////////////////////////////////////////////////////// + /// \brief Convert an ANSI characters range to UTF-16 + /// + /// The current global locale will be used by default, unless you + /// pass a custom one in the \a locale parameter. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param locale Locale to use for conversion + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out fromAnsi(In begin, In end, Out output, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Convert a wide characters range to UTF-16 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out fromWide(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert a latin-1 (ISO-5589-1) characters range to UTF-16 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out fromLatin1(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert an UTF-16 characters range to ANSI characters + /// + /// The current global locale will be used by default, unless you + /// pass a custom one in the \a locale parameter. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to ANSI (use 0 to skip them) + /// \param locale Locale to use for conversion + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toAnsi(In begin, In end, Out output, char replacement = 0, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Convert an UTF-16 characters range to wide characters + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to wide (use 0 to skip them) + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toWide(In begin, In end, Out output, wchar_t replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Convert an UTF-16 characters range to latin-1 (ISO-5589-1) characters + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to wide (use 0 to skip them) + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toLatin1(In begin, In end, Out output, char replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Convert a UTF-16 characters range to UTF-8 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toUtf8(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert a UTF-16 characters range to UTF-16 + /// + /// This functions does nothing more than a direct copy; + /// it is defined only to provide the same interface as other + /// specializations of the sf::Utf<> template, and allow + /// generic code to be written on top of it. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toUtf16(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert a UTF-16 characters range to UTF-32 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toUtf32(In begin, In end, Out output); +}; + +//////////////////////////////////////////////////////////// +/// \brief Specialization of the Utf template for UTF-32 +/// +//////////////////////////////////////////////////////////// +template <> +class Utf<32> +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Decode a single UTF-32 character + /// + /// Decoding a character means finding its unique 32-bits + /// code (called the codepoint) in the Unicode standard. + /// For UTF-32, the character value is the same as the codepoint. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Codepoint of the decoded UTF-32 character + /// \param replacement Replacement character to use in case the UTF-8 sequence is invalid + /// + /// \return Iterator pointing to one past the last read element of the input sequence + /// + //////////////////////////////////////////////////////////// + template + static In decode(In begin, In end, Uint32& output, Uint32 replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Encode a single UTF-32 character + /// + /// Encoding a character means converting a unique 32-bits + /// code (called the codepoint) in the target encoding, UTF-32. + /// For UTF-32, the codepoint is the same as the character value. + /// + /// \param input Codepoint to encode as UTF-32 + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to UTF-32 (use 0 to skip them) + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out encode(Uint32 input, Out output, Uint32 replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Advance to the next UTF-32 character + /// + /// This function is trivial for UTF-32, which can store + /// every character in a single storage element. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// + /// \return Iterator pointing to one past the last read element of the input sequence + /// + //////////////////////////////////////////////////////////// + template + static In next(In begin, In end); + + //////////////////////////////////////////////////////////// + /// \brief Count the number of characters of a UTF-32 sequence + /// + /// This function is trivial for UTF-32, which can store + /// every character in a single storage element. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// + /// \return Iterator pointing to one past the last read element of the input sequence + /// + //////////////////////////////////////////////////////////// + template + static std::size_t count(In begin, In end); + + //////////////////////////////////////////////////////////// + /// \brief Convert an ANSI characters range to UTF-32 + /// + /// The current global locale will be used by default, unless you + /// pass a custom one in the \a locale parameter. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param locale Locale to use for conversion + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out fromAnsi(In begin, In end, Out output, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Convert a wide characters range to UTF-32 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out fromWide(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert a latin-1 (ISO-5589-1) characters range to UTF-32 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out fromLatin1(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert an UTF-32 characters range to ANSI characters + /// + /// The current global locale will be used by default, unless you + /// pass a custom one in the \a locale parameter. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to ANSI (use 0 to skip them) + /// \param locale Locale to use for conversion + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toAnsi(In begin, In end, Out output, char replacement = 0, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Convert an UTF-32 characters range to wide characters + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to wide (use 0 to skip them) + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toWide(In begin, In end, Out output, wchar_t replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Convert an UTF-16 characters range to latin-1 (ISO-5589-1) characters + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement for characters not convertible to wide (use 0 to skip them) + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toLatin1(In begin, In end, Out output, char replacement = 0); + + //////////////////////////////////////////////////////////// + /// \brief Convert a UTF-32 characters range to UTF-8 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toUtf8(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert a UTF-32 characters range to UTF-16 + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toUtf16(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Convert a UTF-32 characters range to UTF-32 + /// + /// This functions does nothing more than a direct copy; + /// it is defined only to provide the same interface as other + /// specializations of the sf::Utf<> template, and allow + /// generic code to be written on top of it. + /// + /// \param begin Iterator pointing to the beginning of the input sequence + /// \param end Iterator pointing to the end of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out toUtf32(In begin, In end, Out output); + + //////////////////////////////////////////////////////////// + /// \brief Decode a single ANSI character to UTF-32 + /// + /// This function does not exist in other specializations + /// of sf::Utf<>, it is defined for convenience (it is used by + /// several other conversion functions). + /// + /// \param input Input ANSI character + /// \param locale Locale to use for conversion + /// + /// \return Converted character + /// + //////////////////////////////////////////////////////////// + template + static Uint32 decodeAnsi(In input, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Decode a single wide character to UTF-32 + /// + /// This function does not exist in other specializations + /// of sf::Utf<>, it is defined for convenience (it is used by + /// several other conversion functions). + /// + /// \param input Input wide character + /// + /// \return Converted character + /// + //////////////////////////////////////////////////////////// + template + static Uint32 decodeWide(In input); + + //////////////////////////////////////////////////////////// + /// \brief Encode a single UTF-32 character to ANSI + /// + /// This function does not exist in other specializations + /// of sf::Utf<>, it is defined for convenience (it is used by + /// several other conversion functions). + /// + /// \param codepoint Iterator pointing to the beginning of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement if the input character is not convertible to ANSI (use 0 to skip it) + /// \param locale Locale to use for conversion + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out encodeAnsi(Uint32 codepoint, Out output, char replacement = 0, const std::locale& locale = std::locale()); + + //////////////////////////////////////////////////////////// + /// \brief Encode a single UTF-32 character to wide + /// + /// This function does not exist in other specializations + /// of sf::Utf<>, it is defined for convenience (it is used by + /// several other conversion functions). + /// + /// \param codepoint Iterator pointing to the beginning of the input sequence + /// \param output Iterator pointing to the beginning of the output sequence + /// \param replacement Replacement if the input character is not convertible to wide (use 0 to skip it) + /// + /// \return Iterator to the end of the output sequence which has been written + /// + //////////////////////////////////////////////////////////// + template + static Out encodeWide(Uint32 codepoint, Out output, wchar_t replacement = 0); +}; + +#include + +// Make typedefs to get rid of the template syntax +typedef Utf<8> Utf8; +typedef Utf<16> Utf16; +typedef Utf<32> Utf32; + +} // namespace sf + + +#endif // SFML_UTF_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Utf +/// \ingroup system +/// +/// Utility class providing generic functions for UTF conversions. +/// +/// sf::Utf is a low-level, generic interface for counting, iterating, +/// encoding and decoding Unicode characters and strings. It is able +/// to handle ANSI, wide, latin-1, UTF-8, UTF-16 and UTF-32 encodings. +/// +/// sf::Utf functions are all static, these classes are not meant to +/// be instanciated. All the functions are template, so that you +/// can use any character / string type for a given encoding. +/// +/// It has 3 specializations: +/// \li sf::Utf<8> (typedef'd to sf::Utf8) +/// \li sf::Utf<16> (typedef'd to sf::Utf16) +/// \li sf::Utf<32> (typedef'd to sf::Utf32) +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/System/Utf.inl b/include/SFML/System/Utf.inl new file mode 100644 index 0000000..8dbceab --- /dev/null +++ b/include/SFML/System/Utf.inl @@ -0,0 +1,774 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2012 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////// +// References : +// +// http://www.unicode.org/ +// http://www.unicode.org/Public/PROGRAMS/CVTUTF/ConvertUTF.c +// http://www.unicode.org/Public/PROGRAMS/CVTUTF/ConvertUTF.h +// http://people.w3.org/rishida/scripts/uniview/conversion +// +//////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////// +template +In Utf<8>::decode(In begin, In end, Uint32& output, Uint32 replacement) +{ + // Some useful precomputed data + static const int trailing[256] = + { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5 + }; + static const Uint32 offsets[6] = + { + 0x00000000, 0x00003080, 0x000E2080, 0x03C82080, 0xFA082080, 0x82082080 + }; + + // decode the character + int trailingBytes = trailing[static_cast(*begin)]; + if (begin + trailingBytes < end) + { + output = 0; + switch (trailingBytes) + { + case 5 : output += static_cast(*begin++); output <<= 6; + case 4 : output += static_cast(*begin++); output <<= 6; + case 3 : output += static_cast(*begin++); output <<= 6; + case 2 : output += static_cast(*begin++); output <<= 6; + case 1 : output += static_cast(*begin++); output <<= 6; + case 0 : output += static_cast(*begin++); + } + output -= offsets[trailingBytes]; + } + else + { + // Incomplete character + begin = end; + output = replacement; + } + + return begin; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<8>::encode(Uint32 input, Out output, Uint8 replacement) +{ + // Some useful precomputed data + static const Uint8 firstBytes[7] = + { + 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC + }; + + // encode the character + if ((input > 0x0010FFFF) || ((input >= 0xD800) && (input <= 0xDBFF))) + { + // Invalid character + if (replacement) + *output++ = replacement; + } + else + { + // Valid character + + // Get the number of bytes to write + int bytestoWrite = 1; + if (input < 0x80) bytestoWrite = 1; + else if (input < 0x800) bytestoWrite = 2; + else if (input < 0x10000) bytestoWrite = 3; + else if (input <= 0x0010FFFF) bytestoWrite = 4; + + // Extract the bytes to write + Uint8 bytes[4]; + switch (bytestoWrite) + { + case 4 : bytes[3] = static_cast((input | 0x80) & 0xBF); input >>= 6; + case 3 : bytes[2] = static_cast((input | 0x80) & 0xBF); input >>= 6; + case 2 : bytes[1] = static_cast((input | 0x80) & 0xBF); input >>= 6; + case 1 : bytes[0] = static_cast (input | firstBytes[bytestoWrite]); + } + + // Add them to the output + const Uint8* currentByte = bytes; + switch (bytestoWrite) + { + case 4 : *output++ = *currentByte++; + case 3 : *output++ = *currentByte++; + case 2 : *output++ = *currentByte++; + case 1 : *output++ = *currentByte++; + } + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +In Utf<8>::next(In begin, In end) +{ + Uint32 codepoint; + return decode(begin, end, codepoint); +} + + +//////////////////////////////////////////////////////////// +template +std::size_t Utf<8>::count(In begin, In end) +{ + std::size_t length = 0; + while (begin < end) + { + begin = next(begin, end); + ++length; + } + + return length; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<8>::fromAnsi(In begin, In end, Out output, const std::locale& locale) +{ + while (begin < end) + { + Uint32 codepoint = Utf<32>::decodeAnsi(*begin++, locale); + output = encode(codepoint, output); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<8>::fromWide(In begin, In end, Out output) +{ + while (begin < end) + { + Uint32 codepoint = Utf<32>::decodeWide(*begin++); + output = encode(codepoint, output); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<8>::fromLatin1(In begin, In end, Out output) +{ + // Latin-1 is directly compatible with Unicode encodings, + // and can thus be treated as (a sub-range of) UTF-32 + while (begin < end) + output = encode(*begin++, output); + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<8>::toAnsi(In begin, In end, Out output, char replacement, const std::locale& locale) +{ + while (begin < end) + { + Uint32 codepoint; + begin = decode(begin, end, codepoint); + output = Utf<32>::encodeAnsi(codepoint, output, replacement, locale); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<8>::toWide(In begin, In end, Out output, wchar_t replacement) +{ + while (begin < end) + { + Uint32 codepoint; + begin = decode(begin, end, codepoint); + output = Utf<32>::encodeWide(codepoint, output, replacement); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<8>::toLatin1(In begin, In end, Out output, char replacement) +{ + // Latin-1 is directly compatible with Unicode encodings, + // and can thus be treated as (a sub-range of) UTF-32 + while (begin < end) + { + Uint32 codepoint; + begin = decode(begin, end, codepoint); + *output++ = codepoint < 256 ? static_cast(codepoint) : replacement; + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<8>::toUtf8(In begin, In end, Out output) +{ + while (begin < end) + *output++ = *begin++; + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<8>::toUtf16(In begin, In end, Out output) +{ + while (begin < end) + { + Uint32 codepoint; + begin = decode(begin, end, codepoint); + output = Utf<16>::encode(codepoint, output); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<8>::toUtf32(In begin, In end, Out output) +{ + while (begin < end) + { + Uint32 codepoint; + begin = decode(begin, end, codepoint); + *output++ = codepoint; + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +In Utf<16>::decode(In begin, In end, Uint32& output, Uint32 replacement) +{ + Uint16 first = *begin++; + + // If it's a surrogate pair, first convert to a single UTF-32 character + if ((first >= 0xD800) && (first <= 0xDBFF)) + { + if (begin < end) + { + Uint32 second = *begin++; + if ((second >= 0xDC00) && (second <= 0xDFFF)) + { + // The second element is valid: convert the two elements to a UTF-32 character + output = static_cast(((first - 0xD800) << 10) + (second - 0xDC00) + 0x0010000); + } + else + { + // Invalid character + output = replacement; + } + } + else + { + // Invalid character + begin = end; + output = replacement; + } + } + else + { + // We can make a direct copy + output = first; + } + + return begin; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<16>::encode(Uint32 input, Out output, Uint16 replacement) +{ + if (input < 0xFFFF) + { + // The character can be copied directly, we just need to check if it's in the valid range + if ((input >= 0xD800) && (input <= 0xDFFF)) + { + // Invalid character (this range is reserved) + if (replacement) + *output++ = replacement; + } + else + { + // Valid character directly convertible to a single UTF-16 character + *output++ = static_cast(input); + } + } + else if (input > 0x0010FFFF) + { + // Invalid character (greater than the maximum unicode value) + if (replacement) + *output++ = replacement; + } + else + { + // The input character will be converted to two UTF-16 elements + input -= 0x0010000; + *output++ = static_cast((input >> 10) + 0xD800); + *output++ = static_cast((input & 0x3FFUL) + 0xDC00); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +In Utf<16>::next(In begin, In end) +{ + Uint32 codepoint; + return decode(begin, end, codepoint); +} + + +//////////////////////////////////////////////////////////// +template +std::size_t Utf<16>::count(In begin, In end) +{ + std::size_t length = 0; + while (begin < end) + { + begin = next(begin, end); + ++length; + } + + return length; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<16>::fromAnsi(In begin, In end, Out output, const std::locale& locale) +{ + while (begin < end) + { + Uint32 codepoint = Utf<32>::decodeAnsi(*begin++, locale); + output = encode(codepoint, output); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<16>::fromWide(In begin, In end, Out output) +{ + while (begin < end) + { + Uint32 codepoint = Utf<32>::decodeWide(*begin++); + output = encode(codepoint, output); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<16>::fromLatin1(In begin, In end, Out output) +{ + // Latin-1 is directly compatible with Unicode encodings, + // and can thus be treated as (a sub-range of) UTF-32 + while (begin < end) + *output++ = *begin++; + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<16>::toAnsi(In begin, In end, Out output, char replacement, const std::locale& locale) +{ + while (begin < end) + { + Uint32 codepoint; + begin = decode(begin, end, codepoint); + output = Utf<32>::encodeAnsi(codepoint, output, replacement, locale); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<16>::toWide(In begin, In end, Out output, wchar_t replacement) +{ + while (begin < end) + { + Uint32 codepoint; + begin = decode(begin, end, codepoint); + output = Utf<32>::encodeWide(codepoint, output, replacement); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<16>::toLatin1(In begin, In end, Out output, char replacement) +{ + // Latin-1 is directly compatible with Unicode encodings, + // and can thus be treated as (a sub-range of) UTF-32 + while (begin < end) + { + *output++ = *begin < 256 ? static_cast(*begin) : replacement; + begin++; + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<16>::toUtf8(In begin, In end, Out output) +{ + while (begin < end) + { + Uint32 codepoint; + begin = decode(begin, end, codepoint); + output = Utf<8>::encode(codepoint, output); + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<16>::toUtf16(In begin, In end, Out output) +{ + while (begin < end) + *output++ = *begin++; + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<16>::toUtf32(In begin, In end, Out output) +{ + while (begin < end) + { + Uint32 codepoint; + begin = decode(begin, end, codepoint); + *output++ = codepoint; + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +In Utf<32>::decode(In begin, In /*end*/, Uint32& output, Uint32 /*replacement*/) +{ + output = *begin++; + return begin; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::encode(Uint32 input, Out output, Uint32 /*replacement*/) +{ + *output++ = input; + return output; +} + + +//////////////////////////////////////////////////////////// +template +In Utf<32>::next(In begin, In /*end*/) +{ + return ++begin; +} + + +//////////////////////////////////////////////////////////// +template +std::size_t Utf<32>::count(In begin, In end) +{ + return begin - end; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::fromAnsi(In begin, In end, Out output, const std::locale& locale) +{ + while (begin < end) + *output++ = decodeAnsi(*begin++, locale); + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::fromWide(In begin, In end, Out output) +{ + while (begin < end) + *output++ = decodeWide(*begin++); + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::fromLatin1(In begin, In end, Out output) +{ + // Latin-1 is directly compatible with Unicode encodings, + // and can thus be treated as (a sub-range of) UTF-32 + while (begin < end) + *output++ = *begin++; + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::toAnsi(In begin, In end, Out output, char replacement, const std::locale& locale) +{ + while (begin < end) + output = encodeAnsi(*begin++, output, replacement, locale); + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::toWide(In begin, In end, Out output, wchar_t replacement) +{ + while (begin < end) + output = encodeWide(*begin++, output, replacement); + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::toLatin1(In begin, In end, Out output, char replacement) +{ + // Latin-1 is directly compatible with Unicode encodings, + // and can thus be treated as (a sub-range of) UTF-32 + while (begin < end) + { + *output++ = *begin < 256 ? static_cast(*begin) : replacement; + begin++; + } + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::toUtf8(In begin, In end, Out output) +{ + while (begin < end) + output = Utf<8>::encode(*begin++, output); + + return output; +} + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::toUtf16(In begin, In end, Out output) +{ + while (begin < end) + output = Utf<16>::encode(*begin++, output); + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::toUtf32(In begin, In end, Out output) +{ + while (begin < end) + *output++ = *begin++; + + return output; +} + + +//////////////////////////////////////////////////////////// +template +Uint32 Utf<32>::decodeAnsi(In input, const std::locale& locale) +{ + // On Windows, gcc's standard library (glibc++) has almost + // no support for Unicode stuff. As a consequence, in this + // context we can only use the default locale and ignore + // the one passed as parameter. + + #if defined(SFML_SYSTEM_WINDOWS) && /* if Windows ... */ \ + (defined(__GLIBCPP__) || defined (__GLIBCXX__)) && /* ... and standard library is glibc++ ... */ \ + !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) /* ... and STLPort is not used on top of it */ + + (void)locale; // to avoid warnings + + wchar_t character = 0; + mbtowc(&character, &input, 1); + return static_cast(character); + + #else + + // Get the facet of the locale which deals with character conversion + const std::ctype& facet = std::use_facet< std::ctype >(locale); + + // Use the facet to convert each character of the input string + return static_cast(facet.widen(input)); + + #endif +} + + +//////////////////////////////////////////////////////////// +template +Uint32 Utf<32>::decodeWide(In input) +{ + // The encoding of wide characters is not well defined and is left to the system; + // however we can safely assume that it is UCS-2 on Windows and + // UCS-4 on Unix systems. + // In both cases, a simple copy is enough (UCS-2 is a subset of UCS-4, + // and UCS-4 *is* UTF-32). + + return input; +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::encodeAnsi(Uint32 codepoint, Out output, char replacement, const std::locale& locale) +{ + // On Windows, gcc's standard library (glibc++) has almost + // no support for Unicode stuff. As a consequence, in this + // context we can only use the default locale and ignore + // the one passed as parameter. + + #if defined(SFML_SYSTEM_WINDOWS) && /* if Windows ... */ \ + (defined(__GLIBCPP__) || defined (__GLIBCXX__)) && /* ... and standard library is glibc++ ... */ \ + !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) /* ... and STLPort is not used on top of it */ + + (void)locale; // to avoid warnings + + char character = 0; + if (wctomb(&character, static_cast(codepoint)) >= 0) + *output++ = character; + else if (replacement) + *output++ = replacement; + + return output; + + #else + + // Get the facet of the locale which deals with character conversion + const std::ctype& facet = std::use_facet< std::ctype >(locale); + + // Use the facet to convert each character of the input string + *output++ = facet.narrow(static_cast(codepoint), replacement); + + return output; + + #endif +} + + +//////////////////////////////////////////////////////////// +template +Out Utf<32>::encodeWide(Uint32 codepoint, Out output, wchar_t replacement) +{ + // The encoding of wide characters is not well defined and is left to the system; + // however we can safely assume that it is UCS-2 on Windows and + // UCS-4 on Unix systems. + // For UCS-2 we need to check if the source characters fits in (UCS-2 is a subset of UCS-4). + // For UCS-4 we can do a direct copy (UCS-4 *is* UTF-32). + + switch (sizeof(wchar_t)) + { + case 4: + { + *output++ = static_cast(codepoint); + break; + } + + default: + { + if ((codepoint <= 0xFFFF) && ((codepoint < 0xD800) || (codepoint > 0xDFFF))) + { + *output++ = static_cast(codepoint); + } + else if (replacement) + { + *output++ = replacement; + } + break; + } + } + + return output; +} diff --git a/include/SFML/System/Vector2.hpp b/include/SFML/System/Vector2.hpp new file mode 100644 index 0000000..5c3bb64 --- /dev/null +++ b/include/SFML/System/Vector2.hpp @@ -0,0 +1,301 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_VECTOR2_HPP +#define SFML_VECTOR2_HPP + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Utility template class for manipulating +/// 2-dimensional vectors +/// +//////////////////////////////////////////////////////////// +template +class Vector2 +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Creates a Vector2(0, 0). + /// + //////////////////////////////////////////////////////////// + Vector2(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the vector from its coordinates + /// + /// \param X X coordinate + /// \param Y Y coordinate + /// + //////////////////////////////////////////////////////////// + Vector2(T X, T Y); + + //////////////////////////////////////////////////////////// + /// \brief Construct the vector from another type of vector + /// + /// This constructor doesn't replace the copy constructor, + /// it's called only when U != T. + /// A call to this constructor will fail to compile if U + /// is not convertible to T. + /// + /// \param vector Vector to convert + /// + //////////////////////////////////////////////////////////// + template + explicit Vector2(const Vector2& vector); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + T x; ///< X coordinate of the vector + T y; ///< Y coordinate of the vector +}; + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of unary operator - +/// +/// \param right Vector to negate +/// +/// \return Memberwise opposite of the vector +/// +//////////////////////////////////////////////////////////// +template +Vector2 operator -(const Vector2& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator += +/// +/// This operator performs a memberwise addition of both vectors, +/// and assigns the result to \a left. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return Reference to \a left +/// +//////////////////////////////////////////////////////////// +template +Vector2& operator +=(Vector2& left, const Vector2& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator -= +/// +/// This operator performs a memberwise subtraction of both vectors, +/// and assigns the result to \a left. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return Reference to \a left +/// +//////////////////////////////////////////////////////////// +template +Vector2& operator -=(Vector2& left, const Vector2& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator + +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return Memberwise addition of both vectors +/// +//////////////////////////////////////////////////////////// +template +Vector2 operator +(const Vector2& left, const Vector2& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator - +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return Memberwise subtraction of both vectors +/// +//////////////////////////////////////////////////////////// +template +Vector2 operator -(const Vector2& left, const Vector2& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator * +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a scalar value) +/// +/// \return Memberwise multiplication by \a right +/// +//////////////////////////////////////////////////////////// +template +Vector2 operator *(const Vector2& left, T right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator * +/// +/// \param left Left operand (a scalar value) +/// \param right Right operand (a vector) +/// +/// \return Memberwise multiplication by \a left +/// +//////////////////////////////////////////////////////////// +template +Vector2 operator *(T left, const Vector2& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator *= +/// +/// This operator performs a memberwise multiplication by \a right, +/// and assigns the result to \a left. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a scalar value) +/// +/// \return Reference to \a left +/// +//////////////////////////////////////////////////////////// +template +Vector2& operator *=(Vector2& left, T right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator / +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a scalar value) +/// +/// \return Memberwise division by \a right +/// +//////////////////////////////////////////////////////////// +template +Vector2 operator /(const Vector2& left, T right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator /= +/// +/// This operator performs a memberwise division by \a right, +/// and assigns the result to \a left. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a scalar value) +/// +/// \return Reference to \a left +/// +//////////////////////////////////////////////////////////// +template +Vector2& operator /=(Vector2& left, T right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator == +/// +/// This operator compares strict equality between two vectors. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return True if \a left is equal to \a right +/// +//////////////////////////////////////////////////////////// +template +bool operator ==(const Vector2& left, const Vector2& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector2 +/// \brief Overload of binary operator != +/// +/// This operator compares strict difference between two vectors. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return True if \a left is not equal to \a right +/// +//////////////////////////////////////////////////////////// +template +bool operator !=(const Vector2& left, const Vector2& right); + +#include + +// Define the most common types +typedef Vector2 Vector2i; +typedef Vector2 Vector2u; +typedef Vector2 Vector2f; + +} // namespace sf + + +#endif // SFML_VECTOR2_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Vector2 +/// \ingroup system +/// +/// sf::Vector2 is a simple class that defines a mathematical +/// vector with two coordinates (x and y). It can be used to +/// represent anything that has two dimensions: a size, a point, +/// a velocity, etc. +/// +/// The template parameter T is the type of the coordinates. It +/// can be any type that supports arithmetic operations (+, -, /, *) +/// and comparisons (==, !=), for example int or float. +/// +/// You generally don't have to care about the templated form (sf::Vector2), +/// the most common specializations have special typedefs: +/// \li sf::Vector2 is sf::Vector2f +/// \li sf::Vector2 is sf::Vector2i +/// \li sf::Vector2 is sf::Vector2u +/// +/// The sf::Vector2 class has a small and simple interface, its x and y members +/// can be accessed directly (there's no accessor like setX(), getX()) and it +/// contains no mathematical function like dot product, cross product, length, etc. +/// +/// Usage example: +/// \code +/// sf::Vector2f v1(16.5f, 24.f); +/// v1.x = 18.2f; +/// float y = v1.y; +/// +/// sf::Vector2f v2 = v1 * 5.f; +/// sf::Vector2f v3; +/// v3 = v1 + v2; +/// +/// bool different = (v2 != v3); +/// \endcode +/// +/// Note: for 3-dimensional vectors, see sf::Vector3. +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/System/Vector2.inl b/include/SFML/System/Vector2.inl new file mode 100644 index 0000000..e1a87ae --- /dev/null +++ b/include/SFML/System/Vector2.inl @@ -0,0 +1,161 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2012 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////// +template +inline Vector2::Vector2() : +x(0), +y(0) +{ + +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2::Vector2(T X, T Y) : +x(X), +y(Y) +{ + +} + + +//////////////////////////////////////////////////////////// +template +template +inline Vector2::Vector2(const Vector2& vector) : +x(static_cast(vector.x)), +y(static_cast(vector.y)) +{ +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2 operator -(const Vector2& right) +{ + return Vector2(-right.x, -right.y); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2& operator +=(Vector2& left, const Vector2& right) +{ + left.x += right.x; + left.y += right.y; + + return left; +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2& operator -=(Vector2& left, const Vector2& right) +{ + left.x -= right.x; + left.y -= right.y; + + return left; +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2 operator +(const Vector2& left, const Vector2& right) +{ + return Vector2(left.x + right.x, left.y + right.y); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2 operator -(const Vector2& left, const Vector2& right) +{ + return Vector2(left.x - right.x, left.y - right.y); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2 operator *(const Vector2& left, T right) +{ + return Vector2(left.x * right, left.y * right); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2 operator *(T left, const Vector2& right) +{ + return Vector2(right.x * left, right.y * left); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2& operator *=(Vector2& left, T right) +{ + left.x *= right; + left.y *= right; + + return left; +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2 operator /(const Vector2& left, T right) +{ + return Vector2(left.x / right, left.y / right); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector2& operator /=(Vector2& left, T right) +{ + left.x /= right; + left.y /= right; + + return left; +} + + +//////////////////////////////////////////////////////////// +template +inline bool operator ==(const Vector2& left, const Vector2& right) +{ + return (left.x == right.x) && (left.y == right.y); +} + + +//////////////////////////////////////////////////////////// +template +inline bool operator !=(const Vector2& left, const Vector2& right) +{ + return (left.x != right.x) || (left.y != right.y); +} diff --git a/include/SFML/System/Vector3.hpp b/include/SFML/System/Vector3.hpp new file mode 100644 index 0000000..76a26cb --- /dev/null +++ b/include/SFML/System/Vector3.hpp @@ -0,0 +1,302 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_VECTOR3_HPP +#define SFML_VECTOR3_HPP + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Utility template class for manipulating +/// 3-dimensional vectors +/// +//////////////////////////////////////////////////////////// +template +class Vector3 +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// Creates a Vector3(0, 0, 0). + /// + //////////////////////////////////////////////////////////// + Vector3(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the vector from its coordinates + /// + /// \param X X coordinate + /// \param Y Y coordinate + /// \param Z Z coordinate + /// + //////////////////////////////////////////////////////////// + Vector3(T X, T Y, T Z); + + //////////////////////////////////////////////////////////// + /// \brief Construct the vector from another type of vector + /// + /// This constructor doesn't replace the copy constructor, + /// it's called only when U != T. + /// A call to this constructor will fail to compile if U + /// is not convertible to T. + /// + /// \param vector Vector to convert + /// + //////////////////////////////////////////////////////////// + template + explicit Vector3(const Vector3& vector); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + T x; ///< X coordinate of the vector + T y; ///< Y coordinate of the vector + T z; ///< Z coordinate of the vector +}; + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of unary operator - +/// +/// \param left Vector to negate +/// +/// \return Memberwise opposite of the vector +/// +//////////////////////////////////////////////////////////// +template +Vector3 operator -(const Vector3& left); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator += +/// +/// This operator performs a memberwise addition of both vectors, +/// and assigns the result to \a left. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return Reference to \a left +/// +//////////////////////////////////////////////////////////// +template +Vector3& operator +=(Vector3& left, const Vector3& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator -= +/// +/// This operator performs a memberwise subtraction of both vectors, +/// and assigns the result to \a left. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return Reference to \a left +/// +//////////////////////////////////////////////////////////// +template +Vector3& operator -=(Vector3& left, const Vector3& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator + +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return Memberwise addition of both vectors +/// +//////////////////////////////////////////////////////////// +template +Vector3 operator +(const Vector3& left, const Vector3& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator - +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return Memberwise subtraction of both vectors +/// +//////////////////////////////////////////////////////////// +template +Vector3 operator -(const Vector3& left, const Vector3& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator * +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a scalar value) +/// +/// \return Memberwise multiplication by \a right +/// +//////////////////////////////////////////////////////////// +template +Vector3 operator *(const Vector3& left, T right); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator * +/// +/// \param left Left operand (a scalar value) +/// \param right Right operand (a vector) +/// +/// \return Memberwise multiplication by \a left +/// +//////////////////////////////////////////////////////////// +template +Vector3 operator *(T left, const Vector3& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator *= +/// +/// This operator performs a memberwise multiplication by \a right, +/// and assigns the result to \a left. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a scalar value) +/// +/// \return Reference to \a left +/// +//////////////////////////////////////////////////////////// +template +Vector3& operator *=(Vector3& left, T right); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator / +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a scalar value) +/// +/// \return Memberwise division by \a right +/// +//////////////////////////////////////////////////////////// +template +Vector3 operator /(const Vector3& left, T right); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator /= +/// +/// This operator performs a memberwise division by \a right, +/// and assigns the result to \a left. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a scalar value) +/// +/// \return Reference to \a left +/// +//////////////////////////////////////////////////////////// +template +Vector3& operator /=(Vector3& left, T right); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator == +/// +/// This operator compares strict equality between two vectors. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return True if \a left is equal to \a right +/// +//////////////////////////////////////////////////////////// +template +bool operator ==(const Vector3& left, const Vector3& right); + +//////////////////////////////////////////////////////////// +/// \relates Vector3 +/// \brief Overload of binary operator != +/// +/// This operator compares strict difference between two vectors. +/// +/// \param left Left operand (a vector) +/// \param right Right operand (a vector) +/// +/// \return True if \a left is not equal to \a right +/// +//////////////////////////////////////////////////////////// +template +bool operator !=(const Vector3& left, const Vector3& right); + +#include + +// Define the most common types +typedef Vector3 Vector3i; +typedef Vector3 Vector3f; + +} // namespace sf + + +#endif // SFML_VECTOR3_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Vector3 +/// \ingroup system +/// +/// sf::Vector3 is a simple class that defines a mathematical +/// vector with three coordinates (x, y and z). It can be used to +/// represent anything that has three dimensions: a size, a point, +/// a velocity, etc. +/// +/// The template parameter T is the type of the coordinates. It +/// can be any type that supports arithmetic operations (+, -, /, *) +/// and comparisons (==, !=), for example int or float. +/// +/// You generally don't have to care about the templated form (sf::Vector3), +/// the most common specializations have special typedefs: +/// \li sf::Vector3 is sf::Vector3f +/// \li sf::Vector3 is sf::Vector3i +/// +/// The sf::Vector3 class has a small and simple interface, its x and y members +/// can be accessed directly (there's no accessor like setX(), getX()) and it +/// contains no mathematical function like dot product, cross product, length, etc. +/// +/// Usage example: +/// \code +/// sf::Vector3f v1(16.5f, 24.f, -8.2f); +/// v1.x = 18.2f; +/// float y = v1.y; +/// float z = v1.z; +/// +/// sf::Vector3f v2 = v1 * 5.f; +/// sf::Vector3f v3; +/// v3 = v1 + v2; +/// +/// bool different = (v2 != v3); +/// \endcode +/// +/// Note: for 2-dimensional vectors, see sf::Vector2. +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/System/Vector3.inl b/include/SFML/System/Vector3.inl new file mode 100644 index 0000000..cff1a30 --- /dev/null +++ b/include/SFML/System/Vector3.inl @@ -0,0 +1,168 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2012 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////// +template +inline Vector3::Vector3() : +x(0), +y(0), +z(0) +{ + +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3::Vector3(T X, T Y, T Z) : +x(X), +y(Y), +z(Z) +{ + +} + + +//////////////////////////////////////////////////////////// +template +template +inline Vector3::Vector3(const Vector3& vector) : +x(static_cast(vector.x)), +y(static_cast(vector.y)), +z(static_cast(vector.z)) +{ +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3 operator -(const Vector3& left) +{ + return Vector3(-left.x, -left.y, -left.z); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3& operator +=(Vector3& left, const Vector3& right) +{ + left.x += right.x; + left.y += right.y; + left.z += right.z; + + return left; +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3& operator -=(Vector3& left, const Vector3& right) +{ + left.x -= right.x; + left.y -= right.y; + left.z -= right.z; + + return left; +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3 operator +(const Vector3& left, const Vector3& right) +{ + return Vector3(left.x + right.x, left.y + right.y, left.z + right.z); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3 operator -(const Vector3& left, const Vector3& right) +{ + return Vector3(left.x - right.x, left.y - right.y, left.z - right.z); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3 operator *(const Vector3& left, T right) +{ + return Vector3(left.x * right, left.y * right, left.z * right); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3 operator *(T left, const Vector3& right) +{ + return Vector3(right.x * left, right.y * left, right.z * left); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3& operator *=(Vector3& left, T right) +{ + left.x *= right; + left.y *= right; + left.z *= right; + + return left; +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3 operator /(const Vector3& left, T right) +{ + return Vector3(left.x / right, left.y / right, left.z / right); +} + + +//////////////////////////////////////////////////////////// +template +inline Vector3& operator /=(Vector3& left, T right) +{ + left.x /= right; + left.y /= right; + left.z /= right; + + return left; +} + + +//////////////////////////////////////////////////////////// +template +inline bool operator ==(const Vector3& left, const Vector3& right) +{ + return (left.x == right.x) && (left.y == right.y) && (left.z == right.z); +} + + +//////////////////////////////////////////////////////////// +template +inline bool operator !=(const Vector3& left, const Vector3& right) +{ + return (left.x != right.x) || (left.y != right.y) || (left.z != right.z); +} diff --git a/include/SFML/Window.hpp b/include/SFML/Window.hpp new file mode 100644 index 0000000..5d51134 --- /dev/null +++ b/include/SFML/Window.hpp @@ -0,0 +1,52 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_SFML_WINDOW_HPP +#define SFML_SFML_WINDOW_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#endif // SFML_SFML_WINDOW_HPP + +//////////////////////////////////////////////////////////// +/// \defgroup window Window module +/// +/// Provides OpenGL-based windows, and abstractions for +/// events and input handling. +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Window/Context.hpp b/include/SFML/Window/Context.hpp new file mode 100644 index 0000000..5f67164 --- /dev/null +++ b/include/SFML/Window/Context.hpp @@ -0,0 +1,140 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_CONTEXT_HPP +#define SFML_CONTEXT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include + + +namespace sf +{ +namespace priv +{ + class GlContext; +} + +//////////////////////////////////////////////////////////// +/// \brief Class holding a valid drawing context +/// +//////////////////////////////////////////////////////////// +class SFML_WINDOW_API Context : GlResource, NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// The constructor creates and activates the context + /// + //////////////////////////////////////////////////////////// + Context(); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + /// The desctructor deactivates and destroys the context + /// + //////////////////////////////////////////////////////////// + ~Context(); + + //////////////////////////////////////////////////////////// + /// \brief Activate or deactivate explicitely the context + /// + /// \param active True to activate, false to deactivate + /// + /// \return True on success, false on failure + /// + //////////////////////////////////////////////////////////// + bool setActive(bool active); + +public : + + //////////////////////////////////////////////////////////// + /// \brief Construct a in-memory context + /// + /// This constructor is for internal use, you don't need + /// to bother with it. + /// + /// \param settings Creation parameters + /// \param width Back buffer width + /// \param height Back buffer height + /// + //////////////////////////////////////////////////////////// + Context(const ContextSettings& settings, unsigned int width, unsigned int height); + +private : + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + priv::GlContext* m_context; ///< Internal OpenGL context +}; + +} // namespace sf + + +#endif // SFML_CONTEXT_HPP + +//////////////////////////////////////////////////////////// +/// \class sf::Context +/// \ingroup window +/// +/// If you need to make OpenGL calls without having an +/// active window (like in a thread), you can use an +/// instance of this class to get a valid context. +/// +/// Having a valid context is necessary for *every* OpenGL call. +/// +/// Note that a context is only active in its current thread, +/// if you create a new thread it will have no valid context +/// by default. +/// +/// To use a sf::Context instance, just construct it and let it +/// live as long as you need a valid context. No explicit activation +/// is needed, all it has to do is to exist. Its destructor +/// will take care of deactivating and freeing all the attached +/// resources. +/// +/// Usage example: +/// \code +/// void threadFunction(void*) +/// { +/// sf::Context context; +/// // from now on, you have a valid context +/// +/// // you can make OpenGL calls +/// glClear(GL_DEPTH_BUFFER_BIT); +/// } +/// // the context is automatically deactivated and destroyed +/// // by the sf::Context destructor +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Window/ContextSettings.hpp b/include/SFML/Window/ContextSettings.hpp new file mode 100644 index 0000000..1bd2b3e --- /dev/null +++ b/include/SFML/Window/ContextSettings.hpp @@ -0,0 +1,104 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_CONTEXTSETTINGS_HPP +#define SFML_CONTEXTSETTINGS_HPP + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Structure defining the settings of the OpenGL +/// context attached to a window +/// +//////////////////////////////////////////////////////////// +struct ContextSettings +{ + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// \param depth Depth buffer bits + /// \param stencil Stencil buffer bits + /// \param antialiasing Antialiasing level + /// \param major Major number of the context version + /// \param minor Minor number of the context version + /// + //////////////////////////////////////////////////////////// + explicit ContextSettings(unsigned int depth = 0, unsigned int stencil = 0, unsigned int antialiasing = 0, unsigned int major = 2, unsigned int minor = 0) : + depthBits (depth), + stencilBits (stencil), + antialiasingLevel(antialiasing), + majorVersion (major), + minorVersion (minor) + { + } + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + unsigned int depthBits; ///< Bits of the depth buffer + unsigned int stencilBits; ///< Bits of the stencil buffer + unsigned int antialiasingLevel; ///< Level of antialiasing + unsigned int majorVersion; ///< Major number of the context version to create + unsigned int minorVersion; ///< Minor number of the context version to create +}; + +} // namespace sf + + +#endif // SFML_CONTEXTSETTINGS_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::ContextSettings +/// \ingroup window +/// +/// ContextSettings allows to define several advanced settings +/// of the OpenGL context attached to a window. All these +/// settings have no impact on the regular SFML rendering +/// (graphics module) -- except the anti-aliasing level, so +/// you may need to use this structure only if you're using +/// SFML as a windowing system for custom OpenGL rendering. +/// +/// The depthBits and stencilBits members define the number +/// of bits per pixel requested for the (respectively) depth +/// and stencil buffers. +/// +/// antialiasingLevel represents the requested number of +/// multisampling levels for anti-aliasing. +/// +/// majorVersion and minorVersion define the version of the +/// OpenGL context that you want. Only versions greater or +/// equal to 3.0 are relevant; versions lesser than 3.0 are +/// all handled the same way (i.e. you can use any version +/// < 3.0 if you don't want an OpenGL 3 context). +/// +/// Please note that these values are only a hint. +/// No failure will be reported if one or more of these values +/// are not supported by the system; instead, SFML will try to +/// find the closest valid match. You can then retrieve the +/// settings that the window actually used to create its context, +/// with Window::getSettings(). +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Window/Event.hpp b/include/SFML/Window/Event.hpp new file mode 100644 index 0000000..e86c2bf --- /dev/null +++ b/include/SFML/Window/Event.hpp @@ -0,0 +1,237 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_EVENT_HPP +#define SFML_EVENT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Defines a system event and its parameters +/// +//////////////////////////////////////////////////////////// +class Event +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Size events parameters (Resized) + /// + //////////////////////////////////////////////////////////// + struct SizeEvent + { + unsigned int width; ///< New width, in pixels + unsigned int height; ///< New height, in pixels + }; + + //////////////////////////////////////////////////////////// + /// \brief Keyboard event parameters (KeyPressed, KeyReleased) + /// + //////////////////////////////////////////////////////////// + struct KeyEvent + { + Keyboard::Key code; ///< Code of the key that has been pressed + bool alt; ///< Is the Alt key pressed? + bool control; ///< Is the Control key pressed? + bool shift; ///< Is the Shift key pressed? + bool system; ///< Is the System key pressed? + }; + + //////////////////////////////////////////////////////////// + /// \brief Text event parameters (TextEntered) + /// + //////////////////////////////////////////////////////////// + struct TextEvent + { + Uint32 unicode; ///< UTF-32 unicode value of the character + }; + + //////////////////////////////////////////////////////////// + /// \brief Mouse move event parameters (MouseMoved) + /// + //////////////////////////////////////////////////////////// + struct MouseMoveEvent + { + int x; ///< X position of the mouse pointer, relative to the left of the owner window + int y; ///< Y position of the mouse pointer, relative to the top of the owner window + }; + + //////////////////////////////////////////////////////////// + /// \brief Mouse buttons events parameters + /// (MouseButtonPressed, MouseButtonReleased) + /// + //////////////////////////////////////////////////////////// + struct MouseButtonEvent + { + Mouse::Button button; ///< Code of the button that has been pressed + int x; ///< X position of the mouse pointer, relative to the left of the owner window + int y; ///< Y position of the mouse pointer, relative to the top of the owner window + }; + + //////////////////////////////////////////////////////////// + /// \brief Mouse wheel events parameters (MouseWheelMoved) + /// + //////////////////////////////////////////////////////////// + struct MouseWheelEvent + { + int delta; ///< Number of ticks the wheel has moved (positive is up, negative is down) + int x; ///< X position of the mouse pointer, relative to the left of the owner window + int y; ///< Y position of the mouse pointer, relative to the top of the owner window + }; + + //////////////////////////////////////////////////////////// + /// \brief Joystick connection events parameters + /// (JoystickConnected, JoystickDisconnected) + /// + //////////////////////////////////////////////////////////// + struct JoystickConnectEvent + { + unsigned int joystickId; ///< Index of the joystick (in range [0 .. Joystick::Count - 1]) + }; + + //////////////////////////////////////////////////////////// + /// \brief Joystick axis move event parameters (JoystickMoved) + /// + //////////////////////////////////////////////////////////// + struct JoystickMoveEvent + { + unsigned int joystickId; ///< Index of the joystick (in range [0 .. Joystick::Count - 1]) + Joystick::Axis axis; ///< Axis on which the joystick moved + float position; ///< New position on the axis (in range [-100 .. 100]) + }; + + //////////////////////////////////////////////////////////// + /// \brief Joystick buttons events parameters + /// (JoystickButtonPressed, JoystickButtonReleased) + /// + //////////////////////////////////////////////////////////// + struct JoystickButtonEvent + { + unsigned int joystickId; ///< Index of the joystick (in range [0 .. Joystick::Count - 1]) + unsigned int button; ///< Index of the button that has been pressed (in range [0 .. Joystick::ButtonCount - 1]) + }; + + //////////////////////////////////////////////////////////// + /// \brief Enumeration of the different types of events + /// + //////////////////////////////////////////////////////////// + enum EventType + { + Closed, ///< The window requested to be closed (no data) + Resized, ///< The window was resized (data in event.size) + LostFocus, ///< The window lost the focus (no data) + GainedFocus, ///< The window gained the focus (no data) + TextEntered, ///< A character was entered (data in event.text) + KeyPressed, ///< A key was pressed (data in event.key) + KeyReleased, ///< A key was released (data in event.key) + MouseWheelMoved, ///< The mouse wheel was scrolled (data in event.mouseWheel) + MouseButtonPressed, ///< A mouse button was pressed (data in event.mouseButton) + MouseButtonReleased, ///< A mouse button was released (data in event.mouseButton) + MouseMoved, ///< The mouse cursor moved (data in event.mouseMove) + MouseEntered, ///< The mouse cursor entered the area of the window (no data) + MouseLeft, ///< The mouse cursor left the area of the window (no data) + JoystickButtonPressed, ///< A joystick button was pressed (data in event.joystickButton) + JoystickButtonReleased, ///< A joystick button was released (data in event.joystickButton) + JoystickMoved, ///< The joystick moved along an axis (data in event.joystickMove) + JoystickConnected, ///< A joystick was connected (data in event.joystickConnect) + JoystickDisconnected, ///< A joystick was disconnected (data in event.joystickConnect) + + Count ///< Keep last -- the total number of event types + }; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + EventType type; ///< Type of the event + + union + { + SizeEvent size; ///< Size event parameters (Event::Resized) + KeyEvent key; ///< Key event parameters (Event::KeyPressed, Event::KeyReleased) + TextEvent text; ///< Text event parameters (Event::TextEntered) + MouseMoveEvent mouseMove; ///< Mouse move event parameters (Event::MouseMoved) + MouseButtonEvent mouseButton; ///< Mouse button event parameters (Event::MouseButtonPressed, Event::MouseButtonReleased) + MouseWheelEvent mouseWheel; ///< Mouse wheel event parameters (Event::MouseWheelMoved) + JoystickMoveEvent joystickMove; ///< Joystick move event parameters (Event::JoystickMoved) + JoystickButtonEvent joystickButton; ///< Joystick button event parameters (Event::JoystickButtonPressed, Event::JoystickButtonReleased) + JoystickConnectEvent joystickConnect; ///< Joystick (dis)connect event parameters (Event::JoystickConnected, Event::JoystickDisconnected) + }; +}; + +} // namespace sf + + +#endif // SFML_EVENT_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Event +/// \ingroup window +/// +/// sf::Event holds all the informations about a system event +/// that just happened. Events are retrieved using the +/// sf::Window::pollEvent and sf::Window::waitEvent functions. +/// +/// A sf::Event instance contains the type of the event +/// (mouse moved, key pressed, window closed, ...) as well +/// as the details about this particular event. Please note that +/// the event parameters are defined in a union, which means that +/// only the member matching the type of the event will be properly +/// filled; all other members will have undefined values and must not +/// be read if the type of the event doesn't match. For example, +/// if you received a KeyPressed event, then you must read the +/// event.key member, all other members such as event.MouseMove +/// or event.text will have undefined values. +/// +/// Usage example: +/// \code +/// sf::Event event; +/// while (window.pollEvent(event)) +/// { +/// // Request for closing the window +/// if (event.type == sf::Event::Closed) +/// window.close(); +/// +/// // The escape key was pressed +/// if ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape)) +/// window.close(); +/// +/// // The window was resized +/// if (event.type == sf::Event::Resized) +/// doSomethingWithTheNewSize(event.size.width, event.size.height); +/// +/// // etc ... +/// } +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Window/Export.hpp b/include/SFML/Window/Export.hpp new file mode 100644 index 0000000..ff06576 --- /dev/null +++ b/include/SFML/Window/Export.hpp @@ -0,0 +1,48 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_WINDOW_EXPORT_HPP +#define SFML_WINDOW_EXPORT_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +//////////////////////////////////////////////////////////// +// Define portable import / export macros +//////////////////////////////////////////////////////////// +#if defined(SFML_WINDOW_EXPORTS) + + #define SFML_WINDOW_API SFML_API_EXPORT + +#else + + #define SFML_WINDOW_API SFML_API_IMPORT + +#endif + + +#endif // SFML_WINDOW_EXPORT_HPP diff --git a/include/SFML/Window/GlResource.hpp b/include/SFML/Window/GlResource.hpp new file mode 100644 index 0000000..560a637 --- /dev/null +++ b/include/SFML/Window/GlResource.hpp @@ -0,0 +1,76 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_GLRESOURCE_HPP +#define SFML_GLRESOURCE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Base class for classes that require an OpenGL context +/// +//////////////////////////////////////////////////////////// +class SFML_WINDOW_API GlResource +{ +protected : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + GlResource(); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + //////////////////////////////////////////////////////////// + ~GlResource(); + + //////////////////////////////////////////////////////////// + /// \brief Make sure that a valid OpenGL context exists in the current thread + /// + //////////////////////////////////////////////////////////// + static void ensureGlContext(); +}; + +} // namespace sf + + +#endif // SFML_GLRESOURCE_HPP + +//////////////////////////////////////////////////////////// +/// \class sf::GlResource +/// \ingroup window +/// +/// This class is for internal use only, it must be the base +/// of every class that requires a valid OpenGL context in +/// order to work. +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Window/Joystick.hpp b/include/SFML/Window/Joystick.hpp new file mode 100644 index 0000000..8e65309 --- /dev/null +++ b/include/SFML/Window/Joystick.hpp @@ -0,0 +1,203 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_JOYSTICK_HPP +#define SFML_JOYSTICK_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Give access to the real-time state of the joysticks +/// +//////////////////////////////////////////////////////////// +class SFML_WINDOW_API Joystick +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Constants related to joysticks capabilities + /// + //////////////////////////////////////////////////////////// + enum + { + Count = 8, ///< Maximum number of supported joysticks + ButtonCount = 32, ///< Maximum number of supported buttons + AxisCount = 8 ///< Maximum number of supported axes + }; + + //////////////////////////////////////////////////////////// + /// \brief Axes supported by SFML joysticks + /// + //////////////////////////////////////////////////////////// + enum Axis + { + X, ///< The X axis + Y, ///< The Y axis + Z, ///< The Z axis + R, ///< The R axis + U, ///< The U axis + V, ///< The V axis + PovX, ///< The X axis of the point-of-view hat + PovY ///< The Y axis of the point-of-view hat + }; + + //////////////////////////////////////////////////////////// + /// \brief Check if a joystick is connected + /// + /// \param joystick Index of the joystick to check + /// + /// \return True if the joystick is connected, false otherwise + /// + //////////////////////////////////////////////////////////// + static bool isConnected(unsigned int joystick); + + //////////////////////////////////////////////////////////// + /// \brief Return the number of buttons supported by a joystick + /// + /// If the joystick is not connected, this function returns 0. + /// + /// \param joystick Index of the joystick + /// + /// \return Number of buttons supported by the joystick + /// + //////////////////////////////////////////////////////////// + static unsigned int getButtonCount(unsigned int joystick); + + //////////////////////////////////////////////////////////// + /// \brief Check if a joystick supports a given axis + /// + /// If the joystick is not connected, this function returns false. + /// + /// \param joystick Index of the joystick + /// \param axis Axis to check + /// + /// \return True if the joystick supports the axis, false otherwise + /// + //////////////////////////////////////////////////////////// + static bool hasAxis(unsigned int joystick, Axis axis); + + //////////////////////////////////////////////////////////// + /// \brief Check if a joystick button is pressed + /// + /// If the joystick is not connected, this function returns false. + /// + /// \param joystick Index of the joystick + /// \param button Button to check + /// + /// \return True if the button is pressed, false otherwise + /// + //////////////////////////////////////////////////////////// + static bool isButtonPressed(unsigned int joystick, unsigned int button); + + //////////////////////////////////////////////////////////// + /// \brief Get the current position of a joystick axis + /// + /// If the joystick is not connected, this function returns 0. + /// + /// \param joystick Index of the joystick + /// \param axis Axis to check + /// + /// \return Current position of the axis, in range [-100 .. 100] + /// + //////////////////////////////////////////////////////////// + static float getAxisPosition(unsigned int joystick, Axis axis); + + //////////////////////////////////////////////////////////// + /// \brief Update the states of all joysticks + /// + /// This function is used internally by SFML, so you normally + /// don't have to call it explicitely. However, you may need to + /// call it if you have no window yet (or no window at all): + /// in this case the joysticks states are not updated automatically. + /// + //////////////////////////////////////////////////////////// + static void update(); +}; + +} // namespace sf + + +#endif // SFML_JOYSTICK_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Joystick +/// \ingroup window +/// +/// sf::Joystick provides an interface to the state of the +/// joysticks. It only contains static functions, so it's not +/// meant to be instanciated. Instead, each joystick is identified +/// by an index that is passed to the functions of this class. +/// +/// This class allows users to query the state of joysticks at any +/// time and directly, without having to deal with a window and +/// its events. Compared to the JoystickMoved, JoystickButtonPressed +/// and JoystickButtonReleased events, sf::Joystick can retrieve the +/// state of axes and buttons of joysticks at any time +/// (you don't need to store and update a boolean on your side +/// in order to know if a button is pressed or released), and you +/// always get the real state of joysticks, even if they are +/// moved, pressed or released when your window is out of focus +/// and no event is triggered. +/// +/// SFML supports: +/// \li 8 joysticks (sf::Joystick::Count) +/// \li 32 buttons per joystick (sf::Joystick::ButtonCount) +/// \li 8 axes per joystick (sf::Joystick::AxisCount) +/// +/// Unlike the keyboard or mouse, the state of joysticks is sometimes +/// not directly available (depending on the OS), therefore an update() +/// function must be called in order to update the current state of +/// joysticks. When you have a window with event handling, this is done +/// automatically, you don't need to call anything. But if you have no +/// window, or if you want to check joysticks state before creating one, +/// you must call sf::Joystick::update explicitely. +/// +/// Usage example: +/// \code +/// // Is joystick #0 connected? +/// bool connected = sf::Joystick::isConnected(0); +/// +/// // How many buttons does joystick #0 support? +/// unsigned int buttons = sf::Joystick::getButtonCount(0); +/// +/// // Does joystick #0 define a X axis? +/// bool hasX = sf::Joystick::hasAxis(0, sf::Joystick::X); +/// +/// // Is button #2 pressed on joystick #0? +/// bool pressed = sf::Joystick::isButtonPressed(0, 2); +/// +/// // What's the current position of the Y axis on joystick #0? +/// float position = sf::Joystick::getAxisPosition(0, sf::Joystick::Y); +/// \endcode +/// +/// \see sf::Keyboard, sf::Mouse +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Window/Keyboard.hpp b/include/SFML/Window/Keyboard.hpp new file mode 100644 index 0000000..f10dc7c --- /dev/null +++ b/include/SFML/Window/Keyboard.hpp @@ -0,0 +1,209 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_KEYBOARD_HPP +#define SFML_KEYBOARD_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief Give access to the real-time state of the keyboard +/// +//////////////////////////////////////////////////////////// +class SFML_WINDOW_API Keyboard +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Key codes + /// + //////////////////////////////////////////////////////////// + enum Key + { + Unknown = -1, ///< Unhandled key + A = 0, ///< The A key + B, ///< The B key + C, ///< The C key + D, ///< The D key + E, ///< The E key + F, ///< The F key + G, ///< The G key + H, ///< The H key + I, ///< The I key + J, ///< The J key + K, ///< The K key + L, ///< The L key + M, ///< The M key + N, ///< The N key + O, ///< The O key + P, ///< The P key + Q, ///< The Q key + R, ///< The R key + S, ///< The S key + T, ///< The T key + U, ///< The U key + V, ///< The V key + W, ///< The W key + X, ///< The X key + Y, ///< The Y key + Z, ///< The Z key + Num0, ///< The 0 key + Num1, ///< The 1 key + Num2, ///< The 2 key + Num3, ///< The 3 key + Num4, ///< The 4 key + Num5, ///< The 5 key + Num6, ///< The 6 key + Num7, ///< The 7 key + Num8, ///< The 8 key + Num9, ///< The 9 key + Escape, ///< The Escape key + LControl, ///< The left Control key + LShift, ///< The left Shift key + LAlt, ///< The left Alt key + LSystem, ///< The left OS specific key: window (Windows and Linux), apple (MacOS X), ... + RControl, ///< The right Control key + RShift, ///< The right Shift key + RAlt, ///< The right Alt key + RSystem, ///< The right OS specific key: window (Windows and Linux), apple (MacOS X), ... + Menu, ///< The Menu key + LBracket, ///< The [ key + RBracket, ///< The ] key + SemiColon, ///< The ; key + Comma, ///< The , key + Period, ///< The . key + Quote, ///< The ' key + Slash, ///< The / key + BackSlash, ///< The \ key + Tilde, ///< The ~ key + Equal, ///< The = key + Dash, ///< The - key + Space, ///< The Space key + Return, ///< The Return key + BackSpace, ///< The Backspace key + Tab, ///< The Tabulation key + PageUp, ///< The Page up key + PageDown, ///< The Page down key + End, ///< The End key + Home, ///< The Home key + Insert, ///< The Insert key + Delete, ///< The Delete key + Add, ///< The + key + Subtract, ///< The - key + Multiply, ///< The * key + Divide, ///< The / key + Left, ///< Left arrow + Right, ///< Right arrow + Up, ///< Up arrow + Down, ///< Down arrow + Numpad0, ///< The numpad 0 key + Numpad1, ///< The numpad 1 key + Numpad2, ///< The numpad 2 key + Numpad3, ///< The numpad 3 key + Numpad4, ///< The numpad 4 key + Numpad5, ///< The numpad 5 key + Numpad6, ///< The numpad 6 key + Numpad7, ///< The numpad 7 key + Numpad8, ///< The numpad 8 key + Numpad9, ///< The numpad 9 key + F1, ///< The F1 key + F2, ///< The F2 key + F3, ///< The F3 key + F4, ///< The F4 key + F5, ///< The F5 key + F6, ///< The F6 key + F7, ///< The F7 key + F8, ///< The F8 key + F9, ///< The F9 key + F10, ///< The F10 key + F11, ///< The F11 key + F12, ///< The F12 key + F13, ///< The F13 key + F14, ///< The F14 key + F15, ///< The F15 key + Pause, ///< The Pause key + + KeyCount ///< Keep last -- the total number of keyboard keys + }; + + //////////////////////////////////////////////////////////// + /// \brief Check if a key is pressed + /// + /// \param key Key to check + /// + /// \return True if the key is pressed, false otherwise + /// + //////////////////////////////////////////////////////////// + static bool isKeyPressed(Key key); +}; + +} // namespace sf + + +#endif // SFML_KEYBOARD_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Keyboard +/// \ingroup window +/// +/// sf::Keyboard provides an interface to the state of the +/// keyboard. It only contains static functions (a single +/// keyboard is assumed), so it's not meant to be instanciated. +/// +/// This class allows users to query the keyboard state at any +/// time and directly, without having to deal with a window and +/// its events. Compared to the KeyPressed and KeyReleased events, +/// sf::Keyboard can retrieve the state of a key at any time +/// (you don't need to store and update a boolean on your side +/// in order to know if a key is pressed or released), and you +/// always get the real state of the keyboard, even if keys are +/// pressed or released when your window is out of focus and no +/// event is triggered. +/// +/// Usage example: +/// \code +/// if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) +/// { +/// // move left... +/// } +/// else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) +/// { +/// // move right... +/// } +/// else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)) +/// { +/// // quit... +/// } +/// \endcode +/// +/// \see sf::Joystick, sf::Mouse +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Window/Mouse.hpp b/include/SFML/Window/Mouse.hpp new file mode 100644 index 0000000..dd26d1a --- /dev/null +++ b/include/SFML/Window/Mouse.hpp @@ -0,0 +1,167 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_MOUSE_HPP +#define SFML_MOUSE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +class Window; + +//////////////////////////////////////////////////////////// +/// \brief Give access to the real-time state of the mouse +/// +//////////////////////////////////////////////////////////// +class SFML_WINDOW_API Mouse +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Mouse buttons + /// + //////////////////////////////////////////////////////////// + enum Button + { + Left, ///< The left mouse button + Right, ///< The right mouse button + Middle, ///< The middle (wheel) mouse button + XButton1, ///< The first extra mouse button + XButton2, ///< The second extra mouse button + + ButtonCount ///< Keep last -- the total number of mouse buttons + }; + + //////////////////////////////////////////////////////////// + /// \brief Check if a mouse button is pressed + /// + /// \param button Button to check + /// + /// \return True if the button is pressed, false otherwise + /// + //////////////////////////////////////////////////////////// + static bool isButtonPressed(Button button); + + //////////////////////////////////////////////////////////// + /// \brief Get the current position of the mouse in desktop coordinates + /// + /// This function returns the global position of the mouse + /// cursor on the desktop. + /// + /// \return Current position of the mouse + /// + //////////////////////////////////////////////////////////// + static Vector2i getPosition(); + + //////////////////////////////////////////////////////////// + /// \brief Get the current position of the mouse in window coordinates + /// + /// This function returns the current position of the mouse + /// cursor, relative to the given window. + /// + /// \param relativeTo Reference window + /// + /// \return Current position of the mouse + /// + //////////////////////////////////////////////////////////// + static Vector2i getPosition(const Window& relativeTo); + + //////////////////////////////////////////////////////////// + /// \brief Set the current position of the mouse in desktop coordinates + /// + /// This function sets the global position of the mouse + /// cursor on the desktop. + /// + /// \param position New position of the mouse + /// + //////////////////////////////////////////////////////////// + static void setPosition(const Vector2i& position); + + //////////////////////////////////////////////////////////// + /// \brief Set the current position of the mouse in window coordinates + /// + /// This function sets the current position of the mouse + /// cursor, relative to the given window. + /// + /// \param position New position of the mouse + /// \param relativeTo Reference window + /// + //////////////////////////////////////////////////////////// + static void setPosition(const Vector2i& position, const Window& relativeTo); +}; + +} // namespace sf + + +#endif // SFML_MOUSE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Mouse +/// \ingroup window +/// +/// sf::Mouse provides an interface to the state of the +/// mouse. It only contains static functions (a single +/// mouse is assumed), so it's not meant to be instanciated. +/// +/// This class allows users to query the mouse state at any +/// time and directly, without having to deal with a window and +/// its events. Compared to the MouseMoved, MouseButtonPressed +/// and MouseButtonReleased events, sf::Mouse can retrieve the +/// state of the cursor and the buttons at any time +/// (you don't need to store and update a boolean on your side +/// in order to know if a button is pressed or released), and you +/// always get the real state of the mouse, even if it is +/// moved, pressed or released when your window is out of focus +/// and no event is triggered. +/// +/// The setPosition and getPosition functions can be used to change +/// or retrieve the current position of the mouse pointer. There are +/// two versions: one that operates in global coordinates (relative +/// to the desktop) and one that operates in window coordinates +/// (relative to a specific window). +/// +/// Usage example: +/// \code +/// if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) +/// { +/// // left click... +/// } +/// +/// // get global mouse position +/// sf::Vector2i position = sf::Mouse::getPosition(); +/// +/// // set mouse position relative to a window +/// sf::Mouse::setPosition(sf::Vector2i(100, 200), window); +/// \endcode +/// +/// \see sf::Joystick, sf::Keyboard +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Window/VideoMode.hpp b/include/SFML/Window/VideoMode.hpp new file mode 100644 index 0000000..beec607 --- /dev/null +++ b/include/SFML/Window/VideoMode.hpp @@ -0,0 +1,228 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_VIDEOMODE_HPP +#define SFML_VIDEOMODE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// \brief VideoMode defines a video mode (width, height, bpp) +/// +//////////////////////////////////////////////////////////// +class SFML_WINDOW_API VideoMode +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructors initializes all members to 0. + /// + //////////////////////////////////////////////////////////// + VideoMode(); + + //////////////////////////////////////////////////////////// + /// \brief Construct the video mode with its attributes + /// + /// \param modeWidth Width in pixels + /// \param modeHeight Height in pixels + /// \param modeBitsPerPixel Pixel depths in bits per pixel + /// + //////////////////////////////////////////////////////////// + VideoMode(unsigned int modeWidth, unsigned int modeHeight, unsigned int modeBitsPerPixel = 32); + + //////////////////////////////////////////////////////////// + /// \brief Get the current desktop video mode + /// + /// \return Current desktop video mode + /// + //////////////////////////////////////////////////////////// + static VideoMode getDesktopMode(); + + //////////////////////////////////////////////////////////// + /// \brief Retrieve all the video modes supported in fullscreen mode + /// + /// When creating a fullscreen window, the video mode is restricted + /// to be compatible with what the graphics driver and monitor + /// support. This function returns the complete list of all video + /// modes that can be used in fullscreen mode. + /// The returned array is sorted from best to worst, so that + /// the first element will always give the best mode (higher + /// width, height and bits-per-pixel). + /// + /// \return Array containing all the supported fullscreen modes + /// + //////////////////////////////////////////////////////////// + static const std::vector& getFullscreenModes(); + + //////////////////////////////////////////////////////////// + /// \brief Tell whether or not the video mode is valid + /// + /// The validity of video modes is only relevant when using + /// fullscreen windows; otherwise any video mode can be used + /// with no restriction. + /// + /// \return True if the video mode is valid for fullscreen mode + /// + //////////////////////////////////////////////////////////// + bool isValid() const; + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + unsigned int width; ///< Video mode width, in pixels + unsigned int height; ///< Video mode height, in pixels + unsigned int bitsPerPixel; ///< Video mode pixel depth, in bits per pixels +}; + +//////////////////////////////////////////////////////////// +/// \relates VideoMode +/// \brief Overload of == operator to compare two video modes +/// +/// \param left Left operand (a video mode) +/// \param right Right operand (a video mode) +/// +/// \return True if modes are equal +/// +//////////////////////////////////////////////////////////// +SFML_WINDOW_API bool operator ==(const VideoMode& left, const VideoMode& right); + +//////////////////////////////////////////////////////////// +/// \relates VideoMode +/// \brief Overload of != operator to compare two video modes +/// +/// \param left Left operand (a video mode) +/// \param right Right operand (a video mode) +/// +/// \return True if modes are different +/// +//////////////////////////////////////////////////////////// +SFML_WINDOW_API bool operator !=(const VideoMode& left, const VideoMode& right); + +//////////////////////////////////////////////////////////// +/// \relates VideoMode +/// \brief Overload of < operator to compare video modes +/// +/// \param left Left operand (a video mode) +/// \param right Right operand (a video mode) +/// +/// \return True if \a left is lesser than \a right +/// +//////////////////////////////////////////////////////////// +SFML_WINDOW_API bool operator <(const VideoMode& left, const VideoMode& right); + +//////////////////////////////////////////////////////////// +/// \relates VideoMode +/// \brief Overload of > operator to compare video modes +/// +/// \param left Left operand (a video mode) +/// \param right Right operand (a video mode) +/// +/// \return True if \a left is greater than \a right +/// +//////////////////////////////////////////////////////////// +SFML_WINDOW_API bool operator >(const VideoMode& left, const VideoMode& right); + +//////////////////////////////////////////////////////////// +/// \relates VideoMode +/// \brief Overload of <= operator to compare video modes +/// +/// \param left Left operand (a video mode) +/// \param right Right operand (a video mode) +/// +/// \return True if \a left is lesser or equal than \a right +/// +//////////////////////////////////////////////////////////// +SFML_WINDOW_API bool operator <=(const VideoMode& left, const VideoMode& right); + +//////////////////////////////////////////////////////////// +/// \relates VideoMode +/// \brief Overload of >= operator to compare video modes +/// +/// \param left Left operand (a video mode) +/// \param right Right operand (a video mode) +/// +/// \return True if \a left is greater or equal than \a right +/// +//////////////////////////////////////////////////////////// +SFML_WINDOW_API bool operator >=(const VideoMode& left, const VideoMode& right); + +} // namespace sf + + +#endif // SFML_VIDEOMODE_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::VideoMode +/// \ingroup window +/// +/// A video mode is defined by a width and a height (in pixels) +/// and a depth (in bits per pixel). Video modes are used to +/// setup windows (sf::Window) at creation time. +/// +/// The main usage of video modes is for fullscreen mode: +/// indeed you must use one of the valid video modes +/// allowed by the OS (which are defined by what the monitor +/// and the graphics card support), otherwise your window +/// creation will just fail. +/// +/// sf::VideoMode provides a static function for retrieving +/// the list of all the video modes supported by the system: +/// getFullscreenModes(). +/// +/// A custom video mode can also be checked directly for +/// fullscreen compatibility with its isValid() function. +/// +/// Additionnally, sf::VideoMode provides a static function +/// to get the mode currently used by the desktop: getDesktopMode(). +/// This allows to build windows with the same size or pixel +/// depth as the current resolution. +/// +/// Usage example: +/// \code +/// // Display the list of all the video modes available for fullscreen +/// std::vector modes = sf::VideoMode::getFullscreenModes(); +/// for (std::size_t i = 0; i < modes.size(); ++i) +/// { +/// sf::VideoMode mode = modes[i]; +/// std::cout << "Mode #" << i << ": " +/// << mode.width << "x" << mode.height << " - " +/// << mode.bitsPerPixel << " bpp" << std::endl; +/// } +/// +/// // Create a window with the same pixel depth as the desktop +/// sf::VideoMode desktop = sf::VideoMode::getDesktopMode(); +/// window.create(sf::VideoMode(1024, 768, desktop.bitsPerPixel), "SFML window"); +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Window/Window.hpp b/include/SFML/Window/Window.hpp new file mode 100644 index 0000000..cee0a1d --- /dev/null +++ b/include/SFML/Window/Window.hpp @@ -0,0 +1,540 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_WINDOW_HPP +#define SFML_WINDOW_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace sf +{ +namespace priv +{ + class GlContext; + class WindowImpl; +} + +class Event; + +//////////////////////////////////////////////////////////// +/// \brief Window that serves as a target for OpenGL rendering +/// +//////////////////////////////////////////////////////////// +class SFML_WINDOW_API Window : GlResource, NonCopyable +{ +public : + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + /// This constructor doesn't actually create the window, + /// use the other constructors or call "create" to do so. + /// + //////////////////////////////////////////////////////////// + Window(); + + //////////////////////////////////////////////////////////// + /// \brief Construct a new window + /// + /// This constructor creates the window with the size and pixel + /// depth defined in \a mode. An optional style can be passed to + /// customize the look and behaviour of the window (borders, + /// title bar, resizable, closable, ...). If \a style contains + /// Style::Fullscreen, then \a mode must be a valid video mode. + /// + /// The fourth parameter is an optional structure specifying + /// advanced OpenGL context settings such as antialiasing, + /// depth-buffer bits, etc. + /// + /// \param mode Video mode to use (defines the width, height and depth of the rendering area of the window) + /// \param title Title of the window + /// \param style Window style + /// \param settings Additional settings for the underlying OpenGL context + /// + //////////////////////////////////////////////////////////// + Window(VideoMode mode, const String& title, Uint32 style = Style::Default, const ContextSettings& settings = ContextSettings()); + + //////////////////////////////////////////////////////////// + /// \brief Construct the window from an existing control + /// + /// Use this constructor if you want to create an OpenGL + /// rendering area into an already existing control. + /// + /// The second parameter is an optional structure specifying + /// advanced OpenGL context settings such as antialiasing, + /// depth-buffer bits, etc. + /// + /// \param handle Platform-specific handle of the control + /// \param settings Additional settings for the underlying OpenGL context + /// + //////////////////////////////////////////////////////////// + explicit Window(WindowHandle handle, const ContextSettings& settings = ContextSettings()); + + //////////////////////////////////////////////////////////// + /// \brief Destructor + /// + /// Closes the window and free all the resources attached to it. + /// + //////////////////////////////////////////////////////////// + virtual ~Window(); + + //////////////////////////////////////////////////////////// + /// \brief Create (or recreate) the window + /// + /// If the window was already created, it closes it first. + /// If \a style contains Style::Fullscreen, then \a mode + /// must be a valid video mode. + /// + /// \param mode Video mode to use (defines the width, height and depth of the rendering area of the window) + /// \param title Title of the window + /// \param style Window style + /// \param settings Additional settings for the underlying OpenGL context + /// + //////////////////////////////////////////////////////////// + void create(VideoMode mode, const String& title, Uint32 style = Style::Default, const ContextSettings& settings = ContextSettings()); + + //////////////////////////////////////////////////////////// + /// \brief Create (or recreate) the window from an existing control + /// + /// Use this function if you want to create an OpenGL + /// rendering area into an already existing control. + /// If the window was already created, it closes it first. + /// + /// \param handle Platform-specific handle of the control + /// \param settings Additional settings for the underlying OpenGL context + /// + //////////////////////////////////////////////////////////// + void create(WindowHandle handle, const ContextSettings& settings = ContextSettings()); + + //////////////////////////////////////////////////////////// + /// \brief Close the window and destroy all the attached resources + /// + /// After calling this function, the sf::Window instance remains + /// valid and you can call create() to recreate the window. + /// All other functions such as pollEvent() or display() will + /// still work (i.e. you don't have to test isOpen() every time), + /// and will have no effect on closed windows. + /// + //////////////////////////////////////////////////////////// + void close(); + + //////////////////////////////////////////////////////////// + /// \brief Tell whether or not the window is open + /// + /// This function returns whether or not the window exists. + /// Note that a hidden window (setVisible(false)) is open + /// (therefore this function would return true). + /// + /// \return True if the window is open, false if it has been closed + /// + //////////////////////////////////////////////////////////// + bool isOpen() const; + + //////////////////////////////////////////////////////////// + /// \brief Get the settings of the OpenGL context of the window + /// + /// Note that these settings may be different from what was + /// passed to the constructor or the create() function, + /// if one or more settings were not supported. In this case, + /// SFML chose the closest match. + /// + /// \return Structure containing the OpenGL context settings + /// + //////////////////////////////////////////////////////////// + const ContextSettings& getSettings() const; + + //////////////////////////////////////////////////////////// + /// \brief Pop the event on top of the event queue, if any, and return it + /// + /// This function is not blocking: if there's no pending event then + /// it will return false and leave \a event unmodified. + /// Note that more than one event may be present in the event queue, + /// thus you should always call this function in a loop + /// to make sure that you process every pending event. + /// \code + /// sf::Event event; + /// while (window.pollEvent(event)) + /// { + /// // process event... + /// } + /// \endcode + /// + /// \param event Event to be returned + /// + /// \return True if an event was returned, or false if the event queue was empty + /// + /// \see waitEvent + /// + //////////////////////////////////////////////////////////// + bool pollEvent(Event& event); + + //////////////////////////////////////////////////////////// + /// \brief Wait for an event and return it + /// + /// This function is blocking: if there's no pending event then + /// it will wait until an event is received. + /// After this function returns (and no error occured), + /// the \a event object is always valid and filled properly. + /// This function is typically used when you have a thread that + /// is dedicated to events handling: you want to make this thread + /// sleep as long as no new event is received. + /// \code + /// sf::Event event; + /// if (window.waitEvent(event)) + /// { + /// // process event... + /// } + /// \endcode + /// + /// \param event Event to be returned + /// + /// \return False if any error occured + /// + /// \see pollEvent + /// + //////////////////////////////////////////////////////////// + bool waitEvent(Event& event); + + //////////////////////////////////////////////////////////// + /// \brief Get the position of the window + /// + /// \return Position of the window, in pixels + /// + /// \see setPosition + /// + //////////////////////////////////////////////////////////// + Vector2i getPosition() const; + + //////////////////////////////////////////////////////////// + /// \brief Change the position of the window on screen + /// + /// This function only works for top-level windows + /// (i.e. it will be ignored for windows created from + /// the handle of a child window/control). + /// + /// \param position New position, in pixels + /// + /// \see getPosition + /// + //////////////////////////////////////////////////////////// + void setPosition(const Vector2i& position); + + //////////////////////////////////////////////////////////// + /// \brief Get the size of the rendering region of the window + /// + /// The size doesn't include the titlebar and borders + /// of the window. + /// + /// \return Size in pixels + /// + /// \see setSize + /// + //////////////////////////////////////////////////////////// + Vector2u getSize() const; + + //////////////////////////////////////////////////////////// + /// \brief Change the size of the rendering region of the window + /// + /// \param size New size, in pixels + /// + /// \see getSize + /// + //////////////////////////////////////////////////////////// + void setSize(const Vector2u size); + + //////////////////////////////////////////////////////////// + /// \brief Change the title of the window + /// + /// \param title New title + /// + /// \see setIcon + /// + //////////////////////////////////////////////////////////// + void setTitle(const String& title); + + //////////////////////////////////////////////////////////// + /// \brief Change the window's icon + /// + /// \a pixels must be an array of \a width x \a height pixels + /// in 32-bits RGBA format. + /// + /// The OS default icon is used by default. + /// + /// \param width Icon's width, in pixels + /// \param height Icon's height, in pixels + /// \param pixels Pointer to the array of pixels in memory + /// + /// \see setTitle + /// + //////////////////////////////////////////////////////////// + void setIcon(unsigned int width, unsigned int height, const Uint8* pixels); + + //////////////////////////////////////////////////////////// + /// \brief Show or hide the window + /// + /// The window is shown by default. + /// + /// \param visible True to show the window, false to hide it + /// + //////////////////////////////////////////////////////////// + void setVisible(bool visible); + + //////////////////////////////////////////////////////////// + /// \brief Enable or disable vertical synchronization + /// + /// Activating vertical synchronization will limit the number + /// of frames displayed to the refresh rate of the monitor. + /// This can avoid some visual artifacts, and limit the framerate + /// to a good value (but not constant across different computers). + /// + /// Vertical synchronization is disabled by default. + /// + /// \param enabled True to enable v-sync, false to deactivate it + /// + //////////////////////////////////////////////////////////// + void setVerticalSyncEnabled(bool enabled); + + //////////////////////////////////////////////////////////// + /// \brief Show or hide the mouse cursor + /// + /// The mouse cursor is visible by default. + /// + /// \param visible True to show the mouse cursor, false to hide it + /// + //////////////////////////////////////////////////////////// + void setMouseCursorVisible(bool visible); + + //////////////////////////////////////////////////////////// + /// \brief Enable or disable automatic key-repeat + /// + /// If key repeat is enabled, you will receive repeated + /// KeyPressed events while keeping a key pressed. If it is disabled, + /// you will only get a single event when the key is pressed. + /// + /// Key repeat is enabled by default. + /// + /// \param enabled True to enable, false to disable + /// + //////////////////////////////////////////////////////////// + void setKeyRepeatEnabled(bool enabled); + + //////////////////////////////////////////////////////////// + /// \brief Limit the framerate to a maximum fixed frequency + /// + /// If a limit is set, the window will use a small delay after + /// each call to display() to ensure that the current frame + /// lasted long enough to match the framerate limit. + /// SFML will try to match the given limit as much as it can, + /// but since it internally uses sf::sleep, whose precision + /// depends on the underlying OS, the results may be a little + /// unprecise as well (for example, you can get 65 FPS when + /// requesting 60). + /// + /// \param limit Framerate limit, in frames per seconds (use 0 to disable limit) + /// + //////////////////////////////////////////////////////////// + void setFramerateLimit(unsigned int limit); + + //////////////////////////////////////////////////////////// + /// \brief Change the joystick threshold + /// + /// The joystick threshold is the value below which + /// no JoystickMoved event will be generated. + /// + /// The threshold value is 0.1 by default. + /// + /// \param threshold New threshold, in the range [0, 100] + /// + //////////////////////////////////////////////////////////// + void setJoystickThreshold(float threshold); + + //////////////////////////////////////////////////////////// + /// \brief Activate or deactivate the window as the current target + /// for OpenGL rendering + /// + /// A window is active only on the current thread, if you want to + /// make it active on another thread you have to deactivate it + /// on the previous thread first if it was active. + /// Only one window can be active on a thread at a time, thus + /// the window previously active (if any) automatically gets deactivated. + /// + /// \param active True to activate, false to deactivate + /// + /// \return True if operation was successful, false otherwise + /// + //////////////////////////////////////////////////////////// + bool setActive(bool active = true) const; + + //////////////////////////////////////////////////////////// + /// \brief Display on screen what has been rendered to the window so far + /// + /// This function is typically called after all OpenGL rendering + /// has been done for the current frame, in order to show + /// it on screen. + /// + //////////////////////////////////////////////////////////// + void display(); + + //////////////////////////////////////////////////////////// + /// \brief Get the OS-specific handle of the window + /// + /// The type of the returned handle is sf::WindowHandle, + /// which is a typedef to the handle type defined by the OS. + /// You shouldn't need to use this function, unless you have + /// very specific stuff to implement that SFML doesn't support, + /// or implement a temporary workaround until a bug is fixed. + /// + /// \return System handle of the window + /// + //////////////////////////////////////////////////////////// + WindowHandle getSystemHandle() const; + +protected : + + //////////////////////////////////////////////////////////// + /// \brief Function called after the window has been created + /// + /// This function is called so that derived classes can + /// perform their own specific initialization as soon as + /// the window is created. + /// + //////////////////////////////////////////////////////////// + virtual void onCreate(); + + //////////////////////////////////////////////////////////// + /// \brief Function called after the window has been resized + /// + /// This function is called so that derived classes can + /// perform custom actions when the size of the window changes. + /// + //////////////////////////////////////////////////////////// + virtual void onResize(); + +private: + + //////////////////////////////////////////////////////////// + /// \brief Processes an event before it is sent to the user + /// + /// This function is called every time an event is received + /// from the internal window (through pollEvent or waitEvent). + /// It filters out unwanted events, and performs whatever internal + /// stuff the window needs before the event is returned to the + /// user. + /// + /// \param event Event to filter + /// + //////////////////////////////////////////////////////////// + bool filterEvent(const Event& event); + + //////////////////////////////////////////////////////////// + /// \brief Perform some common internal initializations + /// + //////////////////////////////////////////////////////////// + void initialize(); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + priv::WindowImpl* m_impl; ///< Platform-specific implementation of the window + priv::GlContext* m_context; ///< Platform-specific implementation of the OpenGL context + Clock m_clock; ///< Clock for measuring the elapsed time between frames + Time m_frameTimeLimit; ///< Current framerate limit +}; + +} // namespace sf + + +#endif // SFML_WINDOW_HPP + + +//////////////////////////////////////////////////////////// +/// \class sf::Window +/// \ingroup window +/// +/// sf::Window is the main class of the Window module. It defines +/// an OS window that is able to receive an OpenGL rendering. +/// +/// A sf::Window can create its own new window, or be embedded into +/// an already existing control using the create(handle) function. +/// This can be useful for embedding an OpenGL rendering area into +/// a view which is part of a bigger GUI with existing windows, +/// controls, etc. It can also serve as embedding an OpenGL rendering +/// area into a window created by another (probably richer) GUI library +/// like Qt or wxWidgets. +/// +/// The sf::Window class provides a simple interface for manipulating +/// the window: move, resize, show/hide, control mouse cursor, etc. +/// It also provides event handling through its pollEvent() and waitEvent() +/// functions. +/// +/// Note that OpenGL experts can pass their own parameters (antialiasing +/// level, bits for the depth and stencil buffers, etc.) to the +/// OpenGL context attached to the window, with the sf::ContextSettings +/// structure which is passed as an optional argument when creating the +/// window. +/// +/// Usage example: +/// \code +/// // Declare and create a new window +/// sf::Window window(sf::VideoMode(800, 600), "SFML window"); +/// +/// // Limit the framerate to 60 frames per second (this step is optional) +/// window.setFramerateLimit(60); +/// +/// // The main loop - ends as soon as the window is closed +/// while (window.isOpen()) +/// { +/// // Event processing +/// sf::Event event; +/// while (window.pollEvent(event)) +/// { +/// // Request for closing the window +/// if (event.type == sf::Event::Closed) +/// window.close(); +/// } +/// +/// // Activate the window for OpenGL rendering +/// window.setActive(); +/// +/// // OpenGL drawing commands go here... +/// +/// // End the current frame and display its contents on screen +/// window.display(); +/// } +/// \endcode +/// +//////////////////////////////////////////////////////////// diff --git a/include/SFML/Window/WindowHandle.hpp b/include/SFML/Window/WindowHandle.hpp new file mode 100644 index 0000000..7fb2bb8 --- /dev/null +++ b/include/SFML/Window/WindowHandle.hpp @@ -0,0 +1,64 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_WINDOWHANDLE_HPP +#define SFML_WINDOWHANDLE_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + +// Windows' HWND is a typedef on struct HWND__* +#if defined(SFML_SYSTEM_WINDOWS) + struct HWND__; +#endif + +namespace sf +{ +//////////////////////////////////////////////////////////// +/// Define a low-level window handle type, specific to +/// each platform +//////////////////////////////////////////////////////////// +#if defined(SFML_SYSTEM_WINDOWS) + + // Window handle is HWND (HWND__*) on Windows + typedef HWND__* WindowHandle; + +#elif defined(SFML_SYSTEM_LINUX) || defined(SFML_SYSTEM_FREEBSD) + + // Window handle is Window (unsigned long) on Unix - X11 + typedef unsigned long WindowHandle; + +#elif defined(SFML_SYSTEM_MACOS) + + // Window handle is NSWindow (void*) on Mac OS X - Cocoa + typedef void* WindowHandle; + +#endif + +} // namespace sf + + +#endif // SFML_WINDOWHANDLE_HPP diff --git a/include/SFML/Window/WindowStyle.hpp b/include/SFML/Window/WindowStyle.hpp new file mode 100644 index 0000000..fa69d32 --- /dev/null +++ b/include/SFML/Window/WindowStyle.hpp @@ -0,0 +1,53 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_WINDOWSTYLE_HPP +#define SFML_WINDOWSTYLE_HPP + + +namespace sf +{ +namespace Style +{ + //////////////////////////////////////////////////////////// + /// \ingroup window + /// \brief Enumeration of the window styles + /// + //////////////////////////////////////////////////////////// + enum + { + None = 0, ///< No border / title bar (this flag and all others are mutually exclusive) + Titlebar = 1 << 0, ///< Title bar + fixed border + Resize = 1 << 1, ///< Titlebar + resizable border + maximize button + Close = 1 << 2, ///< Titlebar + close button + Fullscreen = 1 << 3, ///< Fullscreen mode (this flag and all others are mutually exclusive) + + Default = Titlebar | Resize | Close ///< Default window style + }; +} + +} // namespace sf + + +#endif // SFML_WINDOWSTYLE_HPP diff --git a/include/damncute/AAction.hh b/include/damncute/AAction.hh new file mode 100644 index 0000000..dcd4c71 --- /dev/null +++ b/include/damncute/AAction.hh @@ -0,0 +1,55 @@ +#ifndef _AACTION_H_ +# define _AACTION_H_ + +#include +#include "Core/Core.hh" + +#define DC_INPUT_NONE 99999 + +namespace DamnCute +{ + template + class AAction + { + + protected: + sf::Keyboard::Key _key1; + sf::Keyboard::Key _key2; + sf::Joystick::Axis _stickAxis; + int _stickButton; + int _stickButton2; + bool _hasAxis; + T* _entity; + + public: + explicit AAction(T *p, sf::Keyboard::Key k, sf::Joystick::Axis s) + : _key1(k), _key2(sf::Keyboard::Unknown), _stickAxis(s), _stickButton(DC_INPUT_NONE), _stickButton2(DC_INPUT_NONE), _hasAxis(true), _entity(p) { } + + explicit AAction(T *p, sf::Keyboard::Key k1, sf::Keyboard::Key k2, sf::Joystick::Axis s) + : _key1(k1), _key2(k2), _stickAxis(s), _stickButton(DC_INPUT_NONE), _stickButton2(DC_INPUT_NONE), _hasAxis(true), _entity(p) { } + + explicit AAction(T *p, sf::Keyboard::Key k, int s) + : _key1(k), _key2(sf::Keyboard::Unknown), _stickAxis(sf::Joystick::Axis::X), _stickButton(s), _stickButton2(DC_INPUT_NONE), _hasAxis(false), _entity(p) { } + + explicit AAction(T *p, sf::Keyboard::Key k1, sf::Keyboard::Key k2, int s1, int s2) + : _key1(k1), _key2(k2), _stickAxis(sf::Joystick::Axis::X), _stickButton(s1), _stickButton2(s2), _hasAxis(false), _entity(p) {} + + virtual ~AAction() = default; + + virtual void execute() = 0; + virtual const std::string& getName() const = 0; + virtual bool hasInput(int) = 0; + + inline bool hasStickAxis() const { return _hasAxis; } + + void setStickInput(sf::Joystick::Axis input) { _stickAxis = input; } + void setStickInput(int input) { _stickButton = input; } + void setKeyboardInput1(sf::Keyboard::Key input) { _key1 = input; } + void setKeyboardInput2(sf::Keyboard::Key input) { _key2 = input; } + + + }; + +} + +#endif diff --git a/include/damncute/AGame.hh b/include/damncute/AGame.hh new file mode 100644 index 0000000..46ec502 --- /dev/null +++ b/include/damncute/AGame.hh @@ -0,0 +1,37 @@ +#ifndef AGAME_H_ +# define AGAME_H_ + +#include +#include +#include "Core/Core.hh" +#include "APlayer.hh" +#include "Background.hh" + +namespace DamnCute { + class AGame { + + public: + explicit AGame(const std::string&, const std::string&); + explicit AGame(); + virtual ~AGame(); + virtual void pause() = 0; + virtual void run() = 0; + template + unsigned int addPlayer(); + APlayer* getPlayer(unsigned int); + unsigned int addPlayer(APlayer*); + void delPlayer(unsigned int); + void stopRender(); + + private: + std::list _players; + + protected: + Core* _engine; + std::string _baseResourcesPath; + Background* _bg; + bool _isEnd; + }; +} + +#endif /* !AGAME_H_ */ diff --git a/include/damncute/APattern.hh b/include/damncute/APattern.hh new file mode 100644 index 0000000..2531714 --- /dev/null +++ b/include/damncute/APattern.hh @@ -0,0 +1,75 @@ +#ifndef APATTERN_H_ +# define APATTERN_H_ + +#include +#include +#include +#include "Path.hh" +#include "Core/Core.hh" +#include "IRenderable.hh" + +namespace DamnCute { +#ifdef __BULLER_PHYSIC_ID__ +#undef __BULLER_PHYSIC_ID__ +#endif +#define __BULLER_PHYSIC_ID__ 0 + class APattern : public IRenderable { + public: + APattern() = default; + + ~APattern() { + for (unsigned int i = 0; i != _paths.size(); ++i) { + delete _paths[i]; + } + } + virtual void initialize() = 0; + virtual int addPath(Path* p) { + _paths.push_back(p); + return _paths.size() - 1; + } + virtual void update(sf::RenderTarget* w_ptr) { + for (unsigned int i = 0; i != _paths.size(); ++i) { + _paths[i]->update(w_ptr); + } + up(); + } + virtual void moveOrigin(glm::vec2&& n) noexcept { + for (unsigned int i = 0; i != _paths.size(); ++i) { + _paths[i]->moveOrigin(std::move(n)); + } + } + virtual void switchGen() { + for (unsigned int i = 0; i != _paths.size(); ++i) { + _paths[i]->switchGen(); + } + } + virtual void setStatusGen(bool&& b) { + for (unsigned int i = 0; i != _paths.size(); ++i) { + _paths[i]->setStatusGen(std::move(b)); + } + } + virtual void countdownPushMoveModifier(unsigned int f, const glm::mat4& m, unsigned int pathNumber) { + _paths[pathNumber]->countdownPushMoveModifier(f, m); + } + virtual void setTimeSeparator(unsigned int newT, unsigned int p) { + _paths[p]->setTimeSeparator(newT); + } + virtual void deletePath(unsigned int p) { + if (p > _paths.size()) { + return; + } + delete _paths[p]; + std::vector::iterator it = _paths.begin(); + while (p) { + --p; + ++it; + } + _paths.erase(it); + } + protected: + virtual void up() {} + std::vector _paths; + }; +} + +#endif /* !APATTERN_H_ */ diff --git a/include/damncute/APhysics.hh b/include/damncute/APhysics.hh new file mode 100644 index 0000000..abd3f7d --- /dev/null +++ b/include/damncute/APhysics.hh @@ -0,0 +1,155 @@ +#ifndef APHISICS_H_ +# define APHISICS_H_ + +#include +#include +#include +#include "Core/Core.hh" + +/* + * ----- + * |A|B| + * ----- + * |C|D| + * ----- + */ + +namespace DamnCute { + class APhysics { + private: + bool _physicallyActive; + bool _destructible; + bool _destructor; + unsigned int _type; + + QuadTree, __DQUADTREE_COMPLEXITY__>* _quadTree; + QuadTree, __DQUADTREE_COMPLEXITY__>::Array_Type_ _path; + + std::map*, std::list::iterator> _where; + + template + inline QuadTree, __DQUADTREE_COMPLEXITY__>::Array_Type_&& _generateQuadTreePos(unsigned int x, unsigned int y) noexcept { + unsigned int nodeX = sizeX / 2; + unsigned int nodeY = sizeY / 2; + + for (unsigned short i = 0; i < iter; ++i) + { + if (x < nodeX && y > nodeY) + { + _path[i] = QuadTree, __DQUADTREE_COMPLEXITY__>::AZone; + nodeX -= nodeX / 2; + nodeY += nodeY / 2; + } + else if (x > nodeX && y > nodeY) + { + _path[i] = QuadTree, __DQUADTREE_COMPLEXITY__>::BZone; + nodeX += nodeX / 2; + nodeY += nodeY / 2; + } + else if (x < nodeX && y < nodeY) + { + _path[i] = QuadTree, __DQUADTREE_COMPLEXITY__>::CZone; + nodeX -= nodeX / 2; + nodeY -= nodeY / 2; + } + else + { + _path[i] = QuadTree, __DQUADTREE_COMPLEXITY__>::DZone; + nodeX += nodeX / 2; + nodeY -= nodeY / 2; + } + } + return std::move(_path); + } + + template + inline std::list, __DQUADTREE_COMPLEXITY__>::Array_Type_>&& _generateQuadTreePos(unsigned int x, unsigned int y, unsigned int w, unsigned int + h) noexcept { + std::list, __DQUADTREE_COMPLEXITY__>::Array_Type_> list; + unsigned int quadWidth = sizeX / (2 * __DQUADTREE_COMPLEXITY__); + unsigned int quadHeight = sizeY / (2 * __DQUADTREE_COMPLEXITY__); + + for (unsigned int i = 0; i < w; i += quadWidth) { + for (unsigned int j = 0; j < h; j += quadHeight) { + list.push_back(_generateQuadTreePos(x + i, y + j)); + } + } + return std::move(list); + } + + public: + explicit APhysics(unsigned int x, unsigned int y, bool destructibility, bool destructor, unsigned int type = 0) : _physicallyActive(true), _destructible(destructibility), _destructor(destructor), _type(type), _quadTree(sCore->getQuadTree()) { + _generateQuadTreePos<1920, 1080, __DQUADTREE_COMPLEXITY__>(x, y); + } + + virtual ~APhysics() { + for (std::map*, std::list::iterator>::iterator it = _where.begin(); it != _where.end(); ++it) { + it->first->erase(it->second); + } + } + + inline unsigned int getType() const { + return _type; + } + + inline void setType(unsigned int id) { + _type = id; + } + + inline bool isDestructible() { + return _destructible; + } + + inline bool isDestructor() { + return _destructor; + } + + protected: + virtual void collisionHandler(APhysics*) = 0; + + bool preciseDetection(const sf::Sprite& s1, const sf::Sprite& s2) { + if (s1.getGlobalBounds().intersects(s2.getGlobalBounds())) { + return true; + } + return false; + } + + void updateQuadTreePos(unsigned int x, unsigned int y, unsigned int width = 1, unsigned int height = 1) { + const unsigned int quadWidth = 1920 / (2 * __DQUADTREE_COMPLEXITY__); + const unsigned int quadHeight = 1080 / (2 * __DQUADTREE_COMPLEXITY__); + + std::list* potentialDangerList; + std::list::iterator whereInList; + + if (!_physicallyActive) + return; + for (std::map*, std::list::iterator>::iterator it = _where.begin(); it != _where.end(); ++it) { + it->first->erase(it->second); + } + _where.clear(); + + for (unsigned int i = 0; i <= (width + quadWidth); i += quadWidth) { + for (unsigned int j = 0; j <= (height + quadHeight); j += quadHeight) { + _generateQuadTreePos<1920, 1080, __DQUADTREE_COMPLEXITY__>(x + i, y + j); + potentialDangerList = _quadTree->getDataTreeNode(_path); + if (_destructible && potentialDangerList) { + for (std::list::iterator potentialDanger = potentialDangerList->begin(); potentialDanger != potentialDangerList->end(); ++potentialDanger) { + if ((*potentialDanger)->isDestructor()) { + collisionHandler(*potentialDanger); + } + } + } + if (!potentialDangerList) { + potentialDangerList = new std::list(); + _quadTree->setTreeNode(potentialDangerList, _path); + } + potentialDangerList->push_front(this); + whereInList = potentialDangerList->begin(); + _where[potentialDangerList] = whereInList; + } + } + } + }; +} + +#endif /* !APHISICS_H_ */ diff --git a/include/damncute/APlayer.hh b/include/damncute/APlayer.hh new file mode 100644 index 0000000..b0b9074 --- /dev/null +++ b/include/damncute/APlayer.hh @@ -0,0 +1,65 @@ +#ifndef APLAYER_H_ +# define APLAYER_H_ + +# include +# include +# include +# include "AAction.hh" +# include "IRenderable.hh" +# include "Core/Core.hh" +# include "APhysics.hh" + +namespace DamnCute +{ + +# ifdef __PLAYER_PHYSIC_ID__ +# undef __PLAYER_PHYSIC_ID__ +# endif +# define __PLAYER_PHYSIC_ID__ 1 + + class APlayer : public IRenderable, public APhysics { + + private: + void action(); + std::vector*> _actions; + + sf::Sprite _entity; + sf::Texture _tex; + int _speed; + int _nbPlayer; + + public: + explicit APlayer(const std::string& = "resources/player.tga", + float = 100, float = 100, int nbPlayer = 1, int speed = 5); + virtual ~APlayer() = default; + APlayer& operator=(const APlayer&) = delete; + + void update(sf::RenderTarget*); + void addAction(AAction*); + + inline sf::Sprite& getSprite() { return _entity; } + inline sf::Texture& getTexture() { return _tex; } + inline int& getSpeed() { return _speed; } + inline int getNumPlayer() const { return _nbPlayer; } + inline AAction* getAction(std::string); + + template + void setAction(const std::string& name, T t) { + + for (size_t i = 0; i < _actions.size(); ++i) { + if (name == (_actions[i])->getName()) + setActionInput(i, t, inputNumber); + } + } + + template + void setActionInput(int i, T t, int a) { + (void)i; (void)t; (void)a; + static_assert(std::is_same::value || std::is_same::value || std::is_same::value, "Error: type is not defined for input."); + } + + }; + +} + +#endif diff --git a/include/damncute/Background.hh b/include/damncute/Background.hh new file mode 100644 index 0000000..44cbe20 --- /dev/null +++ b/include/damncute/Background.hh @@ -0,0 +1,32 @@ +#ifndef BACKGROUND_H_ +# define BACKGROUND_H_ + +#include +#include +#include +#include "IRenderable.hh" +#include "Core/Core.hh" + +namespace DamnCute { + class Background : public IRenderable { + + private: + Background(const Background&); + float _XSpeed; + float _YSpeed; + sf::Sprite _bg; + sf::Texture _tex; + + public: + Background(const std::string&, int = 0, int = 0); + virtual ~Background() = default; + float getXScrollSpeed() const ; + float getYScrollSpeed() const ; + + void setScrollSpeed(float, float); + void setPosition(int, int); + virtual void update(sf::RenderTarget*); + }; +} + +#endif /* !BACKGROUND_H_ */ diff --git a/include/damncute/Bullet.hh b/include/damncute/Bullet.hh new file mode 100644 index 0000000..947f7ef --- /dev/null +++ b/include/damncute/Bullet.hh @@ -0,0 +1,51 @@ +#ifndef BULLET_H_ +# define BULLET_H_ + +#include +#include +#include "APhysics.hh" + +namespace DamnCute { + class Bullet : public APhysics { + + public: + explicit Bullet(const glm::vec2&, const float = 0.0f, unsigned int = 60); + explicit Bullet(const Bullet&) = delete; + explicit Bullet(Bullet&&); + virtual ~Bullet() = default; + Bullet& operator=(const Bullet&) = delete; + Bullet& operator=(Bullet&&); + void update(const glm::mat4&, sf::RenderTarget*); + unsigned int decreaseLifeTime(); + inline const sf::Sprite& getSprite() const noexcept { + return _s; + } + inline const glm::vec2& getOrigin() const noexcept { + return _origin; + } + inline float getRot() const noexcept { + return _rot; + } + inline unsigned int getLife() const noexcept { + return _lifeTime; + } + void setLife(unsigned int l) noexcept { + _lifeTime = l; + } + inline void moveOrigin(glm::vec2&& n) noexcept { + _origin = n; + } + void setTexure(sf::Texture*); + virtual void collisionHandler(APhysics*); + + private: + glm::vec2 _origin; + float _rot; + glm::mat4 _selfTransform; + sf::Texture* _tex; // TODO : need to be deleted or changed by referance + sf::Sprite _s; + unsigned int _lifeTime; + }; +} + +#endif diff --git a/include/damncute/Button.hh b/include/damncute/Button.hh new file mode 100644 index 0000000..903863d --- /dev/null +++ b/include/damncute/Button.hh @@ -0,0 +1,59 @@ +#ifndef __BUTTON_H__ +# define __BUTTON_H__ + +# include +# include +# include "Core/Core.hh" +# include "SubMenu.hh" + +namespace DamnCute { + class Button : public IRenderable { + + private: + std::vector::iterator _itSub; + std::vector _sub; + const std::string _name; + bool _alive; + int _x; + int _y; + int _offsetx = 0; + int _offsety = 0; + bool _start = false; + sf::Sprite _s; + sf::Texture& _tex; + sf::Text _text; + + public: + explicit Button(const std::string &, sf::Text &, int, int, sf::Texture&); + virtual ~Button() = default; + + inline void operator=(const Button& b) { + _tex = b._tex; + _s = b._s; + _text = b._text; + } + virtual void update(sf::RenderTarget*); + + int getX(); + int getY(); + bool getStart(); + const std::string getName(); + + void setAlive(); + void setAlive2(); + void setOffsets(int, int); + void setPos(int, int); + void setStart(); + + bool hasField(const std::string &); + const std::string getField(const std::string &); + void moveDown(); + void moveUp(); + void moveRight(); + void moveLeft(); + void addSubMenu(SubMenu *b); + + }; +}; + +#endif diff --git a/include/damncute/Core/Core.hh b/include/damncute/Core/Core.hh new file mode 100644 index 0000000..3cf891d --- /dev/null +++ b/include/damncute/Core/Core.hh @@ -0,0 +1,123 @@ +#ifndef CORE_H_ +# define CORE_H_ + +#include +#include +#include +#include +#include +#include + +#include "QuadTree.hh" +#include "../IRenderable.hh" + +# ifndef __DWIDTH +# define __DWIDTH 1920 +# define __DHEIGHT 1080 +# endif + +#ifndef __DQUADTREE_COMPLEXITY__ +#define __DQUADTREE_COMPLEXITY__ 6 +#endif + +#if __DQUADTREE_COMPLEXITY__ > 10 +#warning "you will use more than 300 Mb =O" +#endif + +namespace DamnCute { + class APhysics; + class Core { + public: + Core(const Core&) = delete; + Core(const Core&&) = delete; + Core& operator=(const Core&) = delete; + Core& operator=(const Core&&) = delete; + + static Core* getInstance(); + void closeWin(); + void reset(); + void freeAll(); + void addObject(IRenderable*); + void delObject(IRenderable*); + void hideObject(IRenderable*); + void addOnBg(IRenderable*); + void flushScene(); + void flushEvent(); + template + void createWindow(unsigned int width = 0, unsigned int height = 0, bool full = false) { + unsigned int style = full << 3 | sf::Style::Titlebar; + sf::VideoMode v; + + if (full) { + v = sf::VideoMode::getFullscreenModes()[0]; + } else if (width == 0 && height == 0) { + v = sf::VideoMode::getDesktopMode(); + } else { + v = sf::VideoMode(width, height); + } + _win = new sf::RenderWindow(v, "DamnCute Engine", style); + _Rtex.create(SIZEX, SIZEY); + _Rtex.setSmooth(true); + _rsp.setTexture(_Rtex.getTexture()); + _rsp.setScale((float)getWindowSizeX() / (float)__DWIDTH , (float)getWindowSizeY() / (float)__DHEIGHT); + _win->setVerticalSyncEnabled(true); + _win->setFramerateLimit(60); + } + int getWindowStatus(); + int getWindowSizeX(); + int getWindowSizeY(); + sf::Music& getMusic(); + void musicPath(std::string); + void musicPlay(int); + int getMusicListSize(); + + inline bool getGameStatus() const { + return _gameStatus; + } + inline void switchGameStatus() { + _gameStatus = !_gameStatus; + } + inline sf::Event getEvent() const { + return event; + } + inline void setFPSDisplay(bool value) { + _displayFPS = value; + } + inline void addBulletsCounter() { + ++_numberOfBullets; + } + inline QuadTree, __DQUADTREE_COMPLEXITY__>* getQuadTree() { + return &_physicTree; + } + private: + + Core(); + ~Core(); + void refresh(); + + static Core* __coreInstance; + QuadTree, __DQUADTREE_COMPLEXITY__> _physicTree; + sf::RenderWindow* _win; + sf::RenderTexture _Rtex; + std::list _objects; + bool _gameStatus; + bool _displayFPS; + unsigned int _numberOfBullets; + unsigned int _Pframmes; + unsigned int _tmpFrammes; + + sf::Sprite _rsp; + sf::Clock _gameClock; + sf::Event event; + sf::Music _music; + std::string _musicPath; + std::vector _musicList; + + void saveFolderMusic(std::string); + bool supportedFileFormat(std::string); + }; +} + +#define sCore Core::getInstance() + +#endif /* !CORE_H_ */ diff --git a/include/damncute/Core/QuadTree.hh b/include/damncute/Core/QuadTree.hh new file mode 100644 index 0000000..ab6ae85 --- /dev/null +++ b/include/damncute/Core/QuadTree.hh @@ -0,0 +1,76 @@ +#include +#include + +#ifndef QUADTREE_H_ +# define QUADTREE_H_ + +namespace DamnCute { + template + class QuadTree { + public: + enum TDir { + AZone, + BZone, + CZone, + DZone + }; + enum _CQTREEVALUES_ { + _COMPLEXITY_ = LEVEL, + }; + private: +#include "TreeNode.hh" + typedef std::array __path_ar_; + TreeNode* _head; + + inline TreeNode* _getNode(__path_ar_ path) const { + TreeNode* x = _head; + for (typename __path_ar_::const_iterator it = path.cbegin(); it != path.cend(); ++it) { + if (*it == AZone) + x = x->up; + else if (*it == BZone) + x = x->down; + else if (*it == CZone) + x = x->right; + else if (*it == DZone) + x = x->left; + } + return x; + } + + public: + explicit QuadTree() : _head(new TreeNode(LEVEL)) {} + + T* getDataTreeNode(__path_ar_& path) const { + return _getNode(path)->data; + } + + void setTreeNode(T* value, const __path_ar_& path) { + _getNode(path)->data = value; + } + + void swap(__path_ar_& path1, const __path_ar_& path2) { + T* a = _getNode(path1)->data; + T* b = _getNode(path2)->data; + T* tmp; + + tmp = a; + a = b; + b = tmp; + } + + bool thereIsObject(const __path_ar_& p) { + if (_getNode(p)->data) { + return true; + } + return false; + } + + inline unsigned int&& getLevel() const { + return std::move(LEVEL); + } + + typedef __path_ar_ Array_Type_; + }; +} + +#endif /* !QUADTREE_H_ */ diff --git a/include/damncute/Core/TreeNode.hh b/include/damncute/Core/TreeNode.hh new file mode 100644 index 0000000..5b9a7d0 --- /dev/null +++ b/include/damncute/Core/TreeNode.hh @@ -0,0 +1,38 @@ +#include + +#ifndef NODE_H_ +# define NODE_H_ + +template +struct TreeNode { + + DATANODE* data; // TODO must exist only for final recurtion + TreeNode* up; + TreeNode* down; + TreeNode* right; + TreeNode* left; + + explicit TreeNode(unsigned short level) { + if (level) { + up = new TreeNode(level - 1); + down = new TreeNode(level - 1); + left = new TreeNode(level - 1); + right = new TreeNode(level - 1); + } else { + up = NULL; + down = NULL; + left = NULL; + right = NULL; + } + data = NULL; + } + + virtual ~TreeNode() { + delete up; + delete down; + delete left; + delete right; + } +}; + +#endif /* !NODE_H_ */ diff --git a/include/damncute/IRenderable.hh b/include/damncute/IRenderable.hh new file mode 100644 index 0000000..cb36738 --- /dev/null +++ b/include/damncute/IRenderable.hh @@ -0,0 +1,14 @@ +#ifndef IRENDERABLE_H_ +# define IRENDERABLE_H_ + +# include + +namespace DamnCute { + class IRenderable { + public: + virtual void update(sf::RenderTarget*) = 0; + virtual ~IRenderable() {} + }; +} + +#endif /* !IRENDERABLE_H_ */ diff --git a/include/damncute/Menu.hh b/include/damncute/Menu.hh new file mode 100644 index 0000000..d2e1333 --- /dev/null +++ b/include/damncute/Menu.hh @@ -0,0 +1,97 @@ +#ifndef IMENU_H_ +# define IMENU_H_ + +#include +#include +#include +#include +#include "Background.hh" +#include "AAction.hh" +#include "Core/Core.hh" +#include "SubMenu.hh" +#include "Button.hh" + +namespace DamnCute { + class Menu : public IRenderable { + + private: + template + class IfThenElse { + public: + enum { + value = C + }; + }; + + int _offsetSubMenuX = 15; + int _offsetSubMenuY = 25; + unsigned int _characterSize = 20; + sf::Font _font; + std::string _font_path; + bool _alive; + bool _clicked; + bool _clicked2; + int _cursPosX; + int _cursPosY; + sf::Texture _tex; + sf::Texture _tex2; + Game *_game; + Core* _core; + Background *_bgPTR; + std::string _bg; + sf::Sprite *_cursor = NULL; + std::vector::iterator _itButtons; + std::vector _buttons; + std::vector*> _actions; + bool _isGame; + + public: + explicit Menu(const std::string& texfile); + virtual ~Menu() = default; + void addStartButton(int x, int y, const std::string& text); + void setTextureCursor(const std::string&, int, int); + virtual void update(sf::RenderTarget* win); + + template void setButton(Button* b) { + static_assert(IfThenElse<_buttons.size() < ID>::value, + "ID is out of bounds"); + _buttons[ID] = b; + } + + void setFontPath(std::string path){ + _font_path = path; + _font.loadFromFile(_font_path); + } + + void setTextureButton(const std::string&); + + bool getAlive() { + return (_alive); + } + void addButton(int x, int y, const std::string&); + void addSubMenu(const std::string &Button, const std::string &Option, std::vector listOption, int x, int y); + + void setButtonPos(const std::string &Button, int x, int y); + void setButtonOffset(const std::string &Button, int x, int y); + void setSubMenuOffset(int x, int y) { + _offsetSubMenuX = x; + _offsetSubMenuY = y; + } + + void update() { + _alive = DamnCute::Core::getInstance()->getWindowStatus(); + } + + const std::string getSubMenuField(const std::string &); + void delAll(); + void gameMode(); + + void moveDown(); + void moveUp(); + void moveRight(); + void moveLeft(); + void moveReturn(); + }; +} + +#endif /* !IMENU_H_ */ diff --git a/include/damncute/Path.hh b/include/damncute/Path.hh new file mode 100644 index 0000000..a26ab5a --- /dev/null +++ b/include/damncute/Path.hh @@ -0,0 +1,52 @@ +#ifndef PATTERN_H_ +# define PATTERN_H_ + +#include +#include +#include +#include +#include "APlayer.hh" +#include "Bullet.hh" +#include "IRenderable.hh" +#include "Core/Core.hh" + +namespace DamnCute { + class Path : public IRenderable { + private: + sf::Texture _tex; + Bullet _bulletModel; + std::list _bullets; + unsigned int _timeLoad; + unsigned int _timeSeparator; + glm::mat4 _stepModifier; + bool _generate; + + typedef struct __SmodEvent { + unsigned int _futureframe; + glm::mat4 _newMat; + } modEvent; + std::stack _modEventStack; + + public: + explicit Path(const glm::mat4&, unsigned int frameStep = 5, Bullet&& = Bullet(glm::vec2(0,0)), const std::string& = "resources/test.tga"); + virtual ~Path() = default; + virtual void update(sf::RenderTarget*); + void countdownPushMoveModifier(unsigned int, const glm::mat4&); + void setPhysicBulletModelId(unsigned int); + void setAllPhysicBulletId(unsigned int); + inline void moveOrigin(glm::vec2&& n) noexcept { + _bulletModel.moveOrigin(std::move(n)); + } + inline void switchGen() { + _generate = !_generate; + } + inline void setStatusGen(bool&& b) { + _generate = b; + } + inline void setTimeSeparator(unsigned int newTs) { + _timeSeparator = newTs; + } + }; +} + +#endif /* !PATTERN_H_ */ diff --git a/include/damncute/SubMenu.hh b/include/damncute/SubMenu.hh new file mode 100644 index 0000000..67562ee --- /dev/null +++ b/include/damncute/SubMenu.hh @@ -0,0 +1,48 @@ +#ifndef SUBMENU_H_ +# define SUBMENU_H_ + +# include +# include +# include "Core/Core.hh" + +namespace DamnCute { + class SubMenu : public IRenderable { + + private: + bool _alive; + sf::Text _text; + std::vector::iterator _it; + std::vector _options; + + public: + explicit SubMenu(sf::Text &, const std::string & , std::vector); + virtual ~SubMenu() = default; + + inline void operator=(const SubMenu& b) { + _text = b._text; + } + + void moveRight(); + void moveLeft(); + + const std::string getName() { + return (_text.getString()); + } + + const std::string getField() { + return ((*_it)->getString()); + } + + void setAlive() { + if (_alive == false) + _alive = true; + else + _alive = false; + } + + virtual void update(sf::RenderTarget*); + + }; +} + +#endif diff --git a/include/glm/core/_detail.hpp b/include/glm/core/_detail.hpp new file mode 100644 index 0000000..607c32b --- /dev/null +++ b/include/glm/core/_detail.hpp @@ -0,0 +1,482 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/_detail.hpp +/// @date 2008-07-24 / 2011-06-14 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef glm_core_detail +#define glm_core_detail + +#include "setup.hpp" +#include +#if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) +#include +#endif + +namespace glm{ +namespace detail +{ + class half; + +#if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available + typedef int64_t sint64; + typedef uint64_t uint64; +#elif(GLM_COMPILER & GLM_COMPILER_VC) + typedef signed __int64 sint64; + typedef unsigned __int64 uint64; +#elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC | GLM_COMPILER_CLANG)) + __extension__ typedef signed long long sint64; + __extension__ typedef unsigned long long uint64; +#elif(GLM_COMPILER & GLM_COMPILER_BC) + typedef Int64 sint64; + typedef Uint64 uint64; +#else//unknown compiler + typedef signed long long sint64; + typedef unsigned long long uint64; +#endif//GLM_COMPILER + + template + struct If + { + template + static GLM_FUNC_QUALIFIER T apply(F functor, const T& val) + { + return functor(val); + } + }; + + template<> + struct If + { + template + static GLM_FUNC_QUALIFIER T apply(F, const T& val) + { + return val; + } + }; + + //template + //struct traits + //{ + // static const bool is_signed = false; + // static const bool is_float = false; + // static const bool is_vector = false; + // static const bool is_matrix = false; + // static const bool is_genType = false; + // static const bool is_genIType = false; + // static const bool is_genUType = false; + //}; + + //template <> + //struct traits + //{ + // static const bool is_float = true; + // static const bool is_genType = true; + //}; + + //template <> + //struct traits + //{ + // static const bool is_float = true; + // static const bool is_genType = true; + //}; + + //template <> + //struct traits + //{ + // static const bool is_float = true; + // static const bool is_genType = true; + //}; + + //template + //struct desc + //{ + // typedef genType type; + // typedef genType * pointer; + // typedef genType const* const_pointer; + // typedef genType const *const const_pointer_const; + // typedef genType *const pointer_const; + // typedef genType & reference; + // typedef genType const& const_reference; + // typedef genType const& param_type; + + // typedef typename genType::value_type value_type; + // typedef typename genType::size_type size_type; + // static const typename size_type value_size; + //}; + + //template + //const typename desc::size_type desc::value_size = genType::value_size(); + + union uif32 + { + GLM_FUNC_QUALIFIER uif32() : + i(0) + {} + + GLM_FUNC_QUALIFIER uif32(float f) : + f(f) + {} + + GLM_FUNC_QUALIFIER uif32(unsigned int i) : + i(i) + {} + + float f; + unsigned int i; + }; + + union uif64 + { + GLM_FUNC_QUALIFIER uif64() : + i(0) + {} + + GLM_FUNC_QUALIFIER uif64(double f) : + f(f) + {} + + GLM_FUNC_QUALIFIER uif64(uint64 i) : + i(i) + {} + + double f; + uint64 i; + }; + + typedef uif32 uif; + + ////////////////// + // int + + template + struct is_int + { + enum is_int_enum + { + _YES = 0, + _NO = 1 + }; + }; + +#define GLM_DETAIL_IS_INT(T) \ + template <> \ + struct is_int \ + { \ + enum is_int_enum \ + { \ + _YES = 1, \ + _NO = 0 \ + }; \ + } + + ////////////////// + // uint + + template + struct is_uint + { + enum is_uint_enum + { + _YES = 0, + _NO = 1 + }; + }; + +#define GLM_DETAIL_IS_UINT(T) \ + template <> \ + struct is_uint \ + { \ + enum is_uint_enum \ + { \ + _YES = 1, \ + _NO = 0 \ + }; \ + } + + //GLM_DETAIL_IS_UINT(unsigned long long) + + ////////////////// + // float + + template + struct is_float + { + enum is_float_enum + { + _YES = 0, + _NO = 1 + }; + }; + +#define GLM_DETAIL_IS_FLOAT(T) \ + template <> \ + struct is_float \ + { \ + enum is_float_enum \ + { \ + _YES = 1, \ + _NO = 0 \ + }; \ + } + + GLM_DETAIL_IS_FLOAT(detail::half); + GLM_DETAIL_IS_FLOAT(float); + GLM_DETAIL_IS_FLOAT(double); + GLM_DETAIL_IS_FLOAT(long double); + + ////////////////// + // bool + + template + struct is_bool + { + enum is_bool_enum + { + _YES = 0, + _NO = 1 + }; + }; + + template <> + struct is_bool + { + enum is_bool_enum + { + _YES = 1, + _NO = 0 + }; + }; + + ////////////////// + // vector + + template + struct is_vector + { + enum is_vector_enum + { + _YES = 0, + _NO = 1 + }; + }; + +# define GLM_DETAIL_IS_VECTOR(TYPE) \ + template \ + struct is_vector > \ + { \ + enum is_vector_enum \ + { \ + _YES = 1, \ + _NO = 0 \ + }; \ + } + + ////////////////// + // matrix + + template + struct is_matrix + { + enum is_matrix_enum + { + _YES = 0, + _NO = 1 + }; + }; + +#define GLM_DETAIL_IS_MATRIX(T) \ + template <> \ + struct is_matrix \ + { \ + enum is_matrix_enum \ + { \ + _YES = 1, \ + _NO = 0 \ + }; \ + } + + ////////////////// + // type + + template + struct type + { + enum type_enum + { + is_float = is_float::_YES, + is_int = is_int::_YES, + is_uint = is_uint::_YES, + is_bool = is_bool::_YES + }; + }; + + ////////////////// + // type + + typedef signed char int8; + typedef signed short int16; + typedef signed int int32; + typedef detail::sint64 int64; + + typedef unsigned char uint8; + typedef unsigned short uint16; + typedef unsigned int uint32; + typedef detail::uint64 uint64; + + typedef detail::half float16; + typedef float float32; + typedef double float64; + + ////////////////// + // float_or_int_trait + + struct float_or_int_value + { + enum + { + GLM_ERROR, + GLM_FLOAT, + GLM_INT + }; + }; + + template + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_ERROR}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_INT}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_INT}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_INT}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_INT}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_INT}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_INT}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_INT}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_INT}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_FLOAT}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_FLOAT}; + }; + + template <> + struct float_or_int_trait + { + enum{ID = float_or_int_value::GLM_FLOAT}; + }; + +}//namespace detail +}//namespace glm + +#if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2005)) +# define GLM_DEPRECATED __declspec(deprecated) +# define GLM_ALIGN(x) __declspec(align(x)) +# define GLM_ALIGNED_STRUCT(x) __declspec(align(x)) struct +# define GLM_RESTRICT __declspec(restrict) +# define GLM_RESTRICT_VAR __restrict +# define GLM_CONSTEXPR +#elif(GLM_COMPILER & GLM_COMPILER_INTEL) +# define GLM_DEPRECATED +# define GLM_ALIGN(x) __declspec(align(x)) +# define GLM_ALIGNED_STRUCT(x) __declspec(align(x)) struct +# define GLM_RESTRICT +# define GLM_RESTRICT_VAR __restrict +# define GLM_CONSTEXPR +#elif(((GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC)) && (GLM_COMPILER >= GLM_COMPILER_GCC31)) || (GLM_COMPILER & GLM_COMPILER_CLANG)) +# define GLM_DEPRECATED __attribute__((__deprecated__)) +# define GLM_ALIGN(x) __attribute__((aligned(x))) +# define GLM_ALIGNED_STRUCT(x) struct __attribute__((aligned(x))) +# if(GLM_COMPILER >= GLM_COMPILER_GCC33) +# define GLM_RESTRICT __restrict__ +# define GLM_RESTRICT_VAR __restrict__ +# else +# define GLM_RESTRICT +# define GLM_RESTRICT_VAR +# endif +# define GLM_RESTRICT __restrict__ +# define GLM_RESTRICT_VAR __restrict__ +# if((GLM_COMPILER >= GLM_COMPILER_GCC47) && ((GLM_LANG & GLM_LANG_CXX0X) == GLM_LANG_CXX0X)) +# define GLM_CONSTEXPR constexpr +# else +# define GLM_CONSTEXPR +# endif +#else +# define GLM_DEPRECATED +# define GLM_ALIGN +# define GLM_ALIGNED_STRUCT(x) +# define GLM_RESTRICT +# define GLM_RESTRICT_VAR +# define GLM_CONSTEXPR +#endif//GLM_COMPILER + +#endif//glm_core_detail diff --git a/include/glm/core/_fixes.hpp b/include/glm/core/_fixes.hpp new file mode 100644 index 0000000..21f33c0 --- /dev/null +++ b/include/glm/core/_fixes.hpp @@ -0,0 +1,55 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/_fixes.hpp +/// @date 2011-02-21 / 2011-11-22 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +#include + +//! Workaround for compatibility with other libraries +#ifdef max +#undef max +#endif + +//! Workaround for compatibility with other libraries +#ifdef min +#undef min +#endif + +//! Workaround for Android +#ifdef isnan +#undef isnan +#endif + +//! Workaround for Android +#ifdef isinf +#undef isinf +#endif + +//! Workaround for Chrone Native Client +#ifdef log2 +#undef log2 +#endif + diff --git a/include/glm/core/_swizzle.hpp b/include/glm/core/_swizzle.hpp new file mode 100644 index 0000000..2c2ae9e --- /dev/null +++ b/include/glm/core/_swizzle.hpp @@ -0,0 +1,861 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/_swizzle.hpp +/// @date 2006-04-20 / 2011-02-16 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef glm_core_swizzle +#define glm_core_swizzle + +#include "_swizzle_func.hpp" + +namespace glm +{ + enum comp + { + X = 0, + R = 0, + S = 0, + Y = 1, + G = 1, + T = 1, + Z = 2, + B = 2, + P = 2, + W = 3, + A = 3, + Q = 3 + }; +}//namespace glm + +namespace glm{ +namespace detail +{ + // Internal class for implementing swizzle operators + template + struct _swizzle_base0 + { + typedef T value_type; + + protected: + GLM_FUNC_QUALIFIER value_type& elem (size_t i) { return (reinterpret_cast(_buffer))[i]; } + GLM_FUNC_QUALIFIER const value_type& elem (size_t i) const { return (reinterpret_cast(_buffer))[i]; } + + // Use an opaque buffer to *ensure* the compiler doesn't call a constructor. + // The size 1 buffer is assumed to aligned to the actual members so that the + // elem() + char _buffer[1]; + }; + + template + struct _swizzle_base1 : public _swizzle_base0 + { + }; + + template + struct _swizzle_base1 : public _swizzle_base0 + { + GLM_FUNC_QUALIFIER V operator ()() const { return V(this->elem(E0), this->elem(E1)); } + }; + + template + struct _swizzle_base1 : public _swizzle_base0 + { + GLM_FUNC_QUALIFIER V operator ()() const { return V(this->elem(E0), this->elem(E1), this->elem(E2)); } + }; + + template + struct _swizzle_base1 : public _swizzle_base0 + { + GLM_FUNC_QUALIFIER V operator ()() const { return V(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); } + }; + + // Internal class for implementing swizzle operators + /* + Template parameters: + + ValueType = type of scalar values (e.g. float, double) + VecType = class the swizzle is applies to (e.g. tvec3) + N = number of components in the vector (e.g. 3) + E0...3 = what index the n-th element of this swizzle refers to in the unswizzled vec + + DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles + containing duplicate elements so that they cannot be used as r-values). + */ + template + struct _swizzle_base2 : public _swizzle_base1 + { + typedef VecType vec_type; + typedef ValueType value_type; + + GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const ValueType& t) + { + for (int i = 0; i < N; ++i) + (*this)[i] = t; + return *this; + } + + GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const VecType& that) + { + struct op { + GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e = t; } + }; + _apply_op(that, op()); + return *this; + } + + GLM_FUNC_QUALIFIER void operator -= (const VecType& that) + { + struct op { + GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e -= t; } + }; + _apply_op(that, op()); + } + + GLM_FUNC_QUALIFIER void operator += (const VecType& that) + { + struct op { + GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e += t; } + }; + _apply_op(that, op()); + } + + GLM_FUNC_QUALIFIER void operator *= (const VecType& that) + { + struct op { + GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e *= t; } + }; + _apply_op(that, op()); + } + + GLM_FUNC_QUALIFIER void operator /= (const VecType& that) + { + struct op { + GLM_FUNC_QUALIFIER void operator() (value_type& e, value_type& t) { e /= t; } + }; + _apply_op(that, op()); + } + + GLM_FUNC_QUALIFIER value_type& operator[] (size_t i) + { +#ifndef __CUDA_ARCH__ + static +#endif + const int offset_dst[4] = { E0, E1, E2, E3 }; + return this->elem(offset_dst[i]); + } + GLM_FUNC_QUALIFIER value_type operator[] (size_t i) const + { +#ifndef __CUDA_ARCH__ + static +#endif + const int offset_dst[4] = { E0, E1, E2, E3 }; + return this->elem(offset_dst[i]); + } + protected: + template + GLM_FUNC_QUALIFIER void _apply_op(const VecType& that, T op) + { + // Make a copy of the data in this == &that. + // The copier should optimize out the copy in cases where the function is + // properly inlined and the copy is not necessary. + ValueType t[N]; + for (int i = 0; i < N; ++i) + t[i] = that[i]; + for (int i = 0; i < N; ++i) + op( (*this)[i], t[i] ); + } + }; + + // Specialization for swizzles containing duplicate elements. These cannot be modified. + template + struct _swizzle_base2 : public _swizzle_base1 + { + typedef VecType vec_type; + typedef ValueType value_type; + + struct Stub {}; + GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const &) { return *this; } + + GLM_FUNC_QUALIFIER value_type operator[] (size_t i) const + { +#ifndef __CUDA_ARCH__ + static +#endif + const int offset_dst[4] = { E0, E1, E2, E3 }; + return this->elem(offset_dst[i]); + } + }; + + template + struct swizzle : public _swizzle_base2 + { + typedef _swizzle_base2 base_type; + + using base_type::operator=; + + GLM_FUNC_QUALIFIER operator VecType () const { return (*this)(); } + }; + +// +// To prevent the C++ syntax from getting entirely overwhelming, define some alias macros +// +#define _GLM_SWIZZLE_TEMPLATE1 template +#define _GLM_SWIZZLE_TEMPLATE2 template +#define _GLM_SWIZZLE_TYPE1 glm::detail::swizzle +#define _GLM_SWIZZLE_TYPE2 glm::detail::swizzle + +// +// Wrapper for a binary operator (e.g. u.yy + v.zy) +// +#define _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ + _GLM_SWIZZLE_TEMPLATE2 \ + GLM_FUNC_QUALIFIER V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \ + { \ + return a() OPERAND b(); \ + } \ + _GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const V& b) \ + { \ + return a() OPERAND b; \ + } \ + _GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER V operator OPERAND ( const V& a, const _GLM_SWIZZLE_TYPE1& b) \ + { \ + return a OPERAND b(); \ + } + +// +// Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz) +// +#define _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ + _GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const T& b) \ + { \ + return a() OPERAND b; \ + } \ + _GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER V operator OPERAND ( const T& a, const _GLM_SWIZZLE_TYPE1& b) \ + { \ + return a OPERAND b(); \ + } + +// +// Macro for wrapping a function taking one argument (e.g. abs()) +// +#define _GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION) \ + _GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a) \ + { \ + return FUNCTION(a()); \ + } + +// +// Macro for wrapping a function taking two vector arguments (e.g. dot()). +// +#define _GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION) \ + _GLM_SWIZZLE_TEMPLATE2 \ + GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \ + { \ + return FUNCTION(a(), b()); \ + } \ + _GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b) \ + { \ + return FUNCTION(a(), b()); \ + } \ + _GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename V& b) \ + { \ + return FUNCTION(a(), b); \ + } \ + _GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const _GLM_SWIZZLE_TYPE1& b) \ + { \ + return FUNCTION(a, b()); \ + } + +// +// Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()). +// +#define _GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION) \ + _GLM_SWIZZLE_TEMPLATE2 \ + GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b, const T& c) \ + { \ + return FUNCTION(a(), b(), c); \ + } \ + _GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \ + { \ + return FUNCTION(a(), b(), c); \ + } \ + _GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\ + { \ + return FUNCTION(a(), b, c); \ + } \ + _GLM_SWIZZLE_TEMPLATE1 \ + GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \ + { \ + return FUNCTION(a, b(), c); \ + } + +}//namespace detail +}//namespace glm + +namespace glm +{ + namespace detail + { + _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-) + _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*) + _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+) + _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-) + _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*) + _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/) + } + + // + // Swizzles are distinct types from the unswizzled type. The below macros will + // provide template specializations for the swizzle types for the given functions + // so that the compiler does not have any ambiguity to choosing how to handle + // the function. + // + // The alternative is to use the operator()() when calling the function in order + // to explicitly convert the swizzled type to the unswizzled type. + // + + //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, abs); + //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acos); + //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acosh); + //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, all); + //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, any); + + //_GLM_SWIZZLE_FUNCTION_2_ARGS(value_type, dot); + //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, cross); + //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, step); + //_GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix); +} + +#define _GLM_SWIZZLE2_2_MEMBERS(T,P,E0,E1) \ + struct { glm::detail::swizzle<2,T,P,0,0,-1,-2> E0 ## E0; }; \ + struct { glm::detail::swizzle<2,T,P,0,1,-1,-2> E0 ## E1; }; \ + struct { glm::detail::swizzle<2,T,P,1,0,-1,-2> E1 ## E0; }; \ + struct { glm::detail::swizzle<2,T,P,1,1,-1,-2> E1 ## E1; }; + +#define _GLM_SWIZZLE2_3_MEMBERS(T,P2,E0,E1) \ + struct { glm::detail::swizzle<3,T,P2,0,0,0,-1> E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P2,0,0,1,-1> E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P2,0,1,0,-1> E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P2,0,1,1,-1> E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P2,1,0,0,-1> E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P2,1,0,1,-1> E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P2,1,1,0,-1> E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P2,1,1,1,-1> E1 ## E1 ## E1; }; + +#define _GLM_SWIZZLE2_4_MEMBERS(T,P2,E0,E1) \ + struct { glm::detail::swizzle<4,T,P2,0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,1,1> E1 ## E1 ## E1 ## E1; }; + +#define _GLM_SWIZZLE3_2_MEMBERS(T,P2,E0,E1,E2) \ + struct { glm::detail::swizzle<2,T,P2,0,0,-1,-2> E0 ## E0; }; \ + struct { glm::detail::swizzle<2,T,P2,0,1,-1,-2> E0 ## E1; }; \ + struct { glm::detail::swizzle<2,T,P2,0,2,-1,-2> E0 ## E2; }; \ + struct { glm::detail::swizzle<2,T,P2,1,0,-1,-2> E1 ## E0; }; \ + struct { glm::detail::swizzle<2,T,P2,1,1,-1,-2> E1 ## E1; }; \ + struct { glm::detail::swizzle<2,T,P2,1,2,-1,-2> E1 ## E2; }; \ + struct { glm::detail::swizzle<2,T,P2,2,0,-1,-2> E2 ## E0; }; \ + struct { glm::detail::swizzle<2,T,P2,2,1,-1,-2> E2 ## E1; }; \ + struct { glm::detail::swizzle<2,T,P2,2,2,-1,-2> E2 ## E2; }; + +#define _GLM_SWIZZLE3_3_MEMBERS(T,P,E0,E1,E2) \ + struct { glm::detail::swizzle<3,T,P,0,0,0,-1> E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,0,0,1,-1> E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,0,0,2,-1> E0 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,0,1,0,-1> E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,0,1,1,-1> E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,0,1,2,-1> E0 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,0,2,0,-1> E0 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,0,2,1,-1> E0 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,0,2,2,-1> E0 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,1,0,0,-1> E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,1,0,1,-1> E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,1,0,2,-1> E1 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,1,1,0,-1> E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,1,1,1,-1> E1 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,1,1,2,-1> E1 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,1,2,0,-1> E1 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,1,2,1,-1> E1 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,1,2,2,-1> E1 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,2,0,0,-1> E2 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,2,0,1,-1> E2 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,2,0,2,-1> E2 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,2,1,0,-1> E2 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,2,1,1,-1> E2 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,2,1,2,-1> E2 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,2,2,0,-1> E2 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,2,2,1,-1> E2 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,2,2,2,-1> E2 ## E2 ## E2; }; + +#define _GLM_SWIZZLE3_4_MEMBERS(T,P2,E0,E1,E2) \ + struct { glm::detail::swizzle<4,T,P2,0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,0,2> E0 ## E0 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,1,2> E0 ## E0 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,2,0> E0 ## E0 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,2,1> E0 ## E0 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,0,2,2> E0 ## E0 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,0,2> E0 ## E1 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,1,2> E0 ## E1 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,2,0> E0 ## E1 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,2,1> E0 ## E1 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,1,2,2> E0 ## E1 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,0,2,0,0> E0 ## E2 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,2,0,1> E0 ## E2 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,2,0,2> E0 ## E2 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,0,2,1,0> E0 ## E2 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,2,1,1> E0 ## E2 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,2,1,2> E0 ## E2 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,0,2,2,0> E0 ## E2 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,0,2,2,1> E0 ## E2 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,0,2,2,2> E0 ## E2 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,1,2> E1 ## E0 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,2,0> E1 ## E0 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,2,1> E1 ## E0 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,0,2,2> E1 ## E0 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,0,2> E1 ## E1 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,1,1> E1 ## E1 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,1,2> E1 ## E1 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,2,0> E1 ## E1 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,2,1> E1 ## E1 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,1,2,2> E1 ## E1 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,1,2,0,0> E1 ## E2 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,2,0,1> E1 ## E2 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,2,0,2> E1 ## E2 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,1,2,1,0> E1 ## E2 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,2,1,1> E1 ## E2 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,2,1,2> E1 ## E2 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,1,2,2,0> E1 ## E2 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,1,2,2,1> E1 ## E2 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,1,2,2,2> E1 ## E2 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,2,0,0,0> E2 ## E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,2,0,0,1> E2 ## E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,2,0,0,2> E2 ## E0 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,2,0,1,0> E2 ## E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,2,0,1,1> E2 ## E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,2,0,1,2> E2 ## E0 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,2,0,2,0> E2 ## E0 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,2,0,2,1> E2 ## E0 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,2,0,2,2> E2 ## E0 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,2,1,0,0> E2 ## E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,2,1,0,1> E2 ## E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,2,1,0,2> E2 ## E1 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,2,1,1,0> E2 ## E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,2,1,1,1> E2 ## E1 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,2,1,1,2> E2 ## E1 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,2,1,2,0> E2 ## E1 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,2,1,2,1> E2 ## E1 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,2,1,2,2> E2 ## E1 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,2,2,0,0> E2 ## E2 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,2,2,0,1> E2 ## E2 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,2,2,0,2> E2 ## E2 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,2,2,1,0> E2 ## E2 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,2,2,1,1> E2 ## E2 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,2,2,1,2> E2 ## E2 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P2,2,2,2,0> E2 ## E2 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P2,2,2,2,1> E2 ## E2 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P2,2,2,2,2> E2 ## E2 ## E2 ## E2; }; + +#define _GLM_SWIZZLE4_2_MEMBERS(T,P,E0,E1,E2,E3) \ + struct { glm::detail::swizzle<2,T,P,0,0,-1,-2> E0 ## E0; }; \ + struct { glm::detail::swizzle<2,T,P,0,1,-1,-2> E0 ## E1; }; \ + struct { glm::detail::swizzle<2,T,P,0,2,-1,-2> E0 ## E2; }; \ + struct { glm::detail::swizzle<2,T,P,0,3,-1,-2> E0 ## E3; }; \ + struct { glm::detail::swizzle<2,T,P,1,0,-1,-2> E1 ## E0; }; \ + struct { glm::detail::swizzle<2,T,P,1,1,-1,-2> E1 ## E1; }; \ + struct { glm::detail::swizzle<2,T,P,1,2,-1,-2> E1 ## E2; }; \ + struct { glm::detail::swizzle<2,T,P,1,3,-1,-2> E1 ## E3; }; \ + struct { glm::detail::swizzle<2,T,P,2,0,-1,-2> E2 ## E0; }; \ + struct { glm::detail::swizzle<2,T,P,2,1,-1,-2> E2 ## E1; }; \ + struct { glm::detail::swizzle<2,T,P,2,2,-1,-2> E2 ## E2; }; \ + struct { glm::detail::swizzle<2,T,P,2,3,-1,-2> E2 ## E3; }; \ + struct { glm::detail::swizzle<2,T,P,3,0,-1,-2> E3 ## E0; }; \ + struct { glm::detail::swizzle<2,T,P,3,1,-1,-2> E3 ## E1; }; \ + struct { glm::detail::swizzle<2,T,P,3,2,-1,-2> E3 ## E2; }; \ + struct { glm::detail::swizzle<2,T,P,3,3,-1,-2> E3 ## E3; }; + +#define _GLM_SWIZZLE4_3_MEMBERS(T,P,E0,E1,E2,E3) \ + struct { glm::detail::swizzle<3,T,P,0,0,0,-1> E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,0,0,1,-1> E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,0,0,2,-1> E0 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,0,0,3,-1> E0 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,0,1,0,-1> E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,0,1,1,-1> E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,0,1,2,-1> E0 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,0,1,3,-1> E0 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,0,2,0,-1> E0 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,0,2,1,-1> E0 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,0,2,2,-1> E0 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,0,2,3,-1> E0 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,0,3,0,-1> E0 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,0,3,1,-1> E0 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,0,3,2,-1> E0 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,0,3,3,-1> E0 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,1,0,0,-1> E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,1,0,1,-1> E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,1,0,2,-1> E1 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,1,0,3,-1> E1 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,1,1,0,-1> E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,1,1,1,-1> E1 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,1,1,2,-1> E1 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,1,1,3,-1> E1 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,1,2,0,-1> E1 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,1,2,1,-1> E1 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,1,2,2,-1> E1 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,1,2,3,-1> E1 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,1,3,0,-1> E1 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,1,3,1,-1> E1 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,1,3,2,-1> E1 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,1,3,3,-1> E1 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,2,0,0,-1> E2 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,2,0,1,-1> E2 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,2,0,2,-1> E2 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,2,0,3,-1> E2 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,2,1,0,-1> E2 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,2,1,1,-1> E2 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,2,1,2,-1> E2 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,2,1,3,-1> E2 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,2,2,0,-1> E2 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,2,2,1,-1> E2 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,2,2,2,-1> E2 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,2,2,3,-1> E2 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,2,3,0,-1> E2 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,2,3,1,-1> E2 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,2,3,2,-1> E2 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,2,3,3,-1> E2 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,3,0,0,-1> E3 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,3,0,1,-1> E3 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,3,0,2,-1> E3 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,3,0,3,-1> E3 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,3,1,0,-1> E3 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,3,1,1,-1> E3 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,3,1,2,-1> E3 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,3,1,3,-1> E3 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,3,2,0,-1> E3 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,3,2,1,-1> E3 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,3,2,2,-1> E3 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,3,2,3,-1> E3 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<3,T,P,3,3,0,-1> E3 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<3,T,P,3,3,1,-1> E3 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<3,T,P,3,3,2,-1> E3 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<3,T,P,3,3,3,-1> E3 ## E3 ## E3; }; + +#define _GLM_SWIZZLE4_4_MEMBERS(T,P,E0,E1,E2,E3) \ + struct { glm::detail::swizzle<4,T,P,0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,0,2> E0 ## E0 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,0,3> E0 ## E0 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,1,2> E0 ## E0 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,1,3> E0 ## E0 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,2,0> E0 ## E0 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,2,1> E0 ## E0 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,2,2> E0 ## E0 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,2,3> E0 ## E0 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,3,0> E0 ## E0 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,3,1> E0 ## E0 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,3,2> E0 ## E0 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,0,3,3> E0 ## E0 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,0,2> E0 ## E1 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,0,3> E0 ## E1 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,1,2> E0 ## E1 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,1,3> E0 ## E1 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,2,0> E0 ## E1 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,2,1> E0 ## E1 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,2,2> E0 ## E1 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,2,3> E0 ## E1 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,3,0> E0 ## E1 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,3,1> E0 ## E1 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,3,2> E0 ## E1 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,1,3,3> E0 ## E1 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,0,0> E0 ## E2 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,0,1> E0 ## E2 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,0,2> E0 ## E2 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,0,3> E0 ## E2 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,1,0> E0 ## E2 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,1,1> E0 ## E2 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,1,2> E0 ## E2 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,1,3> E0 ## E2 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,2,0> E0 ## E2 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,2,1> E0 ## E2 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,2,2> E0 ## E2 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,2,3> E0 ## E2 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,3,0> E0 ## E2 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,3,1> E0 ## E2 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,3,2> E0 ## E2 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,2,3,3> E0 ## E2 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,0,0> E0 ## E3 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,0,1> E0 ## E3 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,0,2> E0 ## E3 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,0,3> E0 ## E3 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,1,0> E0 ## E3 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,1,1> E0 ## E3 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,1,2> E0 ## E3 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,1,3> E0 ## E3 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,2,0> E0 ## E3 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,2,1> E0 ## E3 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,2,2> E0 ## E3 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,2,3> E0 ## E3 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,3,0> E0 ## E3 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,3,1> E0 ## E3 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,3,2> E0 ## E3 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,0,3,3,3> E0 ## E3 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,0,3> E1 ## E0 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,1,2> E1 ## E0 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,1,3> E1 ## E0 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,2,0> E1 ## E0 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,2,1> E1 ## E0 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,2,2> E1 ## E0 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,2,3> E1 ## E0 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,3,0> E1 ## E0 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,3,1> E1 ## E0 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,3,2> E1 ## E0 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,0,3,3> E1 ## E0 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,0,2> E1 ## E1 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,0,3> E1 ## E1 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,1,1> E1 ## E1 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,1,2> E1 ## E1 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,1,3> E1 ## E1 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,2,0> E1 ## E1 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,2,1> E1 ## E1 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,2,2> E1 ## E1 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,2,3> E1 ## E1 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,3,0> E1 ## E1 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,3,1> E1 ## E1 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,3,2> E1 ## E1 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,1,3,3> E1 ## E1 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,0,0> E1 ## E2 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,0,1> E1 ## E2 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,0,2> E1 ## E2 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,0,3> E1 ## E2 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,1,0> E1 ## E2 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,1,1> E1 ## E2 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,1,2> E1 ## E2 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,1,3> E1 ## E2 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,2,0> E1 ## E2 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,2,1> E1 ## E2 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,2,2> E1 ## E2 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,2,3> E1 ## E2 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,3,0> E1 ## E2 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,3,1> E1 ## E2 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,3,2> E1 ## E2 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,2,3,3> E1 ## E2 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,0,0> E1 ## E3 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,0,1> E1 ## E3 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,0,2> E1 ## E3 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,0,3> E1 ## E3 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,1,0> E1 ## E3 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,1,1> E1 ## E3 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,1,2> E1 ## E3 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,1,3> E1 ## E3 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,2,0> E1 ## E3 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,2,1> E1 ## E3 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,2,2> E1 ## E3 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,2,3> E1 ## E3 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,3,0> E1 ## E3 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,3,1> E1 ## E3 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,3,2> E1 ## E3 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,1,3,3,3> E1 ## E3 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,0,0> E2 ## E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,0,1> E2 ## E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,0,2> E2 ## E0 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,0,3> E2 ## E0 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,1,0> E2 ## E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,1,1> E2 ## E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,1,2> E2 ## E0 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,1,3> E2 ## E0 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,2,0> E2 ## E0 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,2,1> E2 ## E0 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,2,2> E2 ## E0 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,2,3> E2 ## E0 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,3,0> E2 ## E0 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,3,1> E2 ## E0 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,3,2> E2 ## E0 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,0,3,3> E2 ## E0 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,0,0> E2 ## E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,0,1> E2 ## E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,0,2> E2 ## E1 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,0,3> E2 ## E1 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,1,0> E2 ## E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,1,1> E2 ## E1 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,1,2> E2 ## E1 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,1,3> E2 ## E1 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,2,0> E2 ## E1 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,2,1> E2 ## E1 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,2,2> E2 ## E1 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,2,3> E2 ## E1 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,3,0> E2 ## E1 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,3,1> E2 ## E1 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,3,2> E2 ## E1 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,1,3,3> E2 ## E1 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,0,0> E2 ## E2 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,0,1> E2 ## E2 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,0,2> E2 ## E2 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,0,3> E2 ## E2 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,1,0> E2 ## E2 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,1,1> E2 ## E2 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,1,2> E2 ## E2 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,1,3> E2 ## E2 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,2,0> E2 ## E2 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,2,1> E2 ## E2 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,2,2> E2 ## E2 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,2,3> E2 ## E2 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,3,0> E2 ## E2 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,3,1> E2 ## E2 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,3,2> E2 ## E2 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,2,3,3> E2 ## E2 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,0,0> E2 ## E3 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,0,1> E2 ## E3 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,0,2> E2 ## E3 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,0,3> E2 ## E3 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,1,0> E2 ## E3 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,1,1> E2 ## E3 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,1,2> E2 ## E3 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,1,3> E2 ## E3 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,2,0> E2 ## E3 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,2,1> E2 ## E3 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,2,2> E2 ## E3 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,2,3> E2 ## E3 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,3,0> E2 ## E3 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,3,1> E2 ## E3 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,3,2> E2 ## E3 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,2,3,3,3> E2 ## E3 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,0,0> E3 ## E0 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,0,1> E3 ## E0 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,0,2> E3 ## E0 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,0,3> E3 ## E0 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,1,0> E3 ## E0 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,1,1> E3 ## E0 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,1,2> E3 ## E0 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,1,3> E3 ## E0 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,2,0> E3 ## E0 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,2,1> E3 ## E0 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,2,2> E3 ## E0 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,2,3> E3 ## E0 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,3,0> E3 ## E0 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,3,1> E3 ## E0 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,3,2> E3 ## E0 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,0,3,3> E3 ## E0 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,0,0> E3 ## E1 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,0,1> E3 ## E1 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,0,2> E3 ## E1 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,0,3> E3 ## E1 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,1,0> E3 ## E1 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,1,1> E3 ## E1 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,1,2> E3 ## E1 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,1,3> E3 ## E1 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,2,0> E3 ## E1 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,2,1> E3 ## E1 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,2,2> E3 ## E1 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,2,3> E3 ## E1 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,3,0> E3 ## E1 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,3,1> E3 ## E1 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,3,2> E3 ## E1 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,1,3,3> E3 ## E1 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,0,0> E3 ## E2 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,0,1> E3 ## E2 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,0,2> E3 ## E2 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,0,3> E3 ## E2 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,1,0> E3 ## E2 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,1,1> E3 ## E2 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,1,2> E3 ## E2 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,1,3> E3 ## E2 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,2,0> E3 ## E2 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,2,1> E3 ## E2 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,2,2> E3 ## E2 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,2,3> E3 ## E2 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,3,0> E3 ## E2 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,3,1> E3 ## E2 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,3,2> E3 ## E2 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,2,3,3> E3 ## E2 ## E3 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,0,0> E3 ## E3 ## E0 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,0,1> E3 ## E3 ## E0 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,0,2> E3 ## E3 ## E0 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,0,3> E3 ## E3 ## E0 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,1,0> E3 ## E3 ## E1 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,1,1> E3 ## E3 ## E1 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,1,2> E3 ## E3 ## E1 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,1,3> E3 ## E3 ## E1 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,2,0> E3 ## E3 ## E2 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,2,1> E3 ## E3 ## E2 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,2,2> E3 ## E3 ## E2 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,2,3> E3 ## E3 ## E2 ## E3; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,3,0> E3 ## E3 ## E3 ## E0; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,3,1> E3 ## E3 ## E3 ## E1; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,3,2> E3 ## E3 ## E3 ## E2; }; \ + struct { glm::detail::swizzle<4,T,P,3,3,3,3> E3 ## E3 ## E3 ## E3; }; + +#endif//glm_core_swizzle diff --git a/include/glm/core/_swizzle_func.hpp b/include/glm/core/_swizzle_func.hpp new file mode 100644 index 0000000..e893dce --- /dev/null +++ b/include/glm/core/_swizzle_func.hpp @@ -0,0 +1,787 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/_swizzle_func.hpp +/// @date 2011-10-16 / 2011-10-16 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef glm_core_swizzle_func +#define glm_core_swizzle_func + +#define GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \ + SWIZZLED_TYPE A ## B() CONST \ + { \ + return SWIZZLED_TYPE(this->A, this->B); \ + } + +#define GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \ + SWIZZLED_TYPE A ## B ## C() CONST \ + { \ + return SWIZZLED_TYPE(this->A, this->B, this->C); \ + } + +#define GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \ + SWIZZLED_TYPE A ## B ## C ## D() CONST \ + { \ + return SWIZZLED_TYPE(this->A, this->B, this->C, this->D); \ + } + +#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \ + template \ + SWIZZLED_TYPE CLASS_TYPE::A ## B() CONST \ + { \ + return SWIZZLED_TYPE(this->A, this->B); \ + } + +#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \ + template \ + SWIZZLED_TYPE CLASS_TYPE::A ## B ## C() CONST \ + { \ + return SWIZZLED_TYPE(this->A, this->B, this->C); \ + } + +#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \ + template \ + SWIZZLED_TYPE CLASS_TYPE::A ## B ## C ## D() CONST \ + { \ + return SWIZZLED_TYPE(this->A, this->B, this->C, this->D); \ + } + +#define GLM_MUTABLE + +#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) + +#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE) \ + GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, x, y) \ + GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, r, g) \ + GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, s, t) + +//GLM_SWIZZLE_GEN_REF_FROM_VEC2(valType, detail::vec2, detail::ref2) + +#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B) + +#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B, A) + +#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \ + GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \ + GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C) + +#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE) \ + GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, x, y, z) \ + GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, r, g, b) \ + GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, s, t, q) + +//GLM_SWIZZLE_GEN_REF_FROM_VEC3(valType, detail::vec3, detail::ref2, detail::ref3) + +#define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, C) + +#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B) + +#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C, A) + +#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) + +#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \ + GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \ + GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \ + GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q, p) + +//GLM_SWIZZLE_GEN_REF_FROM_VEC4(valType, detail::vec4, detail::ref2, detail::ref3, detail::ref4) + +#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) + +#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) + +#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) + +#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B) \ + GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B) \ + GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B) \ + GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B) + +#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t) + +//GLM_SWIZZLE_GEN_VEC_FROM_VEC2(valType, detail::vec2, detail::vec2, detail::vec3, detail::vec4) + +#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C) + +#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C) + +#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C) + +#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C) \ + GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C) + +#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q) + +//GLM_SWIZZLE_GEN_VEC_FROM_VEC3(valType, detail::vec3, detail::vec2, detail::vec3, detail::vec4) + +#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C) \ + GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D) + +#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C) \ + GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D) + +#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, D) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, A) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, B) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, C) \ + GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, D) + +#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \ + GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) + +#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \ + GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q, p) + +//GLM_SWIZZLE_GEN_VEC_FROM_VEC4(valType, detail::vec4, detail::vec2, detail::vec3, detail::vec4) + +#endif//glm_core_swizzle_func diff --git a/include/glm/core/_vectorize.hpp b/include/glm/core/_vectorize.hpp new file mode 100644 index 0000000..0735003 --- /dev/null +++ b/include/glm/core/_vectorize.hpp @@ -0,0 +1,159 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/_vectorize.hpp +/// @date 2011-10-14 / 2011-10-14 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +#define VECTORIZE2_VEC(func) \ + template \ + GLM_FUNC_QUALIFIER detail::tvec2 func( \ + detail::tvec2 const & v) \ + { \ + return detail::tvec2( \ + func(v.x), \ + func(v.y)); \ + } + +#define VECTORIZE3_VEC(func) \ + template \ + GLM_FUNC_QUALIFIER detail::tvec3 func( \ + detail::tvec3 const & v) \ + { \ + return detail::tvec3( \ + func(v.x), \ + func(v.y), \ + func(v.z)); \ + } + +#define VECTORIZE4_VEC(func) \ + template \ + GLM_FUNC_QUALIFIER detail::tvec4 func( \ + detail::tvec4 const & v) \ + { \ + return detail::tvec4( \ + func(v.x), \ + func(v.y), \ + func(v.z), \ + func(v.w)); \ + } + +#define VECTORIZE_VEC(func) \ + VECTORIZE2_VEC(func) \ + VECTORIZE3_VEC(func) \ + VECTORIZE4_VEC(func) + +#define VECTORIZE2_VEC_SCA(func) \ + template \ + GLM_FUNC_QUALIFIER detail::tvec2 func \ + ( \ + detail::tvec2 const & x, \ + typename detail::tvec2::value_type const & y \ + ) \ + { \ + return detail::tvec2( \ + func(x.x, y), \ + func(x.y, y)); \ + } + +#define VECTORIZE3_VEC_SCA(func) \ + template \ + GLM_FUNC_QUALIFIER detail::tvec3 func \ + ( \ + detail::tvec3 const & x, \ + typename detail::tvec3::value_type const & y \ + ) \ + { \ + return detail::tvec3( \ + func(x.x, y), \ + func(x.y, y), \ + func(x.z, y)); \ + } + +#define VECTORIZE4_VEC_SCA(func) \ + template \ + GLM_FUNC_QUALIFIER detail::tvec4 func \ + ( \ + detail::tvec4 const & x, \ + typename detail::tvec4::value_type const & y \ + ) \ + { \ + return detail::tvec4( \ + func(x.x, y), \ + func(x.y, y), \ + func(x.z, y), \ + func(x.w, y)); \ + } + +#define VECTORIZE_VEC_SCA(func) \ + VECTORIZE2_VEC_SCA(func) \ + VECTORIZE3_VEC_SCA(func) \ + VECTORIZE4_VEC_SCA(func) + +#define VECTORIZE2_VEC_VEC(func) \ + template \ + GLM_FUNC_QUALIFIER detail::tvec2 func \ + ( \ + detail::tvec2 const & x, \ + detail::tvec2 const & y \ + ) \ + { \ + return detail::tvec2( \ + func(x.x, y.x), \ + func(x.y, y.y)); \ + } + +#define VECTORIZE3_VEC_VEC(func) \ + template \ + GLM_FUNC_QUALIFIER detail::tvec3 func \ + ( \ + detail::tvec3 const & x, \ + detail::tvec3 const & y \ + ) \ + { \ + return detail::tvec3( \ + func(x.x, y.x), \ + func(x.y, y.y), \ + func(x.z, y.z)); \ + } + +#define VECTORIZE4_VEC_VEC(func) \ + template \ + GLM_FUNC_QUALIFIER detail::tvec4 func \ + ( \ + detail::tvec4 const & x, \ + detail::tvec4 const & y \ + ) \ + { \ + return detail::tvec4( \ + func(x.x, y.x), \ + func(x.y, y.y), \ + func(x.z, y.z), \ + func(x.w, y.w)); \ + } + +#define VECTORIZE_VEC_VEC(func) \ + VECTORIZE2_VEC_VEC(func) \ + VECTORIZE3_VEC_VEC(func) \ + VECTORIZE4_VEC_VEC(func) diff --git a/include/glm/core/dummy.cpp b/include/glm/core/dummy.cpp new file mode 100644 index 0000000..32d0139 --- /dev/null +++ b/include/glm/core/dummy.cpp @@ -0,0 +1,40 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/dummy.cpp +/// @date 2011-01-19 / 2011-06-15 +/// @author Christophe Riccio +/// +/// GLM is a header only library. There is nothing to compile. +/// dummy.cpp exist only a wordaround for CMake file. +/////////////////////////////////////////////////////////////////////////////////// + +#define GLM_MESSAGES +#include "../glm.hpp" + +//#error "GLM is a header only library" + +int main() +{ + +} diff --git a/include/glm/core/func_common.hpp b/include/glm/core/func_common.hpp new file mode 100644 index 0000000..528286c --- /dev/null +++ b/include/glm/core/func_common.hpp @@ -0,0 +1,430 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_common.hpp +/// @date 2008-03-08 / 2010-01-26 +/// @author Christophe Riccio +/// +/// @see GLSL 4.20.8 specification, section 8.3 Common Functions +/// +/// @defgroup core_func_common Common functions +/// @ingroup core +/// +/// These all operate component-wise. The description is per component. +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef GLM_CORE_func_common +#define GLM_CORE_func_common GLM_VERSION + +#include "_fixes.hpp" + +namespace glm +{ + /// @addtogroup core_func_common + /// @{ + + /// Returns x if x >= 0; otherwise, it returns -x. + /// + /// @tparam genType floating-point or signed integer; scalar or vector types. + /// + /// @see GLSL abs man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType abs(genType const & x); + + /// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. + /// + /// @tparam genType Floating-point or signed integer; scalar or vector types. + /// + /// @see GLSL sign man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType sign(genType const & x); + + /// Returns a value equal to the nearest integer that is less then or equal to x. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL floor man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType floor(genType const & x); + + /// Returns a value equal to the nearest integer to x + /// whose absolute value is not larger than the absolute value of x. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL trunc man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType trunc(genType const & x); + + /// Returns a value equal to the nearest integer to x. + /// The fraction 0.5 will round in a direction chosen by the + /// implementation, presumably the direction that is fastest. + /// This includes the possibility that round(x) returns the + /// same value as roundEven(x) for all values of x. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL round man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType round(genType const & x); + + /// Returns a value equal to the nearest integer to x. + /// A fractional part of 0.5 will round toward the nearest even + /// integer. (Both 3.5 and 4.5 for x will return 4.0.) + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL roundEven man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + /// @see New round to even technique + template + GLM_FUNC_DECL genType roundEven(genType const & x); + + /// Returns a value equal to the nearest integer + /// that is greater than or equal to x. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL ceil man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType ceil(genType const & x); + + /// Return x - floor(x). + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL fract man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType fract(genType const & x); + + /// Modulus. Returns x - y * floor(x / y) + /// for each component in x using the floating point value y. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL mod man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType mod( + genType const & x, + genType const & y); + + /// Modulus. Returns x - y * floor(x / y) + /// for each component in x using the floating point value y. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL mod man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType mod( + genType const & x, + typename genType::value_type const & y); + + /// Returns the fractional part of x and sets i to the integer + /// part (as a whole number floating point value). Both the + /// return value and the output parameter will have the same + /// sign as x. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL modf man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType modf( + genType const & x, + genType & i); + + /// Returns y if y < x; otherwise, it returns x. + /// + /// @tparam genType Floating-point or integer; scalar or vector types. + /// + /// @see GLSL min man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType min( + genType const & x, + genType const & y); + + template + GLM_FUNC_DECL genType min( + genType const & x, + typename genType::value_type const & y); + + /// Returns y if x < y; otherwise, it returns x. + /// + /// @tparam genType Floating-point or integer; scalar or vector types. + /// + /// @see GLSL max man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType max( + genType const & x, + genType const & y); + + template + GLM_FUNC_DECL genType max( + genType const & x, + typename genType::value_type const & y); + + /// Returns min(max(x, minVal), maxVal) for each component in x + /// using the floating-point values minVal and maxVal. + /// + /// @tparam genType Floating-point or integer; scalar or vector types. + /// + /// @see GLSL clamp man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType clamp( + genType const & x, + genType const & minVal, + genType const & maxVal); + + template + GLM_FUNC_DECL genType clamp( + genType const & x, + typename genType::value_type const & minVal, + typename genType::value_type const & maxVal); + + /// If genTypeU is a floating scalar or vector: + /// Returns x * (1.0 - a) + y * a, i.e., the linear blend of + /// x and y using the floating-point value a. + /// The value for a is not restricted to the range [0, 1]. + /// + /// If genTypeU is a boolean scalar or vector: + /// Selects which vector each returned component comes + /// from. For a component of that is false, the + /// corresponding component of x is returned. For a + /// component of a that is true, the corresponding + /// component of y is returned. Components of x and y that + /// are not selected are allowed to be invalid floating point + /// values and will have no effect on the results. Thus, this + /// provides different functionality than + /// genType mix(genType x, genType y, genType(a)) + /// where a is a Boolean vector. + /// + /// @see GLSL mix man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + /// + /// @param[in] x Value to interpolate. + /// @param[in] y Value to interpolate. + /// @param[in] a Interpolant. + /// + /// @tparam genTypeT Floating point scalar or vector. + /// @tparam genTypeU Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT. + /// + /// @code + /// #include + /// ... + /// float a; + /// bool b; + /// glm::dvec3 e; + /// glm::dvec3 f; + /// glm::vec4 g; + /// glm::vec4 h; + /// ... + /// glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors. + /// glm::vec4 s = glm::mix(g, h, b); // Teturns g or h; + /// glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second. + /// glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter. + /// @endcode + template + GLM_FUNC_DECL genTypeT mix(genTypeT const & x, genTypeT const & y, genTypeU const & a); + + //! Returns 0.0 if x < edge, otherwise it returns 1.0. + //! + /// @see GLSL step man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType step( + genType const & edge, + genType const & x); + + template + GLM_FUNC_DECL genType step( + typename genType::value_type const & edge, + genType const & x); + + /// Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and + /// performs smooth Hermite interpolation between 0 and 1 + /// when edge0 < x < edge1. This is useful in cases where + /// you would want a threshold function with a smooth + /// transition. This is equivalent to: + /// genType t; + /// t = clamp ((x - edge0) / (edge1 - edge0), 0, 1); + /// return t * t * (3 - 2 * t); + /// Results are undefined if edge0 >= edge1. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL smoothstep man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType smoothstep( + genType const & edge0, + genType const & edge1, + genType const & x); + + template + GLM_FUNC_DECL genType smoothstep( + typename genType::value_type const & edge0, + typename genType::value_type const & edge1, + genType const & x); + + /// Returns true if x holds a NaN (not a number) + /// representation in the underlying implementation's set of + /// floating point representations. Returns false otherwise, + /// including for implementations with no NaN + /// representations. + /// + /// /!\ When using compiler fast math, this function may fail. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL isnan man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL typename genType::bool_type isnan(genType const & x); + + /// Returns true if x holds a positive infinity or negative + /// infinity representation in the underlying implementation's + /// set of floating point representations. Returns false + /// otherwise, including for implementations with no infinity + /// representations. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL isinf man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL typename genType::bool_type isinf(genType const & x); + + /// Returns a signed integer value representing + /// the encoding of a floating-point value. The floatingpoint + /// value's bit-level representation is preserved. + /// + /// @tparam genType Single-precision floating-point scalar or vector types. + /// @tparam genIType Signed integer scalar or vector types. + /// + /// @see GLSL floatBitsToInt man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genIType floatBitsToInt(genType const & value); + + /// Returns a unsigned integer value representing + /// the encoding of a floating-point value. The floatingpoint + /// value's bit-level representation is preserved. + /// + /// @tparam genType Single-precision floating-point scalar or vector types. + /// @tparam genUType Unsigned integer scalar or vector types. + /// + /// @see GLSL floatBitsToUint man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genUType floatBitsToUint(genType const & value); + + /// Returns a floating-point value corresponding to a signed + /// integer encoding of a floating-point value. + /// If an inf or NaN is passed in, it will not signal, and the + /// resulting floating point value is unspecified. Otherwise, + /// the bit-level representation is preserved. + /// + /// @tparam genType Single-precision floating-point scalar or vector types. + /// @tparam genIType Signed integer scalar or vector types. + /// + /// @see GLSL intBitsToFloat man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + /// + /// @todo Clarify this declaration, we don't need to actually specify the return type + template + GLM_FUNC_DECL genType intBitsToFloat(genIType const & value); + + /// Returns a floating-point value corresponding to a + /// unsigned integer encoding of a floating-point value. + /// If an inf or NaN is passed in, it will not signal, and the + /// resulting floating point value is unspecified. Otherwise, + /// the bit-level representation is preserved. + /// + /// @tparam genType Single-precision floating-point scalar or vector types. + /// @tparam genUType Unsigned integer scalar or vector types. + /// + /// @see GLSL uintBitsToFloat man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + /// + /// @todo Clarify this declaration, we don't need to actually specify the return type + template + GLM_FUNC_DECL genType uintBitsToFloat(genUType const & value); + + /// Computes and returns a * b + c. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL fma man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType fma(genType const & a, genType const & b, genType const & c); + + /// Splits x into a floating-point significand in the range + /// [0.5, 1.0) and an integral exponent of two, such that: + /// x = significand * exp(2, exponent) + /// + /// The significand is returned by the function and the + /// exponent is returned in the parameter exp. For a + /// floating-point value of zero, the significant and exponent + /// are both zero. For a floating-point value that is an + /// infinity or is not a number, the results are undefined. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL frexp man page + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType frexp(genType const & x, genIType & exp); + + /// Builds a floating-point number from x and the + /// corresponding integral exponent of two in exp, returning: + /// significand * exp(2, exponent) + /// + /// If this product is too large to be represented in the + /// floating-point type, the result is undefined. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL ldexp man page; + /// @see GLSL 4.20.8 specification, section 8.3 Common Functions + template + GLM_FUNC_DECL genType ldexp(genType const & x, genIType const & exp); + + /// @} +}//namespace glm + +#include "func_common.inl" + +#endif//GLM_CORE_func_common diff --git a/include/glm/core/func_common.inl b/include/glm/core/func_common.inl new file mode 100644 index 0000000..21b8cb2 --- /dev/null +++ b/include/glm/core/func_common.inl @@ -0,0 +1,1226 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_common.inl +/// @date 2008-08-03 / 2011-06-15 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +namespace glm{ +namespace detail +{ + template + struct Abs_ + {}; + + template + struct Abs_ + { + GLM_FUNC_QUALIFIER static genFIType get(genFIType const & x) + { + GLM_STATIC_ASSERT( + detail::type::is_float || + detail::type::is_int, "'abs' only accept floating-point and integer inputs"); + return x >= genFIType(0) ? x : -x; + // TODO, perf comp with: *(((int *) &x) + 1) &= 0x7fffffff; + } + }; + + template + struct Abs_ + { + GLM_FUNC_QUALIFIER static genFIType get(genFIType const & x) + { + GLM_STATIC_ASSERT( + detail::type::is_uint, "'abs' only accept floating-point and integer inputs"); + return x; + } + }; +}//namespace detail + + // abs + template + GLM_FUNC_QUALIFIER genFIType abs + ( + genFIType const & x + ) + { + return detail::Abs_::is_signed>::get(x); + } + + VECTORIZE_VEC(abs) + + // sign + //Try something like based on x >> 31 to get the sign bit + template + GLM_FUNC_QUALIFIER genFIType sign + ( + genFIType const & x + ) + { + GLM_STATIC_ASSERT( + detail::type::is_float || + detail::type::is_int, "'sign' only accept signed inputs"); + + genFIType result; + if(x > genFIType(0)) + result = genFIType(1); + else if(x < genFIType(0)) + result = genFIType(-1); + else + result = genFIType(0); + return result; + } + + VECTORIZE_VEC(sign) + + // floor + template <> + GLM_FUNC_QUALIFIER detail::half floor(detail::half const & x) + { + return detail::half(::std::floor(float(x))); + } + + template + GLM_FUNC_QUALIFIER genType floor(genType const & x) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'floor' only accept floating-point inputs"); + + return ::std::floor(x); + } + + VECTORIZE_VEC(floor) + + // trunc + template + GLM_FUNC_QUALIFIER genType trunc(genType const & x) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'trunc' only accept floating-point inputs"); + return x < 0 ? -floor(-x) : floor(x); + } + + VECTORIZE_VEC(trunc) + + // round + template + GLM_FUNC_QUALIFIER genType round(genType const& x) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'round' only accept floating-point inputs"); + + if(x < 0) + return genType(int(x - genType(0.5))); + return genType(int(x + genType(0.5))); + } + + VECTORIZE_VEC(round) + +/* + // roundEven + template + GLM_FUNC_QUALIFIER genType roundEven(genType const& x) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'roundEven' only accept floating-point inputs"); + + return genType(int(x + genType(int(x) % 2))); + } +*/ + + // roundEven + template + GLM_FUNC_QUALIFIER genType roundEven(genType const & x) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'roundEven' only accept floating-point inputs"); + + int Integer = int(x); + genType IntegerPart = genType(Integer); + genType FractionalPart = fract(x); + + if(FractionalPart > genType(0.5) || FractionalPart < genType(0.5)) + { + return round(x); + } + else if((Integer % 2) == 0) + { + return IntegerPart; + } + else if(x <= genType(0)) // Work around... + { + return IntegerPart - 1; + } + else + { + return IntegerPart + 1; + } + //else // Bug on MinGW 4.5.2 + //{ + // return mix(IntegerPart + genType(-1), IntegerPart + genType(1), x <= genType(0)); + //} + } + + VECTORIZE_VEC(roundEven) + + // ceil + template + GLM_FUNC_QUALIFIER genType ceil(genType const & x) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'ceil' only accept floating-point inputs"); + + return ::std::ceil(x); + } + + VECTORIZE_VEC(ceil) + + // fract + template + GLM_FUNC_QUALIFIER genType fract + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'fract' only accept floating-point inputs"); + + return x - ::std::floor(x); + } + + VECTORIZE_VEC(fract) + + // mod + template + GLM_FUNC_QUALIFIER genType mod + ( + genType const & x, + genType const & y + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'mod' only accept floating-point inputs"); + + return x - y * floor(x / y); + } + + VECTORIZE_VEC_SCA(mod) + VECTORIZE_VEC_VEC(mod) + + // modf + template + GLM_FUNC_QUALIFIER genType modf + ( + genType const & x, + genType & i + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'modf' only accept floating-point inputs"); + + return std::modf(x, &i); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 modf + ( + detail::tvec2 const & x, + detail::tvec2 & i + ) + { + return detail::tvec2( + modf(x.x, i.x), + modf(x.y, i.y)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 modf + ( + detail::tvec3 const & x, + detail::tvec3 & i + ) + { + return detail::tvec3( + modf(x.x, i.x), + modf(x.y, i.y), + modf(x.z, i.z)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 modf + ( + detail::tvec4 const & x, + detail::tvec4 & i + ) + { + return detail::tvec4( + modf(x.x, i.x), + modf(x.y, i.y), + modf(x.z, i.z), + modf(x.w, i.w)); + } + + //// Only valid if (INT_MIN <= x-y <= INT_MAX) + //// min(x,y) + //r = y + ((x - y) & ((x - y) >> (sizeof(int) * + //CHAR_BIT - 1))); + //// max(x,y) + //r = x - ((x - y) & ((x - y) >> (sizeof(int) * + //CHAR_BIT - 1))); + + // min + template + GLM_FUNC_QUALIFIER genType min + ( + genType const & x, + genType const & y + ) + { + GLM_STATIC_ASSERT( + detail::type::is_float || + detail::type::is_int || + detail::type::is_uint, "'min' only accept numbers"); + + return x < y ? x : y; + } + + VECTORIZE_VEC_SCA(min) + VECTORIZE_VEC_VEC(min) + + // max + template + GLM_FUNC_QUALIFIER genType max + ( + genType const & x, + genType const & y + ) + { + GLM_STATIC_ASSERT( + detail::type::is_float || + detail::type::is_int || + detail::type::is_uint, "'max' only accept numbers"); + + return x > y ? x : y; + } + + VECTORIZE_VEC_SCA(max) + VECTORIZE_VEC_VEC(max) + + // clamp + template + GLM_FUNC_QUALIFIER valType clamp + ( + valType const & x, + valType const & minVal, + valType const & maxVal + ) + { + GLM_STATIC_ASSERT( + detail::type::is_float || + detail::type::is_int || + detail::type::is_uint, "'clamp' only accept numbers"); + + return min(maxVal, max(minVal, x)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 clamp + ( + detail::tvec2 const & x, + typename detail::tvec2::value_type const & minVal, + typename detail::tvec2::value_type const & maxVal + ) + { + return detail::tvec2( + clamp(x.x, minVal, maxVal), + clamp(x.y, minVal, maxVal)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 clamp + ( + detail::tvec3 const & x, + typename detail::tvec3::value_type const & minVal, + typename detail::tvec3::value_type const & maxVal + ) + { + return detail::tvec3( + clamp(x.x, minVal, maxVal), + clamp(x.y, minVal, maxVal), + clamp(x.z, minVal, maxVal)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 clamp + ( + detail::tvec4 const & x, + typename detail::tvec4::value_type const & minVal, + typename detail::tvec4::value_type const & maxVal + ) + { + return detail::tvec4( + clamp(x.x, minVal, maxVal), + clamp(x.y, minVal, maxVal), + clamp(x.z, minVal, maxVal), + clamp(x.w, minVal, maxVal)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 clamp + ( + detail::tvec2 const & x, + detail::tvec2 const & minVal, + detail::tvec2 const & maxVal + ) + { + return detail::tvec2( + clamp(x.x, minVal.x, maxVal.x), + clamp(x.y, minVal.y, maxVal.y)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 clamp + ( + detail::tvec3 const & x, + detail::tvec3 const & minVal, + detail::tvec3 const & maxVal + ) + { + return detail::tvec3( + clamp(x.x, minVal.x, maxVal.x), + clamp(x.y, minVal.y, maxVal.y), + clamp(x.z, minVal.z, maxVal.z)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 clamp + ( + detail::tvec4 const & x, + detail::tvec4 const & minVal, + detail::tvec4 const & maxVal + ) + { + return detail::tvec4( + clamp(x.x, minVal.x, maxVal.x), + clamp(x.y, minVal.y, maxVal.y), + clamp(x.z, minVal.z, maxVal.z), + clamp(x.w, minVal.w, maxVal.w)); + } + + // mix + template + GLM_FUNC_QUALIFIER genType mix + ( + genType const & x, + genType const & y, + genType const & a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float , "'genType' is not floating-point type"); + + return x + a * (y - x); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 mix + ( + detail::tvec2 const & x, + detail::tvec2 const & y, + valType const & a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float , "'genType' is not floating-point type"); + + return x + a * (y - x); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 mix + ( + detail::tvec3 const & x, + detail::tvec3 const & y, + valType const & a + ) + { + return x + a * (y - x); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 mix + ( + detail::tvec4 const & x, + detail::tvec4 const & y, + valType const & a + ) + { + return x + a * (y - x); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 mix + ( + detail::tvec2 const & x, + detail::tvec2 const & y, + detail::tvec2 const & a + ) + { + return x + a * (y - x); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 mix + ( + detail::tvec3 const & x, + detail::tvec3 const & y, + detail::tvec3 const & a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float , "'genType' is not floating-point type"); + + return x + a * (y - x); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 mix + ( + detail::tvec4 const & x, + detail::tvec4 const & y, + detail::tvec4 const & a + ) + { + return x + a * (y - x); + } + + //template + //GLM_FUNC_QUALIFIER genTypeT mix + //( + // genTypeT const & x, + // genTypeT const & y, + // float const & a + //) + //{ + // // It could be a vector too + // //GLM_STATIC_ASSERT( + // // detail::type::is_float && + // // detail::type::is_float); + + // return x + a * (y - x); + //} + + template <> + GLM_FUNC_QUALIFIER float mix + ( + float const & x, + float const & y, + bool const & a + ) + { + return a ? y : x; + } + + template <> + GLM_FUNC_QUALIFIER double mix + ( + double const & x, + double const & y, + bool const & a + ) + { + return a ? y : x; + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 mix + ( + detail::tvec2 const & x, + detail::tvec2 const & y, + bool a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); + + return a ? y : x; + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 mix + ( + detail::tvec3 const & x, + detail::tvec3 const & y, + bool a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); + + return a ? y : x; + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 mix + ( + detail::tvec4 const & x, + detail::tvec4 const & y, + bool a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); + + return a ? y : x; + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 mix + ( + detail::tvec2 const & x, + detail::tvec2 const & y, + typename detail::tvec2::bool_type a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); + + detail::tvec2 result; + for + ( + typename detail::tvec2::size_type i = 0; + i < x.length(); ++i + ) + { + result[i] = a[i] ? y[i] : x[i]; + } + return result; + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 mix + ( + detail::tvec3 const & x, + detail::tvec3 const & y, + typename detail::tvec3::bool_type a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); + + detail::tvec3 result; + for + ( + typename detail::tvec3::size_type i = 0; + i < x.length(); ++i + ) + { + result[i] = a[i] ? y[i] : x[i]; + } + return result; + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 mix + ( + detail::tvec4 const & x, + detail::tvec4 const & y, + typename detail::tvec4::bool_type a + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); + + detail::tvec4 result; + for + ( + typename detail::tvec4::size_type i = 0; + i < x.length(); ++i + ) + { + result[i] = a[i] ? y[i] : x[i]; + } + return result; + } + + // step + template + GLM_FUNC_QUALIFIER genType step + ( + genType const & edge, + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'step' only accept floating-point inputs"); + + return x < edge ? genType(0) : genType(1); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 step + ( + typename detail::tvec2::value_type const & edge, + detail::tvec2 const & x + ) + { + return detail::tvec2( + x.x < edge ? T(0) : T(1), + x.y < edge ? T(0) : T(1)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 step + ( + typename detail::tvec3::value_type const & edge, + detail::tvec3 const & x + ) + { + return detail::tvec3( + x.x < edge ? T(0) : T(1), + x.y < edge ? T(0) : T(1), + x.z < edge ? T(0) : T(1)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 step + ( + typename detail::tvec4::value_type const & edge, + detail::tvec4 const & x + ) + { + return detail::tvec4( + x.x < edge ? T(0) : T(1), + x.y < edge ? T(0) : T(1), + x.z < edge ? T(0) : T(1), + x.w < edge ? T(0) : T(1)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 step + ( + detail::tvec2 const & edge, + detail::tvec2 const & x + ) + { + return detail::tvec2( + x.x < edge.x ? T(0) : T(1), + x.y < edge.y ? T(0) : T(1)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 step + ( + detail::tvec3 const & edge, + detail::tvec3 const & x + ) + { + return detail::tvec3( + x.x < edge.x ? T(0) : T(1), + x.y < edge.y ? T(0) : T(1), + x.z < edge.z ? T(0) : T(1)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 step + ( + detail::tvec4 const & edge, + detail::tvec4 const & x + ) + { + return detail::tvec4( + x.x < edge.x ? T(0) : T(1), + x.y < edge.y ? T(0) : T(1), + x.z < edge.z ? T(0) : T(1), + x.w < edge.w ? T(0) : T(1)); + } + + // smoothstep + template + GLM_FUNC_QUALIFIER genType smoothstep + ( + genType const & edge0, + genType const & edge1, + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'smoothstep' only accept floating-point inputs"); + + genType tmp = clamp((x - edge0) / (edge1 - edge0), genType(0), genType(1)); + return tmp * tmp * (genType(3) - genType(2) * tmp); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 smoothstep + ( + typename detail::tvec2::value_type const & edge0, + typename detail::tvec2::value_type const & edge1, + detail::tvec2 const & x + ) + { + return detail::tvec2( + smoothstep(edge0, edge1, x.x), + smoothstep(edge0, edge1, x.y)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 smoothstep + ( + typename detail::tvec3::value_type const & edge0, + typename detail::tvec3::value_type const & edge1, + detail::tvec3 const & x + ) + { + return detail::tvec3( + smoothstep(edge0, edge1, x.x), + smoothstep(edge0, edge1, x.y), + smoothstep(edge0, edge1, x.z)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 smoothstep + ( + typename detail::tvec4::value_type const & edge0, + typename detail::tvec4::value_type const & edge1, + detail::tvec4 const & x + ) + { + return detail::tvec4( + smoothstep(edge0, edge1, x.x), + smoothstep(edge0, edge1, x.y), + smoothstep(edge0, edge1, x.z), + smoothstep(edge0, edge1, x.w)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 smoothstep + ( + detail::tvec2 const & edge0, + detail::tvec2 const & edge1, + detail::tvec2 const & x + ) + { + return detail::tvec2( + smoothstep(edge0.x, edge1.x, x.x), + smoothstep(edge0.y, edge1.y, x.y)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 smoothstep + ( + detail::tvec3 const & edge0, + detail::tvec3 const & edge1, + detail::tvec3 const & x + ) + { + return detail::tvec3( + smoothstep(edge0.x, edge1.x, x.x), + smoothstep(edge0.y, edge1.y, x.y), + smoothstep(edge0.z, edge1.z, x.z)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 smoothstep + ( + detail::tvec4 const & edge0, + detail::tvec4 const & edge1, + detail::tvec4 const & x + ) + { + return detail::tvec4( + smoothstep(edge0.x, edge1.x, x.x), + smoothstep(edge0.y, edge1.y, x.y), + smoothstep(edge0.z, edge1.z, x.z), + smoothstep(edge0.w, edge1.w, x.w)); + } + + // TODO: Not working on MinGW... + template + GLM_FUNC_QUALIFIER bool isnan(genType const & x) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'isnan' only accept floating-point inputs"); + +# if(GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_INTEL)) + return _isnan(x) != 0; +# elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) +# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID) + return _isnan(x) != 0; +# else + return std::isnan(x); +# endif +# elif(GLM_COMPILER & GLM_COMPILER_CUDA) + return isnan(x) != 0; +# else + return std::isnan(x); +# endif + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec2::bool_type isnan + ( + detail::tvec2 const & x + ) + { + return typename detail::tvec2::bool_type( + isnan(x.x), + isnan(x.y)); + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec3::bool_type isnan + ( + detail::tvec3 const & x + ) + { + return typename detail::tvec3::bool_type( + isnan(x.x), + isnan(x.y), + isnan(x.z)); + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec4::bool_type isnan + ( + detail::tvec4 const & x + ) + { + return typename detail::tvec4::bool_type( + isnan(x.x), + isnan(x.y), + isnan(x.z), + isnan(x.w)); + } + + template + GLM_FUNC_QUALIFIER bool isinf( + genType const & x) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'isinf' only accept floating-point inputs"); + +# if(GLM_COMPILER & (GLM_COMPILER_INTEL | GLM_COMPILER_VC)) + return _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF; +# elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) +# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID) + return _isinf(x) != 0; +# else + return std::isinf(x); +# endif +# elif(GLM_COMPILER & GLM_COMPILER_CUDA) + // http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/docs/online/group__CUDA__MATH__DOUBLE_g13431dd2b40b51f9139cbb7f50c18fab.html#g13431dd2b40b51f9139cbb7f50c18fab + return isinf(double(x)) != 0; +# else + return std::isinf(x); +# endif + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec2::bool_type isinf + ( + detail::tvec2 const & x + ) + { + return typename detail::tvec2::bool_type( + isinf(x.x), + isinf(x.y)); + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec3::bool_type isinf + ( + detail::tvec3 const & x + ) + { + return typename detail::tvec3::bool_type( + isinf(x.x), + isinf(x.y), + isinf(x.z)); + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec4::bool_type isinf + ( + detail::tvec4 const & x + ) + { + return typename detail::tvec4::bool_type( + isinf(x.x), + isinf(x.y), + isinf(x.z), + isinf(x.w)); + } + + GLM_FUNC_QUALIFIER int floatBitsToInt(float const & value) + { + union + { + float f; + int i; + } fi; + + fi.f = value; + return fi.i; + } + + GLM_FUNC_QUALIFIER detail::tvec2 floatBitsToInt + ( + detail::tvec2 const & value + ) + { + return detail::tvec2( + floatBitsToInt(value.x), + floatBitsToInt(value.y)); + } + + GLM_FUNC_QUALIFIER detail::tvec3 floatBitsToInt + ( + detail::tvec3 const & value + ) + { + return detail::tvec3( + floatBitsToInt(value.x), + floatBitsToInt(value.y), + floatBitsToInt(value.z)); + } + + GLM_FUNC_QUALIFIER detail::tvec4 floatBitsToInt + ( + detail::tvec4 const & value + ) + { + return detail::tvec4( + floatBitsToInt(value.x), + floatBitsToInt(value.y), + floatBitsToInt(value.z), + floatBitsToInt(value.w)); + } + + GLM_FUNC_QUALIFIER uint floatBitsToUint(float const & value) + { + union + { + float f; + uint u; + } fu; + + fu.f = value; + return fu.u; + } + + GLM_FUNC_QUALIFIER detail::tvec2 floatBitsToUint + ( + detail::tvec2 const & value + ) + { + return detail::tvec2( + floatBitsToUint(value.x), + floatBitsToUint(value.y)); + } + + GLM_FUNC_QUALIFIER detail::tvec3 floatBitsToUint + ( + detail::tvec3 const & value + ) + { + return detail::tvec3( + floatBitsToUint(value.x), + floatBitsToUint(value.y), + floatBitsToUint(value.z)); + } + + GLM_FUNC_QUALIFIER detail::tvec4 floatBitsToUint + ( + detail::tvec4 const & value + ) + { + return detail::tvec4( + floatBitsToUint(value.x), + floatBitsToUint(value.y), + floatBitsToUint(value.z), + floatBitsToUint(value.w)); + } + + GLM_FUNC_QUALIFIER float intBitsToFloat(int const & value) + { + union + { + float f; + int i; + } fi; + + fi.i = value; + return fi.f; + } + + GLM_FUNC_QUALIFIER detail::tvec2 intBitsToFloat + + ( + detail::tvec2 const & value + ) + { + return detail::tvec2( + intBitsToFloat(value.x), + intBitsToFloat(value.y)); + } + + GLM_FUNC_QUALIFIER detail::tvec3 intBitsToFloat + ( + detail::tvec3 const & value + ) + { + return detail::tvec3( + intBitsToFloat(value.x), + intBitsToFloat(value.y), + intBitsToFloat(value.z)); + } + + GLM_FUNC_QUALIFIER detail::tvec4 intBitsToFloat + ( + detail::tvec4 const & value + ) + { + return detail::tvec4( + intBitsToFloat(value.x), + intBitsToFloat(value.y), + intBitsToFloat(value.z), + intBitsToFloat(value.w)); + } + + GLM_FUNC_QUALIFIER float uintBitsToFloat(uint const & value) + { + union + { + float f; + uint u; + } fu; + + fu.u = value; + return fu.f; + } + + GLM_FUNC_QUALIFIER detail::tvec2 uintBitsToFloat + ( + detail::tvec2 const & value + ) + { + return detail::tvec2( + uintBitsToFloat(value.x), + uintBitsToFloat(value.y)); + } + + GLM_FUNC_QUALIFIER detail::tvec3 uintBitsToFloat + ( + detail::tvec3 const & value + ) + { + return detail::tvec3( + uintBitsToFloat(value.x), + uintBitsToFloat(value.y), + uintBitsToFloat(value.z)); + } + + GLM_FUNC_QUALIFIER detail::tvec4 uintBitsToFloat + ( + detail::tvec4 const & value + ) + { + return detail::tvec4( + uintBitsToFloat(value.x), + uintBitsToFloat(value.y), + uintBitsToFloat(value.z), + uintBitsToFloat(value.w)); + } + + template + GLM_FUNC_QUALIFIER genType fma + ( + genType const & a, + genType const & b, + genType const & c + ) + { + return a * b + c; + } + + template + GLM_FUNC_QUALIFIER genType frexp + ( + genType const & x, + int & exp + ) + { + return std::frexp(x, exp); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 frexp + ( + detail::tvec2 const & x, + detail::tvec2 & exp + ) + { + return std::frexp(x, exp); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 frexp + ( + detail::tvec3 const & x, + detail::tvec3 & exp + ) + { + return std::frexp(x, exp); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 frexp + ( + detail::tvec4 const & x, + detail::tvec4 & exp + ) + { + return std::frexp(x, exp); + } + + template + GLM_FUNC_QUALIFIER genType ldexp + ( + genType const & x, + int const & exp + ) + { + return std::frexp(x, exp); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 ldexp + ( + detail::tvec2 const & x, + detail::tvec2 const & exp + ) + { + return std::frexp(x, exp); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 ldexp + ( + detail::tvec3 const & x, + detail::tvec3 const & exp + ) + { + return std::frexp(x, exp); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 ldexp + ( + detail::tvec4 const & x, + detail::tvec4 const & exp + ) + { + return std::frexp(x, exp); + } + +}//namespace glm diff --git a/include/glm/core/func_exponential.hpp b/include/glm/core/func_exponential.hpp new file mode 100644 index 0000000..ea7bd99 --- /dev/null +++ b/include/glm/core/func_exponential.hpp @@ -0,0 +1,123 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_exponential.hpp +/// @date 2008-08-08 / 2011-06-14 +/// @author Christophe Riccio +/// +/// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions +/// +/// @defgroup core_func_exponential Exponential functions +/// @ingroup core +/// +/// These all operate component-wise. The description is per component. +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef glm_core_func_exponential +#define glm_core_func_exponential GLM_VERSION + +namespace glm +{ + /// @addtogroup core_func_exponential + /// @{ + + /// Returns 'base' raised to the power 'exponent'. + /// + /// @param base Floating point value. pow function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision. + /// @param exponent Floating point value representing the 'exponent'. + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL pow man page + /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions + template + GLM_FUNC_DECL genType pow(genType const & base, genType const & exponent); + + /// Returns the natural exponentiation of x, i.e., e^x. + /// + /// @param x exp function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision. + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL exp man page + /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions + template + GLM_FUNC_DECL genType exp(genType const & x); + + /// Returns the natural logarithm of x, i.e., + /// returns the value y which satisfies the equation x = e^y. + /// Results are undefined if x <= 0. + /// + /// @param x log function is defined for input values of x defined in the range (0, inf+) in the limit of the type precision. + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL log man page + /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions + template + GLM_FUNC_DECL genType log(genType const & x); + + /// Returns 2 raised to the x power. + /// + /// @param x exp2 function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision. + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL exp2 man page + /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions + template + GLM_FUNC_DECL genType exp2(genType const & x); + + /// Returns the base 2 log of x, i.e., returns the value y, + /// which satisfies the equation x = 2 ^ y. + /// + /// @param x log2 function is defined for input values of x defined in the range (0, inf+) in the limit of the type precision. + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL log2 man page + /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions + template + GLM_FUNC_DECL genType log2(genType const & x); + + /// Returns the positive square root of x. + /// + /// @param x sqrt function is defined for input values of x defined in the range [0, inf+) in the limit of the type precision. + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL sqrt man page + /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions + template + GLM_FUNC_DECL genType sqrt(genType const & x); + + /// Returns the reciprocal of the positive square root of x. + /// + /// @param x inversesqrt function is defined for input values of x defined in the range [0, inf+) in the limit of the type precision. + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL inversesqrt man page + /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions + template + GLM_FUNC_DECL genType inversesqrt(genType const & x); + + /// @} +}//namespace glm + +#include "func_exponential.inl" + +#endif//glm_core_func_exponential diff --git a/include/glm/core/func_exponential.inl b/include/glm/core/func_exponential.inl new file mode 100644 index 0000000..cee5605 --- /dev/null +++ b/include/glm/core/func_exponential.inl @@ -0,0 +1,156 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_exponential.inl +/// @date 2008-08-03 / 2011-06-15 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +namespace glm +{ + // pow + template + GLM_FUNC_QUALIFIER genType pow + ( + genType const & x, + genType const & y + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'pow' only accept floating-point input"); + + return genType(::std::pow(x, y)); + } + + VECTORIZE_VEC_VEC(pow) + + // exp + template + GLM_FUNC_QUALIFIER genType exp + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'exp' only accept floating-point input"); + + return genType(::std::exp(x)); + } + + VECTORIZE_VEC(exp) + + // log + template + GLM_FUNC_QUALIFIER genType log + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'log' only accept floating-point input"); + + return genType(::std::log(x)); + } + + VECTORIZE_VEC(log) + + //exp2, ln2 = 0.69314718055994530941723212145818f + template + GLM_FUNC_QUALIFIER genType exp2 + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'exp2' only accept floating-point input"); + + return genType(::std::exp(genType(0.69314718055994530941723212145818) * x)); + } + + VECTORIZE_VEC(exp2) + +namespace _detail +{ + template + struct _compute_log2 + { + template + T operator() (T const & Value) const; +/* + { + GLM_STATIC_ASSERT(0, "'log2' parameter has an invalid template parameter type. GLM core features only supports floating-point types, include for integer types support. Others types are not supported."); + return Value; + } +*/ + }; + + template <> + struct _compute_log2 + { + template + T operator() (T const & Value) const + { + return T(::std::log(Value)) / T(0.69314718055994530941723212145818); + } + }; + +}//namespace _detail + + // log2, ln2 = 0.69314718055994530941723212145818f + template + GLM_FUNC_QUALIFIER genType log2 + ( + genType const & x + ) + { + assert(x > genType(0)); // log2 is only defined on the range (0, inf] + return _detail::_compute_log2::ID>()(x); + } + + VECTORIZE_VEC(log2) + + // sqrt + template + GLM_FUNC_QUALIFIER genType sqrt + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'sqrt' only accept floating-point input"); + + return genType(::std::sqrt(x)); + } + + VECTORIZE_VEC(sqrt) + + template + GLM_FUNC_QUALIFIER genType inversesqrt + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'inversesqrt' only accept floating-point input"); + assert(x > genType(0)); + + return genType(1) / ::std::sqrt(x); + } + + VECTORIZE_VEC(inversesqrt) + +}//namespace glm diff --git a/include/glm/core/func_geometric.hpp b/include/glm/core/func_geometric.hpp new file mode 100644 index 0000000..3357dd0 --- /dev/null +++ b/include/glm/core/func_geometric.hpp @@ -0,0 +1,138 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_geometric.hpp +/// @date 2008-08-03 / 2011-06-14 +/// @author Christophe Riccio +/// +/// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions +/// +/// @defgroup core_func_geometric Geometric functions +/// @ingroup core +/// +/// These operate on vectors as vectors, not component-wise. +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef glm_core_func_geometric +#define glm_core_func_geometric GLM_VERSION + +namespace glm +{ + /// @addtogroup core_func_geometric + /// @{ + + /// Returns the length of x, i.e., sqrt(x * x). + /// + /// @tparam genType Floating-point vector types. + /// + /// @see GLSL length man page + /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions + template + GLM_FUNC_DECL typename genType::value_type length( + genType const & x); + + /// Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). + /// + /// @tparam genType Floating-point vector types. + /// + /// @see GLSL distance man page + /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions + template + GLM_FUNC_DECL typename genType::value_type distance( + genType const & p0, + genType const & p1); + + /// Returns the dot product of x and y, i.e., result = x * y. + /// + /// @tparam genType Floating-point vector types. + /// + /// @see GLSL dot man page + /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions + template + GLM_FUNC_DECL typename genType::value_type dot( + genType const & x, + genType const & y); + + /// Returns the cross product of x and y. + /// + /// @tparam valType Floating-point scalar types. + /// + /// @see GLSL cross man page + /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions + template + GLM_FUNC_DECL detail::tvec3 cross( + detail::tvec3 const & x, + detail::tvec3 const & y); + + /// Returns a vector in the same direction as x but with length of 1. + /// + /// @see GLSL normalize man page + /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions + template + GLM_FUNC_DECL genType normalize( + genType const & x); + + /// If dot(Nref, I) < 0.0, return N, otherwise, return -N. + /// + /// @tparam genType Floating-point vector types. + /// + /// @see GLSL faceforward man page + /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions + template + GLM_FUNC_DECL genType faceforward( + genType const & N, + genType const & I, + genType const & Nref); + + /// For the incident vector I and surface orientation N, + /// returns the reflection direction : result = I - 2.0 * dot(N, I) * N. + /// + /// @tparam genType Floating-point vector types. + /// + /// @see GLSL reflect man page + /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions + template + GLM_FUNC_DECL genType reflect( + genType const & I, + genType const & N); + + /// For the incident vector I and surface normal N, + /// and the ratio of indices of refraction eta, + /// return the refraction vector. + /// + /// @tparam genType Floating-point vector types. + /// + /// @see GLSL refract man page + /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions + template + GLM_FUNC_DECL genType refract( + genType const & I, + genType const & N, + typename genType::value_type const & eta); + + /// @} +}//namespace glm + +#include "func_geometric.inl" + +#endif//glm_core_func_geometric diff --git a/include/glm/core/func_geometric.inl b/include/glm/core/func_geometric.inl new file mode 100644 index 0000000..ddb9af2 --- /dev/null +++ b/include/glm/core/func_geometric.inl @@ -0,0 +1,321 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_geometric.inl +/// @date 2008-08-03 / 2011-06-15 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +namespace glm +{ + // length + template + GLM_FUNC_QUALIFIER genType length + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'length' only accept floating-point inputs"); + + genType sqr = x * x; + return sqrt(sqr); + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec2::value_type length + ( + detail::tvec2 const & v + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'length' only accept floating-point inputs"); + + typename detail::tvec2::value_type sqr = v.x * v.x + v.y * v.y; + return sqrt(sqr); + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec3::value_type length + ( + detail::tvec3 const & v + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'length' only accept floating-point inputs"); + + typename detail::tvec3::value_type sqr = v.x * v.x + v.y * v.y + v.z * v.z; + return sqrt(sqr); + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec4::value_type length + ( + detail::tvec4 const & v + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'length' only accept floating-point inputs"); + + typename detail::tvec4::value_type sqr = v.x * v.x + v.y * v.y + v.z * v.z + v.w * v.w; + return sqrt(sqr); + } + + // distance + template + GLM_FUNC_QUALIFIER genType distance + ( + genType const & p0, + genType const & p1 + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'distance' only accept floating-point inputs"); + + return length(p1 - p0); + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec2::value_type distance + ( + detail::tvec2 const & p0, + detail::tvec2 const & p1 + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'distance' only accept floating-point inputs"); + + return length(p1 - p0); + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec3::value_type distance + ( + detail::tvec3 const & p0, + detail::tvec3 const & p1 + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'distance' only accept floating-point inputs"); + + return length(p1 - p0); + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec4::value_type distance + ( + detail::tvec4 const & p0, + detail::tvec4 const & p1 + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'distance' only accept floating-point inputs"); + + return length(p1 - p0); + } + + // dot + template + GLM_FUNC_QUALIFIER genType dot + ( + genType const & x, + genType const & y + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'dot' only accept floating-point inputs"); + + return x * y; + } + + template + GLM_FUNC_QUALIFIER typename detail::tvec2::value_type dot + ( + detail::tvec2 const & x, + detail::tvec2 const & y + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'dot' only accept floating-point inputs"); + + return x.x * y.x + x.y * y.y; + } + + template + GLM_FUNC_QUALIFIER T dot + ( + detail::tvec3 const & x, + detail::tvec3 const & y + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'dot' only accept floating-point inputs"); + + return x.x * y.x + x.y * y.y + x.z * y.z; + } +/* // SSE3 + GLM_FUNC_QUALIFIER float dot(const tvec4& x, const tvec4& y) + { + float Result; + __asm + { + mov esi, x + mov edi, y + movaps xmm0, [esi] + mulps xmm0, [edi] + haddps( _xmm0, _xmm0 ) + haddps( _xmm0, _xmm0 ) + movss Result, xmm0 + } + return Result; + } +*/ + template + GLM_FUNC_QUALIFIER T dot + ( + detail::tvec4 const & x, + detail::tvec4 const & y + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'dot' only accept floating-point inputs"); + + return x.x * y.x + x.y * y.y + x.z * y.z + x.w * y.w; + } + + // cross + template + GLM_FUNC_QUALIFIER detail::tvec3 cross + ( + detail::tvec3 const & x, + detail::tvec3 const & y + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'cross' only accept floating-point inputs"); + + return detail::tvec3( + x.y * y.z - y.y * x.z, + x.z * y.x - y.z * x.x, + x.x * y.y - y.x * x.y); + } + + // normalize + template + GLM_FUNC_QUALIFIER genType normalize + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'normalize' only accept floating-point inputs"); + + return x < genType(0) ? genType(-1) : genType(1); + } + + // According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefine and generate an error + template + GLM_FUNC_QUALIFIER detail::tvec2 normalize + ( + detail::tvec2 const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'normalize' only accept floating-point inputs"); + + typename detail::tvec2::value_type sqr = x.x * x.x + x.y * x.y; + return x * inversesqrt(sqr); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 normalize + ( + detail::tvec3 const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'normalize' only accept floating-point inputs"); + + typename detail::tvec3::value_type sqr = x.x * x.x + x.y * x.y + x.z * x.z; + return x * inversesqrt(sqr); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 normalize + ( + detail::tvec4 const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'normalize' only accept floating-point inputs"); + + typename detail::tvec4::value_type sqr = x.x * x.x + x.y * x.y + x.z * x.z + x.w * x.w; + return x * inversesqrt(sqr); + } + + // faceforward + template + GLM_FUNC_QUALIFIER genType faceforward + ( + genType const & N, + genType const & I, + genType const & Nref + ) + { + return dot(Nref, I) < 0 ? N : -N; + } + + // reflect + template + GLM_FUNC_QUALIFIER genType reflect + ( + genType const & I, + genType const & N + ) + { + return I - N * dot(N, I) * genType(2); + } + + // refract + template + GLM_FUNC_QUALIFIER genType refract + ( + genType const & I, + genType const & N, + genType const & eta + ) + { + //It could be a vector + //GLM_STATIC_ASSERT(detail::type::is_float); + + genType dotValue = dot(N, I); + genType k = genType(1) - eta * eta * (genType(1) - dotValue * dotValue); + if(k < genType(0)) + return genType(0); + else + return eta * I - (eta * dotValue + sqrt(k)) * N; + } + + template + GLM_FUNC_QUALIFIER genType refract + ( + genType const & I, + genType const & N, + typename genType::value_type const & eta + ) + { + //It could be a vector + //GLM_STATIC_ASSERT(detail::type::is_float); + + typename genType::value_type dotValue = dot(N, I); + typename genType::value_type k = typename genType::value_type(1) - eta * eta * (typename genType::value_type(1) - dotValue * dotValue); + if(k < typename genType::value_type(0)) + return genType(0); + else + return eta * I - (eta * dotValue + sqrt(k)) * N; + } + +}//namespace glm diff --git a/include/glm/core/func_integer.hpp b/include/glm/core/func_integer.hpp new file mode 100644 index 0000000..b5057f8 --- /dev/null +++ b/include/glm/core/func_integer.hpp @@ -0,0 +1,201 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_integer.hpp +/// @date 2010-03-17 / 2011-06-18 +/// @author Christophe Riccio +/// +/// @see GLSL 4.20.8 specification, section 8.8 Integer Functions +/// +/// @defgroup core_func_integer Integer functions +/// @ingroup core +/// +/// These all operate component-wise. The description is per component. +/// The notation [a, b] means the set of bits from bit-number a through bit-number +/// b, inclusive. The lowest-order bit is bit 0. +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef glm_core_func_integer +#define glm_core_func_integer GLM_VERSION + +namespace glm +{ + /// @addtogroup core_func_integer + /// @{ + + /// Adds 32-bit unsigned integer x and y, returning the sum + /// modulo pow(2, 32). The value carry is set to 0 if the sum was + /// less than pow(2, 32), or to 1 otherwise. + /// + /// @tparam genUType Unsigned integer scalar or vector types. + /// + /// @see GLSL uaddCarry man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + template + GLM_FUNC_DECL genUType uaddCarry( + genUType const & x, + genUType const & y, + genUType & carry); + + /// Subtracts the 32-bit unsigned integer y from x, returning + /// the difference if non-negative, or pow(2, 32) plus the difference + /// otherwise. The value borrow is set to 0 if x >= y, or to 1 otherwise. + /// + /// @tparam genUType Unsigned integer scalar or vector types. + /// + /// @see GLSL usubBorrow man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + template + GLM_FUNC_DECL genUType usubBorrow( + genUType const & x, + genUType const & y, + genUType & borrow); + + /// Multiplies 32-bit integers x and y, producing a 64-bit + /// result. The 32 least-significant bits are returned in lsb. + /// The 32 most-significant bits are returned in msb. + /// + /// @tparam genUType Unsigned integer scalar or vector types. + /// + /// @see GLSL umulExtended man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + template + GLM_FUNC_DECL void umulExtended( + genUType const & x, + genUType const & y, + genUType & msb, + genUType & lsb); + + /// Multiplies 32-bit integers x and y, producing a 64-bit + /// result. The 32 least-significant bits are returned in lsb. + /// The 32 most-significant bits are returned in msb. + /// + /// @tparam genIType Signed integer scalar or vector types. + /// + /// @see GLSL imulExtended man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + template + GLM_FUNC_DECL void imulExtended( + genIType const & x, + genIType const & y, + genIType & msb, + genIType & lsb); + + /// Extracts bits [offset, offset + bits - 1] from value, + /// returning them in the least significant bits of the result. + /// For unsigned data types, the most significant bits of the + /// result will be set to zero. For signed data types, the + /// most significant bits will be set to the value of bit offset + base - 1. + /// + /// If bits is zero, the result will be zero. The result will be + /// undefined if offset or bits is negative, or if the sum of + /// offset and bits is greater than the number of bits used + /// to store the operand. + /// + /// @tparam genIUType Signed or unsigned integer scalar or vector types. + /// + /// @see GLSL bitfieldExtract man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + template + GLM_FUNC_DECL genIUType bitfieldExtract( + genIUType const & Value, + int const & Offset, + int const & Bits); + + /// Returns the insertion the bits least-significant bits of insert into base. + /// + /// The result will have bits [offset, offset + bits - 1] taken + /// from bits [0, bits - 1] of insert, and all other bits taken + /// directly from the corresponding bits of base. If bits is + /// zero, the result will simply be base. The result will be + /// undefined if offset or bits is negative, or if the sum of + /// offset and bits is greater than the number of bits used to + /// store the operand. + /// + /// @tparam genIUType Signed or unsigned integer scalar or vector types. + /// + /// @see GLSL bitfieldInsert man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + template + GLM_FUNC_DECL genIUType bitfieldInsert( + genIUType const & Base, + genIUType const & Insert, + int const & Offset, + int const & Bits); + + /// Returns the reversal of the bits of value. + /// The bit numbered n of the result will be taken from bit (bits - 1) - n of value, + /// where bits is the total number of bits used to represent value. + /// + /// @tparam genIUType Signed or unsigned integer scalar or vector types. + /// + /// @see GLSL bitfieldReverse man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + template + GLM_FUNC_DECL genIUType bitfieldReverse(genIUType const & Value); + + /// Returns the number of bits set to 1 in the binary representation of value. + /// + /// @tparam genIUType Signed or unsigned integer scalar or vector types. + /// + /// @see GLSL bitCount man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + /// + /// @todo Clarify the declaration to specify that scalars are suported. + template class genIUType> + GLM_FUNC_DECL typename genIUType::signed_type bitCount(genIUType const & Value); + + /// Returns the bit number of the least significant bit set to + /// 1 in the binary representation of value. + /// If value is zero, -1 will be returned. + /// + /// @tparam genIUType Signed or unsigned integer scalar or vector types. + /// + /// @see GLSL findLSB man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + /// + /// @todo Clarify the declaration to specify that scalars are suported. + template class genIUType> + GLM_FUNC_DECL typename genIUType::signed_type findLSB(genIUType const & Value); + + /// Returns the bit number of the most significant bit in the binary representation of value. + /// For positive integers, the result will be the bit number of the most significant bit set to 1. + /// For negative integers, the result will be the bit number of the most significant + /// bit set to 0. For a value of zero or negative one, -1 will be returned. + /// + /// @tparam genIUType Signed or unsigned integer scalar or vector types. + /// + /// @see GLSL findMSB man page + /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions + /// + /// @todo Clarify the declaration to specify that scalars are suported. + template class genIUType> + GLM_FUNC_DECL typename genIUType::signed_type findMSB(genIUType const & Value); + + /// @} +}//namespace glm + +#include "func_integer.inl" + +#endif//glm_core_func_integer + diff --git a/include/glm/core/func_integer.inl b/include/glm/core/func_integer.inl new file mode 100644 index 0000000..3784b16 --- /dev/null +++ b/include/glm/core/func_integer.inl @@ -0,0 +1,648 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_integer.inl +/// @date 2010-03-17 / 2011-06-15 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +#if(GLM_ARCH != GLM_ARCH_PURE) +#if(GLM_COMPILER & GLM_COMPILER_VC) +# include +# pragma intrinsic(_BitScanReverse) +#endif//(GLM_COMPILER & GLM_COMPILER_VC) +#endif//(GLM_ARCH != GLM_ARCH_PURE) + +namespace glm +{ + // uaddCarry + template + GLM_FUNC_QUALIFIER genUType uaddCarry + ( + genUType const & x, + genUType const & y, + genUType & Carry + ) + { + detail::highp_uint_t Value64 = detail::highp_uint_t(x) + detail::highp_uint_t(y); + genUType Result = genUType(Value64 % (detail::highp_uint_t(1) << detail::highp_uint_t(32))); + Carry = (Value64 % (detail::highp_uint_t(1) << detail::highp_uint_t(32))) > 1 ? 1 : 0; + return Result; + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 uaddCarry + ( + detail::tvec2 const & x, + detail::tvec2 const & y, + detail::tvec2 & Carry + ) + { + return detail::tvec2( + uaddCarry(x[0], y[0], Carry[0]), + uaddCarry(x[1], y[1], Carry[1])); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 uaddCarry + ( + detail::tvec3 const & x, + detail::tvec3 const & y, + detail::tvec3 & Carry + ) + { + return detail::tvec3( + uaddCarry(x[0], y[0], Carry[0]), + uaddCarry(x[1], y[1], Carry[1]), + uaddCarry(x[2], y[2], Carry[2])); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 uaddCarry + ( + detail::tvec4 const & x, + detail::tvec4 const & y, + detail::tvec4 & Carry + ) + { + return detail::tvec4( + uaddCarry(x[0], y[0], Carry[0]), + uaddCarry(x[1], y[1], Carry[1]), + uaddCarry(x[2], y[2], Carry[2]), + uaddCarry(x[3], y[3], Carry[3])); + } + + // usubBorrow + template + GLM_FUNC_QUALIFIER genUType usubBorrow + ( + genUType const & x, + genUType const & y, + genUType & Borrow + ) + { + Borrow = x >= y ? 0 : 1; + if(x > y) + return genUType(detail::highp_int_t(x) - detail::highp_int_t(y)); + else + return genUType((detail::highp_int_t(1) << detail::highp_int_t(32)) + detail::highp_int_t(x) - detail::highp_int_t(y)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 usubBorrow + ( + detail::tvec2 const & x, + detail::tvec2 const & y, + detail::tvec2 & Borrow + ) + { + return detail::tvec2( + usubBorrow(x[0], y[0], Borrow[0]), + usubBorrow(x[1], y[1], Borrow[1])); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 usubBorrow + ( + detail::tvec3 const & x, + detail::tvec3 const & y, + detail::tvec3 & Borrow + ) + { + return detail::tvec3( + usubBorrow(x[0], y[0], Borrow[0]), + usubBorrow(x[1], y[1], Borrow[1]), + usubBorrow(x[2], y[2], Borrow[2])); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 usubBorrow + ( + detail::tvec4 const & x, + detail::tvec4 const & y, + detail::tvec4 & Borrow + ) + { + return detail::tvec4( + usubBorrow(x[0], y[0], Borrow[0]), + usubBorrow(x[1], y[1], Borrow[1]), + usubBorrow(x[2], y[2], Borrow[2]), + usubBorrow(x[3], y[3], Borrow[3])); + } + + // umulExtended + template + GLM_FUNC_QUALIFIER void umulExtended + ( + genUType const & x, + genUType const & y, + genUType & msb, + genUType & lsb + ) + { + detail::highp_uint_t ValueX64 = x; + detail::highp_uint_t ValueY64 = y; + detail::highp_uint_t Value64 = ValueX64 * ValueY64; + msb = *(genUType*)&genUType(Value64 & ((detail::highp_uint_t(1) << detail::highp_uint_t(32)) - detail::highp_uint_t(1))); + lsb = *(genUType*)&genUType(Value64 >> detail::highp_uint_t(32)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 umulExtended + ( + detail::tvec2 const & x, + detail::tvec2 const & y, + detail::tvec2 & msb, + detail::tvec2 & lsb + ) + { + return detail::tvec2( + umulExtended(x[0], y[0], msb, lsb), + umulExtended(x[1], y[1], msb, lsb)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 umulExtended + ( + detail::tvec3 const & x, + detail::tvec3 const & y, + detail::tvec3 & msb, + detail::tvec3 & lsb + ) + { + return detail::tvec3( + umulExtended(x[0], y[0], msb, lsb), + umulExtended(x[1], y[1], msb, lsb), + umulExtended(x[2], y[2], msb, lsb)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 umulExtended + ( + detail::tvec4 const & x, + detail::tvec4 const & y, + detail::tvec4 & msb, + detail::tvec4 & lsb + ) + { + return detail::tvec4( + umulExtended(x[0], y[0], msb, lsb), + umulExtended(x[1], y[1], msb, lsb), + umulExtended(x[2], y[2], msb, lsb), + umulExtended(x[3], y[3], msb, lsb)); + } + + // imulExtended + template + GLM_FUNC_QUALIFIER void imulExtended + ( + genIType const & x, + genIType const & y, + genIType & msb, + genIType & lsb + ) + { + detail::highp_int_t ValueX64 = x; + detail::highp_int_t ValueY64 = y; + detail::highp_int_t Value64 = ValueX64 * ValueY64; + msb = *(genIType*)&genIType(Value64 & ((detail::highp_uint_t(1) << detail::highp_uint_t(32)) - detail::highp_uint_t(1))); + lsb = *(genIType*)&genIType(Value64 >> detail::highp_uint_t(32)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 imulExtended + ( + detail::tvec2 const & x, + detail::tvec2 const & y, + detail::tvec2 & msb, + detail::tvec2 & lsb + ) + { + return detail::tvec2( + imulExtended(x[0], y[0], msb, lsb), + imulExtended(x[1], y[1], msb, lsb)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 imulExtended + ( + detail::tvec3 const & x, + detail::tvec3 const & y, + detail::tvec3 & msb, + detail::tvec3 & lsb + ) + { + return detail::tvec3( + imulExtended(x[0], y[0], msb, lsb), + imulExtended(x[1], y[1], msb, lsb), + imulExtended(x[2], y[2], msb, lsb)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 imulExtended + ( + detail::tvec4 const & x, + detail::tvec4 const & y, + detail::tvec4 & msb, + detail::tvec4 & lsb + ) + { + return detail::tvec4( + imulExtended(x[0], y[0], msb, lsb), + imulExtended(x[1], y[1], msb, lsb), + imulExtended(x[2], y[2], msb, lsb), + imulExtended(x[3], y[3], msb, lsb)); + } + + // bitfieldExtract + template + GLM_FUNC_QUALIFIER genIUType bitfieldExtract + ( + genIUType const & Value, + int const & Offset, + int const & Bits + ) + { + int GenSize = int(sizeof(genIUType)) << int(3); + + assert(Offset + Bits <= GenSize); + + genIUType ShiftLeft = Bits ? Value << (GenSize - (Bits + Offset)) : genIUType(0); + genIUType ShiftBack = ShiftLeft >> genIUType(GenSize - Bits); + + return ShiftBack; + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 bitfieldExtract + ( + detail::tvec2 const & Value, + int const & Offset, + int const & Bits + ) + { + return detail::tvec2( + bitfieldExtract(Value[0], Offset, Bits), + bitfieldExtract(Value[1], Offset, Bits)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 bitfieldExtract + ( + detail::tvec3 const & Value, + int const & Offset, + int const & Bits + ) + { + return detail::tvec3( + bitfieldExtract(Value[0], Offset, Bits), + bitfieldExtract(Value[1], Offset, Bits), + bitfieldExtract(Value[2], Offset, Bits)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 bitfieldExtract + ( + detail::tvec4 const & Value, + int const & Offset, + int const & Bits + ) + { + return detail::tvec4( + bitfieldExtract(Value[0], Offset, Bits), + bitfieldExtract(Value[1], Offset, Bits), + bitfieldExtract(Value[2], Offset, Bits), + bitfieldExtract(Value[3], Offset, Bits)); + } + + // bitfieldInsert + template + GLM_FUNC_QUALIFIER genIUType bitfieldInsert + ( + genIUType const & Base, + genIUType const & Insert, + int const & Offset, + int const & Bits + ) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldInsert' only accept integer values"); + assert(Offset + Bits <= sizeof(genIUType)); + + if(Bits == 0) + return Base; + + genIUType Mask = 0; + for(int Bit = Offset; Bit < Offset + Bits; ++Bit) + Mask |= (1 << Bit); + + return (Base & ~Mask) | (Insert & Mask); + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 bitfieldInsert + ( + detail::tvec2 const & Base, + detail::tvec2 const & Insert, + int const & Offset, + int const & Bits + ) + { + return detail::tvec2( + bitfieldInsert(Base[0], Insert[0], Offset, Bits), + bitfieldInsert(Base[1], Insert[1], Offset, Bits)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 bitfieldInsert + ( + detail::tvec3 const & Base, + detail::tvec3 const & Insert, + int const & Offset, + int const & Bits + ) + { + return detail::tvec3( + bitfieldInsert(Base[0], Insert[0], Offset, Bits), + bitfieldInsert(Base[1], Insert[1], Offset, Bits), + bitfieldInsert(Base[2], Insert[2], Offset, Bits)); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 bitfieldInsert + ( + detail::tvec4 const & Base, + detail::tvec4 const & Insert, + int const & Offset, + int const & Bits + ) + { + return detail::tvec4( + bitfieldInsert(Base[0], Insert[0], Offset, Bits), + bitfieldInsert(Base[1], Insert[1], Offset, Bits), + bitfieldInsert(Base[2], Insert[2], Offset, Bits), + bitfieldInsert(Base[3], Insert[3], Offset, Bits)); + } + + // bitfieldReverse + template + GLM_FUNC_QUALIFIER genIUType bitfieldReverse(genIUType const & Value) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldReverse' only accept integer values"); + + genIUType Out = 0; + std::size_t BitSize = sizeof(genIUType) * 8; + for(std::size_t i = 0; i < BitSize; ++i) + if(Value & (genIUType(1) << i)) + Out |= genIUType(1) << (BitSize - 1 - i); + return Out; + } + + VECTORIZE_VEC(bitfieldReverse) + + // bitCount + template + GLM_FUNC_QUALIFIER int bitCount(genIUType const & Value) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitCount' only accept integer values"); + + int Count = 0; + for(std::size_t i = 0; i < sizeof(genIUType) * std::size_t(8); ++i) + { + if(Value & (1 << i)) + ++Count; + } + return Count; + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 bitCount + ( + detail::tvec2 const & value + ) + { + return detail::tvec2( + bitCount(value[0]), + bitCount(value[1])); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 bitCount + ( + detail::tvec3 const & value + ) + { + return detail::tvec3( + bitCount(value[0]), + bitCount(value[1]), + bitCount(value[2])); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 bitCount + ( + detail::tvec4 const & value + ) + { + return detail::tvec4( + bitCount(value[0]), + bitCount(value[1]), + bitCount(value[2]), + bitCount(value[3])); + } + + // findLSB + template + GLM_FUNC_QUALIFIER int findLSB + ( + genIUType const & Value + ) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findLSB' only accept integer values"); + if(Value == 0) + return -1; + + genIUType Bit; + for(Bit = genIUType(0); !(Value & (1 << Bit)); ++Bit){} + return Bit; + } + + template + GLM_FUNC_QUALIFIER detail::tvec2 findLSB + ( + detail::tvec2 const & value + ) + { + return detail::tvec2( + findLSB(value[0]), + findLSB(value[1])); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 findLSB + ( + detail::tvec3 const & value + ) + { + return detail::tvec3( + findLSB(value[0]), + findLSB(value[1]), + findLSB(value[2])); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 findLSB + ( + detail::tvec4 const & value + ) + { + return detail::tvec4( + findLSB(value[0]), + findLSB(value[1]), + findLSB(value[2]), + findLSB(value[3])); + } + + // findMSB +#if((GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & GLM_COMPILER_VC)) + + template + GLM_FUNC_QUALIFIER int findMSB + ( + genIUType const & Value + ) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); + if(Value == 0) + return -1; + + unsigned long Result(0); + _BitScanReverse(&Result, Value); + return int(Result); + } +/* +// __builtin_clz seems to be buggy as it crasks for some values, from 0x00200000 to 80000000 +#elif((GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC40)) + + template + GLM_FUNC_QUALIFIER int findMSB + ( + genIUType const & Value + ) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); + if(Value == 0) + return -1; + + // clz returns the number or trailing 0-bits; see + // http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Other-Builtins.html + // + // NoteBecause __builtin_clz only works for unsigned ints, this + // implementation will not work for 64-bit integers. + // + return 31 - __builtin_clzl(Value); + } +*/ +#else + +/* SSE implementation idea + + __m128i const Zero = _mm_set_epi32( 0, 0, 0, 0); + __m128i const One = _mm_set_epi32( 1, 1, 1, 1); + __m128i Bit = _mm_set_epi32(-1, -1, -1, -1); + __m128i Tmp = _mm_set_epi32(Value, Value, Value, Value); + __m128i Mmi = Zero; + for(int i = 0; i < 32; ++i) + { + __m128i Shilt = _mm_and_si128(_mm_cmpgt_epi32(Tmp, One), One); + Tmp = _mm_srai_epi32(Tmp, One); + Bit = _mm_add_epi32(Bit, _mm_and_si128(Shilt, i)); + Mmi = _mm_and_si128(Mmi, One); + } + return Bit; + +*/ + + template + GLM_FUNC_QUALIFIER int findMSB + ( + genIUType const & Value + ) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); + + if(Value == genIUType(0) || Value == genIUType(-1)) + return -1; + else if(Value > 0) + { + genIUType Bit = genIUType(-1); + for(genIUType tmp = Value; tmp > 0; tmp >>= 1, ++Bit){} + return Bit; + } + else //if(Value < 0) + { + int const BitCount(sizeof(genIUType) * 8); + int MostSignificantBit(-1); + for(int BitIndex(0); BitIndex < BitCount; ++BitIndex) + MostSignificantBit = (Value & (1 << BitIndex)) ? MostSignificantBit : BitIndex; + assert(MostSignificantBit >= 0); + return MostSignificantBit; + } + } +#endif//(GLM_COMPILER) + + template + GLM_FUNC_QUALIFIER detail::tvec2 findMSB + ( + detail::tvec2 const & value + ) + { + return detail::tvec2( + findMSB(value[0]), + findMSB(value[1])); + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 findMSB + ( + detail::tvec3 const & value + ) + { + return detail::tvec3( + findMSB(value[0]), + findMSB(value[1]), + findMSB(value[2])); + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 findMSB + ( + detail::tvec4 const & value + ) + { + return detail::tvec4( + findMSB(value[0]), + findMSB(value[1]), + findMSB(value[2]), + findMSB(value[3])); + } +}//namespace glm diff --git a/include/glm/core/func_matrix.hpp b/include/glm/core/func_matrix.hpp new file mode 100644 index 0000000..3b7a85b --- /dev/null +++ b/include/glm/core/func_matrix.hpp @@ -0,0 +1,150 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_matrix.hpp +/// @date 2008-08-03 / 2011-06-15 +/// @author Christophe Riccio +/// +/// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions +/// +/// @defgroup core_func_matrix Matrix functions +/// @ingroup core +/// +/// For each of the following built-in matrix functions, there is both a +/// single-precision floating point version, where all arguments and return values +/// are single precision, and a double-precision floating version, where all +/// arguments and return values are double precision. Only the single-precision +/// floating point version is shown. +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef GLM_CORE_func_matrix +#define GLM_CORE_func_matrix GLM_VERSION + +namespace glm +{ + /// @addtogroup core_func_matrix + /// @{ + + /// Multiply matrix x by matrix y component-wise, i.e., + /// result[i][j] is the scalar product of x[i][j] and y[i][j]. + /// + /// @tparam matType Floating-point matrix types. + /// + /// @see GLSL matrixCompMult man page + /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions + template + GLM_FUNC_DECL matType matrixCompMult( + matType const & x, + matType const & y); + + /// Treats the first parameter c as a column vector + /// and the second parameter r as a row vector + /// and does a linear algebraic matrix multiply c * r. + /// + /// @tparam matType Floating-point matrix types. + /// + /// @see GLSL outerProduct man page + /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions + /// + /// @todo Clarify the declaration to specify that matType doesn't have to be provided when used. + template + GLM_FUNC_DECL matType outerProduct( + vecType const & c, + vecType const & r); + + /// Returns the transposed matrix of x + /// + /// @tparam matType Floating-point matrix types. + /// + /// @see GLSL transpose man page + /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions + template + GLM_FUNC_DECL typename matType::transpose_type transpose( + matType const & x); + + /// Return the determinant of a mat2 matrix. + /// + /// @tparam valType Floating-point scalar types. + /// + /// @see GLSL determinant man page + /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions + template + GLM_FUNC_DECL typename detail::tmat2x2::value_type determinant( + detail::tmat2x2 const & m); + + /// Return the determinant of a mat3 matrix. + /// + /// @tparam valType Floating-point scalar types. + /// + /// @see GLSL determinant man page + /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions + template + GLM_FUNC_DECL typename detail::tmat3x3::value_type determinant( + detail::tmat3x3 const & m); + + /// Return the determinant of a mat4 matrix. + /// + /// @tparam valType Floating-point scalar types. + /// + /// @see GLSL determinant man page + /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions + template + GLM_FUNC_DECL typename detail::tmat4x4::value_type determinant( + detail::tmat4x4 const & m); + + /// Return the inverse of a mat2 matrix. + /// + /// @tparam valType Floating-point scalar types. + /// + /// @see GLSL inverse man page + /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions + template + GLM_FUNC_DECL detail::tmat2x2 inverse( + detail::tmat2x2 const & m); + + /// Return the inverse of a mat3 matrix. + /// + /// @tparam valType Floating-point scalar types. + /// + /// @see GLSL inverse man page + /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions + template + GLM_FUNC_DECL detail::tmat3x3 inverse( + detail::tmat3x3 const & m); + + /// Return the inverse of a mat4 matrix. + /// + /// @tparam valType Floating-point scalar types. + /// + /// @see GLSL inverse man page + /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions + template + GLM_FUNC_DECL detail::tmat4x4 inverse( + detail::tmat4x4 const & m); + + /// @} +}//namespace glm + +#include "func_matrix.inl" + +#endif//GLM_CORE_func_matrix diff --git a/include/glm/core/func_matrix.inl b/include/glm/core/func_matrix.inl new file mode 100644 index 0000000..6bec8c7 --- /dev/null +++ b/include/glm/core/func_matrix.inl @@ -0,0 +1,582 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_matrix.inl +/// @date 2008-03-08 / 2011-06-15 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +namespace glm +{ + // matrixCompMult + template + GLM_FUNC_QUALIFIER matType matrixCompMult + ( + matType const & x, + matType const & y + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'matrixCompMult' only accept floating-point inputs"); + + matType result(matType::null); + for(typename matType::size_type i = 0; i < matType::row_size(); ++i) + result[i] = x[i] * y[i]; + return result; + } + + // outerProduct + template + GLM_FUNC_QUALIFIER detail::tmat2x2 outerProduct + ( + detail::tvec2 const & c, + detail::tvec2 const & r + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); + + detail::tmat2x2 m(detail::tmat2x2::null); + m[0][0] = c[0] * r[0]; + m[0][1] = c[1] * r[0]; + m[1][0] = c[0] * r[1]; + m[1][1] = c[1] * r[1]; + return m; + } + + template + GLM_FUNC_QUALIFIER detail::tmat3x3 outerProduct + ( + detail::tvec3 const & c, + detail::tvec3 const & r + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); + + detail::tmat3x3 m(detail::tmat3x3::null); + for(typename detail::tmat3x3::size_type i(0); i < m.length(); ++i) + m[i] = c * r[i]; + return m; + } + + template + GLM_FUNC_QUALIFIER detail::tmat4x4 outerProduct + ( + detail::tvec4 const & c, + detail::tvec4 const & r + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); + + detail::tmat4x4 m(detail::tmat4x4::null); + for(typename detail::tmat4x4::size_type i(0); i < m.length(); ++i) + m[i] = c * r[i]; + return m; + } + + template + GLM_FUNC_QUALIFIER detail::tmat2x3 outerProduct + ( + detail::tvec3 const & c, + detail::tvec2 const & r + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); + + detail::tmat2x3 m(detail::tmat2x3::null); + m[0][0] = c.x * r.x; + m[0][1] = c.y * r.x; + m[0][2] = c.z * r.x; + m[1][0] = c.x * r.y; + m[1][1] = c.y * r.y; + m[1][2] = c.z * r.y; + return m; + } + + template + GLM_FUNC_QUALIFIER detail::tmat3x2 outerProduct + ( + detail::tvec2 const & c, + detail::tvec3 const & r + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); + + detail::tmat3x2 m(detail::tmat3x2::null); + m[0][0] = c.x * r.x; + m[0][1] = c.y * r.x; + m[1][0] = c.x * r.y; + m[1][1] = c.y * r.y; + m[2][0] = c.x * r.z; + m[2][1] = c.y * r.z; + return m; + } + + template + GLM_FUNC_QUALIFIER detail::tmat2x4 outerProduct + ( + detail::tvec4 const & c, + detail::tvec2 const & r + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); + + detail::tmat2x4 m(detail::tmat2x4::null); + m[0][0] = c.x * r.x; + m[0][1] = c.y * r.x; + m[0][2] = c.z * r.x; + m[0][3] = c.w * r.x; + m[1][0] = c.x * r.y; + m[1][1] = c.y * r.y; + m[1][2] = c.z * r.y; + m[1][3] = c.w * r.y; + return m; + } + + template + GLM_FUNC_QUALIFIER detail::tmat4x2 outerProduct + ( + detail::tvec2 const & c, + detail::tvec4 const & r + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); + + detail::tmat4x2 m(detail::tmat4x2::null); + m[0][0] = c.x * r.x; + m[0][1] = c.y * r.x; + m[1][0] = c.x * r.y; + m[1][1] = c.y * r.y; + m[2][0] = c.x * r.z; + m[2][1] = c.y * r.z; + m[3][0] = c.x * r.w; + m[3][1] = c.y * r.w; + return m; + } + + template + GLM_FUNC_QUALIFIER detail::tmat3x4 outerProduct + ( + detail::tvec4 const & c, + detail::tvec3 const & r + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); + + detail::tmat3x4 m(detail::tmat3x4::null); + m[0][0] = c.x * r.x; + m[0][1] = c.y * r.x; + m[0][2] = c.z * r.x; + m[0][3] = c.w * r.x; + m[1][0] = c.x * r.y; + m[1][1] = c.y * r.y; + m[1][2] = c.z * r.y; + m[1][3] = c.w * r.y; + m[2][0] = c.x * r.z; + m[2][1] = c.y * r.z; + m[2][2] = c.z * r.z; + m[2][3] = c.w * r.z; + return m; + } + + template + GLM_FUNC_QUALIFIER detail::tmat4x3 outerProduct + ( + detail::tvec3 const & c, + detail::tvec4 const & r + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); + + detail::tmat4x3 m(detail::tmat4x3::null); + m[0][0] = c.x * r.x; + m[0][1] = c.y * r.x; + m[0][2] = c.z * r.x; + m[1][0] = c.x * r.y; + m[1][1] = c.y * r.y; + m[1][2] = c.z * r.y; + m[2][0] = c.x * r.z; + m[2][1] = c.y * r.z; + m[2][2] = c.z * r.z; + m[3][0] = c.x * r.w; + m[3][1] = c.y * r.w; + m[3][2] = c.z * r.w; + return m; + } + + template + GLM_FUNC_QUALIFIER detail::tmat2x2 transpose + ( + detail::tmat2x2 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); + + detail::tmat2x2 result(detail::tmat2x2::null); + result[0][0] = m[0][0]; + result[0][1] = m[1][0]; + result[1][0] = m[0][1]; + result[1][1] = m[1][1]; + return result; + } + + template + GLM_FUNC_QUALIFIER detail::tmat3x3 transpose + ( + detail::tmat3x3 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); + + detail::tmat3x3 result(detail::tmat3x3::null); + result[0][0] = m[0][0]; + result[0][1] = m[1][0]; + result[0][2] = m[2][0]; + + result[1][0] = m[0][1]; + result[1][1] = m[1][1]; + result[1][2] = m[2][1]; + + result[2][0] = m[0][2]; + result[2][1] = m[1][2]; + result[2][2] = m[2][2]; + return result; + } + + template + GLM_FUNC_QUALIFIER detail::tmat4x4 transpose + ( + detail::tmat4x4 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); + + detail::tmat4x4 result(detail::tmat4x4::null); + result[0][0] = m[0][0]; + result[0][1] = m[1][0]; + result[0][2] = m[2][0]; + result[0][3] = m[3][0]; + + result[1][0] = m[0][1]; + result[1][1] = m[1][1]; + result[1][2] = m[2][1]; + result[1][3] = m[3][1]; + + result[2][0] = m[0][2]; + result[2][1] = m[1][2]; + result[2][2] = m[2][2]; + result[2][3] = m[3][2]; + + result[3][0] = m[0][3]; + result[3][1] = m[1][3]; + result[3][2] = m[2][3]; + result[3][3] = m[3][3]; + return result; + } + + template + GLM_FUNC_QUALIFIER detail::tmat2x3 transpose + ( + detail::tmat3x2 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); + + detail::tmat2x3 result(detail::tmat2x3::null); + result[0][0] = m[0][0]; + result[0][1] = m[1][0]; + result[0][2] = m[2][0]; + result[1][0] = m[0][1]; + result[1][1] = m[1][1]; + result[1][2] = m[2][1]; + return result; + } + + template + GLM_FUNC_QUALIFIER detail::tmat3x2 transpose + ( + detail::tmat2x3 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); + + detail::tmat3x2 result(detail::tmat3x2::null); + result[0][0] = m[0][0]; + result[0][1] = m[1][0]; + result[1][0] = m[0][1]; + result[1][1] = m[1][1]; + result[2][0] = m[0][2]; + result[2][1] = m[1][2]; + return result; + } + + template + GLM_FUNC_QUALIFIER detail::tmat2x4 transpose + ( + detail::tmat4x2 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); + + detail::tmat2x4 result(detail::tmat2x4::null); + result[0][0] = m[0][0]; + result[0][1] = m[1][0]; + result[0][2] = m[2][0]; + result[0][3] = m[3][0]; + result[1][0] = m[0][1]; + result[1][1] = m[1][1]; + result[1][2] = m[2][1]; + result[1][3] = m[3][1]; + return result; + } + + template + GLM_FUNC_QUALIFIER detail::tmat4x2 transpose + ( + detail::tmat2x4 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); + + detail::tmat4x2 result(detail::tmat4x2::null); + result[0][0] = m[0][0]; + result[0][1] = m[1][0]; + result[1][0] = m[0][1]; + result[1][1] = m[1][1]; + result[2][0] = m[0][2]; + result[2][1] = m[1][2]; + result[3][0] = m[0][3]; + result[3][1] = m[1][3]; + return result; + } + + template + GLM_FUNC_QUALIFIER detail::tmat3x4 transpose + ( + detail::tmat4x3 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); + + detail::tmat3x4 result(detail::tmat3x4::null); + result[0][0] = m[0][0]; + result[0][1] = m[1][0]; + result[0][2] = m[2][0]; + result[0][3] = m[3][0]; + result[1][0] = m[0][1]; + result[1][1] = m[1][1]; + result[1][2] = m[2][1]; + result[1][3] = m[3][1]; + result[2][0] = m[0][2]; + result[2][1] = m[1][2]; + result[2][2] = m[2][2]; + result[2][3] = m[3][2]; + return result; + } + + template + GLM_FUNC_QUALIFIER detail::tmat4x3 transpose + ( + detail::tmat3x4 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); + + detail::tmat4x3 result(detail::tmat4x3::null); + result[0][0] = m[0][0]; + result[0][1] = m[1][0]; + result[0][2] = m[2][0]; + result[1][0] = m[0][1]; + result[1][1] = m[1][1]; + result[1][2] = m[2][1]; + result[2][0] = m[0][2]; + result[2][1] = m[1][2]; + result[2][2] = m[2][2]; + result[3][0] = m[0][3]; + result[3][1] = m[1][3]; + result[3][2] = m[2][3]; + return result; + } + + template + GLM_FUNC_QUALIFIER typename detail::tmat2x2::value_type determinant + ( + detail::tmat2x2 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'determinant' only accept floating-point inputs"); + + return m[0][0] * m[1][1] - m[1][0] * m[0][1]; + } + + template + GLM_FUNC_QUALIFIER typename detail::tmat3x3::value_type determinant + ( + detail::tmat3x3 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'determinant' only accept floating-point inputs"); + + return + + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) + - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) + + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]); + } + + template + GLM_FUNC_QUALIFIER typename detail::tmat4x4::value_type determinant + ( + detail::tmat4x4 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'determinant' only accept floating-point inputs"); + + T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; + T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; + T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; + T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; + T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; + T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; + + detail::tvec4 DetCof( + + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), + - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), + + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), + - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05)); + + return m[0][0] * DetCof[0] + + m[0][1] * DetCof[1] + + m[0][2] * DetCof[2] + + m[0][3] * DetCof[3]; + } + + template + GLM_FUNC_QUALIFIER detail::tmat2x2 inverse + ( + detail::tmat2x2 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'inverse' only accept floating-point inputs"); + + //valType Determinant = m[0][0] * m[1][1] - m[1][0] * m[0][1]; + T Determinant = determinant(m); + + detail::tmat2x2 Inverse( + + m[1][1] / Determinant, + - m[0][1] / Determinant, + - m[1][0] / Determinant, + + m[0][0] / Determinant); + + return Inverse; + } + + template + GLM_FUNC_QUALIFIER detail::tmat3x3 inverse + ( + detail::tmat3x3 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'inverse' only accept floating-point inputs"); + + //valType Determinant = m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) + // - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) + // + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]); + + T Determinant = determinant(m); + + detail::tmat3x3 Inverse(detail::tmat3x3::null); + Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]); + Inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]); + Inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]); + Inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]); + Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]); + Inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]); + Inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]); + Inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]); + Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]); + Inverse /= Determinant; + + return Inverse; + } + + template + GLM_FUNC_QUALIFIER detail::tmat4x4 inverse + ( + detail::tmat4x4 const & m + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'inverse' only accept floating-point inputs"); + + T Coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; + T Coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; + T Coef03 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; + + T Coef04 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; + T Coef06 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; + T Coef07 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; + + T Coef08 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; + T Coef10 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; + T Coef11 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; + + T Coef12 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; + T Coef14 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; + T Coef15 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; + + T Coef16 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; + T Coef18 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; + T Coef19 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; + + T Coef20 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; + T Coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; + T Coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; + + detail::tvec4 const SignA(+1, -1, +1, -1); + detail::tvec4 const SignB(-1, +1, -1, +1); + + detail::tvec4 Fac0(Coef00, Coef00, Coef02, Coef03); + detail::tvec4 Fac1(Coef04, Coef04, Coef06, Coef07); + detail::tvec4 Fac2(Coef08, Coef08, Coef10, Coef11); + detail::tvec4 Fac3(Coef12, Coef12, Coef14, Coef15); + detail::tvec4 Fac4(Coef16, Coef16, Coef18, Coef19); + detail::tvec4 Fac5(Coef20, Coef20, Coef22, Coef23); + + detail::tvec4 Vec0(m[1][0], m[0][0], m[0][0], m[0][0]); + detail::tvec4 Vec1(m[1][1], m[0][1], m[0][1], m[0][1]); + detail::tvec4 Vec2(m[1][2], m[0][2], m[0][2], m[0][2]); + detail::tvec4 Vec3(m[1][3], m[0][3], m[0][3], m[0][3]); + + detail::tvec4 Inv0 = SignA * (Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2); + detail::tvec4 Inv1 = SignB * (Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4); + detail::tvec4 Inv2 = SignA * (Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5); + detail::tvec4 Inv3 = SignB * (Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5); + + detail::tmat4x4 Inverse(Inv0, Inv1, Inv2, Inv3); + + detail::tvec4 Row0(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]); + + T Determinant = glm::dot(m[0], Row0); + + Inverse /= Determinant; + + return Inverse; + } +}//namespace glm diff --git a/include/glm/core/func_noise.hpp b/include/glm/core/func_noise.hpp new file mode 100644 index 0000000..cca7840 --- /dev/null +++ b/include/glm/core/func_noise.hpp @@ -0,0 +1,87 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_noise.hpp +/// @date 2008-08-01 / 2011-06-18 +/// @author Christophe Riccio +/// +/// @see GLSL 4.20.8 specification, section 8.13 Noise Functions +/// +/// @defgroup core_func_noise Noise functions +/// @ingroup core +/// +/// Noise functions are stochastic functions that can be used to increase visual +/// complexity. Values returned by the following noise functions give the +/// appearance of randomness, but are not truly random. +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef glm_core_func_noise +#define glm_core_func_noise GLM_VERSION + +namespace glm +{ + /// @addtogroup core_func_noise + /// @{ + + /// Returns a 1D noise value based on the input value x. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL noise1 man page + /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions + template + GLM_FUNC_DECL typename genType::value_type noise1(genType const & x); + + /// Returns a 2D noise value based on the input value x. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL noise2 man page + /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions + template + GLM_FUNC_DECL detail::tvec2 noise2(genType const & x); + + /// Returns a 3D noise value based on the input value x. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL noise3 man page + /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions + template + GLM_FUNC_DECL detail::tvec3 noise3(genType const & x); + + /// Returns a 4D noise value based on the input value x. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL noise4 man page + /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions + template + GLM_FUNC_DECL detail::tvec4 noise4(genType const & x); + + /// @} +}//namespace glm + +#include "func_noise.inl" + +#endif//glm_core_func_noise diff --git a/include/glm/core/func_noise.inl b/include/glm/core/func_noise.inl new file mode 100644 index 0000000..a2658b5 --- /dev/null +++ b/include/glm/core/func_noise.inl @@ -0,0 +1,364 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_noise.inl +/// @date 2008-08-01 / 2011-09-27 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +namespace glm +{ + template + GLM_FUNC_QUALIFIER T noise1(T const & x) + { + return noise1(glm::detail::tvec2(x, T(0))); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec2 noise2(T const & x) + { + return glm::detail::tvec2( + noise1(x + T(0.0)), + noise1(x + T(1.0))); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec3 noise3(T const & x) + { + return glm::detail::tvec3( + noise1(x - T(1.0)), + noise1(x + T(0.0)), + noise1(x + T(1.0))); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec4 noise4(T const & x) + { + return glm::detail::tvec4( + noise1(x - T(1.0)), + noise1(x + T(0.0)), + noise1(x + T(1.0)), + noise1(x + T(2.0))); + } + + template + GLM_FUNC_QUALIFIER T noise1(glm::detail::tvec2 const & v) + { + detail::tvec4 const C = detail::tvec4( + T( 0.211324865405187), // (3.0 - sqrt(3.0)) / 6.0 + T( 0.366025403784439), // 0.5 * (sqrt(3.0) - 1.0) + T(-0.577350269189626), // -1.0 + 2.0 * C.x + T( 0.024390243902439)); // 1.0 / 41.0 + + // First corner + detail::tvec2 i = floor(v + dot(v, detail::tvec2(C[1]))); + detail::tvec2 x0 = v - i + dot(i, detail::tvec2(C[0])); + + // Other corners + //i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0 + //i1.y = 1.0 - i1.x; + detail::tvec2 i1 = (x0.x > x0.y) ? detail::tvec2(1, 0) : detail::tvec2(0, 1); + // x0 = x0 - 0.0 + 0.0 * C.xx ; + // x1 = x0 - i1 + 1.0 * C.xx ; + // x2 = x0 - 1.0 + 2.0 * C.xx ; + detail::tvec4 x12 = detail::tvec4(x0.x, x0.y, x0.x, x0.y) + detail::tvec4(C.x, C.x, C.z, C.z); + x12 = detail::tvec4(detail::tvec2(x12) - i1, x12.z, x12.w); + + // Permutations + i = mod(i, T(289)); // Avoid truncation effects in permutation + detail::tvec3 p = permute( + permute(i.y + detail::tvec3(T(0), i1.y, T(1))) + + i.x + detail::tvec3(T(0), i1.x, T(1))); + + detail::tvec3 m = max(T(0.5) - detail::tvec3( + dot(x0, x0), + dot(detail::tvec2(x12.x, x12.y), detail::tvec2(x12.x, x12.y)), + dot(detail::tvec2(x12.z, x12.w), detail::tvec2(x12.z, x12.w))), T(0)); + m = m * m ; + m = m * m ; + + // Gradients: 41 points uniformly over a line, mapped onto a diamond. + // The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287) + + detail::tvec3 x = T(2) * fract(p * C.w) - T(1); + detail::tvec3 h = abs(x) - T(0.5); + detail::tvec3 ox = floor(x + T(0.5)); + detail::tvec3 a0 = x - ox; + + // Normalise gradients implicitly by scaling m + // Inlined for speed: m *= taylorInvSqrt( a0*a0 + h*h ); + m *= T(1.79284291400159) - T(0.85373472095314) * (a0 * a0 + h * h); + + // Compute final noise value at P + detail::tvec3 g; + g.x = a0.x * x0.x + h.x * x0.y; + //g.yz = a0.yz * x12.xz + h.yz * x12.yw; + g.y = a0.y * x12.x + h.y * x12.y; + g.z = a0.z * x12.z + h.z * x12.w; + return T(130) * dot(m, g); + } + + template + GLM_FUNC_QUALIFIER T noise1(detail::tvec3 const & v) + { + detail::tvec2 const C(1.0 / 6.0, 1.0 / 3.0); + detail::tvec4 const D(0.0, 0.5, 1.0, 2.0); + + // First corner + detail::tvec3 i(floor(v + dot(v, detail::tvec3(C.y)))); + detail::tvec3 x0(v - i + dot(i, detail::tvec3(C.x))); + + // Other corners + detail::tvec3 g(step(detail::tvec3(x0.y, x0.z, x0.x), x0)); + detail::tvec3 l(T(1) - g); + detail::tvec3 i1(min(g, detail::tvec3(l.z, l.x, l.y))); + detail::tvec3 i2(max(g, detail::tvec3(l.z, l.x, l.y))); + + // x0 = x0 - 0.0 + 0.0 * C.xxx; + // x1 = x0 - i1 + 1.0 * C.xxx; + // x2 = x0 - i2 + 2.0 * C.xxx; + // x3 = x0 - 1.0 + 3.0 * C.xxx; + detail::tvec3 x1(x0 - i1 + C.x); + detail::tvec3 x2(x0 - i2 + C.y); // 2.0*C.x = 1/3 = C.y + detail::tvec3 x3(x0 - D.y); // -1.0+3.0*C.x = -0.5 = -D.y + + // Permutations + i = mod289(i); + detail::tvec4 p(permute(permute(permute( + i.z + detail::tvec4(T(0), i1.z, i2.z, T(1))) + + i.y + detail::tvec4(T(0), i1.y, i2.y, T(1))) + + i.x + detail::tvec4(T(0), i1.x, i2.x, T(1)))); + + // Gradients: 7x7 points over a square, mapped onto an octahedron. + // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) + T n_ = T(0.142857142857); // 1.0/7.0 + detail::tvec3 ns(n_ * detail::tvec3(D.w, D.y, D.z) - detail::tvec3(D.x, D.z, D.x)); + + detail::tvec4 j(p - T(49) * floor(p * ns.z * ns.z)); // mod(p,7*7) + + detail::tvec4 x_(floor(j * ns.z)); + detail::tvec4 y_(floor(j - T(7) * x_)); // mod(j,N) + + detail::tvec4 x(x_ * ns.x + ns.y); + detail::tvec4 y(y_ * ns.x + ns.y); + detail::tvec4 h(T(1) - abs(x) - abs(y)); + + detail::tvec4 b0(x.x, x.y, y.x, y.y); + detail::tvec4 b1(x.z, x.w, y.z, y.w); + + // vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0; + // vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0; + detail::tvec4 s0(floor(b0) * T(2) + T(1)); + detail::tvec4 s1(floor(b1) * T(2) + T(1)); + detail::tvec4 sh(-step(h, detail::tvec4(0.0))); + + detail::tvec4 a0 = detail::tvec4(b0.x, b0.z, b0.y, b0.w) + detail::tvec4(s0.x, s0.z, s0.y, s0.w) * detail::tvec4(sh.x, sh.x, sh.y, sh.y); + detail::tvec4 a1 = detail::tvec4(b1.x, b1.z, b1.y, b1.w) + detail::tvec4(s1.x, s1.z, s1.y, s1.w) * detail::tvec4(sh.z, sh.z, sh.w, sh.w); + + detail::tvec3 p0(a0.x, a0.y, h.x); + detail::tvec3 p1(a0.z, a0.w, h.y); + detail::tvec3 p2(a1.x, a1.y, h.z); + detail::tvec3 p3(a1.z, a1.w, h.w); + + // Normalise gradients + detail::tvec4 norm = taylorInvSqrt(detail::tvec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); + p0 *= norm.x; + p1 *= norm.y; + p2 *= norm.z; + p3 *= norm.w; + + // Mix final noise value + detail::tvec4 m = max(T(0.6) - detail::tvec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), T(0)); + m = m * m; + return T(42) * dot(m * m, detail::tvec4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3))); + } + + template + GLM_FUNC_QUALIFIER T noise1(detail::tvec4 const & v) + { + detail::tvec4 const C( + 0.138196601125011, // (5 - sqrt(5))/20 G4 + 0.276393202250021, // 2 * G4 + 0.414589803375032, // 3 * G4 + -0.447213595499958); // -1 + 4 * G4 + + // (sqrt(5) - 1)/4 = F4, used once below + T const F4 = T(0.309016994374947451); + + // First corner + detail::tvec4 i = floor(v + dot(v, vec4(F4))); + detail::tvec4 x0 = v - i + dot(i, vec4(C.x)); + + // Other corners + + // Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI) + detail::tvec4 i0; + detail::tvec3 isX = step(detail::tvec3(x0.y, x0.z, x0.w), detail::tvec3(x0.x)); + detail::tvec3 isYZ = step(detail::tvec3(x0.z, x0.w, x0.w), detail::tvec3(x0.y, x0.y, x0.z)); + // i0.x = dot(isX, vec3(1.0)); + //i0.x = isX.x + isX.y + isX.z; + //i0.yzw = T(1) - isX; + i0 = detail::tvec4(isX.x + isX.y + isX.z, T(1) - isX); + // i0.y += dot(isYZ.xy, vec2(1.0)); + i0.y += isYZ.x + isYZ.y; + //i0.zw += 1.0 - detail::tvec2(isYZ.x, isYZ.y); + i0.z += T(1) - isYZ.x; + i0.w += T(1) - isYZ.y; + i0.z += isYZ.z; + i0.w += T(1) - isYZ.z; + + // i0 now contains the unique values 0,1,2,3 in each channel + detail::tvec4 i3 = clamp(i0, 0.0, 1.0); + detail::tvec4 i2 = clamp(i0 - 1.0, 0.0, 1.0); + detail::tvec4 i1 = clamp(i0 - 2.0, 0.0, 1.0); + + // x0 = x0 - 0.0 + 0.0 * C.xxxx + // x1 = x0 - i1 + 0.0 * C.xxxx + // x2 = x0 - i2 + 0.0 * C.xxxx + // x3 = x0 - i3 + 0.0 * C.xxxx + // x4 = x0 - 1.0 + 4.0 * C.xxxx + detail::tvec4 x1 = x0 - i1 + C.x; + detail::tvec4 x2 = x0 - i2 + C.y; + detail::tvec4 x3 = x0 - i3 + C.z; + detail::tvec4 x4 = x0 + C.w; + + // Permutations + i = mod(i, T(289)); + T j0 = permute(permute(permute(permute(i.w) + i.z) + i.y) + i.x); + detail::tvec4 j1 = permute(permute(permute(permute( + i.w + detail::tvec4(i1.w, i2.w, i3.w, T(1))) + + i.z + detail::tvec4(i1.z, i2.z, i3.z, T(1))) + + i.y + detail::tvec4(i1.y, i2.y, i3.y, T(1))) + + i.x + detail::tvec4(i1.x, i2.x, i3.x, T(1))); + + // Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope + // 7*7*6 = 294, which is close to the ring size 17*17 = 289. + detail::tvec4 ip = detail::tvec4(T(1) / T(294), T(1) / T(49), T(1) / T(7), T(0)); + + detail::tvec4 p0 = grad4(j0, ip); + detail::tvec4 p1 = grad4(j1.x, ip); + detail::tvec4 p2 = grad4(j1.y, ip); + detail::tvec4 p3 = grad4(j1.z, ip); + detail::tvec4 p4 = grad4(j1.w, ip); + + // Normalise gradients + detail::tvec4 norm = taylorInvSqrt(detail::tvec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); + p0 *= norm.x; + p1 *= norm.y; + p2 *= norm.z; + p3 *= norm.w; + p4 *= taylorInvSqrt(dot(p4, p4)); + + // Mix contributions from the five corners + detail::tvec3 m0 = max(T(0.6) - detail::tvec3(dot(x0, x0), dot(x1, x1), dot(x2, x2)), T(0)); + detail::tvec2 m1 = max(T(0.6) - detail::tvec2(dot(x3, x3), dot(x4, x4) ), T(0)); + m0 = m0 * m0; + m1 = m1 * m1; + return T(49) * + (dot(m0 * m0, detail::tvec3(dot(p0, x0), dot(p1, x1), dot(p2, x2))) + + dot(m1 * m1, detail::tvec2(dot(p3, x3), dot(p4, x4)))); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec2 noise2(glm::detail::tvec2 const & x) + { + return glm::detail::tvec2( + noise1(x + glm::detail::tvec2(0.0)), + noise1(glm::detail::tvec2(0.0) - x)); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec2 noise2(glm::detail::tvec3 const & x) + { + return glm::detail::tvec2( + noise1(x + glm::detail::tvec3(0.0)), + noise1(glm::detail::tvec3(0.0) - x)); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec2 noise2(glm::detail::tvec4 const & x) + { + return glm::detail::tvec2( + noise1(x + glm::detail::tvec4(0.0)), + noise1(glm::detail::tvec4(0.0) - x)); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec3 noise3(glm::detail::tvec2 const & x) + { + return glm::detail::tvec3( + noise1(x - glm::detail::tvec2(1.0)), + noise1(x + glm::detail::tvec2(0.0)), + noise1(x + glm::detail::tvec2(1.0))); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec3 noise3(glm::detail::tvec3 const & x) + { + return glm::detail::tvec3( + noise1(x - glm::detail::tvec3(1.0)), + noise1(x + glm::detail::tvec3(0.0)), + noise1(x + glm::detail::tvec3(1.0))); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec3 noise3(glm::detail::tvec4 const & x) + { + return glm::detail::tvec3( + noise1(x - glm::detail::tvec4(1.0)), + noise1(x + glm::detail::tvec4(0.0)), + noise1(x + glm::detail::tvec4(1.0))); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec4 noise4(glm::detail::tvec2 const & x) + { + return glm::detail::tvec4( + noise1(x - glm::detail::tvec2(1.0)), + noise1(x + glm::detail::tvec2(0.0)), + noise1(x + glm::detail::tvec2(1.0)), + noise1(x + glm::detail::tvec2(2.0))); + } + + + template + GLM_FUNC_QUALIFIER glm::detail::tvec4 noise4(glm::detail::tvec3 const & x) + { + return glm::detail::tvec4( + noise1(x - glm::detail::tvec3(1.0)), + noise1(x + glm::detail::tvec3(0.0)), + noise1(x + glm::detail::tvec3(1.0)), + noise1(x + glm::detail::tvec3(2.0))); + } + + template + GLM_FUNC_QUALIFIER glm::detail::tvec4 noise4(glm::detail::tvec4 const & x) + { + return glm::detail::tvec4( + noise1(x - glm::detail::tvec4(1.0)), + noise1(x + glm::detail::tvec4(0.0)), + noise1(x + glm::detail::tvec4(1.0)), + noise1(x + glm::detail::tvec4(2.0))); + } + +}//namespace glm diff --git a/include/glm/core/func_packing.hpp b/include/glm/core/func_packing.hpp new file mode 100644 index 0000000..e637ae3 --- /dev/null +++ b/include/glm/core/func_packing.hpp @@ -0,0 +1,193 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_packing.hpp +/// @date 2010-03-17 / 2011-06-15 +/// @author Christophe Riccio +/// +/// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions +/// +/// @defgroup core_func_packing Floating-Point Pack and Unpack Functions +/// @ingroup core +/// +/// These functions do not operate component-wise, rather as described in each case. +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef GLM_CORE_func_packing +#define GLM_CORE_func_packing GLM_VERSION + +namespace glm +{ + /// @addtogroup core_func_packing + /// @{ + + //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. + //! Then, the results are packed into the returned 32-bit unsigned integer. + //! + //! The conversion for component c of v to fixed point is done as follows: + //! packUnorm2x16: round(clamp(c, 0, +1) * 65535.0) + //! + //! The first component of the vector will be written to the least significant bits of the output; + //! the last component will be written to the most significant bits. + //! + /// @see GLSL packUnorm2x16 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL detail::uint32 packUnorm2x16(detail::tvec2 const & v); + + //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. + //! Then, the results are packed into the returned 32-bit unsigned integer. + //! + //! The conversion for component c of v to fixed point is done as follows: + //! packSnorm2x16: round(clamp(v, -1, +1) * 32767.0) + //! + //! The first component of the vector will be written to the least significant bits of the output; + //! the last component will be written to the most significant bits. + //! + /// @see GLSL packSnorm2x16 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL detail::uint32 packSnorm2x16(detail::tvec2 const & v); + + //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. + //! Then, the results are packed into the returned 32-bit unsigned integer. + //! + //! The conversion for component c of v to fixed point is done as follows: + //! packUnorm4x8: round(clamp(c, 0, +1) * 255.0) + //! + //! The first component of the vector will be written to the least significant bits of the output; + //! the last component will be written to the most significant bits. + //! + /// @see GLSL packUnorm4x8 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL detail::uint32 packUnorm4x8(detail::tvec4 const & v); + + //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. + //! Then, the results are packed into the returned 32-bit unsigned integer. + //! + //! The conversion for component c of v to fixed point is done as follows: + //! packSnorm4x8: round(clamp(c, -1, +1) * 127.0) + //! + //! The first component of the vector will be written to the least significant bits of the output; + //! the last component will be written to the most significant bits. + //! + /// @see GLSL packSnorm4x8 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL detail::uint32 packSnorm4x8(detail::tvec4 const & v); + + //! First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. + //! Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. + //! + //! The conversion for unpacked fixed-point value f to floating point is done as follows: + //! unpackUnorm2x16: f / 65535.0 + //! + //! The first component of the returned vector will be extracted from the least significant bits of the input; + //! the last component will be extracted from the most significant bits. + //! + /// @see GLSL unpackUnorm2x16 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL detail::tvec2 unpackUnorm2x16(detail::uint32 const & p); + + //! First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. + //! Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. + //! + //! The conversion for unpacked fixed-point value f to floating point is done as follows: + //! unpackSnorm2x16: clamp(f / 32767.0, -1, +1) + //! + //! The first component of the returned vector will be extracted from the least significant bits of the input; + //! the last component will be extracted from the most significant bits. + //! + /// @see GLSL unpackSnorm2x16 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL detail::tvec2 unpackSnorm2x16(detail::uint32 const & p); + + /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. + /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. + /// + /// The conversion for unpacked fixed-point value f to floating point is done as follows: + /// unpackUnorm4x8: f / 255.0 + /// + /// The first component of the returned vector will be extracted from the least significant bits of the input; + /// the last component will be extracted from the most significant bits. + /// + /// @see GLSL unpackUnorm4x8 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL detail::tvec4 unpackUnorm4x8(detail::uint32 const & p); + + /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. + /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. + /// + /// The conversion for unpacked fixed-point value f to floating point is done as follows: + /// unpackSnorm4x8: clamp(f / 127.0, -1, +1) + /// + /// The first component of the returned vector will be extracted from the least significant bits of the input; + /// the last component will be extracted from the most significant bits. + /// + /// @see GLSL unpackSnorm4x8 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL detail::tvec4 unpackSnorm4x8(detail::uint32 const & p); + + /// Returns a double-precision value obtained by packing the components of v into a 64-bit value. + /// If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified. + /// Otherwise, the bit- level representation of v is preserved. + /// The first vector component specifies the 32 least significant bits; + /// the second component specifies the 32 most significant bits. + /// + /// @see GLSL packDouble2x32 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL double packDouble2x32(detail::tvec2 const & v); + + /// Returns a two-component unsigned integer vector representation of v. + /// The bit-level representation of v is preserved. + /// The first component of the vector contains the 32 least significant bits of the double; + /// the second component consists the 32 most significant bits. + /// + /// @see GLSL unpackDouble2x32 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL detail::tvec2 unpackDouble2x32(double const & v); + + /// Returns an unsigned integer obtained by converting the components of a two-component floating-point vector + /// to the 16-bit floating-point representation found in the OpenGL Specification, + /// and then packing these two 16- bit integers into a 32-bit unsigned integer. + /// The first vector component specifies the 16 least-significant bits of the result; + /// the second component specifies the 16 most-significant bits. + /// + /// @see GLSL packHalf2x16 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL uint packHalf2x16(vec2 const & v); + + /// Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, + /// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, + /// and converting them to 32-bit floating-point values. + /// The first component of the vector is obtained from the 16 least-significant bits of v; + /// the second component is obtained from the 16 most-significant bits of v. + /// + /// @see GLSL unpackHalf2x16 man page + /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions + GLM_FUNC_DECL vec2 unpackHalf2x16(uint const & v); + + /// @} +}//namespace glm + +#include "func_packing.inl" + +#endif//GLM_CORE_func_packing + diff --git a/include/glm/core/func_packing.inl b/include/glm/core/func_packing.inl new file mode 100644 index 0000000..21d64ab --- /dev/null +++ b/include/glm/core/func_packing.inl @@ -0,0 +1,208 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_packing.inl +/// @date 2010-03-17 / 2011-06-15 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +namespace glm +{ + GLM_FUNC_QUALIFIER detail::uint32 packUnorm2x16(detail::tvec2 const & v) + { + detail::uint16 A(detail::uint16(round(clamp(v.x, 0.0f, 1.0f) * 65535.0f))); + detail::uint16 B(detail::uint16(round(clamp(v.y, 0.0f, 1.0f) * 65535.0f))); + return detail::uint32((B << 16) | A); + } + + GLM_FUNC_QUALIFIER detail::tvec2 unpackUnorm2x16(detail::uint32 const & p) + { + detail::uint32 Mask16((1 << 16) - 1); + detail::uint32 A((p >> 0) & Mask16); + detail::uint32 B((p >> 16) & Mask16); + return detail::tvec2( + A * 1.0f / 65535.0f, + B * 1.0f / 65535.0f); + } + + GLM_FUNC_QUALIFIER detail::uint32 packSnorm2x16(detail::tvec2 const & v) + { + union iu + { + detail::int16 i; + detail::uint16 u; + } A, B; + + detail::tvec2 Unpack = clamp(v ,-1.0f, 1.0f) * 32767.0f; + A.i = detail::int16(round(Unpack.x)); + B.i = detail::int16(round(Unpack.y)); + detail::uint32 Pack = (detail::uint32(B.u) << 16) | (detail::uint32(A.u) << 0); + return Pack; + } + + GLM_FUNC_QUALIFIER detail::tvec2 unpackSnorm2x16(detail::uint32 const & p) + { + union iu + { + detail::int16 i; + detail::uint16 u; + } A, B; + + detail::uint32 Mask16((1 << 16) - 1); + A.u = detail::uint16((p >> 0) & Mask16); + B.u = detail::uint16((p >> 16) & Mask16); + detail::tvec2 Pack(A.i, B.i); + + return clamp(Pack * 1.0f / 32767.0f, -1.0f, 1.0f); + } + + GLM_FUNC_QUALIFIER detail::uint32 packUnorm4x8(detail::tvec4 const & v) + { + detail::uint8 A((detail::uint8)round(clamp(v.x, 0.0f, 1.0f) * 255.0f)); + detail::uint8 B((detail::uint8)round(clamp(v.y, 0.0f, 1.0f) * 255.0f)); + detail::uint8 C((detail::uint8)round(clamp(v.z, 0.0f, 1.0f) * 255.0f)); + detail::uint8 D((detail::uint8)round(clamp(v.w, 0.0f, 1.0f) * 255.0f)); + return detail::uint32((D << 24) | (C << 16) | (B << 8) | A); + } + + GLM_FUNC_QUALIFIER detail::tvec4 unpackUnorm4x8(detail::uint32 const & p) + { + detail::uint32 Mask8((1 << 8) - 1); + detail::uint32 A((p >> 0) & Mask8); + detail::uint32 B((p >> 8) & Mask8); + detail::uint32 C((p >> 16) & Mask8); + detail::uint32 D((p >> 24) & Mask8); + return detail::tvec4( + A * 1.0f / 255.0f, + B * 1.0f / 255.0f, + C * 1.0f / 255.0f, + D * 1.0f / 255.0f); + } + + GLM_FUNC_QUALIFIER detail::uint32 packSnorm4x8(detail::tvec4 const & v) + { + union iu + { + detail::int8 i; + detail::uint8 u; + } A, B, C, D; + + detail::tvec4 Unpack = clamp(v ,-1.0f, 1.0f) * 127.0f; + A.i = detail::int8(round(Unpack.x)); + B.i = detail::int8(round(Unpack.y)); + C.i = detail::int8(round(Unpack.z)); + D.i = detail::int8(round(Unpack.w)); + detail::uint32 Pack = (detail::uint32(D.u) << 24) | (detail::uint32(C.u) << 16) | (detail::uint32(B.u) << 8) | (detail::uint32(A.u) << 0); + return Pack; + } + + GLM_FUNC_QUALIFIER detail::tvec4 unpackSnorm4x8(detail::uint32 const & p) + { + union iu + { + detail::int8 i; + detail::uint8 u; + } A, B, C, D; + + detail::uint32 Mask8((1 << 8) - 1); + A.u = detail::uint8((p >> 0) & Mask8); + B.u = detail::uint8((p >> 8) & Mask8); + C.u = detail::uint8((p >> 16) & Mask8); + D.u = detail::uint8((p >> 24) & Mask8); + detail::tvec4 Pack(A.i, B.i, C.i, D.i); + + return clamp(Pack * 1.0f / 127.0f, -1.0f, 1.0f); + } + + GLM_FUNC_QUALIFIER double packDouble2x32(detail::tvec2 const & v) + { + struct uint32_pair + { + detail::uint32 x; + detail::uint32 y; + }; + + union helper + { + uint32_pair input; + double output; + } Helper; + + Helper.input.x = v.x; + Helper.input.y = v.y; + + return Helper.output; + //return *(double*)&v; + } + + GLM_FUNC_QUALIFIER detail::tvec2 unpackDouble2x32(double const & v) + { + struct uint32_pair + { + detail::uint32 x; + detail::uint32 y; + }; + + union helper + { + double input; + uint32_pair output; + } Helper; + + Helper.input = v; + + return detail::tvec2(Helper.output.x, Helper.output.y); + } + + GLM_FUNC_QUALIFIER uint packHalf2x16(detail::tvec2 const & v) + { + union helper + { + uint other; + struct + { + detail::hdata a, b; + } orig; + } Pack; + + Pack.orig.a = detail::toFloat16(v.x); + Pack.orig.b = detail::toFloat16(v.y); + return Pack.other; + } + + GLM_FUNC_QUALIFIER vec2 unpackHalf2x16(uint const & v) + { + union helper + { + uint other; + struct + { + detail::hdata a, b; + } orig; + } Unpack; + Unpack.other = v; + + return vec2(detail::toFloat32(Unpack.orig.a), detail::toFloat32(Unpack.orig.b)); + } +}//namespace glm + diff --git a/include/glm/core/func_trigonometric.hpp b/include/glm/core/func_trigonometric.hpp new file mode 100644 index 0000000..72b0998 --- /dev/null +++ b/include/glm/core/func_trigonometric.hpp @@ -0,0 +1,203 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_trigonometric.hpp +/// @date 2008-08-01 / 2011-06-15 +/// @author Christophe Riccio +/// +/// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions +/// +/// @defgroup core_func_trigonometric Angle and Trigonometry Functions +/// @ingroup core +/// +/// Function parameters specified as angle are assumed to be in units of radians. +/// In no case will any of these functions result in a divide by zero error. If +/// the divisor of a ratio is 0, then results will be undefined. +/// +/// These all operate component-wise. The description is per component. +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef GLM_CORE_func_trigonometric +#define GLM_CORE_func_trigonometric GLM_VERSION + +namespace glm +{ + /// @addtogroup core_func_trigonometric + /// @{ + + /// Converts degrees to radians and returns the result. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL radians man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType radians(genType const & degrees); + + /// Converts radians to degrees and returns the result. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL degrees man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType degrees(genType const & radians); + + /// The standard trigonometric sine function. + /// The values returned by this function will range from [-1, 1]. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL sin man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType sin(genType const & angle); + + /// The standard trigonometric cosine function. + /// The values returned by this function will range from [-1, 1]. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL cos man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType cos(genType const & angle); + + /// The standard trigonometric tangent function. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL tan man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType tan(genType const & angle); + + /// Arc sine. Returns an angle whose sine is x. + /// The range of values returned by this function is [-PI/2, PI/2]. + /// Results are undefined if |x| > 1. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL asin man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType asin(genType const & x); + + /// Arc cosine. Returns an angle whose sine is x. + /// The range of values returned by this function is [0, PI]. + /// Results are undefined if |x| > 1. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL acos man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType acos(genType const & x); + + /// Arc tangent. Returns an angle whose tangent is y/x. + /// The signs of x and y are used to determine what + /// quadrant the angle is in. The range of values returned + /// by this function is [-PI, PI]. Results are undefined + /// if x and y are both 0. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL atan man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType atan(genType const & y, genType const & x); + + /// Arc tangent. Returns an angle whose tangent is y_over_x. + /// The range of values returned by this function is [-PI/2, PI/2]. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL atan man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType atan(genType const & y_over_x); + + /// Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2 + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL sinh man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType sinh(genType const & angle); + + /// Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2 + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL cosh man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType cosh(genType const & angle); + + /// Returns the hyperbolic tangent function, sinh(angle) / cosh(angle) + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL tanh man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType tanh(genType const & angle); + + /// Arc hyperbolic sine; returns the inverse of sinh. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL asinh man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType asinh(genType const & x); + + /// Arc hyperbolic cosine; returns the non-negative inverse + /// of cosh. Results are undefined if x < 1. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL acosh man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType acosh(genType const & x); + + /// Arc hyperbolic tangent; returns the inverse of tanh. + /// Results are undefined if abs(x) >= 1. + /// + /// @tparam genType Floating-point scalar or vector types. + /// + /// @see GLSL atanh man page + /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions + template + GLM_FUNC_DECL genType atanh(genType const & x); + + /// @} +}//namespace glm + +#include "func_trigonometric.inl" + +#endif//GLM_CORE_func_trigonometric + + diff --git a/include/glm/core/func_trigonometric.inl b/include/glm/core/func_trigonometric.inl new file mode 100644 index 0000000..8390209 --- /dev/null +++ b/include/glm/core/func_trigonometric.inl @@ -0,0 +1,244 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_trigonometric.inl +/// @date 2008-08-03 / 2011-06-15 +/// @author Christophe Riccio +/////////////////////////////////////////////////////////////////////////////////// + +namespace glm +{ + // radians + template + GLM_FUNC_QUALIFIER genType radians + ( + genType const & degrees + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'radians' only accept floating-point input"); + + genType const pi = genType(3.1415926535897932384626433832795); + return degrees * (pi / genType(180)); + } + + VECTORIZE_VEC(radians) + + // degrees + template + GLM_FUNC_QUALIFIER genType degrees + ( + genType const & radians + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'degrees' only accept floating-point input"); + + const genType pi = genType(3.1415926535897932384626433832795); + return radians * (genType(180) / pi); + } + + VECTORIZE_VEC(degrees) + + // sin + template + GLM_FUNC_QUALIFIER genType sin + ( + genType const & angle + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'sin' only accept floating-point input"); + + return genType(::std::sin(angle)); + } + + VECTORIZE_VEC(sin) + + // cos + template + GLM_FUNC_QUALIFIER genType cos(genType const & angle) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'cos' only accept floating-point input"); + + return genType(::std::cos(angle)); + } + + VECTORIZE_VEC(cos) + + // tan + template + GLM_FUNC_QUALIFIER genType tan + ( + genType const & angle + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'tan' only accept floating-point input"); + + return genType(::std::tan(angle)); + } + + VECTORIZE_VEC(tan) + + // asin + template + GLM_FUNC_QUALIFIER genType asin + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'asin' only accept floating-point input"); + + return genType(::std::asin(x)); + } + + VECTORIZE_VEC(asin) + + // acos + template + GLM_FUNC_QUALIFIER genType acos + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'acos' only accept floating-point input"); + + return genType(::std::acos(x)); + } + + VECTORIZE_VEC(acos) + + // atan + template + GLM_FUNC_QUALIFIER genType atan + ( + genType const & y, + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'atan' only accept floating-point input"); + + return genType(::std::atan2(y, x)); + } + + VECTORIZE_VEC_VEC(atan) + + template + GLM_FUNC_QUALIFIER genType atan + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'atan' only accept floating-point input"); + + return genType(::std::atan(x)); + } + + VECTORIZE_VEC(atan) + + // sinh + template + GLM_FUNC_QUALIFIER genType sinh + ( + genType const & angle + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'sinh' only accept floating-point input"); + + return genType(std::sinh(angle)); + } + + VECTORIZE_VEC(sinh) + + // cosh + template + GLM_FUNC_QUALIFIER genType cosh + ( + genType const & angle + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'cosh' only accept floating-point input"); + + return genType(std::cosh(angle)); + } + + VECTORIZE_VEC(cosh) + + // tanh + template + GLM_FUNC_QUALIFIER genType tanh + ( + genType const & angle + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'tanh' only accept floating-point input"); + + return genType(std::tanh(angle)); + } + + VECTORIZE_VEC(tanh) + + // asinh + template + GLM_FUNC_QUALIFIER genType asinh + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'asinh' only accept floating-point input"); + + return (x < genType(0) ? genType(-1) : (x > genType(0) ? genType(1) : genType(0))) * log(abs(x) + sqrt(genType(1) + x * x)); + } + + VECTORIZE_VEC(asinh) + + // acosh + template + GLM_FUNC_QUALIFIER genType acosh + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'acosh' only accept floating-point input"); + + if(x < genType(1)) + return genType(0); + return log(x + sqrt(x * x - genType(1))); + } + + VECTORIZE_VEC(acosh) + + // atanh + template + GLM_FUNC_QUALIFIER genType atanh + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'atanh' only accept floating-point input"); + + if(abs(x) >= genType(1)) + return 0; + return genType(0.5) * log((genType(1) + x) / (genType(1) - x)); + } + + VECTORIZE_VEC(atanh) + +}//namespace glm diff --git a/include/glm/core/func_vector_relational.hpp b/include/glm/core/func_vector_relational.hpp new file mode 100644 index 0000000..202acb3 --- /dev/null +++ b/include/glm/core/func_vector_relational.hpp @@ -0,0 +1,138 @@ +/////////////////////////////////////////////////////////////////////////////////// +/// OpenGL Mathematics (glm.g-truc.net) +/// +/// Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/// Permission is hereby granted, free of charge, to any person obtaining a copy +/// of this software and associated documentation files (the "Software"), to deal +/// in the Software without restriction, including without limitation the rights +/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +/// copies of the Software, and to permit persons to whom the Software is +/// furnished to do so, subject to the following conditions: +/// +/// The above copyright notice and this permission notice shall be included in +/// all copies or substantial portions of the Software. +/// +/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +/// THE SOFTWARE. +/// +/// @ref core +/// @file glm/core/func_vector_relational.hpp +/// @date 2008-08-03 / 2011-06-15 +/// @author Christophe Riccio +/// +/// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions +/// +/// @defgroup core_func_vector_relational Vector Relational Functions +/// @ingroup core +/// +/// Relational and equality operators (<, <=, >, >=, ==, !=) are defined to +/// operate on scalars and produce scalar Boolean results. For vector results, +/// use the following built-in functions. +/// +/// In all cases, the sizes of all the input and return vectors for any particular +/// call must match. +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef GLM_CORE_func_vector_relational +#define GLM_CORE_func_vector_relational GLM_VERSION + +#include "_detail.hpp" + +namespace glm +{ + /// @addtogroup core_func_vector_relational + /// @{ + + /// Returns the component-wise comparison result of x < y. + /// + /// @tparam vecType Floating-point or integer vector types. + /// + /// @see GLSL lessThan man page + /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions + template + GLM_FUNC_DECL typename vecType::bool_type lessThan(vecType const & x, vecType const & y); + + /// Returns the component-wise comparison of result x <= y. + /// + /// @tparam vecType Floating-point or integer vector types. + /// + /// @see GLSL lessThanEqual man page + /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions + template + GLM_FUNC_DECL typename vecType::bool_type lessThanEqual(vecType const & x, vecType const & y); + + /// Returns the component-wise comparison of result x > y. + /// + /// @tparam vecType Floating-point or integer vector types. + /// + /// @see GLSL greaterThan man page + /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions + template + GLM_FUNC_DECL typename vecType::bool_type greaterThan(vecType const & x, vecType const & y); + + /// Returns the component-wise comparison of result x >= y. + /// + /// @tparam vecType Floating-point or integer vector types. + /// + /// @see GLSL greaterThanEqual man page + /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions + template + GLM_FUNC_DECL typename vecType::bool_type greaterThanEqual(vecType const & x, vecType const & y); + + /// Returns the component-wise comparison of result x == y. + /// + /// @tparam vecType Floating-point, integer or boolean vector types. + /// + /// @see GLSL equal man page + /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions + template + GLM_FUNC_DECL typename vecType::bool_type equal(vecType const & x, vecType const & y); + + /// Returns the component-wise comparison of result x != y. + /// + /// @tparam vecType Floating-point, integer or boolean vector types. + /// + /// @see GLSL notEqual man page + /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions + template + GLM_FUNC_DECL typename vecType::bool_type notEqual(vecType const & x, vecType const & y); + + /// Returns true if any component of x is true. + /// + /// @tparam vecType Boolean vector types. + /// + /// @see GLSL any man page + /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions + template

XkmS&xiTjr- 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 z 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