Fix randomly happening floating point error during clipping.
This commit is contained in:
parent
e65c2341c2
commit
38826b94b8
4 changed files with 21 additions and 3 deletions
|
@ -66,6 +66,7 @@ add_executable(${PROJECT_NAME}
|
|||
src/texture.cpp
|
||||
src/movingobject.cpp
|
||||
src/character.cpp
|
||||
src/rect_to_sdl.cpp
|
||||
)
|
||||
|
||||
target_include_directories(${PROJECT_NAME} SYSTEM
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
#if !defined(NDEBUG)
|
||||
# include "compatibility.h"
|
||||
# include <cmath>
|
||||
# include <limits>
|
||||
#endif
|
||||
|
||||
namespace curry {
|
||||
|
@ -66,7 +65,7 @@ namespace curry {
|
|||
///----------------------------------------------------------------------
|
||||
bool clip_rect (Rect<float>& parSrc, Rect<float>& parDest, const Rect<float>& parClip) {
|
||||
typedef Rect<float> RectFloat;
|
||||
assert(are_equal_rel(parSrc.width(), parDest.width(), std::numeric_limits<float>::epsilon()));
|
||||
assert(are_equal_rel(parSrc.width(), parDest.width(), 0.00001f));
|
||||
assert(parSrc.is_valid());
|
||||
assert(parDest.is_valid());
|
||||
|
||||
|
@ -99,7 +98,7 @@ namespace curry {
|
|||
assert(dst.is_valid());
|
||||
assert(dst.from >= parClip.from);
|
||||
assert(dst.to <= parClip.to);
|
||||
assert(are_equal_rel(src.width(), dst.width(), std::numeric_limits<float>::epsilon()));
|
||||
assert(are_equal_rel(src.width(), dst.width(), 0.00001f));
|
||||
}
|
||||
parDest = dst;
|
||||
parSrc = src;
|
||||
|
|
15
src/rect_to_sdl.cpp
Normal file
15
src/rect_to_sdl.cpp
Normal file
|
@ -0,0 +1,15 @@
|
|||
#include "rect_to_sdl.hpp"
|
||||
#include <cmath>
|
||||
|
||||
namespace curry {
|
||||
SDL_Rect make_sdlrect (const Rect<float>& parOther) {
|
||||
typedef decltype(std::declval<SDL_Rect>().w) ValueType;
|
||||
|
||||
return SDL_Rect{
|
||||
static_cast<ValueType>(std::lround(parOther.left())),
|
||||
static_cast<ValueType>(std::lround(parOther.top())),
|
||||
static_cast<ValueType>(std::lround(parOther.width())),
|
||||
static_cast<ValueType>(std::lround(parOther.height()))
|
||||
};
|
||||
}
|
||||
} //namespace curry
|
|
@ -1,6 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include "rect.hpp"
|
||||
#include "compatibility.h"
|
||||
#include <SDL2/SDL.h>
|
||||
#include <utility>
|
||||
|
||||
|
@ -16,4 +17,6 @@ namespace curry {
|
|||
static_cast<ValueType>(parOther.height())
|
||||
};
|
||||
}
|
||||
|
||||
SDL_Rect make_sdlrect (const Rect<float>& parOther) a_pure;
|
||||
} //namespace curry
|
||||
|
|
Loading…
Reference in a new issue