Files @ r24860:fb2788d47d86
Branch filter:

Location: cpp/openttd-patchpack/source/src/3rdparty/squirrel/sqstdlib/sqstdmath.cpp - annotation

Michael Lutz
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.
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;
}