d85b67be53
-=-=-=-=- -Fixed problem with scaling shapes (#827), related to not taking scale in consideration for calculating the moment of inertia -Added support for multiline strings (or comments) using """ -Save subscene bug, properties not being saved in root node (#806) -Fix Crash in CollisionPolygon2DEditor (#814) -Restored Ability to compile without 3D (#795) -Fix InterpolatedCamera (#803) -Fix UV Import for OBJ Meshes (#771) -Fixed issue with modifier gizmos (#794) -Fixed CapsuleShape gizmo handle (#50) -Fixed Import Button (not properly working in 3D) (#733) -Many misc fixes (though no new features)
85 lines
1.4 KiB
C++
85 lines
1.4 KiB
C++
|
|
#include "typedefs.h"
|
|
|
|
|
|
#if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) > 40100
|
|
|
|
void baked_light_baker_add_64f(double *dst,double value) {
|
|
|
|
|
|
union {
|
|
int64_t i;
|
|
double f;
|
|
} swapy;
|
|
|
|
|
|
while(true) {
|
|
swapy.f=*dst;
|
|
int64_t from = swapy.i;
|
|
swapy.f+=value;
|
|
int64_t to=swapy.i;
|
|
if (__sync_bool_compare_and_swap((int64_t*)dst,from,to))
|
|
break;
|
|
}
|
|
}
|
|
|
|
void baked_light_baker_add_64i(int64_t *dst,int64_t value) {
|
|
|
|
while(!__sync_bool_compare_and_swap(dst,*dst,(*dst)+value)) {}
|
|
|
|
}
|
|
|
|
#elif defined(WINDOWS_ENABLED)
|
|
|
|
#include "windows.h"
|
|
|
|
void baked_light_baker_add_64f(double *dst,double value) {
|
|
|
|
union {
|
|
int64_t i;
|
|
double f;
|
|
} swapy;
|
|
|
|
|
|
while(true) {
|
|
swapy.f=*dst;
|
|
int64_t from = swapy.i;
|
|
swapy.f+=value;
|
|
int64_t to=swapy.i;
|
|
int64_t result = InterlockedCompareExchange64((int64_t*)dst,to,from);
|
|
if (result==from)
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
void baked_light_baker_add_64i(int64_t *dst,int64_t value) {
|
|
|
|
while(true) {
|
|
int64_t from = *dst;
|
|
int64_t to = from+value;
|
|
int64_t result = InterlockedCompareExchange64(dst,to,from);
|
|
if (result==from)
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
#else
|
|
|
|
//in goder (the god of programmers) we trust
|
|
#warning seems this platform or compiler does not support safe cmpxchg, your baked lighting may be funny
|
|
|
|
void baked_light_baker_add_64f(double *dst,double value) {
|
|
|
|
*dst+=value;
|
|
|
|
}
|
|
|
|
void baked_light_baker_add_64i(int64_t *dst,int64_t value) {
|
|
|
|
*dst+=value;
|
|
|
|
}
|
|
|
|
#endif
|