Files
@ r24860:fb2788d47d86
Branch filter:
Location: cpp/openttd-patchpack/source/src/3rdparty/squirrel/sqstdlib/sqstdmath.cpp - annotation
r24860:fb2788d47d86
2.8 KiB
text/x-c
Codechange: [OSX] Only keep a total dirty rect for drawing.
When drawing an 8bpp screen buffer, palette resolving was done for each
dirty rectangle. In areas with high activity, this would mean a pixel might
have been resolved multiple times. Also, if too many individual updates
were queued, the whole screen would be refreshed, even if unnecessary.
All other drivers only keep one overall dirty rect, so do it here as well.
When drawing an 8bpp screen buffer, palette resolving was done for each
dirty rectangle. In areas with high activity, this would mean a pixel might
have been resolved multiple times. Also, if too many individual updates
were queued, the whole screen would be refreshed, even if unnecessary.
All other drivers only keep one overall dirty rect, so do it here as well.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | r11225:37853e3b55c7 r21645:df9d17bb2041 r21645:df9d17bb2041 r21645:df9d17bb2041 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r21645:df9d17bb2041 r21645:df9d17bb2041 r12994:6cf69c4b22b0 r11225:37853e3b55c7 r12994:6cf69c4b22b0 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r12994:6cf69c4b22b0 r11225:37853e3b55c7 r12994:6cf69c4b22b0 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r12995:63490f079d8e r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r21642:d4ee019baf14 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r12995:63490f079d8e r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r12994:6cf69c4b22b0 r12994:6cf69c4b22b0 r12994:6cf69c4b22b0 r12994:6cf69c4b22b0 r12994:6cf69c4b22b0 r12994:6cf69c4b22b0 r12994:6cf69c4b22b0 r12994:6cf69c4b22b0 r12994:6cf69c4b22b0 r12994:6cf69c4b22b0 r12994:6cf69c4b22b0 r12994:6cf69c4b22b0 r12994:6cf69c4b22b0 r12994:6cf69c4b22b0 r12994:6cf69c4b22b0 r11225:37853e3b55c7 r21642:d4ee019baf14 r11225:37853e3b55c7 r21642:d4ee019baf14 r21642:d4ee019baf14 r21642:d4ee019baf14 r21642:d4ee019baf14 r21642:d4ee019baf14 r21642:d4ee019baf14 r21642:d4ee019baf14 r21642:d4ee019baf14 r21642:d4ee019baf14 r21642:d4ee019baf14 r21642:d4ee019baf14 r21642:d4ee019baf14 r21642:d4ee019baf14 r21642:d4ee019baf14 r12994:6cf69c4b22b0 r21642:d4ee019baf14 r11225:37853e3b55c7 r12994:6cf69c4b22b0 r21642:d4ee019baf14 r21642:d4ee019baf14 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r12994:6cf69c4b22b0 r21642:d4ee019baf14 r11225:37853e3b55c7 r11225:37853e3b55c7 r12994:6cf69c4b22b0 r21642:d4ee019baf14 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 r11225:37853e3b55c7 | /* see copyright notice in squirrel.h */
#include "../../../stdafx.h"
#include <squirrel.h>
#include <math.h>
#include <sqstdmath.h>
#include "../../../safeguards.h"
#define SINGLE_ARG_FUNC(_funcname, num_ops) static SQInteger math_##_funcname(HSQUIRRELVM v){ \
SQFloat f; \
sq_decreaseops(v,num_ops); \
sq_getfloat(v,2,&f); \
sq_pushfloat(v,(SQFloat)_funcname(f)); \
return 1; \
}
#define TWO_ARGS_FUNC(_funcname, num_ops) static SQInteger math_##_funcname(HSQUIRRELVM v){ \
SQFloat p1,p2; \
sq_decreaseops(v,num_ops); \
sq_getfloat(v,2,&p1); \
sq_getfloat(v,3,&p2); \
sq_pushfloat(v,(SQFloat)_funcname(p1,p2)); \
return 1; \
}
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
static SQInteger math_srand(HSQUIRRELVM v)
{
SQInteger i;
if(SQ_FAILED(sq_getinteger(v,2,&i)))
return sq_throwerror(v,"invalid param");
srand((unsigned int)i);
return 0;
}
static SQInteger math_rand(HSQUIRRELVM v)
{
sq_pushinteger(v,rand());
return 1;
}
#endif /* EXPORT_DEFAULT_SQUIRREL_FUNCTIONS */
static SQInteger math_abs(HSQUIRRELVM v)
{
SQInteger n;
sq_getinteger(v,2,&n);
sq_pushinteger(v,(SQInteger)abs((int)n));
return 1;
}
SINGLE_ARG_FUNC(sqrt, 100)
SINGLE_ARG_FUNC(fabs, 1)
SINGLE_ARG_FUNC(sin, 100)
SINGLE_ARG_FUNC(cos, 100)
SINGLE_ARG_FUNC(asin, 100)
SINGLE_ARG_FUNC(acos, 100)
SINGLE_ARG_FUNC(log, 100)
SINGLE_ARG_FUNC(log10, 100)
SINGLE_ARG_FUNC(tan, 100)
SINGLE_ARG_FUNC(atan, 100)
TWO_ARGS_FUNC(atan2, 100)
TWO_ARGS_FUNC(pow, 100)
SINGLE_ARG_FUNC(floor, 1)
SINGLE_ARG_FUNC(ceil, 1)
SINGLE_ARG_FUNC(exp, 100)
#define _DECL_FUNC(name,nparams,tycheck) {#name,math_##name,nparams,tycheck}
static SQRegFunction mathlib_funcs[] = {
_DECL_FUNC(sqrt,2,".n"),
_DECL_FUNC(sin,2,".n"),
_DECL_FUNC(cos,2,".n"),
_DECL_FUNC(asin,2,".n"),
_DECL_FUNC(acos,2,".n"),
_DECL_FUNC(log,2,".n"),
_DECL_FUNC(log10,2,".n"),
_DECL_FUNC(tan,2,".n"),
_DECL_FUNC(atan,2,".n"),
_DECL_FUNC(atan2,3,".nn"),
_DECL_FUNC(pow,3,".nn"),
_DECL_FUNC(floor,2,".n"),
_DECL_FUNC(ceil,2,".n"),
_DECL_FUNC(exp,2,".n"),
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
_DECL_FUNC(srand,2,".n"),
_DECL_FUNC(rand,1,NULL),
#endif /* EXPORT_DEFAULT_SQUIRREL_FUNCTIONS */
_DECL_FUNC(fabs,2,".n"),
_DECL_FUNC(abs,2,".n"),
{0,0,0,0},
};
#ifndef M_PI
#define M_PI (3.14159265358979323846)
#endif
SQRESULT sqstd_register_mathlib(HSQUIRRELVM v)
{
SQInteger i=0;
while(mathlib_funcs[i].name!=0) {
sq_pushstring(v,mathlib_funcs[i].name,-1);
sq_newclosure(v,mathlib_funcs[i].f,0);
sq_setparamscheck(v,mathlib_funcs[i].nparamscheck,mathlib_funcs[i].typemask);
sq_setnativeclosurename(v,-1,mathlib_funcs[i].name);
sq_createslot(v,-3);
i++;
}
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
sq_pushstring(v,"RAND_MAX",-1);
sq_pushinteger(v,RAND_MAX);
sq_createslot(v,-3);
#endif /* EXPORT_DEFAULT_SQUIRREL_FUNCTIONS */
sq_pushstring(v,"PI",-1);
sq_pushfloat(v,(SQFloat)M_PI);
sq_createslot(v,-3);
return SQ_OK;
}
|