mirror of
https://github.com/nothings/stb
synced 2024-12-11 18:53:58 +03:00
Fix trailing whitespace
This commit is contained in:
parent
7a69424f15
commit
2bb4a0accd
198
stb.h
198
stb.h
@ -8,16 +8,16 @@
|
||||
Unit tests: http://nothings.org/stb/stb.c
|
||||
|
||||
============================================================================
|
||||
You MUST
|
||||
|
||||
#define STB_DEFINE
|
||||
|
||||
You MUST
|
||||
|
||||
#define STB_DEFINE
|
||||
|
||||
in EXACTLY _one_ C or C++ file that includes this header, BEFORE the
|
||||
include, like this:
|
||||
|
||||
#define STB_DEFINE
|
||||
include, like this:
|
||||
|
||||
#define STB_DEFINE
|
||||
#include "stb.h"
|
||||
|
||||
|
||||
All other files should just #include "stb.h" without the #define.
|
||||
============================================================================
|
||||
|
||||
@ -308,14 +308,14 @@ CREDITS
|
||||
#ifndef rad2deg
|
||||
#define rad2deg(a) ((a)*(180/M_PI))
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef swap
|
||||
#ifndef __cplusplus
|
||||
#define swap(TYPE,a,b) \
|
||||
do { TYPE stb__t; stb__t = (a); (a) = (b); (b) = stb__t; } while (0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
typedef unsigned char uint8 ;
|
||||
typedef signed char int8 ;
|
||||
typedef unsigned short uint16;
|
||||
@ -464,7 +464,7 @@ static char *stb_p_strncpy_s(char *a, size_t size, const char *b, size_t count)
|
||||
#define stb_p_mktemp(s) (mktemp(s) != NULL)
|
||||
|
||||
#define stb_p_sprintf sprintf
|
||||
#define stb_p_size(x)
|
||||
#define stb_p_size(x)
|
||||
#endif
|
||||
|
||||
#if defined(_WIN32)
|
||||
@ -2165,7 +2165,7 @@ static char **stb_tokens_raw(char *src_, char *delimit, int *count,
|
||||
}
|
||||
}
|
||||
}
|
||||
} else
|
||||
} else
|
||||
while (nested || !stb_tokentable[*s]) {
|
||||
if (stable[*s]) {
|
||||
if (!*s) break;
|
||||
@ -2808,7 +2808,7 @@ static void * stb__alloc_chunk(stb__alloc *src, int size, int align, int pre_ali
|
||||
if (c->next) {
|
||||
p = stb__try_chunk(c->next, size, align, pre_align);
|
||||
if (p) { ++c->alloc; return p; }
|
||||
|
||||
|
||||
// put the bigger chunk first, since the second will get buried
|
||||
// the upshot of this is that, until it gets allocated from, chunk #2
|
||||
// is always the largest remaining chunk. (could formalize
|
||||
@ -3009,7 +3009,7 @@ void *stb_realloc(void *ptr, size_t newsize)
|
||||
|
||||
if (ptr == NULL) return stb_malloc(NULL, newsize);
|
||||
if (newsize == 0) { stb_free(ptr); return NULL; }
|
||||
|
||||
|
||||
t = stb__identify(ptr);
|
||||
assert(t == STB__alloc || t == STB__nochildren);
|
||||
|
||||
@ -3172,7 +3172,7 @@ typedef struct
|
||||
#define stb_arr_len2(a) ((stb__arr *) (a) ? stb_arrhead2(a)->len : 0)
|
||||
#define stb_arr_lastn(a) (stb_arr_len(a)-1)
|
||||
|
||||
// check whether a given index is valid -- tests 0 <= i < stb_arr_len(a)
|
||||
// check whether a given index is valid -- tests 0 <= i < stb_arr_len(a)
|
||||
#define stb_arr_valid(a,i) (a ? (int) (i) < stb_arrhead(a)->len : 0)
|
||||
|
||||
// change the array length so is is exactly N entries long, creating
|
||||
@ -3907,7 +3907,7 @@ int stb_ischar(char c, char *set)
|
||||
|
||||
#define STB_nocopy(x) (x)
|
||||
#define STB_nodelete(x) 0
|
||||
#define STB_nofields
|
||||
#define STB_nofields
|
||||
#define STB_nonullvalue(x)
|
||||
#define STB_nullvalue(x) x
|
||||
#define STB_safecompare(x) x
|
||||
@ -4283,7 +4283,7 @@ void stb_uidict_reset(stb_uidict *e)
|
||||
// An stb_ptrmap data structure is an O(1) hash table storing an arbitrary
|
||||
// block of data for a given pair of pointers.
|
||||
//
|
||||
// If create=0, returns
|
||||
// If create=0, returns
|
||||
|
||||
typedef struct stb__st_stb_spmatrix stb_spmatrix;
|
||||
|
||||
@ -4345,13 +4345,13 @@ void *stb_sparse_ptr_matrix_get(stb_spmatrix *z, void *a, void *b, int create)
|
||||
//
|
||||
// if "use_arena=1", then strings will be copied
|
||||
// into blocks and never freed until the sdict is freed;
|
||||
// otherwise they're malloc()ed and free()d on the fly.
|
||||
// otherwise they're malloc()ed and free()d on the fly.
|
||||
// (specify use_arena=1 if you never stb_sdict_remove)
|
||||
|
||||
stb_declare_hash(STB_EXTERN, stb_sdict, stb_sdict_, char *, void *)
|
||||
|
||||
STB_EXTERN stb_sdict * stb_sdict_new(int use_arena);
|
||||
STB_EXTERN stb_sdict * stb_sdict_copy(stb_sdict*);
|
||||
STB_EXTERN stb_sdict * stb_sdict_copy(stb_sdict*);
|
||||
STB_EXTERN void stb_sdict_delete(stb_sdict *);
|
||||
STB_EXTERN void * stb_sdict_change(stb_sdict *, char *str, void *p);
|
||||
STB_EXTERN int stb_sdict_count(stb_sdict *d);
|
||||
@ -4425,7 +4425,7 @@ stb_sdict* stb_sdict_copy(stb_sdict *old)
|
||||
else if (new_arena)
|
||||
stb_free(new_arena);
|
||||
return n;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void stb_sdict_delete(stb_sdict *d)
|
||||
@ -4804,7 +4804,7 @@ static stb__memory_leaf *stb__nptr_find_leaf(void *mem)
|
||||
if (z)
|
||||
return z->children[STB__NPTR_NODE_OFFSET(address)];
|
||||
else
|
||||
return NULL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void * stb__nptr_alloc(int size)
|
||||
@ -4924,7 +4924,7 @@ void stb__nptr_block(void *address, int len, void (*function)(stb__memory_leaf *
|
||||
int b0 = start >> STB__NPTR_ROOT_SHIFT;
|
||||
int b1 = end >> STB__NPTR_ROOT_SHIFT;
|
||||
int b=b0,i,e0,e1;
|
||||
|
||||
|
||||
e0 = STB__NPTR_NODE_OFFSET(start);
|
||||
|
||||
if (datum <= 0) {
|
||||
@ -5896,7 +5896,7 @@ int stb_size_varlen64(stb_uint64 v)
|
||||
if (v < STB_IMM_UINT64(0x0000000800000000)) return 5;
|
||||
if (v < STB_IMM_UINT64(0x0000040000000000)) return 6;
|
||||
if (v < STB_IMM_UINT64(0x0002000000000000)) return 7;
|
||||
if (v < STB_IMM_UINT64(0x0100000000000000)) return 8;
|
||||
if (v < STB_IMM_UINT64(0x0100000000000000)) return 8;
|
||||
return 9;
|
||||
}
|
||||
|
||||
@ -5914,7 +5914,7 @@ void stb_fput_varlen64(FILE *f, stb_uint64 v)
|
||||
if (z >= STB_IMM_UINT64(0x00000010000000)) fputc((first ? 0xF0 : 0)+(char)(z>>32),f), first=0;
|
||||
if (z >= STB_IMM_UINT64(0x00000000200000)) fputc((first ? 0xE0 : 0)+(char)(z>>24),f), first=0;
|
||||
if (z >= STB_IMM_UINT64(0x00000000004000)) fputc((first ? 0xC0 : 0)+(char)(z>>16),f), first=0;
|
||||
if (z >= STB_IMM_UINT64(0x00000000000080)) fputc((first ? 0x80 : 0)+(char)(z>> 8),f), first=0;
|
||||
if (z >= STB_IMM_UINT64(0x00000000000080)) fputc((first ? 0x80 : 0)+(char)(z>> 8),f), first=0;
|
||||
fputc((char)z,f);
|
||||
}
|
||||
|
||||
@ -6395,9 +6395,9 @@ stb_dirtree2 *stb_dirtree2_from_files(char **filelist, int count)
|
||||
#define STB_ADLER32_SEED 1
|
||||
#define STB_CRC32_SEED 0 // note that we logical NOT this in the code
|
||||
|
||||
STB_EXTERN stb_uint
|
||||
STB_EXTERN stb_uint
|
||||
stb_adler32(stb_uint adler32, stb_uchar *buffer, stb_uint buflen);
|
||||
STB_EXTERN stb_uint
|
||||
STB_EXTERN stb_uint
|
||||
stb_crc32_block(stb_uint crc32, stb_uchar *buffer, stb_uint len);
|
||||
STB_EXTERN stb_uint stb_crc32(unsigned char *buffer, stb_uint len);
|
||||
|
||||
@ -6603,7 +6603,7 @@ int stb_sha1_file(stb_uchar output[20], char *file)
|
||||
buffer[n++] = 0x80;
|
||||
|
||||
// if there isn't enough room for the length, double the block
|
||||
if (n + 8 > 64)
|
||||
if (n + 8 > 64)
|
||||
block = 128;
|
||||
|
||||
// pad to end
|
||||
@ -6661,7 +6661,7 @@ void stb_sha1_readable(char display[27], unsigned char sha[20])
|
||||
num_bits -= 6;
|
||||
}
|
||||
assert(num_bits == 20*8 - 26*6);
|
||||
display[o++] = encoding[acc];
|
||||
display[o++] = encoding[acc];
|
||||
}
|
||||
|
||||
#endif // STB_DEFINE
|
||||
@ -6690,7 +6690,7 @@ STB_EXTERN void stb_reg_write_string(void *zreg, const char *str, const char *
|
||||
|
||||
STB_EXTERN __declspec(dllimport) long __stdcall RegCloseKey ( HKEY hKey );
|
||||
STB_EXTERN __declspec(dllimport) long __stdcall RegCreateKeyExA ( HKEY hKey, const char * lpSubKey,
|
||||
int Reserved, char * lpClass, int dwOptions,
|
||||
int Reserved, char * lpClass, int dwOptions,
|
||||
int samDesired, void *lpSecurityAttributes, HKEY * phkResult, int * lpdwDisposition );
|
||||
STB_EXTERN __declspec(dllimport) long __stdcall RegDeleteKeyA ( HKEY hKey, const char * lpSubKey );
|
||||
STB_EXTERN __declspec(dllimport) long __stdcall RegQueryValueExA ( HKEY hKey, const char * lpValueName,
|
||||
@ -6936,7 +6936,7 @@ int stb_cfg_delete(stb_cfg *z, char *key)
|
||||
{
|
||||
int i;
|
||||
for (i=0; i < stb_arr_len(z->data); ++i)
|
||||
if (!stb_stricmp(z->data[i].key, key)) {
|
||||
if (!stb_stricmp(z->data[i].key, key)) {
|
||||
stb_arr_fastdelete(z->data, i);
|
||||
return 1;
|
||||
}
|
||||
@ -7147,7 +7147,7 @@ static void stb__dirtree_scandir(char *path, time_t last_time, stb_dirtree *acti
|
||||
int has_slash;
|
||||
if (stb__showfile) printf("<");
|
||||
|
||||
has_slash = (path[0] && path[strlen(path)-1] == '/');
|
||||
has_slash = (path[0] && path[strlen(path)-1] == '/');
|
||||
|
||||
// @TODO: do this concatenation without using swprintf to avoid this mess:
|
||||
#if (defined(_MSC_VER) && _MSC_VER < 1400) // || (defined(__clang__))
|
||||
@ -7585,7 +7585,7 @@ void stb_wrapper_malloc(void *p, size_t sz, char *file, int line)
|
||||
void stb_wrapper_free(void *p, char *file, int line)
|
||||
{
|
||||
int n;
|
||||
|
||||
|
||||
if (p == NULL) return;
|
||||
|
||||
n = stb__hashfind(p);
|
||||
@ -7609,7 +7609,7 @@ void stb_wrapper_free(void *p, char *file, int line)
|
||||
void stb_wrapper_check(void *p)
|
||||
{
|
||||
int n;
|
||||
|
||||
|
||||
if (p == NULL) return;
|
||||
|
||||
n = stb__hashfind(p);
|
||||
@ -8118,7 +8118,7 @@ stb_ps *stb_ps_remove_any(stb_ps *ps, void **value)
|
||||
if (count == 2) {
|
||||
void *leftover = b->p[slast]; // second to last
|
||||
stb_bucket_free(b);
|
||||
return (stb_ps *) leftover;
|
||||
return (stb_ps *) leftover;
|
||||
}
|
||||
return ps;
|
||||
}
|
||||
@ -8450,7 +8450,7 @@ unsigned int stb_rand()
|
||||
int idx = stb__mt_index;
|
||||
unsigned int s,r;
|
||||
int i;
|
||||
|
||||
|
||||
if (idx >= STB__MT_LEN*sizeof(unsigned int)) {
|
||||
if (idx > STB__MT_LEN*sizeof(unsigned int))
|
||||
stb_srand(0);
|
||||
@ -8464,19 +8464,19 @@ unsigned int stb_rand()
|
||||
s = STB__TWIST(b, i, i+1);
|
||||
b[i] = b[i - STB__MT_IB] ^ (s >> 1) ^ STB__MAGIC(s);
|
||||
}
|
||||
|
||||
|
||||
s = STB__TWIST(b, STB__MT_LEN-1, 0);
|
||||
b[STB__MT_LEN-1] = b[STB__MT_IA-1] ^ (s >> 1) ^ STB__MAGIC(s);
|
||||
}
|
||||
stb__mt_index = idx + sizeof(unsigned int);
|
||||
|
||||
|
||||
r = *(unsigned int *)((unsigned char *)b + idx);
|
||||
|
||||
|
||||
r ^= (r >> 11);
|
||||
r ^= (r << 7) & 0x9D2C5680;
|
||||
r ^= (r << 15) & 0xEFC60000;
|
||||
r ^= (r >> 18);
|
||||
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
@ -8639,7 +8639,7 @@ void stb_dupe_finish(stb_dupe *sd)
|
||||
assert(sd->dupes == NULL);
|
||||
for (i=0; i < sd->hash_size; ++i) {
|
||||
void ** list = sd->hash_table[i];
|
||||
if (list != NULL) {
|
||||
if (list != NULL) {
|
||||
int n = stb_arr_len(list);
|
||||
// @TODO: measure to find good numbers instead of just making them up!
|
||||
int thresh = (sd->ineq ? 200 : 20);
|
||||
@ -8955,7 +8955,7 @@ int stb_wordwrap(int *pairs, int pair_max, int count, char *str)
|
||||
int n=0,i=0, start=0,nonwhite=0;
|
||||
if (pairs == NULL) pair_max = 0x7ffffff0;
|
||||
else pair_max *= 2;
|
||||
// parse
|
||||
// parse
|
||||
for(;;) {
|
||||
int s=i; // first whitespace char; last nonwhite+1
|
||||
int w; // word start
|
||||
@ -9136,7 +9136,7 @@ int stb__wildmatch_raw2(char *expr, char *candidate, int search, int insensitive
|
||||
{
|
||||
int where=0;
|
||||
int start = -1;
|
||||
|
||||
|
||||
if (!search) {
|
||||
// parse to first '*'
|
||||
if (*expr != '*')
|
||||
@ -9150,7 +9150,7 @@ int stb__wildmatch_raw2(char *expr, char *candidate, int search, int insensitive
|
||||
if (insensitive) {
|
||||
if (tolower(*candidate) != tolower(*expr))
|
||||
return -1;
|
||||
} else
|
||||
} else
|
||||
if (*candidate != *expr)
|
||||
return -1;
|
||||
}
|
||||
@ -9167,7 +9167,7 @@ int stb__wildmatch_raw2(char *expr, char *candidate, int search, int insensitive
|
||||
++expr;
|
||||
|
||||
// implicit '*' at this point
|
||||
|
||||
|
||||
while (*expr) {
|
||||
int o=0;
|
||||
// combine redundant * characters
|
||||
@ -9196,7 +9196,7 @@ int stb__wildmatch_raw2(char *expr, char *candidate, int search, int insensitive
|
||||
// ok, now check if they match
|
||||
if (stb__match_qstring(candidate+z-o, expr, o, insensitive))
|
||||
return start >= 0 ? start : 0;
|
||||
return -1;
|
||||
return -1;
|
||||
} else {
|
||||
// if yes '*', then do stb__find_qmatch on the intervening chars
|
||||
int n = stb__find_qstring(candidate, expr, o, insensitive);
|
||||
@ -9386,7 +9386,7 @@ static char *stb__reg_parse(stb_matcher *matcher, int start, char *regex, stb_ui
|
||||
case '{': // not supported!
|
||||
// @TODO: given {n,m}, clone last_start to last_end m times,
|
||||
// and include epsilons from start to first m-n blocks
|
||||
return NULL;
|
||||
return NULL;
|
||||
|
||||
case '\\':
|
||||
++regex;
|
||||
@ -10114,7 +10114,7 @@ typedef struct
|
||||
|
||||
extern stb_info_struct stb_introspect_output[];
|
||||
|
||||
//
|
||||
//
|
||||
|
||||
STB_EXTERN void stb_introspect_precompiled(stb_info_struct *compiled);
|
||||
STB_EXTERN void stb__introspect(char *path, char *file);
|
||||
@ -10216,11 +10216,11 @@ void stb__introspect(char *path, char *file, stb_info_struct *compiled)
|
||||
stb__introspect_filename(buffer2, path);
|
||||
|
||||
// get source/include files timestamps, compare to output-file timestamp;
|
||||
// if mismatched, regenerate
|
||||
// if mismatched, regenerate
|
||||
|
||||
if (stb__stat(buffer2, &st))
|
||||
needs_building = STB_TRUE;
|
||||
|
||||
|
||||
{
|
||||
// find any file that contains an introspection command and is newer
|
||||
// if needs_building is already true, we don't need to do this test,
|
||||
@ -10316,7 +10316,7 @@ void stb__introspect(char *filename)
|
||||
if (t == NULL) stb_fatal("Error parsing %s", filename);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -10456,7 +10456,7 @@ stb_uint stb_decompress(stb_uchar *output, stb_uchar *i, stb_uint length)
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
assert(stb__dout <= output + olen);
|
||||
assert(stb__dout <= output + olen);
|
||||
if (stb__dout > output + olen)
|
||||
return 0;
|
||||
}
|
||||
@ -10615,7 +10615,7 @@ void stb_compress_window(int z)
|
||||
|
||||
static int stb_not_crap(int best, int dist)
|
||||
{
|
||||
return ((best > 2 && dist <= 0x00100)
|
||||
return ((best > 2 && dist <= 0x00100)
|
||||
|| (best > 5 && dist <= 0x04000)
|
||||
|| (best > 7 && dist <= 0x80000));
|
||||
}
|
||||
@ -10702,15 +10702,15 @@ static int stb_compress_chunk(stb_uchar *history,
|
||||
stb_out(dist-1);
|
||||
} else if (best > 5 && best <= 0x100 && dist <= 0x4000) {
|
||||
outliterals(lit_start, q-lit_start); lit_start = (q += best);
|
||||
stb_out2(0x4000 + dist-1);
|
||||
stb_out2(0x4000 + dist-1);
|
||||
stb_out(best-1);
|
||||
} else if (best > 7 && best <= 0x100 && dist <= 0x80000) {
|
||||
outliterals(lit_start, q-lit_start); lit_start = (q += best);
|
||||
stb_out3(0x180000 + dist-1);
|
||||
stb_out3(0x180000 + dist-1);
|
||||
stb_out(best-1);
|
||||
} else if (best > 8 && best <= 0x10000 && dist <= 0x80000) {
|
||||
outliterals(lit_start, q-lit_start); lit_start = (q += best);
|
||||
stb_out3(0x100000 + dist-1);
|
||||
stb_out3(0x100000 + dist-1);
|
||||
stb_out2(best-1);
|
||||
} else if (best > 9 && dist <= 0x1000000) {
|
||||
if (best > 65536) best = 65536;
|
||||
@ -10790,7 +10790,7 @@ int stb_compress_tofile(char *filename, char *input, unsigned int length)
|
||||
//int maxlen = length + 512 + (length >> 2); // total guess
|
||||
//char *buffer = (char *) malloc(maxlen);
|
||||
//int blen = stb_compress((stb_uchar*)buffer, (stb_uchar*)input, length);
|
||||
|
||||
|
||||
stb__out = NULL;
|
||||
stb__outfile = stb_p_fopen(filename, "wb");
|
||||
if (!stb__outfile) return 0;
|
||||
@ -10810,7 +10810,7 @@ int stb_compress_intofile(FILE *f, char *input, unsigned int length)
|
||||
//int maxlen = length + 512 + (length >> 2); // total guess
|
||||
//char *buffer = (char*)malloc(maxlen);
|
||||
//int blen = stb_compress((stb_uchar*)buffer, (stb_uchar*)input, length);
|
||||
|
||||
|
||||
stb__out = NULL;
|
||||
stb__outfile = f;
|
||||
if (!stb__outfile) return 0;
|
||||
@ -10986,7 +10986,7 @@ void stb_write(char *data, int data_len)
|
||||
memmove(xtb.buffer, xtb.buffer + flush, xtb.valid - flush);
|
||||
xtb.start -= flush;
|
||||
xtb.valid -= flush;
|
||||
|
||||
|
||||
for (i=0; i <= xtb.hashmask; ++i)
|
||||
if (xtb.chash[i] < xtb.buffer + flush)
|
||||
xtb.chash[i] = NULL;
|
||||
@ -11711,7 +11711,7 @@ void stb_mutex_end(void *p)
|
||||
#endif // _WINDOWS_
|
||||
|
||||
#if 0
|
||||
// for future reference,
|
||||
// for future reference,
|
||||
// InterlockedCompareExchange for x86:
|
||||
int cas64_mp(void * dest, void * xcmp, void * xxchg) {
|
||||
__asm
|
||||
@ -11751,7 +11751,7 @@ inline unsigned __int64 _InterlockedCompareExchange64(volatile unsigned __int64
|
||||
mov ecx,4[edi];
|
||||
mov esi,dest;
|
||||
lock CMPXCHG8B [esi];
|
||||
}
|
||||
}
|
||||
#endif // #if 0
|
||||
|
||||
#endif // _WIN32
|
||||
@ -12321,7 +12321,7 @@ static void * stb__io_task(void *p)
|
||||
FILE *f;
|
||||
stb_uchar *buf;
|
||||
|
||||
if (dc->stat_out) {
|
||||
if (dc->stat_out) {
|
||||
struct _stati64 s;
|
||||
if (!_stati64(dc->filename, &s)) {
|
||||
dc->stat_out->filesize = s.st_size;
|
||||
@ -12356,7 +12356,7 @@ static void * stb__io_task(void *p)
|
||||
len = ftell(f) - dc->offset;
|
||||
}
|
||||
|
||||
if (fseek(f, dc->offset, SEEK_SET)) {
|
||||
if (fseek(f, dc->offset, SEEK_SET)) {
|
||||
fclose(f);
|
||||
return stb__io_error(dc);
|
||||
}
|
||||
@ -12628,7 +12628,7 @@ static stb__span *stb__alloc_span(int pagecount)
|
||||
if (p == NULL) return 0;
|
||||
} else
|
||||
stb__spanlist_unlink(p);
|
||||
|
||||
|
||||
if (p->len > pagecount) {
|
||||
stb__span *q = stb__span_alloc();
|
||||
if (q) {
|
||||
@ -12886,7 +12886,7 @@ char *stb__get_sourcefile_path(char *file)
|
||||
stb_p_sprintf(filebuf stb_p_size(sizeof(filebuf)), "../%s", file);
|
||||
if (!stb_fexists(filebuf)) return filebuf;
|
||||
|
||||
return file;
|
||||
return file;
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -12971,7 +12971,7 @@ static void stb__constant_parse(stb__FileEntry *f, int i)
|
||||
matched_int: {
|
||||
int neg=0;
|
||||
s = stb_skipwhite(s);
|
||||
while (*s == '-') { neg = !neg; s = stb_skipwhite(s+1); } // handle '- - 5', pointlessly
|
||||
while (*s == '-') { neg = !neg; s = stb_skipwhite(s+1); } // handle '- - 5', pointlessly
|
||||
if (s[0] == '0' && tolower(s[1]) == 'x')
|
||||
f->entries[i].ival = strtol(s, NULL, 16);
|
||||
else if (s[0] == '0')
|
||||
@ -13165,7 +13165,7 @@ static float stu__getfloat(stua_obj v)
|
||||
return *(float *) &n;
|
||||
}
|
||||
|
||||
stua_obj stua_float(float f)
|
||||
stua_obj stua_float(float f)
|
||||
{
|
||||
return stu__floatp(&f);
|
||||
}
|
||||
@ -13336,7 +13336,7 @@ static void stua_gc(int force)
|
||||
// stu__mark everything reachable
|
||||
stu__nil.stua_gc = stu__true.stua_gc = stu__false.stua_gc = 1;
|
||||
stu__mark(stua_globals);
|
||||
if (!stu__number(stu__flow_val))
|
||||
if (!stu__number(stu__flow_val))
|
||||
stu__mark(stu__flow_val);
|
||||
for (i=0; i < stb_arr_len(stu__gc_root_stack); ++i)
|
||||
if (!stu__number(stu__gc_root_stack[i]))
|
||||
@ -13344,7 +13344,7 @@ static void stua_gc(int force)
|
||||
|
||||
// sweep unreachables
|
||||
for (i=0; i < stb_arr_len(stu__gc_ptrlist);) {
|
||||
stu__box *z = stu__gc_ptrlist[i];
|
||||
stu__box *z = stu__gc_ptrlist[i];
|
||||
if (!z->stua_gc) {
|
||||
switch (z->type) {
|
||||
case STU___dict: stb_idict_destroy((stua_dict *) z); break;
|
||||
@ -13354,7 +13354,7 @@ static void stua_gc(int force)
|
||||
}
|
||||
// swap in the last item over this, and repeat
|
||||
z = stb_arr_pop(stu__gc_ptrlist);
|
||||
stu__gc_ptrlist[i] = z;
|
||||
stu__gc_ptrlist[i] = z;
|
||||
} else
|
||||
++i;
|
||||
}
|
||||
@ -13739,7 +13739,7 @@ static stua_obj stu__funceval(stua_obj fo, stua_obj co)
|
||||
stu__f = f->code, stu__c = context;
|
||||
stu__f_obj = co;
|
||||
++stb__stua_nesting;
|
||||
if (stu__f[1])
|
||||
if (stu__f[1])
|
||||
p = stu__eval(stu__f[1]);
|
||||
else
|
||||
p = stua_nil;
|
||||
@ -13813,7 +13813,7 @@ static struct { int stu__tok; char *regex; } stu__lexemes[] =
|
||||
stua_key4(func,var,let,break) stua_key4(nil,true,false,end)
|
||||
stua_key4(return,continue,as,repeat) stua_key4(_frame,catch,catch,catch)
|
||||
|
||||
ST_shl, "<<", ST_and, "&&", ST_eq, "==", ST_ge, ">=",
|
||||
ST_shl, "<<", ST_and, "&&", ST_eq, "==", ST_ge, ">=",
|
||||
ST_shr, ">>", ST_or , "||", ST_ne, "!=", ST_le, "<=",
|
||||
ST_shru,">>>", ST_into, "=>",
|
||||
T__none, ".",
|
||||
@ -13843,7 +13843,7 @@ static void stu__push_func_comp(void)
|
||||
static void stu__pop_func_comp(void)
|
||||
{
|
||||
stb_arr_free(stu__pfunc.code);
|
||||
stb_arr_free(stu__pfunc.data);
|
||||
stb_arr_free(stu__pfunc.data);
|
||||
stb_idict_destroy(stu__pfunc.locals);
|
||||
stb_arr_free(stu__pfunc.non_local_refs);
|
||||
stu__pfunc = stb_arr_pop(func_stack);
|
||||
@ -14117,7 +14117,7 @@ static int stu__dictdef(int end, int *count)
|
||||
if (!stu__accept(',')) break;
|
||||
}
|
||||
if (!stu__demand(end))
|
||||
return stu__err(end == ')' ? "Expecting ) at end of function call"
|
||||
return stu__err(end == ')' ? "Expecting ) at end of function call"
|
||||
: "Expecting } at end of dictionary definition");
|
||||
z = stu__cc2('{', stb_arr_len(dict)/2);
|
||||
for (i=0; i < stb_arr_len(dict); ++i)
|
||||
@ -14232,7 +14232,7 @@ static int stu__funcdef(stua_obj *id, stua_obj *result)
|
||||
stua_obj v,f=stua_nil;
|
||||
assert(stu__tok == ST_func);
|
||||
stu__nexttoken();
|
||||
if (id) {
|
||||
if (id) {
|
||||
if (!stu__demandv(ST_id, id)) return stu__err("Expecting function name");
|
||||
} else
|
||||
stu__accept(ST_id);
|
||||
@ -14418,38 +14418,38 @@ This software is available under 2 licenses -- choose whichever you prefer.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE A - MIT License
|
||||
Copyright (c) 2017 Sean Barrett
|
||||
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
|
||||
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
|
||||
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
|
||||
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.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE B - Public Domain (www.unlicense.org)
|
||||
This is free and unencumbered software released into the public domain.
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
this software under copyright law.
|
||||
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 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
|
||||
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 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.
|
||||
------------------------------------------------------------------------------
|
||||
*/
|
||||
|
@ -280,7 +280,7 @@ enum
|
||||
STB_C_LEX_EQUAL_ARROW( CLEX_eqarrow )
|
||||
|
||||
#ifdef STB__clex_define_shifts
|
||||
CLEX_shleq, CLEX_shreq,
|
||||
CLEX_shleq, CLEX_shreq,
|
||||
#endif
|
||||
|
||||
CLEX_first_unused_token
|
||||
@ -348,7 +348,7 @@ static int stb__clex_iswhite(int x)
|
||||
|
||||
static const char *stb__strchr(const char *str, int ch)
|
||||
{
|
||||
for (; *str; ++str)
|
||||
for (; *str; ++str)
|
||||
if (*str == ch)
|
||||
return str;
|
||||
return 0;
|
||||
@ -604,14 +604,14 @@ int stb_c_lexer_get_token(stb_lexer *lexer)
|
||||
lexer->string[n] = 0;
|
||||
return stb__clex_token(lexer, CLEX_id, p, p+n-1);
|
||||
}
|
||||
|
||||
|
||||
// check for EOF
|
||||
STB_C_LEX_0_IS_EOF(
|
||||
if (*p == 0)
|
||||
return stb__clex_eof(tok);
|
||||
)
|
||||
|
||||
single_char:
|
||||
single_char:
|
||||
// not an identifier, return the character as itself
|
||||
return stb__clex_token(lexer, *p, p, p);
|
||||
|
||||
@ -929,38 +929,38 @@ This software is available under 2 licenses -- choose whichever you prefer.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE A - MIT License
|
||||
Copyright (c) 2017 Sean Barrett
|
||||
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
|
||||
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
|
||||
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
|
||||
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.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE B - Public Domain (www.unlicense.org)
|
||||
This is free and unencumbered software released into the public domain.
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
this software under copyright law.
|
||||
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 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
|
||||
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 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.
|
||||
------------------------------------------------------------------------------
|
||||
*/
|
||||
|
@ -5,7 +5,7 @@
|
||||
// two points, with fast updates when changing reachability (e.g. on one machine
|
||||
// it was typically 0.2ms w/ 1024x1024 grid). Each grid square must be "open" or
|
||||
// "closed" (traversable or untraversable), and grid squares are only connected
|
||||
// to their orthogonal neighbors, not diagonally.
|
||||
// to their orthogonal neighbors, not diagonally.
|
||||
//
|
||||
// In one source file, create the implementation by doing something like this:
|
||||
//
|
||||
@ -17,7 +17,7 @@
|
||||
// The above creates an implementation that can run on maps up to 1024x1024.
|
||||
// Map sizes must be a multiple of (1<<(LOG2/2)) on each axis (e.g. 32 if LOG2=10,
|
||||
// 16 if LOG2=8, etc.) (You can just pad your map with untraversable space.)
|
||||
//
|
||||
//
|
||||
// MEMORY USAGE
|
||||
//
|
||||
// Uses about 6-7 bytes per grid square (e.g. 7MB for a 1024x1024 grid).
|
||||
@ -52,7 +52,7 @@
|
||||
// - function for setting a grid of squares at once (just use batching)
|
||||
//
|
||||
// LICENSE
|
||||
//
|
||||
//
|
||||
// See end of file for license information.
|
||||
//
|
||||
// ALGORITHM
|
||||
@ -435,7 +435,7 @@ static void stbcc__build_all_connections_for_cluster(stbcc_grid *g, int cx, int
|
||||
i = 0;
|
||||
j = 0;
|
||||
step_x = 0;
|
||||
step_y = 1;
|
||||
step_y = 1;
|
||||
n = STBCC__CLUSTER_SIZE_Y;
|
||||
break;
|
||||
case 2:
|
||||
@ -599,7 +599,7 @@ void stbcc_init_grid(stbcc_grid *g, unsigned char *map, int w, int h)
|
||||
|
||||
#if 0
|
||||
for (j=0; j < STBCC__CLUSTER_COUNT_Y; ++j)
|
||||
for (i=0; i < STBCC__CLUSTER_COUNT_X; ++i)
|
||||
for (i=0; i < STBCC__CLUSTER_COUNT_X; ++i)
|
||||
g->cluster_dirty[j][i] = 0;
|
||||
#endif
|
||||
|
||||
@ -699,7 +699,7 @@ static void stbcc__remove_clump_connection(stbcc_grid *g, int x1, int y1, int x2
|
||||
for (i=0; i < clump->num_adjacent; ++i)
|
||||
if (rc.clump_index == adj[i].clump_index &&
|
||||
rc.cluster_dx == adj[i].cluster_dx &&
|
||||
rc.cluster_dy == adj[i].cluster_dy)
|
||||
rc.cluster_dy == adj[i].cluster_dy)
|
||||
break;
|
||||
|
||||
if (i < clump->num_adjacent)
|
||||
@ -736,7 +736,7 @@ static void stbcc__add_connections_to_adjacent_cluster(stbcc_grid *g, int cx, in
|
||||
i = 0;
|
||||
j = 0;
|
||||
step_x = 0;
|
||||
step_y = 1;
|
||||
step_y = 1;
|
||||
n = STBCC__CLUSTER_SIZE_Y;
|
||||
} else if (dy == -1) {
|
||||
i = 0;
|
||||
@ -797,7 +797,7 @@ static void stbcc__remove_connections_to_adjacent_cluster(stbcc_grid *g, int cx,
|
||||
i = 0;
|
||||
j = 0;
|
||||
step_x = 0;
|
||||
step_y = 1;
|
||||
step_y = 1;
|
||||
n = STBCC__CLUSTER_SIZE_Y;
|
||||
} else if (dy == -1) {
|
||||
i = 0;
|
||||
@ -1012,38 +1012,38 @@ This software is available under 2 licenses -- choose whichever you prefer.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE A - MIT License
|
||||
Copyright (c) 2017 Sean Barrett
|
||||
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
|
||||
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
|
||||
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
|
||||
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.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE B - Public Domain (www.unlicense.org)
|
||||
This is free and unencumbered software released into the public domain.
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
this software under copyright law.
|
||||
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 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
|
||||
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 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.
|
||||
------------------------------------------------------------------------------
|
||||
*/
|
||||
|
52
stb_divide.h
52
stb_divide.h
@ -3,7 +3,7 @@
|
||||
//
|
||||
// HISTORY
|
||||
//
|
||||
// v0.93 2020-02-02 Write useful exit() value from main()
|
||||
// v0.93 2020-02-02 Write useful exit() value from main()
|
||||
// v0.92 2019-02-25 Fix warning
|
||||
// v0.91 2010-02-27 Fix euclidean division by INT_MIN for non-truncating C
|
||||
// Check result with 64-bit math to catch such cases
|
||||
@ -311,7 +311,7 @@ void test(int a, int b)
|
||||
if (show) printf("(%+11d,%+d) | ", a,b);
|
||||
q = stb_div_trunc(a,b), r = stb_mod_trunc(a,b);
|
||||
if (show) printf("(%+11d,%+2d) ", q,r); stbdiv_check(q,r,a,b, "trunc",a);
|
||||
q = stb_div_floor(a,b), r = stb_mod_floor(a,b);
|
||||
q = stb_div_floor(a,b), r = stb_mod_floor(a,b);
|
||||
if (show) printf("(%+11d,%+2d) ", q,r); stbdiv_check(q,r,a,b, "floor",b);
|
||||
q = stb_div_eucl (a,b), r = stb_mod_eucl (a,b);
|
||||
if (show) printf("(%+11d,%+2d)\n", q,r); stbdiv_check(q,r,a,b, "euclidean",1);
|
||||
@ -393,38 +393,38 @@ This software is available under 2 licenses -- choose whichever you prefer.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE A - MIT License
|
||||
Copyright (c) 2017 Sean Barrett
|
||||
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
|
||||
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
|
||||
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
|
||||
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.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE B - Public Domain (www.unlicense.org)
|
||||
This is free and unencumbered software released into the public domain.
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
this software under copyright law.
|
||||
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 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
|
||||
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 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.
|
||||
------------------------------------------------------------------------------
|
||||
*/
|
||||
|
58
stb_ds.h
58
stb_ds.h
@ -1,5 +1,5 @@
|
||||
/* stb_ds.h - v0.63 - public domain data structures - Sean Barrett 2019
|
||||
|
||||
|
||||
This is a single-header-file library that provides easy-to-use
|
||||
dynamic arrays and hash tables for C (also works in C++).
|
||||
|
||||
@ -26,7 +26,7 @@ COMPILE-TIME OPTIONS
|
||||
#define STBDS_NO_SHORT_NAMES
|
||||
|
||||
This flag needs to be set globally.
|
||||
|
||||
|
||||
By default stb_ds exposes shorter function names that are not qualified
|
||||
with the "stbds_" prefix. If these names conflict with the names in your
|
||||
code, define this flag.
|
||||
@ -71,7 +71,7 @@ DOCUMENTATION
|
||||
Non-function interface:
|
||||
|
||||
Declare an empty dynamic array of type T
|
||||
T* foo = NULL;
|
||||
T* foo = NULL;
|
||||
|
||||
Access the i'th item of a dynamic array 'foo' of type T, T* foo:
|
||||
foo[i]
|
||||
@ -227,7 +227,7 @@ DOCUMENTATION
|
||||
T* shgetp(T*, char* key)
|
||||
T* hmgetp_ts(T*, TK key, ptrdiff_t tempvar)
|
||||
T* hmgetp_null(T*, TK key)
|
||||
T* shgetp_null(T*, char *key)
|
||||
T* shgetp_null(T*, char *key)
|
||||
Returns a pointer to the structure corresponding to 'key' in
|
||||
the hashmap. Functions ending in "_null" return NULL if the key
|
||||
is not present in the hashmap; the others return a pointer to a
|
||||
@ -355,7 +355,7 @@ NOTES - HASH MAP
|
||||
* If adversarial input is a serious concern and you're on a 64-bit platform,
|
||||
enable STBDS_SIPHASH_2_4 (see the 'Compile-time options' section), and pass
|
||||
a strong random number to stbds_rand_seed.
|
||||
|
||||
|
||||
* The default value for the hash table is stored in foo[-1], so if you
|
||||
use code like 'hmget(T,k)->value = 5' you can accidentally overwrite
|
||||
the value stored by hmdefault if 'k' is not present.
|
||||
@ -436,7 +436,7 @@ CREDITS
|
||||
|
||||
#define stralloc stbds_stralloc
|
||||
#define strreset stbds_strreset
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(STBDS_REALLOC) && !defined(STBDS_FREE) || !defined(STBDS_REALLOC) && defined(STBDS_FREE)
|
||||
#error "You must define both STBDS_REALLOC and STBDS_FREE, or neither."
|
||||
@ -881,16 +881,16 @@ static stbds_hash_index *stbds_make_hash_index(size_t slot_count, stbds_hash_ind
|
||||
// Following statistics were measured on a Core i7-6700 @ 4.00Ghz, compiled with clang 7.0.1 -O2
|
||||
// Note that the larger tables have high variance as they were run fewer times
|
||||
// A1 A2 B1 C1
|
||||
// 0.10ms : 0.10ms : 0.10ms : 0.11ms : 2,000 inserts creating 2K table
|
||||
// 0.96ms : 0.95ms : 0.97ms : 1.04ms : 20,000 inserts creating 20K table
|
||||
// 14.48ms : 14.46ms : 10.63ms : 11.00ms : 200,000 inserts creating 200K table
|
||||
// 195.74ms : 196.35ms : 203.69ms : 214.92ms : 2,000,000 inserts creating 2M table
|
||||
// 2193.88ms : 2209.22ms : 2285.54ms : 2437.17ms : 20,000,000 inserts creating 20M table
|
||||
// 65.27ms : 53.77ms : 65.33ms : 65.47ms : 500,000 inserts & deletes in 2K table
|
||||
// 72.78ms : 62.45ms : 71.95ms : 72.85ms : 500,000 inserts & deletes in 20K table
|
||||
// 0.10ms : 0.10ms : 0.10ms : 0.11ms : 2,000 inserts creating 2K table
|
||||
// 0.96ms : 0.95ms : 0.97ms : 1.04ms : 20,000 inserts creating 20K table
|
||||
// 14.48ms : 14.46ms : 10.63ms : 11.00ms : 200,000 inserts creating 200K table
|
||||
// 195.74ms : 196.35ms : 203.69ms : 214.92ms : 2,000,000 inserts creating 2M table
|
||||
// 2193.88ms : 2209.22ms : 2285.54ms : 2437.17ms : 20,000,000 inserts creating 20M table
|
||||
// 65.27ms : 53.77ms : 65.33ms : 65.47ms : 500,000 inserts & deletes in 2K table
|
||||
// 72.78ms : 62.45ms : 71.95ms : 72.85ms : 500,000 inserts & deletes in 20K table
|
||||
// 89.47ms : 77.72ms : 96.49ms : 96.75ms : 500,000 inserts & deletes in 200K table
|
||||
// 97.58ms : 98.14ms : 97.18ms : 97.53ms : 500,000 inserts & deletes in 2M table
|
||||
// 118.61ms : 119.62ms : 120.16ms : 118.86ms : 500,000 inserts & deletes in 20M table
|
||||
// 97.58ms : 98.14ms : 97.18ms : 97.53ms : 500,000 inserts & deletes in 2M table
|
||||
// 118.61ms : 119.62ms : 120.16ms : 118.86ms : 500,000 inserts & deletes in 20M table
|
||||
// 192.11ms : 194.39ms : 196.38ms : 195.73ms : 500,000 inserts & deletes in 200M table
|
||||
|
||||
if (slot_count <= STBDS_BUCKET_LENGTH)
|
||||
@ -1023,7 +1023,7 @@ static size_t stbds_siphash_bytes(void *p, size_t len, size_t seed)
|
||||
// derived from siphash, but on 32-bit platforms very different as it uses 4 32-bit state not 4 64-bit
|
||||
v0 = ((((size_t) 0x736f6d65 << 16) << 16) + 0x70736575) ^ seed;
|
||||
v1 = ((((size_t) 0x646f7261 << 16) << 16) + 0x6e646f6d) ^ ~seed;
|
||||
v2 = ((((size_t) 0x6c796765 << 16) << 16) + 0x6e657261) ^ seed;
|
||||
v2 = ((((size_t) 0x6c796765 << 16) << 16) + 0x6e657261) ^ seed;
|
||||
v3 = ((((size_t) 0x74656462 << 16) << 16) + 0x79746573) ^ ~seed;
|
||||
|
||||
#ifdef STBDS_TEST_SIPHASH_2_4
|
||||
@ -1126,16 +1126,16 @@ size_t stbds_hash_bytes(void *p, size_t len, size_t seed)
|
||||
// Following statistics were measured on a Core i7-6700 @ 4.00Ghz, compiled with clang 7.0.1 -O2
|
||||
// Note that the larger tables have high variance as they were run fewer times
|
||||
// HASH32-A // HASH32-BB // HASH32-C
|
||||
// 0.10ms // 0.10ms // 0.10ms : 2,000 inserts creating 2K table
|
||||
// 0.96ms // 0.95ms // 0.99ms : 20,000 inserts creating 20K table
|
||||
// 14.69ms // 14.43ms // 14.97ms : 200,000 inserts creating 200K table
|
||||
// 199.99ms // 195.36ms // 202.05ms : 2,000,000 inserts creating 2M table
|
||||
// 2234.84ms // 2187.74ms // 2240.38ms : 20,000,000 inserts creating 20M table
|
||||
// 55.68ms // 53.72ms // 57.31ms : 500,000 inserts & deletes in 2K table
|
||||
// 63.43ms // 61.99ms // 65.73ms : 500,000 inserts & deletes in 20K table
|
||||
// 0.10ms // 0.10ms // 0.10ms : 2,000 inserts creating 2K table
|
||||
// 0.96ms // 0.95ms // 0.99ms : 20,000 inserts creating 20K table
|
||||
// 14.69ms // 14.43ms // 14.97ms : 200,000 inserts creating 200K table
|
||||
// 199.99ms // 195.36ms // 202.05ms : 2,000,000 inserts creating 2M table
|
||||
// 2234.84ms // 2187.74ms // 2240.38ms : 20,000,000 inserts creating 20M table
|
||||
// 55.68ms // 53.72ms // 57.31ms : 500,000 inserts & deletes in 2K table
|
||||
// 63.43ms // 61.99ms // 65.73ms : 500,000 inserts & deletes in 20K table
|
||||
// 80.04ms // 77.96ms // 81.83ms : 500,000 inserts & deletes in 200K table
|
||||
// 100.42ms // 97.40ms // 102.39ms : 500,000 inserts & deletes in 2M table
|
||||
// 119.71ms // 120.59ms // 121.63ms : 500,000 inserts & deletes in 20M table
|
||||
// 100.42ms // 97.40ms // 102.39ms : 500,000 inserts & deletes in 2M table
|
||||
// 119.71ms // 120.59ms // 121.63ms : 500,000 inserts & deletes in 20M table
|
||||
// 185.28ms // 195.15ms // 187.74ms : 500,000 inserts & deletes in 200M table
|
||||
// 15.58ms // 14.79ms // 15.52ms : 200,000 inserts creating 200K table with varying key spacing
|
||||
|
||||
@ -1176,7 +1176,7 @@ static int stbds_is_key_equal(void *a, size_t elemsize, void *key, size_t keysiz
|
||||
#define STBDS_ARR_TO_HASH(x,elemsize) ((char*) (x) + (elemsize))
|
||||
|
||||
#define stbds_hash_table(a) ((stbds_hash_index *) stbds_header(a)->hash_table)
|
||||
|
||||
|
||||
void stbds_hmfree_func(void *a, size_t elemsize)
|
||||
{
|
||||
if (a == NULL) return;
|
||||
@ -1466,7 +1466,7 @@ void * stbds_hmdel_key(void *a, size_t elemsize, void *key, size_t keysize, size
|
||||
|
||||
// if indices are the same, memcpy is a no-op, but back-pointer-fixup will fail, so skip
|
||||
if (old_index != final_index) {
|
||||
// swap delete
|
||||
// swap delete
|
||||
memmove((char*) a + elemsize*old_index, (char*) a + elemsize*final_index, elemsize);
|
||||
|
||||
// now find the slot for the last element
|
||||
@ -1676,7 +1676,7 @@ void stbds_unit_tests(void)
|
||||
if (i & 3) STBDS_ASSERT(hmget(intmap, i) == -2 );
|
||||
else STBDS_ASSERT(hmget(intmap, i) == i*3);
|
||||
for (i=0; i < testsize; i+=1)
|
||||
hmdel(intmap, i); // delete the rest of the entries
|
||||
hmdel(intmap, i); // delete the rest of the entries
|
||||
for (i=0; i < testsize; i+=1)
|
||||
STBDS_ASSERT(hmget(intmap, i) == -2 );
|
||||
hmfree(intmap);
|
||||
@ -1720,7 +1720,7 @@ void stbds_unit_tests(void)
|
||||
if (i & 3) STBDS_ASSERT(shget(strmap, strkey(i)) == -2 );
|
||||
else STBDS_ASSERT(shget(strmap, strkey(i)) == i*3);
|
||||
for (i=0; i < testsize; i+=1)
|
||||
shdel(strmap, strkey(i)); // delete the rest of the entries
|
||||
shdel(strmap, strkey(i)); // delete the rest of the entries
|
||||
for (i=0; i < testsize; i+=1)
|
||||
STBDS_ASSERT(shget(strmap, strkey(i)) == -2 );
|
||||
shfree(strmap);
|
||||
|
68
stb_dxt.h
68
stb_dxt.h
@ -23,10 +23,10 @@
|
||||
// v1.01 - (stb) fix bug converting to RGB that messed up quality, thanks ryg & cbloom
|
||||
// v1.00 - (stb) first release
|
||||
//
|
||||
// contributors:
|
||||
// contributors:
|
||||
// Kevin Schmidt (#defines for "freestanding" compilation)
|
||||
// github:ppiastucki (BC4 support)
|
||||
//
|
||||
//
|
||||
// LICENSE
|
||||
//
|
||||
// See end of file for license information.
|
||||
@ -68,7 +68,7 @@ STBDDEF void stb_compress_bc5_block(unsigned char *dest, const unsigned char *sr
|
||||
// STB_DXT_USE_ROUNDING_BIAS
|
||||
// use a rounding bias during color interpolation. this is closer to what "ideal"
|
||||
// interpolation would do but doesn't match the S3TC/DX10 spec. old versions (pre-1.03)
|
||||
// implicitly had this turned on.
|
||||
// implicitly had this turned on.
|
||||
//
|
||||
// in case you're targeting a specific type of hardware (e.g. console programmers):
|
||||
// NVidia and Intel GPUs (as of 2010) as well as DX9 ref use DXT decoders that are closer
|
||||
@ -159,7 +159,7 @@ static void stb__PrepareOptTable(unsigned char *Table,const unsigned char *expan
|
||||
int mine = expand[mn];
|
||||
int maxe = expand[mx];
|
||||
int err = STBD_ABS(stb__Lerp13(maxe, mine) - i);
|
||||
|
||||
|
||||
// DX10 spec says that interpolation must be within 3% of "correct" result,
|
||||
// add this as error term. (normally we'd expect a random distribution of
|
||||
// +-1.5% error, but nowhere in the spec does it say that the error has to be
|
||||
@ -238,7 +238,7 @@ static unsigned int stb__MatchColorsBlock(unsigned char *block, unsigned char *c
|
||||
// relying on this 1d approximation isn't always optimal in terms of euclidean distance,
|
||||
// but it's very close and a lot faster.
|
||||
// http://cbloomrants.blogspot.com/2008/12/12-08-08-dxtc-summary.html
|
||||
|
||||
|
||||
c0Point = (stops[1] + stops[3]) >> 1;
|
||||
halfPoint = (stops[3] + stops[2]) >> 1;
|
||||
c3Point = (stops[2] + stops[0]) >> 1;
|
||||
@ -513,7 +513,7 @@ static void stb__CompressColorBlock(unsigned char *dest, unsigned char *block, i
|
||||
int refinecount;
|
||||
unsigned short max16, min16;
|
||||
unsigned char dblock[16*4],color[4*4];
|
||||
|
||||
|
||||
dither = mode & STB_DXT_DITHER;
|
||||
refinecount = (mode & STB_DXT_HIGHQUAL) ? 2 : 1;
|
||||
|
||||
@ -543,7 +543,7 @@ static void stb__CompressColorBlock(unsigned char *dest, unsigned char *block, i
|
||||
// third step: refine (multiple times if requested)
|
||||
for (i=0;i<refinecount;i++) {
|
||||
unsigned int lastmask = mask;
|
||||
|
||||
|
||||
if (stb__RefineBlock(dither ? dblock : block,&max16,&min16,mask)) {
|
||||
if (max16 != min16) {
|
||||
stb__EvalColors(color,max16,min16);
|
||||
@ -553,7 +553,7 @@ static void stb__CompressColorBlock(unsigned char *dest, unsigned char *block, i
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(mask == lastmask)
|
||||
break;
|
||||
}
|
||||
@ -607,7 +607,7 @@ static void stb__CompressAlphaBlock(unsigned char *dest,unsigned char *src, int
|
||||
bias = (dist < 8) ? (dist - 1) : (dist/2 + 2);
|
||||
bias -= mn * 7;
|
||||
bits = 0,mask=0;
|
||||
|
||||
|
||||
for (i=0;i<16;i++) {
|
||||
int a = src[i*stride]*7 + bias;
|
||||
int ind,t;
|
||||
@ -616,7 +616,7 @@ static void stb__CompressAlphaBlock(unsigned char *dest,unsigned char *src, int
|
||||
t = (a >= dist4) ? -1 : 0; ind = t & 4; a -= dist4 & t;
|
||||
t = (a >= dist2) ? -1 : 0; ind += t & 2; a -= dist2 & t;
|
||||
ind += (a >= dist);
|
||||
|
||||
|
||||
// turn linear scale into DXT index (0/1 are extremal pts)
|
||||
ind = -ind & 7;
|
||||
ind ^= (2 > ind);
|
||||
@ -693,38 +693,38 @@ This software is available under 2 licenses -- choose whichever you prefer.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE A - MIT License
|
||||
Copyright (c) 2017 Sean Barrett
|
||||
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
|
||||
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
|
||||
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
|
||||
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.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE B - Public Domain (www.unlicense.org)
|
||||
This is free and unencumbered software released into the public domain.
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
this software under copyright law.
|
||||
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 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
|
||||
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 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.
|
||||
------------------------------------------------------------------------------
|
||||
*/
|
||||
|
@ -58,7 +58,7 @@
|
||||
//
|
||||
// Use positive values to expand the space between characters,
|
||||
// and small negative values (no smaller than -1.5) to contract
|
||||
// the space between characters.
|
||||
// the space between characters.
|
||||
//
|
||||
// E.g. spacing = 1 adds one "pixel" of spacing between the
|
||||
// characters. spacing = -1 is reasonable but feels a bit too
|
||||
@ -268,38 +268,38 @@ This software is available under 2 licenses -- choose whichever you prefer.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE A - MIT License
|
||||
Copyright (c) 2017 Sean Barrett
|
||||
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
|
||||
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
|
||||
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
|
||||
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.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE B - Public Domain (www.unlicense.org)
|
||||
This is free and unencumbered software released into the public domain.
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
this software under copyright law.
|
||||
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 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
|
||||
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 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.
|
||||
------------------------------------------------------------------------------
|
||||
*/
|
||||
|
@ -17,13 +17,13 @@ publish, and distribute this file as you see fit.
|
||||
"template" of the tiles you'll create. You then edit those tiles, then
|
||||
load the created tile image file back into this library and use it at
|
||||
runtime to generate "maps".
|
||||
|
||||
|
||||
You cannot load arbitrary tile image files with this library; it is
|
||||
only designed to load image files made from the template it created.
|
||||
It stores a binary description of the tile sizes & constraints in a
|
||||
few pixels, and uses those to recover the rules, rather than trying
|
||||
to parse the tiles themselves.
|
||||
|
||||
|
||||
You *can* use this library to generate from arbitrary tile sets, but
|
||||
only by loading the tile set and specifying the constraints explicitly
|
||||
yourself.
|
||||
@ -142,7 +142,7 @@ int main(int argc, char **argv)
|
||||
|
||||
0.7 2019-03-04 - fix warnings
|
||||
0.6 2014-08-17 - fix broken map-maker
|
||||
0.5 2014-07-07 - initial release
|
||||
0.5 2014-07-07 - initial release
|
||||
|
||||
*/
|
||||
|
||||
@ -251,7 +251,7 @@ STBHW_EXTERN int stbhw_make_template(stbhw_config *c, unsigned char *data, int w
|
||||
// there are 4 "types" of corners and 6 types of edges.
|
||||
// you can configure the tileset to have different numbers
|
||||
// of colors for each type of color or edge.
|
||||
//
|
||||
//
|
||||
// corner types:
|
||||
//
|
||||
// 0---*---1---*---2---*---3
|
||||
@ -513,7 +513,7 @@ static int stbhw__process_template(stbhw__process *p)
|
||||
for (j=0; j < c->num_color[0]; ++j) {
|
||||
for (i=0; i < c->num_color[1]; ++i) {
|
||||
for (q=0; q < c->num_vary_x; ++q) {
|
||||
stbhw__process_v_row(p, 0,ypos,
|
||||
stbhw__process_v_row(p, 0,ypos,
|
||||
0,c->num_color[0]-1, 0,c->num_color[3]-1, 0,c->num_color[2]-1,
|
||||
i,i, j,j, k,k,
|
||||
c->num_vary_y);
|
||||
@ -689,7 +689,7 @@ static int stbhw__change_color(int old_color, int num_options, int *weights)
|
||||
|
||||
|
||||
// generate a map that is w * h pixels (3-bytes each)
|
||||
// returns 1 on success, 0 on error
|
||||
// returns 1 on success, 0 on error
|
||||
STBHW_EXTERN int stbhw_generate_image(stbhw_tileset *ts, int **weighting, unsigned char *output, int stride, int w, int h)
|
||||
{
|
||||
int sidelen = ts->short_side_len;
|
||||
|
146
stb_image.h
146
stb_image.h
@ -52,7 +52,7 @@ RECENT REVISION HISTORY:
|
||||
2.23 (2019-08-11) fix clang static analysis warning
|
||||
2.22 (2019-03-04) gif fixes, fix warnings
|
||||
2.21 (2019-02-25) fix typo in comment
|
||||
2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs
|
||||
2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs
|
||||
2.19 (2018-02-11) fix warning
|
||||
2.18 (2018-01-30) fix warnings
|
||||
2.17 (2018-01-29) bugfix, 1-bit BMP, 16-bitness query, fix warnings
|
||||
@ -108,7 +108,7 @@ RECENT REVISION HISTORY:
|
||||
Christian Floisand Kevin Schmidt JR Smith github:darealshinji
|
||||
Brad Weinberger Matvey Cherevko github:Michaelangel007
|
||||
Blazej Dariusz Roszkowski
|
||||
|
||||
|
||||
*/
|
||||
|
||||
#ifndef STBI_INCLUDE_STB_IMAGE_H
|
||||
@ -894,7 +894,7 @@ static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int
|
||||
static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp);
|
||||
#endif
|
||||
|
||||
static
|
||||
static
|
||||
#ifdef STBI_THREAD_LOCAL
|
||||
STBI_THREAD_LOCAL
|
||||
#endif
|
||||
@ -1159,8 +1159,8 @@ static void stbi__vertical_flip_slices(void *image, int w, int h, int z, int byt
|
||||
|
||||
stbi_uc *bytes = (stbi_uc *)image;
|
||||
for (slice = 0; slice < z; ++slice) {
|
||||
stbi__vertical_flip(bytes, w, h, bytes_per_pixel);
|
||||
bytes += slice_size;
|
||||
stbi__vertical_flip(bytes, w, h, bytes_per_pixel);
|
||||
bytes += slice_size;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@ -1246,7 +1246,7 @@ static FILE *stbi__fopen(char const *filename, char const *mode)
|
||||
wchar_t wFilename[1024];
|
||||
if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename)))
|
||||
return 0;
|
||||
|
||||
|
||||
if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode)))
|
||||
return 0;
|
||||
|
||||
@ -1348,15 +1348,15 @@ STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, void *u
|
||||
STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, int **delays, int *x, int *y, int *z, int *comp, int req_comp)
|
||||
{
|
||||
unsigned char *result;
|
||||
stbi__context s;
|
||||
stbi__start_mem(&s,buffer,len);
|
||||
|
||||
stbi__context s;
|
||||
stbi__start_mem(&s,buffer,len);
|
||||
|
||||
result = (unsigned char*) stbi__load_gif_main(&s, delays, x, y, z, comp, req_comp);
|
||||
if (stbi__vertically_flip_on_load) {
|
||||
stbi__vertical_flip_slices( result, *x, *y, *z, *comp );
|
||||
stbi__vertical_flip_slices( result, *x, *y, *z, *comp );
|
||||
}
|
||||
|
||||
return result;
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -6293,7 +6293,7 @@ typedef struct
|
||||
int w,h;
|
||||
stbi_uc *out; // output buffer (always 4 components)
|
||||
stbi_uc *background; // The current "background" as far as a gif is concerned
|
||||
stbi_uc *history;
|
||||
stbi_uc *history;
|
||||
int flags, bgindex, ratio, transparent, eflags;
|
||||
stbi_uc pal[256][4];
|
||||
stbi_uc lpal[256][4];
|
||||
@ -6381,7 +6381,7 @@ static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp)
|
||||
static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code)
|
||||
{
|
||||
stbi_uc *p, *c;
|
||||
int idx;
|
||||
int idx;
|
||||
|
||||
// recurse to decode the prefixes, since the linked-list is backwards,
|
||||
// and working backwards through an interleaved image would be nasty
|
||||
@ -6390,12 +6390,12 @@ static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code)
|
||||
|
||||
if (g->cur_y >= g->max_y) return;
|
||||
|
||||
idx = g->cur_x + g->cur_y;
|
||||
idx = g->cur_x + g->cur_y;
|
||||
p = &g->out[idx];
|
||||
g->history[idx / 4] = 1;
|
||||
g->history[idx / 4] = 1;
|
||||
|
||||
c = &g->color_table[g->codes[code].suffix * 4];
|
||||
if (c[3] > 128) { // don't render transparent pixels;
|
||||
if (c[3] > 128) { // don't render transparent pixels;
|
||||
p[0] = c[2];
|
||||
p[1] = c[1];
|
||||
p[2] = c[0];
|
||||
@ -6504,14 +6504,14 @@ static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g)
|
||||
// two back is the image from two frames ago, used for a very specific disposal format
|
||||
static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, int req_comp, stbi_uc *two_back)
|
||||
{
|
||||
int dispose;
|
||||
int first_frame;
|
||||
int pi;
|
||||
int pcount;
|
||||
int dispose;
|
||||
int first_frame;
|
||||
int pi;
|
||||
int pcount;
|
||||
STBI_NOTUSED(req_comp);
|
||||
|
||||
// on first frame, any non-written pixels get the background colour (non-transparent)
|
||||
first_frame = 0;
|
||||
first_frame = 0;
|
||||
if (g->out == 0) {
|
||||
if (!stbi__gif_header(s, g, comp,0)) return 0; // stbi__g_failure_reason set by stbi__gif_header
|
||||
if (!stbi__mad3sizes_valid(4, g->w, g->h, 0))
|
||||
@ -6523,17 +6523,17 @@ static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, i
|
||||
if (!g->out || !g->background || !g->history)
|
||||
return stbi__errpuc("outofmem", "Out of memory");
|
||||
|
||||
// image is treated as "transparent" at the start - ie, nothing overwrites the current background;
|
||||
// image is treated as "transparent" at the start - ie, nothing overwrites the current background;
|
||||
// background colour is only used for pixels that are not rendered first frame, after that "background"
|
||||
// color refers to the color that was there the previous frame.
|
||||
// color refers to the color that was there the previous frame.
|
||||
memset(g->out, 0x00, 4 * pcount);
|
||||
memset(g->background, 0x00, 4 * pcount); // state of the background (starts transparent)
|
||||
memset(g->history, 0x00, pcount); // pixels that were affected previous frame
|
||||
first_frame = 1;
|
||||
first_frame = 1;
|
||||
} else {
|
||||
// second frame - how do we dispoase of the previous one?
|
||||
dispose = (g->eflags & 0x1C) >> 2;
|
||||
pcount = g->w * g->h;
|
||||
dispose = (g->eflags & 0x1C) >> 2;
|
||||
pcount = g->w * g->h;
|
||||
|
||||
if ((dispose == 3) && (two_back == 0)) {
|
||||
dispose = 2; // if I don't have an image to revert back to, default to the old background
|
||||
@ -6542,32 +6542,32 @@ static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, i
|
||||
if (dispose == 3) { // use previous graphic
|
||||
for (pi = 0; pi < pcount; ++pi) {
|
||||
if (g->history[pi]) {
|
||||
memcpy( &g->out[pi * 4], &two_back[pi * 4], 4 );
|
||||
memcpy( &g->out[pi * 4], &two_back[pi * 4], 4 );
|
||||
}
|
||||
}
|
||||
} else if (dispose == 2) {
|
||||
// restore what was changed last frame to background before that frame;
|
||||
} else if (dispose == 2) {
|
||||
// restore what was changed last frame to background before that frame;
|
||||
for (pi = 0; pi < pcount; ++pi) {
|
||||
if (g->history[pi]) {
|
||||
memcpy( &g->out[pi * 4], &g->background[pi * 4], 4 );
|
||||
memcpy( &g->out[pi * 4], &g->background[pi * 4], 4 );
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// This is a non-disposal case eithe way, so just
|
||||
// This is a non-disposal case eithe way, so just
|
||||
// leave the pixels as is, and they will become the new background
|
||||
// 1: do not dispose
|
||||
// 0: not specified.
|
||||
}
|
||||
|
||||
// background is what out is after the undoing of the previou frame;
|
||||
memcpy( g->background, g->out, 4 * g->w * g->h );
|
||||
// background is what out is after the undoing of the previou frame;
|
||||
memcpy( g->background, g->out, 4 * g->w * g->h );
|
||||
}
|
||||
|
||||
// clear my history;
|
||||
// clear my history;
|
||||
memset( g->history, 0x00, g->w * g->h ); // pixels that were affected previous frame
|
||||
|
||||
for (;;) {
|
||||
int tag = stbi__get8(s);
|
||||
int tag = stbi__get8(s);
|
||||
switch (tag) {
|
||||
case 0x2C: /* Image Descriptor */
|
||||
{
|
||||
@ -6612,19 +6612,19 @@ static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, i
|
||||
} else if (g->flags & 0x80) {
|
||||
g->color_table = (stbi_uc *) g->pal;
|
||||
} else
|
||||
return stbi__errpuc("missing color table", "Corrupt GIF");
|
||||
|
||||
return stbi__errpuc("missing color table", "Corrupt GIF");
|
||||
|
||||
o = stbi__process_gif_raster(s, g);
|
||||
if (!o) return NULL;
|
||||
|
||||
// if this was the first frame,
|
||||
pcount = g->w * g->h;
|
||||
// if this was the first frame,
|
||||
pcount = g->w * g->h;
|
||||
if (first_frame && (g->bgindex > 0)) {
|
||||
// if first frame, any pixel not drawn to gets the background color
|
||||
for (pi = 0; pi < pcount; ++pi) {
|
||||
if (g->history[pi] == 0) {
|
||||
g->pal[g->bgindex][3] = 255; // just in case it was made transparent, undo that; It will be reset next frame if need be;
|
||||
memcpy( &g->out[pi * 4], &g->pal[g->bgindex], 4 );
|
||||
g->pal[g->bgindex][3] = 255; // just in case it was made transparent, undo that; It will be reset next frame if need be;
|
||||
memcpy( &g->out[pi * 4], &g->pal[g->bgindex], 4 );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -6635,7 +6635,7 @@ static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, i
|
||||
case 0x21: // Comment Extension.
|
||||
{
|
||||
int len;
|
||||
int ext = stbi__get8(s);
|
||||
int ext = stbi__get8(s);
|
||||
if (ext == 0xF9) { // Graphic Control Extension.
|
||||
len = stbi__get8(s);
|
||||
if (len == 4) {
|
||||
@ -6644,23 +6644,23 @@ static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, i
|
||||
|
||||
// unset old transparent
|
||||
if (g->transparent >= 0) {
|
||||
g->pal[g->transparent][3] = 255;
|
||||
}
|
||||
g->pal[g->transparent][3] = 255;
|
||||
}
|
||||
if (g->eflags & 0x01) {
|
||||
g->transparent = stbi__get8(s);
|
||||
if (g->transparent >= 0) {
|
||||
g->pal[g->transparent][3] = 0;
|
||||
g->pal[g->transparent][3] = 0;
|
||||
}
|
||||
} else {
|
||||
// don't need transparent
|
||||
stbi__skip(s, 1);
|
||||
g->transparent = -1;
|
||||
stbi__skip(s, 1);
|
||||
g->transparent = -1;
|
||||
}
|
||||
} else {
|
||||
stbi__skip(s, len);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
while ((len = stbi__get8(s)) != 0) {
|
||||
stbi__skip(s, len);
|
||||
}
|
||||
@ -6679,15 +6679,15 @@ static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, i
|
||||
static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, int *z, int *comp, int req_comp)
|
||||
{
|
||||
if (stbi__gif_test(s)) {
|
||||
int layers = 0;
|
||||
int layers = 0;
|
||||
stbi_uc *u = 0;
|
||||
stbi_uc *out = 0;
|
||||
stbi_uc *two_back = 0;
|
||||
stbi_uc *two_back = 0;
|
||||
stbi__gif g;
|
||||
int stride;
|
||||
int stride;
|
||||
memset(&g, 0, sizeof(g));
|
||||
if (delays) {
|
||||
*delays = 0;
|
||||
*delays = 0;
|
||||
}
|
||||
|
||||
do {
|
||||
@ -6697,9 +6697,9 @@ static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y,
|
||||
if (u) {
|
||||
*x = g.w;
|
||||
*y = g.h;
|
||||
++layers;
|
||||
stride = g.w * g.h * 4;
|
||||
|
||||
++layers;
|
||||
stride = g.w * g.h * 4;
|
||||
|
||||
if (out) {
|
||||
void *tmp = (stbi_uc*) STBI_REALLOC( out, layers * stride );
|
||||
if (NULL == tmp) {
|
||||
@ -6711,38 +6711,38 @@ static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y,
|
||||
else
|
||||
out = (stbi_uc*) tmp;
|
||||
if (delays) {
|
||||
*delays = (int*) STBI_REALLOC( *delays, sizeof(int) * layers );
|
||||
*delays = (int*) STBI_REALLOC( *delays, sizeof(int) * layers );
|
||||
}
|
||||
} else {
|
||||
out = (stbi_uc*)stbi__malloc( layers * stride );
|
||||
out = (stbi_uc*)stbi__malloc( layers * stride );
|
||||
if (delays) {
|
||||
*delays = (int*) stbi__malloc( layers * sizeof(int) );
|
||||
*delays = (int*) stbi__malloc( layers * sizeof(int) );
|
||||
}
|
||||
}
|
||||
memcpy( out + ((layers - 1) * stride), u, stride );
|
||||
memcpy( out + ((layers - 1) * stride), u, stride );
|
||||
if (layers >= 2) {
|
||||
two_back = out - 2 * stride;
|
||||
two_back = out - 2 * stride;
|
||||
}
|
||||
|
||||
if (delays) {
|
||||
(*delays)[layers - 1U] = g.delay;
|
||||
(*delays)[layers - 1U] = g.delay;
|
||||
}
|
||||
}
|
||||
} while (u != 0);
|
||||
} while (u != 0);
|
||||
|
||||
// free temp buffer;
|
||||
STBI_FREE(g.out);
|
||||
STBI_FREE(g.history);
|
||||
STBI_FREE(g.background);
|
||||
// free temp buffer;
|
||||
STBI_FREE(g.out);
|
||||
STBI_FREE(g.history);
|
||||
STBI_FREE(g.background);
|
||||
|
||||
// do the final conversion after loading everything;
|
||||
// do the final conversion after loading everything;
|
||||
if (req_comp && req_comp != 4)
|
||||
out = stbi__convert_format(out, 4, req_comp, layers * g.w, g.h);
|
||||
|
||||
*z = layers;
|
||||
*z = layers;
|
||||
return out;
|
||||
} else {
|
||||
return stbi__errpuc("not GIF", "Image was not as a gif type.");
|
||||
return stbi__errpuc("not GIF", "Image was not as a gif type.");
|
||||
}
|
||||
}
|
||||
|
||||
@ -6760,7 +6760,7 @@ static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req
|
||||
*y = g.h;
|
||||
|
||||
// moved conversion to after successful load so that the same
|
||||
// can be done for multiple frames.
|
||||
// can be done for multiple frames.
|
||||
if (req_comp && req_comp != 4)
|
||||
u = stbi__convert_format(u, 4, req_comp, g.w, g.h);
|
||||
} else if (g.out) {
|
||||
@ -6768,9 +6768,9 @@ static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req
|
||||
STBI_FREE(g.out);
|
||||
}
|
||||
|
||||
// free buffers needed for multiple frame loading;
|
||||
// free buffers needed for multiple frame loading;
|
||||
STBI_FREE(g.history);
|
||||
STBI_FREE(g.background);
|
||||
STBI_FREE(g.background);
|
||||
|
||||
return u;
|
||||
}
|
||||
@ -7433,7 +7433,7 @@ STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *c, void *user
|
||||
|
||||
/*
|
||||
revision history:
|
||||
2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs
|
||||
2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs
|
||||
2.19 (2018-02-11) fix warning
|
||||
2.18 (2018-01-30) fix warnings
|
||||
2.17 (2018-01-29) change sbti__shiftsigned to avoid clang -O2 bug
|
||||
|
@ -20,8 +20,8 @@
|
||||
output_pixels, out_w, out_h, 0,
|
||||
num_channels , alpha_chan , 0)
|
||||
stbir_resize_uint8_srgb_edgemode(
|
||||
input_pixels , in_w , in_h , 0,
|
||||
output_pixels, out_w, out_h, 0,
|
||||
input_pixels , in_w , in_h , 0,
|
||||
output_pixels, out_w, out_h, 0,
|
||||
num_channels , alpha_chan , 0, STBIR_EDGE_CLAMP)
|
||||
// WRAP/REFLECT/ZERO
|
||||
|
||||
@ -234,7 +234,7 @@ STBIRDEF int stbir_resize_float( const float *input_pixels , int input_w , i
|
||||
int num_channels);
|
||||
|
||||
|
||||
// The following functions interpret image data as gamma-corrected sRGB.
|
||||
// The following functions interpret image data as gamma-corrected sRGB.
|
||||
// Specify STBIR_ALPHA_CHANNEL_NONE if you have no alpha channel,
|
||||
// or otherwise provide the index of the alpha channel. Flags value
|
||||
// of 0 will probably do the right thing if you're not sure what
|
||||
@ -307,19 +307,19 @@ typedef enum
|
||||
STBIRDEF int stbir_resize_uint8_generic( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
|
||||
unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
|
||||
int num_channels, int alpha_channel, int flags,
|
||||
stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
|
||||
stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
|
||||
void *alloc_context);
|
||||
|
||||
STBIRDEF int stbir_resize_uint16_generic(const stbir_uint16 *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
|
||||
stbir_uint16 *output_pixels , int output_w, int output_h, int output_stride_in_bytes,
|
||||
int num_channels, int alpha_channel, int flags,
|
||||
stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
|
||||
stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
|
||||
void *alloc_context);
|
||||
|
||||
STBIRDEF int stbir_resize_float_generic( const float *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
|
||||
float *output_pixels , int output_w, int output_h, int output_stride_in_bytes,
|
||||
int num_channels, int alpha_channel, int flags,
|
||||
stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
|
||||
stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
|
||||
void *alloc_context);
|
||||
|
||||
|
||||
@ -351,7 +351,7 @@ STBIRDEF int stbir_resize( const void *input_pixels , int input_w , int
|
||||
void *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
|
||||
stbir_datatype datatype,
|
||||
int num_channels, int alpha_channel, int flags,
|
||||
stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
|
||||
stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
|
||||
stbir_filter filter_horizontal, stbir_filter filter_vertical,
|
||||
stbir_colorspace space, void *alloc_context);
|
||||
|
||||
@ -359,7 +359,7 @@ STBIRDEF int stbir_resize_subpixel(const void *input_pixels , int input_w , int
|
||||
void *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
|
||||
stbir_datatype datatype,
|
||||
int num_channels, int alpha_channel, int flags,
|
||||
stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
|
||||
stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
|
||||
stbir_filter filter_horizontal, stbir_filter filter_vertical,
|
||||
stbir_colorspace space, void *alloc_context,
|
||||
float x_scale, float y_scale,
|
||||
@ -369,7 +369,7 @@ STBIRDEF int stbir_resize_region( const void *input_pixels , int input_w , int
|
||||
void *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
|
||||
stbir_datatype datatype,
|
||||
int num_channels, int alpha_channel, int flags,
|
||||
stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
|
||||
stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
|
||||
stbir_filter filter_horizontal, stbir_filter filter_vertical,
|
||||
stbir_colorspace space, void *alloc_context,
|
||||
float s0, float t0, float s1, float t1);
|
||||
@ -671,14 +671,14 @@ static const stbir_uint32 fp32_to_srgb8_tab4[104] = {
|
||||
0x44c20798, 0x488e071e, 0x4c1c06b6, 0x4f76065d, 0x52a50610, 0x55ac05cc, 0x5892058f, 0x5b590559,
|
||||
0x5e0c0a23, 0x631c0980, 0x67db08f6, 0x6c55087f, 0x70940818, 0x74a007bd, 0x787d076c, 0x7c330723,
|
||||
};
|
||||
|
||||
|
||||
static stbir_uint8 stbir__linear_to_srgb_uchar(float in)
|
||||
{
|
||||
static const stbir__FP32 almostone = { 0x3f7fffff }; // 1-eps
|
||||
static const stbir__FP32 minval = { (127-13) << 23 };
|
||||
stbir_uint32 tab,bias,scale,t;
|
||||
stbir__FP32 f;
|
||||
|
||||
|
||||
// Clamp to [2^(-13), 1-eps]; these two values map to 0 and 1, respectively.
|
||||
// The tests are carefully written so that NaNs map to 0, same as in the reference
|
||||
// implementation.
|
||||
@ -686,13 +686,13 @@ static stbir_uint8 stbir__linear_to_srgb_uchar(float in)
|
||||
in = minval.f;
|
||||
if (in > almostone.f)
|
||||
in = almostone.f;
|
||||
|
||||
|
||||
// Do the table lookup and unpack bias, scale
|
||||
f.f = in;
|
||||
tab = fp32_to_srgb8_tab4[(f.u - minval.u) >> 20];
|
||||
bias = (tab >> 16) << 9;
|
||||
scale = tab & 0xffff;
|
||||
|
||||
|
||||
// Grab next-highest mantissa bits and perform linear interpolation
|
||||
t = (f.u >> 12) & 0xff;
|
||||
return (unsigned char) ((bias + scale*t) >> 16);
|
||||
@ -2446,7 +2446,7 @@ static int stbir__resize_arbitrary(
|
||||
return 0;
|
||||
|
||||
result = stbir__resize_allocated(&info, input_data, input_stride_in_bytes,
|
||||
output_data, output_stride_in_bytes,
|
||||
output_data, output_stride_in_bytes,
|
||||
alpha_channel, flags, type,
|
||||
edge_horizontal, edge_vertical,
|
||||
colorspace, extra_memory, memory_required);
|
||||
@ -2500,7 +2500,7 @@ STBIRDEF int stbir_resize_uint8_srgb_edgemode(const unsigned char *input_pixels
|
||||
STBIRDEF int stbir_resize_uint8_generic( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
|
||||
unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
|
||||
int num_channels, int alpha_channel, int flags,
|
||||
stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
|
||||
stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
|
||||
void *alloc_context)
|
||||
{
|
||||
return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes,
|
||||
@ -2512,7 +2512,7 @@ STBIRDEF int stbir_resize_uint8_generic( const unsigned char *input_pixels , int
|
||||
STBIRDEF int stbir_resize_uint16_generic(const stbir_uint16 *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
|
||||
stbir_uint16 *output_pixels , int output_w, int output_h, int output_stride_in_bytes,
|
||||
int num_channels, int alpha_channel, int flags,
|
||||
stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
|
||||
stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
|
||||
void *alloc_context)
|
||||
{
|
||||
return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes,
|
||||
@ -2525,7 +2525,7 @@ STBIRDEF int stbir_resize_uint16_generic(const stbir_uint16 *input_pixels , int
|
||||
STBIRDEF int stbir_resize_float_generic( const float *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
|
||||
float *output_pixels , int output_w, int output_h, int output_stride_in_bytes,
|
||||
int num_channels, int alpha_channel, int flags,
|
||||
stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
|
||||
stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space,
|
||||
void *alloc_context)
|
||||
{
|
||||
return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes,
|
||||
@ -2539,7 +2539,7 @@ STBIRDEF int stbir_resize( const void *input_pixels , int input_w , int
|
||||
void *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
|
||||
stbir_datatype datatype,
|
||||
int num_channels, int alpha_channel, int flags,
|
||||
stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
|
||||
stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
|
||||
stbir_filter filter_horizontal, stbir_filter filter_vertical,
|
||||
stbir_colorspace space, void *alloc_context)
|
||||
{
|
||||
@ -2554,7 +2554,7 @@ STBIRDEF int stbir_resize_subpixel(const void *input_pixels , int input_w , int
|
||||
void *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
|
||||
stbir_datatype datatype,
|
||||
int num_channels, int alpha_channel, int flags,
|
||||
stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
|
||||
stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
|
||||
stbir_filter filter_horizontal, stbir_filter filter_vertical,
|
||||
stbir_colorspace space, void *alloc_context,
|
||||
float x_scale, float y_scale,
|
||||
@ -2575,7 +2575,7 @@ STBIRDEF int stbir_resize_region( const void *input_pixels , int input_w , int
|
||||
void *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
|
||||
stbir_datatype datatype,
|
||||
int num_channels, int alpha_channel, int flags,
|
||||
stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
|
||||
stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,
|
||||
stbir_filter filter_horizontal, stbir_filter filter_vertical,
|
||||
stbir_colorspace space, void *alloc_context,
|
||||
float s0, float t0, float s1, float t1)
|
||||
@ -2594,38 +2594,38 @@ This software is available under 2 licenses -- choose whichever you prefer.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE A - MIT License
|
||||
Copyright (c) 2017 Sean Barrett
|
||||
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
|
||||
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
|
||||
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
|
||||
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.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE B - Public Domain (www.unlicense.org)
|
||||
This is free and unencumbered software released into the public domain.
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
this software under copyright law.
|
||||
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 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
|
||||
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 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.
|
||||
------------------------------------------------------------------------------
|
||||
*/
|
||||
|
@ -105,7 +105,7 @@ USAGE:
|
||||
|
||||
TGA supports RLE or non-RLE compressed data. To use non-RLE-compressed
|
||||
data, set the global variable 'stbi_write_tga_with_rle' to 0.
|
||||
|
||||
|
||||
JPEG does ignore alpha channels in input data; quality is between 1 and 100.
|
||||
Higher quality looks better but results in a bigger image.
|
||||
JPEG baseline (no JPEG progressive).
|
||||
@ -113,7 +113,7 @@ USAGE:
|
||||
CREDITS:
|
||||
|
||||
|
||||
Sean Barrett - PNG/BMP/TGA
|
||||
Sean Barrett - PNG/BMP/TGA
|
||||
Baldur Karlsson - HDR
|
||||
Jean-Sebastien Guay - TGA monochrome
|
||||
Tim Kelsey - misc enhancements
|
||||
@ -306,7 +306,7 @@ static FILE *stbiw__fopen(char const *filename, char const *mode)
|
||||
wchar_t wFilename[1024];
|
||||
if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename)))
|
||||
return 0;
|
||||
|
||||
|
||||
if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode)))
|
||||
return 0;
|
||||
|
||||
@ -1044,13 +1044,13 @@ static void stbiw__encode_png_line(unsigned char *pixels, int stride_bytes, int
|
||||
int type = mymap[filter_type];
|
||||
unsigned char *z = pixels + stride_bytes * (stbi__flip_vertically_on_write ? height-1-y : y);
|
||||
int signed_stride = stbi__flip_vertically_on_write ? -stride_bytes : stride_bytes;
|
||||
|
||||
|
||||
if (type==0) {
|
||||
memcpy(line_buffer, z, width*n);
|
||||
return;
|
||||
}
|
||||
|
||||
// first loop isn't optimized since it's just one pixel
|
||||
// first loop isn't optimized since it's just one pixel
|
||||
for (i = 0; i < n; ++i) {
|
||||
switch (type) {
|
||||
case 1: line_buffer[i] = z[i]; break;
|
||||
@ -1410,7 +1410,7 @@ static int stbi_write_jpg_core(stbi__write_context *s, int width, int height, in
|
||||
37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99};
|
||||
static const int UVQT[] = {17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,
|
||||
99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99};
|
||||
static const float aasf[] = { 1.0f * 2.828427125f, 1.387039845f * 2.828427125f, 1.306562965f * 2.828427125f, 1.175875602f * 2.828427125f,
|
||||
static const float aasf[] = { 1.0f * 2.828427125f, 1.387039845f * 2.828427125f, 1.306562965f * 2.828427125f, 1.175875602f * 2.828427125f,
|
||||
1.0f * 2.828427125f, 0.785694958f * 2.828427125f, 0.541196100f * 2.828427125f, 0.275899379f * 2.828427125f };
|
||||
|
||||
int row, col, i, k, subsample;
|
||||
@ -1578,9 +1578,9 @@ STBIWDEF int stbi_write_jpg(char const *filename, int x, int y, int comp, const
|
||||
1.13
|
||||
1.12
|
||||
1.11 (2019-08-11)
|
||||
|
||||
|
||||
1.10 (2019-02-07)
|
||||
support utf8 filenames in Windows; fix warnings and platform ifdefs
|
||||
support utf8 filenames in Windows; fix warnings and platform ifdefs
|
||||
1.09 (2018-02-11)
|
||||
fix typo in zlib quality API, improve STB_I_W_STATIC in C++
|
||||
1.08 (2018-01-29)
|
||||
@ -1629,38 +1629,38 @@ This software is available under 2 licenses -- choose whichever you prefer.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE A - MIT License
|
||||
Copyright (c) 2017 Sean Barrett
|
||||
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
|
||||
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
|
||||
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
|
||||
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.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE B - Public Domain (www.unlicense.org)
|
||||
This is free and unencumbered software released into the public domain.
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
this software under copyright law.
|
||||
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 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
|
||||
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 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.
|
||||
------------------------------------------------------------------------------
|
||||
*/
|
||||
|
@ -28,9 +28,9 @@
|
||||
// string.h strcpy, strncmp, memcpy
|
||||
//
|
||||
// Credits:
|
||||
//
|
||||
//
|
||||
// Written by Sean Barrett.
|
||||
//
|
||||
//
|
||||
// Fixes:
|
||||
// Michal Klos
|
||||
|
||||
@ -266,7 +266,7 @@ char *stb_include_strings(char **strs, int count, char *inject, char *path_to_in
|
||||
}
|
||||
result = stb_include_string(text, inject, path_to_includes, filename, error);
|
||||
free(text);
|
||||
return result;
|
||||
return result;
|
||||
}
|
||||
|
||||
char *stb_include_file(char *filename, char *inject, char *path_to_includes, char error[256])
|
||||
|
@ -157,38 +157,38 @@ This software is available under 2 licenses -- choose whichever you prefer.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE A - MIT License
|
||||
Copyright (c) 2017 Sean Barrett
|
||||
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
|
||||
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
|
||||
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
|
||||
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.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE B - Public Domain (www.unlicense.org)
|
||||
This is free and unencumbered software released into the public domain.
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
this software under copyright law.
|
||||
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 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
|
||||
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 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.
|
||||
------------------------------------------------------------------------------
|
||||
*/
|
||||
|
126
stb_perlin.h
126
stb_perlin.h
@ -47,9 +47,9 @@
|
||||
//
|
||||
// Fractal Noise:
|
||||
//
|
||||
// Three common fractal noise functions are included, which produce
|
||||
// a wide variety of nice effects depending on the parameters
|
||||
// provided. Note that each function will call stb_perlin_noise3
|
||||
// Three common fractal noise functions are included, which produce
|
||||
// a wide variety of nice effects depending on the parameters
|
||||
// provided. Note that each function will call stb_perlin_noise3
|
||||
// 'octaves' times, so this parameter will affect runtime.
|
||||
//
|
||||
// float stb_perlin_ridge_noise3(float x, float y, float z,
|
||||
@ -66,7 +66,7 @@
|
||||
// lacunarity = ~ 2.0 -- spacing between successive octaves (use exactly 2.0 for wrapping output)
|
||||
// gain = 0.5 -- relative weighting applied to each successive octave
|
||||
// offset = 1.0? -- used to invert the ridges, may need to be larger, not sure
|
||||
//
|
||||
//
|
||||
//
|
||||
// Contributors:
|
||||
// Jack Mott - additional noise functions
|
||||
@ -95,41 +95,41 @@ extern float stb_perlin_noise3_wrap_nonpow2(float x, float y, float z, int x_wra
|
||||
// Perlin's table can be found at http://mrl.nyu.edu/~perlin/noise/
|
||||
static unsigned char stb__perlin_randtab[512] =
|
||||
{
|
||||
23, 125, 161, 52, 103, 117, 70, 37, 247, 101, 203, 169, 124, 126, 44, 123,
|
||||
152, 238, 145, 45, 171, 114, 253, 10, 192, 136, 4, 157, 249, 30, 35, 72,
|
||||
175, 63, 77, 90, 181, 16, 96, 111, 133, 104, 75, 162, 93, 56, 66, 240,
|
||||
8, 50, 84, 229, 49, 210, 173, 239, 141, 1, 87, 18, 2, 198, 143, 57,
|
||||
225, 160, 58, 217, 168, 206, 245, 204, 199, 6, 73, 60, 20, 230, 211, 233,
|
||||
94, 200, 88, 9, 74, 155, 33, 15, 219, 130, 226, 202, 83, 236, 42, 172,
|
||||
165, 218, 55, 222, 46, 107, 98, 154, 109, 67, 196, 178, 127, 158, 13, 243,
|
||||
65, 79, 166, 248, 25, 224, 115, 80, 68, 51, 184, 128, 232, 208, 151, 122,
|
||||
26, 212, 105, 43, 179, 213, 235, 148, 146, 89, 14, 195, 28, 78, 112, 76,
|
||||
250, 47, 24, 251, 140, 108, 186, 190, 228, 170, 183, 139, 39, 188, 244, 246,
|
||||
132, 48, 119, 144, 180, 138, 134, 193, 82, 182, 120, 121, 86, 220, 209, 3,
|
||||
91, 241, 149, 85, 205, 150, 113, 216, 31, 100, 41, 164, 177, 214, 153, 231,
|
||||
38, 71, 185, 174, 97, 201, 29, 95, 7, 92, 54, 254, 191, 118, 34, 221,
|
||||
131, 11, 163, 99, 234, 81, 227, 147, 156, 176, 17, 142, 69, 12, 110, 62,
|
||||
27, 255, 0, 194, 59, 116, 242, 252, 19, 21, 187, 53, 207, 129, 64, 135,
|
||||
61, 40, 167, 237, 102, 223, 106, 159, 197, 189, 215, 137, 36, 32, 22, 5,
|
||||
23, 125, 161, 52, 103, 117, 70, 37, 247, 101, 203, 169, 124, 126, 44, 123,
|
||||
152, 238, 145, 45, 171, 114, 253, 10, 192, 136, 4, 157, 249, 30, 35, 72,
|
||||
175, 63, 77, 90, 181, 16, 96, 111, 133, 104, 75, 162, 93, 56, 66, 240,
|
||||
8, 50, 84, 229, 49, 210, 173, 239, 141, 1, 87, 18, 2, 198, 143, 57,
|
||||
225, 160, 58, 217, 168, 206, 245, 204, 199, 6, 73, 60, 20, 230, 211, 233,
|
||||
94, 200, 88, 9, 74, 155, 33, 15, 219, 130, 226, 202, 83, 236, 42, 172,
|
||||
165, 218, 55, 222, 46, 107, 98, 154, 109, 67, 196, 178, 127, 158, 13, 243,
|
||||
65, 79, 166, 248, 25, 224, 115, 80, 68, 51, 184, 128, 232, 208, 151, 122,
|
||||
26, 212, 105, 43, 179, 213, 235, 148, 146, 89, 14, 195, 28, 78, 112, 76,
|
||||
250, 47, 24, 251, 140, 108, 186, 190, 228, 170, 183, 139, 39, 188, 244, 246,
|
||||
132, 48, 119, 144, 180, 138, 134, 193, 82, 182, 120, 121, 86, 220, 209, 3,
|
||||
91, 241, 149, 85, 205, 150, 113, 216, 31, 100, 41, 164, 177, 214, 153, 231,
|
||||
38, 71, 185, 174, 97, 201, 29, 95, 7, 92, 54, 254, 191, 118, 34, 221,
|
||||
131, 11, 163, 99, 234, 81, 227, 147, 156, 176, 17, 142, 69, 12, 110, 62,
|
||||
27, 255, 0, 194, 59, 116, 242, 252, 19, 21, 187, 53, 207, 129, 64, 135,
|
||||
61, 40, 167, 237, 102, 223, 106, 159, 197, 189, 215, 137, 36, 32, 22, 5,
|
||||
|
||||
// and a second copy so we don't need an extra mask or static initializer
|
||||
23, 125, 161, 52, 103, 117, 70, 37, 247, 101, 203, 169, 124, 126, 44, 123,
|
||||
152, 238, 145, 45, 171, 114, 253, 10, 192, 136, 4, 157, 249, 30, 35, 72,
|
||||
175, 63, 77, 90, 181, 16, 96, 111, 133, 104, 75, 162, 93, 56, 66, 240,
|
||||
8, 50, 84, 229, 49, 210, 173, 239, 141, 1, 87, 18, 2, 198, 143, 57,
|
||||
225, 160, 58, 217, 168, 206, 245, 204, 199, 6, 73, 60, 20, 230, 211, 233,
|
||||
94, 200, 88, 9, 74, 155, 33, 15, 219, 130, 226, 202, 83, 236, 42, 172,
|
||||
165, 218, 55, 222, 46, 107, 98, 154, 109, 67, 196, 178, 127, 158, 13, 243,
|
||||
65, 79, 166, 248, 25, 224, 115, 80, 68, 51, 184, 128, 232, 208, 151, 122,
|
||||
26, 212, 105, 43, 179, 213, 235, 148, 146, 89, 14, 195, 28, 78, 112, 76,
|
||||
250, 47, 24, 251, 140, 108, 186, 190, 228, 170, 183, 139, 39, 188, 244, 246,
|
||||
132, 48, 119, 144, 180, 138, 134, 193, 82, 182, 120, 121, 86, 220, 209, 3,
|
||||
91, 241, 149, 85, 205, 150, 113, 216, 31, 100, 41, 164, 177, 214, 153, 231,
|
||||
38, 71, 185, 174, 97, 201, 29, 95, 7, 92, 54, 254, 191, 118, 34, 221,
|
||||
131, 11, 163, 99, 234, 81, 227, 147, 156, 176, 17, 142, 69, 12, 110, 62,
|
||||
27, 255, 0, 194, 59, 116, 242, 252, 19, 21, 187, 53, 207, 129, 64, 135,
|
||||
61, 40, 167, 237, 102, 223, 106, 159, 197, 189, 215, 137, 36, 32, 22, 5,
|
||||
};
|
||||
23, 125, 161, 52, 103, 117, 70, 37, 247, 101, 203, 169, 124, 126, 44, 123,
|
||||
152, 238, 145, 45, 171, 114, 253, 10, 192, 136, 4, 157, 249, 30, 35, 72,
|
||||
175, 63, 77, 90, 181, 16, 96, 111, 133, 104, 75, 162, 93, 56, 66, 240,
|
||||
8, 50, 84, 229, 49, 210, 173, 239, 141, 1, 87, 18, 2, 198, 143, 57,
|
||||
225, 160, 58, 217, 168, 206, 245, 204, 199, 6, 73, 60, 20, 230, 211, 233,
|
||||
94, 200, 88, 9, 74, 155, 33, 15, 219, 130, 226, 202, 83, 236, 42, 172,
|
||||
165, 218, 55, 222, 46, 107, 98, 154, 109, 67, 196, 178, 127, 158, 13, 243,
|
||||
65, 79, 166, 248, 25, 224, 115, 80, 68, 51, 184, 128, 232, 208, 151, 122,
|
||||
26, 212, 105, 43, 179, 213, 235, 148, 146, 89, 14, 195, 28, 78, 112, 76,
|
||||
250, 47, 24, 251, 140, 108, 186, 190, 228, 170, 183, 139, 39, 188, 244, 246,
|
||||
132, 48, 119, 144, 180, 138, 134, 193, 82, 182, 120, 121, 86, 220, 209, 3,
|
||||
91, 241, 149, 85, 205, 150, 113, 216, 31, 100, 41, 164, 177, 214, 153, 231,
|
||||
38, 71, 185, 174, 97, 201, 29, 95, 7, 92, 54, 254, 191, 118, 34, 221,
|
||||
131, 11, 163, 99, 234, 81, 227, 147, 156, 176, 17, 142, 69, 12, 110, 62,
|
||||
27, 255, 0, 194, 59, 116, 242, 252, 19, 21, 187, 53, 207, 129, 64, 135,
|
||||
61, 40, 167, 237, 102, 223, 106, 159, 197, 189, 215, 137, 36, 32, 22, 5,
|
||||
};
|
||||
|
||||
|
||||
// perlin's gradient has 12 cases so some get used 1/16th of the time
|
||||
@ -298,7 +298,7 @@ float stb_perlin_fbm_noise3(float x, float y, float z, float lacunarity, float g
|
||||
float frequency = 1.0f;
|
||||
float amplitude = 1.0f;
|
||||
float sum = 0.0f;
|
||||
|
||||
|
||||
for (i = 0; i < octaves; i++) {
|
||||
sum += stb_perlin_noise3_internal(x*frequency,y*frequency,z*frequency,0,0,0,(unsigned char)i)*amplitude;
|
||||
frequency *= lacunarity;
|
||||
@ -313,7 +313,7 @@ float stb_perlin_turbulence_noise3(float x, float y, float z, float lacunarity,
|
||||
float frequency = 1.0f;
|
||||
float amplitude = 1.0f;
|
||||
float sum = 0.0f;
|
||||
|
||||
|
||||
for (i = 0; i < octaves; i++) {
|
||||
float r = stb_perlin_noise3_internal(x*frequency,y*frequency,z*frequency,0,0,0,(unsigned char)i)*amplitude;
|
||||
sum += (float) fabs(r);
|
||||
@ -391,38 +391,38 @@ This software is available under 2 licenses -- choose whichever you prefer.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE A - MIT License
|
||||
Copyright (c) 2017 Sean Barrett
|
||||
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
|
||||
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
|
||||
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
|
||||
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.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE B - Public Domain (www.unlicense.org)
|
||||
This is free and unencumbered software released into the public domain.
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
this software under copyright law.
|
||||
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 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
|
||||
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 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.
|
||||
------------------------------------------------------------------------------
|
||||
*/
|
||||
|
@ -28,7 +28,7 @@
|
||||
// Minor features
|
||||
// Martins Mozeiko
|
||||
// github:IntellectualKitty
|
||||
//
|
||||
//
|
||||
// Bugfixes / warning fixes
|
||||
// Jeremy Jaussaud
|
||||
// Fabian Giesen
|
||||
@ -432,7 +432,7 @@ static stbrp__findresult stbrp__skyline_find_best_pos(stbrp_context *c, int widt
|
||||
}
|
||||
}
|
||||
tail = tail->next;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fr.prev_link = best;
|
||||
@ -591,38 +591,38 @@ This software is available under 2 licenses -- choose whichever you prefer.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE A - MIT License
|
||||
Copyright (c) 2017 Sean Barrett
|
||||
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
|
||||
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
|
||||
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
|
||||
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.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE B - Public Domain (www.unlicense.org)
|
||||
This is free and unencumbered software released into the public domain.
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
this software under copyright law.
|
||||
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 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
|
||||
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 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.
|
||||
------------------------------------------------------------------------------
|
||||
*/
|
||||
|
@ -13,7 +13,7 @@
|
||||
// texts, as its performance does not scale and it has limited undo).
|
||||
//
|
||||
// Non-trivial behaviors are modelled after Windows text controls.
|
||||
//
|
||||
//
|
||||
//
|
||||
// LICENSE
|
||||
//
|
||||
@ -213,20 +213,20 @@
|
||||
// call this with the mouse x,y on a mouse down; it will update the cursor
|
||||
// and reset the selection start/end to the cursor point. the x,y must
|
||||
// be relative to the text widget, with (0,0) being the top left.
|
||||
//
|
||||
//
|
||||
// drag:
|
||||
// call this with the mouse x,y on a mouse drag/up; it will update the
|
||||
// cursor and the selection end point
|
||||
//
|
||||
//
|
||||
// cut:
|
||||
// call this to delete the current selection; returns true if there was
|
||||
// one. you should FIRST copy the current selection to the system paste buffer.
|
||||
// (To copy, just copy the current selection out of the string yourself.)
|
||||
//
|
||||
//
|
||||
// paste:
|
||||
// call this to paste text at the current cursor point or over the current
|
||||
// selection if there is one.
|
||||
//
|
||||
//
|
||||
// key:
|
||||
// call this for keyboard inputs sent to the textfield. you can use it
|
||||
// for "key down" events or for "translated" key events. if you need to
|
||||
@ -237,7 +237,7 @@
|
||||
// clear. STB_TEXTEDIT_KEYTYPE defaults to int, but you can #define it to
|
||||
// anything other type you wante before including.
|
||||
//
|
||||
//
|
||||
//
|
||||
// When rendering, you can read the cursor position and selection state from
|
||||
// the STB_TexteditState.
|
||||
//
|
||||
@ -756,7 +756,7 @@ retry:
|
||||
state->insert_mode = !state->insert_mode;
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
||||
case STB_TEXTEDIT_K_UNDO:
|
||||
stb_text_undo(str, state);
|
||||
state->has_preferred_x = 0;
|
||||
@ -771,7 +771,7 @@ retry:
|
||||
// if currently there's a selection, move cursor to start of selection
|
||||
if (STB_TEXT_HAS_SELECTION(state))
|
||||
stb_textedit_move_to_first(state);
|
||||
else
|
||||
else
|
||||
if (state->cursor > 0)
|
||||
--state->cursor;
|
||||
state->has_preferred_x = 0;
|
||||
@ -820,7 +820,7 @@ retry:
|
||||
|
||||
#ifdef STB_TEXTEDIT_MOVEWORDRIGHT
|
||||
case STB_TEXTEDIT_K_WORDRIGHT:
|
||||
if (STB_TEXT_HAS_SELECTION(state))
|
||||
if (STB_TEXT_HAS_SELECTION(state))
|
||||
stb_textedit_move_to_last(str, state);
|
||||
else {
|
||||
state->cursor = STB_TEXTEDIT_MOVEWORDRIGHT(str, state->cursor);
|
||||
@ -898,7 +898,7 @@ retry:
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case STB_TEXTEDIT_K_UP:
|
||||
case STB_TEXTEDIT_K_UP | STB_TEXTEDIT_K_SHIFT: {
|
||||
StbFindState find;
|
||||
@ -975,7 +975,7 @@ retry:
|
||||
}
|
||||
state->has_preferred_x = 0;
|
||||
break;
|
||||
|
||||
|
||||
#ifdef STB_TEXTEDIT_K_TEXTSTART2
|
||||
case STB_TEXTEDIT_K_TEXTSTART2:
|
||||
#endif
|
||||
@ -992,7 +992,7 @@ retry:
|
||||
state->select_start = state->select_end = 0;
|
||||
state->has_preferred_x = 0;
|
||||
break;
|
||||
|
||||
|
||||
#ifdef STB_TEXTEDIT_K_TEXTSTART2
|
||||
case STB_TEXTEDIT_K_TEXTSTART2 | STB_TEXTEDIT_K_SHIFT:
|
||||
#endif
|
||||
@ -1367,38 +1367,38 @@ This software is available under 2 licenses -- choose whichever you prefer.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE A - MIT License
|
||||
Copyright (c) 2017 Sean Barrett
|
||||
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
|
||||
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
|
||||
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
|
||||
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.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE B - Public Domain (www.unlicense.org)
|
||||
This is free and unencumbered software released into the public domain.
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
this software under copyright law.
|
||||
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 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
|
||||
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 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.
|
||||
------------------------------------------------------------------------------
|
||||
*/
|
||||
|
@ -147,7 +147,7 @@
|
||||
// while I'm editing? Will I lose my work?
|
||||
//
|
||||
// A: The library allocates all editor memory when you create
|
||||
// the tilemap. It allocates a maximally-sized map and a
|
||||
// the tilemap. It allocates a maximally-sized map and a
|
||||
// fixed-size undo buffer (and the fixed-size copy buffer
|
||||
// is static), and never allocates memory while it's running.
|
||||
// So it can't fail due to running out of memory.
|
||||
@ -171,7 +171,7 @@
|
||||
// void STBTE_DRAW_RECT(int x0, int y0, int x1, int y1, unsigned int color);
|
||||
// // this must draw a filled rectangle (exclusive on right/bottom)
|
||||
// // color = (r<<16)|(g<<8)|(b)
|
||||
//
|
||||
//
|
||||
// void STBTE_DRAW_TILE(int x0, int y0,
|
||||
// unsigned short id, int highlight, float *data);
|
||||
// // this draws the tile image identified by 'id' in one of several
|
||||
@ -206,7 +206,7 @@
|
||||
// // Changing the type of a parameter does not cause the underlying
|
||||
// // value to be clamped to the type min/max except when the tile is
|
||||
// // explicitly selected.
|
||||
//
|
||||
//
|
||||
// #define STBTE_PROP_NAME(int n, short *tiledata, float *params) ...
|
||||
// // these return a string with the name for slot #n in the float
|
||||
// // property list for the tile.
|
||||
@ -297,7 +297,7 @@
|
||||
// - fix bug when pasting into protected layer
|
||||
// - better color scheme
|
||||
// - internal-use color picker
|
||||
// 0.10 initial release
|
||||
// 0.10 initial release
|
||||
//
|
||||
// TODO
|
||||
//
|
||||
@ -436,7 +436,7 @@ extern void stbte_action(stbte_tilemap *tm, enum stbte_action act);
|
||||
|
||||
////////////////
|
||||
//
|
||||
// save/load
|
||||
// save/load
|
||||
//
|
||||
// There is no editor file format. You have to save and load the data yourself
|
||||
// through the following functions. You can also use these functions to get the
|
||||
@ -485,7 +485,7 @@ extern void stbte_set_link(stbte_tilemap *tm, int x, int y, int destx, int desty
|
||||
|
||||
extern void stbte_set_background_tile(stbte_tilemap *tm, short id);
|
||||
// selects the tile to fill the bottom layer with and used to clear bottom tiles to;
|
||||
// should be same ID as
|
||||
// should be same ID as
|
||||
|
||||
extern void stbte_set_sidewidths(int left, int right);
|
||||
// call this once to set the left & right side widths. don't call
|
||||
@ -1011,7 +1011,7 @@ stbte_tilemap *stbte_create_map(int map_x, int map_y, int map_layers, int spacin
|
||||
if (map_x < 0 || map_y < 0 || map_layers < 0 ||
|
||||
map_x > STBTE_MAX_TILEMAP_X || map_y > STBTE_MAX_TILEMAP_Y || map_layers > STBTE_MAX_LAYERS)
|
||||
return NULL;
|
||||
|
||||
|
||||
if (!stbte__ui.initted)
|
||||
stbte__init_gui();
|
||||
|
||||
@ -1295,7 +1295,7 @@ static void stbte__prepare_tileinfo(stbte_tilemap *tm)
|
||||
|
||||
// the undo system works by storing "commands" into a buffer, and
|
||||
// then playing back those commands. undo and redo have to store
|
||||
// the commands in different order.
|
||||
// the commands in different order.
|
||||
//
|
||||
// the commands are:
|
||||
//
|
||||
@ -1549,7 +1549,7 @@ static void stbte__redo(stbte_tilemap *tm)
|
||||
|
||||
// we found a complete redo record
|
||||
pos = stbte__wrap(tm->undo_pos+1);
|
||||
|
||||
|
||||
// start an undo record
|
||||
stbte__write_undo(tm, STBTE__undo_record);
|
||||
|
||||
@ -1594,7 +1594,7 @@ static void stbte__redo(stbte_tilemap *tm)
|
||||
tm->undo_buffer[tm->undo_pos] = STBTE__undo_junk;
|
||||
}
|
||||
|
||||
// because detecting that undo is available
|
||||
// because detecting that undo is available
|
||||
static void stbte__recompute_undo_available(stbte_tilemap *tm)
|
||||
{
|
||||
tm->undo_available = (stbte__undo_find_end(tm) >= 0);
|
||||
@ -1692,7 +1692,7 @@ static void stbte__draw_bitmask_as_columns(int x, int y, short bitmask, int colo
|
||||
while (bitmask) {
|
||||
if (bitmask & (1<<i)) {
|
||||
if (start_i < 0)
|
||||
start_i = i;
|
||||
start_i = i;
|
||||
} else if (start_i >= 0) {
|
||||
stbte__draw_rect(x, y+start_i, x+1, y+i, color);
|
||||
start_i = -1;
|
||||
@ -1890,7 +1890,7 @@ static int stbte__microbutton_dragger(int x, int y, int size, int id, int *pos)
|
||||
break;
|
||||
case STBTE__mousemove:
|
||||
if (STBTE__IS_ACTIVE(id) && stbte__ui.active_event == STBTE__leftdown) {
|
||||
*pos = stbte__ui.mx - stbte__ui.sx;
|
||||
*pos = stbte__ui.mx - stbte__ui.sx;
|
||||
}
|
||||
break;
|
||||
case STBTE__leftup:
|
||||
@ -1907,7 +1907,7 @@ static int stbte__category_button(const char *label, int x, int y, int width, in
|
||||
{
|
||||
int x0=x,y0=y, x1=x+width,y1=y+STBTE__BUTTON_HEIGHT;
|
||||
int s = STBTE__BUTTON_INTERNAL_SPACING;
|
||||
|
||||
|
||||
if (stbte__ui.event == STBTE__paint)
|
||||
stbte__draw_textbox(x0,y0,x1,y1, (char*) label, s,s, STBTE__ccategory_button, STBTE__INDEX_FOR_ID(id,0,toggled));
|
||||
|
||||
@ -1962,7 +1962,7 @@ static int stbte__slider(int x0, int w, int y, int range, int *value, int id)
|
||||
#define stbte__sizeof(s) , sizeof(s)
|
||||
#else
|
||||
#define stbte__sprintf sprintf
|
||||
#define stbte__sizeof(s)
|
||||
#define stbte__sizeof(s)
|
||||
#endif
|
||||
|
||||
static int stbte__float_control(int x0, int y0, int w, float minv, float maxv, float scale, const char *fmt, float *value, int colormode, int id)
|
||||
@ -2192,7 +2192,7 @@ static void stbte__compute_panel_locations(stbte_tilemap *tm)
|
||||
limit = 6 + stbte__ui.panel[STBTE__panel_categories].delta_height;
|
||||
height[STBTE__panel_categories] = (tm->num_categories+1 > limit ? limit : tm->num_categories+1)*11 + 14;
|
||||
if (stbte__ui.panel[STBTE__panel_categories].side == stbte__ui.panel[STBTE__panel_categories].side)
|
||||
height[STBTE__panel_categories] -= 4;
|
||||
height[STBTE__panel_categories] -= 4;
|
||||
|
||||
// palette
|
||||
k = (stbte__region[p[STBTE__panel_tiles].side].width - 8) / tm->palette_spacing_x;
|
||||
@ -3413,7 +3413,7 @@ static void stbte__layers(stbte_tilemap *tm, int x0, int y0, int w, int h)
|
||||
int x1 = x0+w;
|
||||
int y1 = y0+h;
|
||||
int xoff = 20;
|
||||
|
||||
|
||||
if (tm->has_layer_names) {
|
||||
int side = stbte__ui.panel[STBTE__panel_layers].side;
|
||||
xoff = stbte__region[side].width - 42;
|
||||
@ -3524,7 +3524,7 @@ static void stbte__palette_of_tiles(stbte_tilemap *tm, int x0, int y0, int w, in
|
||||
num_total_rows = (tm->cur_palette_count + num_columns-1) / num_columns; // ceil()
|
||||
|
||||
column = 0;
|
||||
row = -tm->palette_scroll;
|
||||
row = -tm->palette_scroll;
|
||||
for (i=0; i < tm->num_tiles; ++i) {
|
||||
stbte__tileinfo *t = &tm->tiles[i];
|
||||
|
||||
@ -3676,8 +3676,8 @@ static void stbte__colorpicker(int x0, int y0, int w, int h)
|
||||
|
||||
y += 5;
|
||||
x += 8;
|
||||
|
||||
|
||||
|
||||
|
||||
{
|
||||
int color = stbte__color_table[stbte__cp_mode][stbte__cp_aspect][stbte__cp_index];
|
||||
int rgb[3];
|
||||
@ -4124,38 +4124,38 @@ This software is available under 2 licenses -- choose whichever you prefer.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE A - MIT License
|
||||
Copyright (c) 2017 Sean Barrett
|
||||
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
|
||||
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
|
||||
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
|
||||
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.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE B - Public Domain (www.unlicense.org)
|
||||
This is free and unencumbered software released into the public domain.
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
this software under copyright law.
|
||||
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 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
|
||||
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 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.
|
||||
------------------------------------------------------------------------------
|
||||
*/
|
||||
|
118
stb_truetype.h
118
stb_truetype.h
@ -47,11 +47,11 @@
|
||||
// Kenney Phillis Jr. github:oyvindjam
|
||||
// Brian Costabile github:vassvik
|
||||
// Ken Voskuil (kaesve) Ryan Griege
|
||||
//
|
||||
//
|
||||
// VERSION HISTORY
|
||||
//
|
||||
// 1.23 (2020-02-02) query SVG data for glyphs; query whole kerning table (but only kern not GPOS)
|
||||
// 1.22 (2019-08-11) minimize missing-glyph duplication; fix kerning if both 'GPOS' and 'kern' are defined
|
||||
// 1.22 (2019-08-11) minimize missing-glyph duplication; fix kerning if both 'GPOS' and 'kern' are defined
|
||||
// 1.21 (2019-02-25) fix warning
|
||||
// 1.20 (2019-02-07) PackFontRange skips missing codepoints; GetScaleFontVMetrics()
|
||||
// 1.19 (2018-02-11) GPOS kerning, STBTT_fmod
|
||||
@ -211,7 +211,7 @@
|
||||
//
|
||||
// Advancing for the next character:
|
||||
// Call GlyphHMetrics, and compute 'current_point += SF * advance'.
|
||||
//
|
||||
//
|
||||
//
|
||||
// ADVANCED USAGE
|
||||
//
|
||||
@ -336,7 +336,7 @@ int main(int argc, char **argv)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
//
|
||||
// Output:
|
||||
//
|
||||
@ -350,9 +350,9 @@ int main(int argc, char **argv)
|
||||
// :@@. M@M
|
||||
// @@@o@@@@
|
||||
// :M@@V:@@.
|
||||
//
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
//
|
||||
// Complete program: print "Hello World!" banner, with bugs
|
||||
//
|
||||
#if 0
|
||||
@ -653,7 +653,7 @@ STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, cons
|
||||
// Calling these functions in sequence is roughly equivalent to calling
|
||||
// stbtt_PackFontRanges(). If you more control over the packing of multiple
|
||||
// fonts, or if you want to pack custom data into a font texture, take a look
|
||||
// at the source to of stbtt_PackFontRanges() and create a custom version
|
||||
// at the source to of stbtt_PackFontRanges() and create a custom version
|
||||
// using these functions, e.g. call GatherRects multiple times,
|
||||
// building up a single array of rects, then call PackRects once,
|
||||
// then call RenderIntoRects repeatedly. This may result in a
|
||||
@ -978,7 +978,7 @@ STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, floa
|
||||
// and computing from that can allow drop-out prevention).
|
||||
//
|
||||
// The algorithm has not been optimized at all, so expect it to be slow
|
||||
// if computing lots of characters or very large sizes.
|
||||
// if computing lots of characters or very large sizes.
|
||||
|
||||
|
||||
|
||||
@ -1365,7 +1365,7 @@ static int stbtt__get_svg(stbtt_fontinfo *info)
|
||||
}
|
||||
return info->svg;
|
||||
}
|
||||
|
||||
|
||||
static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *data, int fontstart)
|
||||
{
|
||||
stbtt_uint32 cmap, t;
|
||||
@ -1753,7 +1753,7 @@ static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, s
|
||||
if (i != 0)
|
||||
num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy);
|
||||
|
||||
// now start the new one
|
||||
// now start the new one
|
||||
start_off = !(flags & 1);
|
||||
if (start_off) {
|
||||
// if we start off with an off-curve point, then when we need to find a point on the curve
|
||||
@ -1806,7 +1806,7 @@ static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, s
|
||||
int comp_num_verts = 0, i;
|
||||
stbtt_vertex *comp_verts = 0, *tmp = 0;
|
||||
float mtx[6] = {1,0,0,1,0,0}, m, n;
|
||||
|
||||
|
||||
flags = ttSHORT(comp); comp+=2;
|
||||
gidx = ttSHORT(comp); comp+=2;
|
||||
|
||||
@ -1836,7 +1836,7 @@ static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, s
|
||||
mtx[2] = ttSHORT(comp)/16384.0f; comp+=2;
|
||||
mtx[3] = ttSHORT(comp)/16384.0f; comp+=2;
|
||||
}
|
||||
|
||||
|
||||
// Find transformation scales.
|
||||
m = (float) STBTT_sqrt(mtx[0]*mtx[0] + mtx[1]*mtx[1]);
|
||||
n = (float) STBTT_sqrt(mtx[2]*mtx[2] + mtx[3]*mtx[3]);
|
||||
@ -2683,7 +2683,7 @@ STBTT_DEF stbtt_uint8 *stbtt_FindSVGDoc(const stbtt_fontinfo *info, int gl)
|
||||
int i;
|
||||
stbtt_uint8 *data = info->data;
|
||||
stbtt_uint8 *svg_doc_list = data + stbtt__get_svg((stbtt_fontinfo *) info);
|
||||
|
||||
|
||||
int numEntries = ttUSHORT(svg_doc_list);
|
||||
stbtt_uint8 *svg_docs = svg_doc_list + 2;
|
||||
|
||||
@ -2692,17 +2692,17 @@ STBTT_DEF stbtt_uint8 *stbtt_FindSVGDoc(const stbtt_fontinfo *info, int gl)
|
||||
if ((gl >= ttUSHORT(svg_doc)) && (gl <= ttUSHORT(svg_doc + 2)))
|
||||
return svg_doc;
|
||||
}
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
STBTT_DEF int stbtt_GetGlyphSVG(const stbtt_fontinfo *info, int gl, const char **svg)
|
||||
{
|
||||
stbtt_uint8 *data = info->data;
|
||||
stbtt_uint8 *svg_doc;
|
||||
|
||||
|
||||
if(info->svg == 0)
|
||||
return 0;
|
||||
|
||||
|
||||
if(svg_doc = stbtt_FindSVGDoc(info, gl)) {
|
||||
*svg = (char *)data + info->svg + ttULONG(svg_doc + 4);
|
||||
return ttULONG(svg_doc + 8);
|
||||
@ -2841,7 +2841,7 @@ static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, i
|
||||
float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0);
|
||||
STBTT_assert(z != NULL);
|
||||
if (!z) return z;
|
||||
|
||||
|
||||
// round dx down to avoid overshooting
|
||||
if (dxdy < 0)
|
||||
z->dx = -STBTT_ifloor(STBTT_FIX * -dxdy);
|
||||
@ -2919,7 +2919,7 @@ static void stbtt__fill_active_edges(unsigned char *scanline, int len, stbtt__ac
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
e = e->next;
|
||||
}
|
||||
}
|
||||
@ -3647,7 +3647,7 @@ STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info
|
||||
{
|
||||
int ix0,iy0,ix1,iy1;
|
||||
stbtt__bitmap gbm;
|
||||
stbtt_vertex *vertices;
|
||||
stbtt_vertex *vertices;
|
||||
int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices);
|
||||
|
||||
if (scale_x == 0) scale_x = scale_y;
|
||||
@ -3670,7 +3670,7 @@ STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info
|
||||
if (height) *height = gbm.h;
|
||||
if (xoff ) *xoff = ix0;
|
||||
if (yoff ) *yoff = iy0;
|
||||
|
||||
|
||||
if (gbm.w && gbm.h) {
|
||||
gbm.pixels = (unsigned char *) STBTT_malloc(gbm.w * gbm.h, info->userdata);
|
||||
if (gbm.pixels) {
|
||||
@ -3681,7 +3681,7 @@ STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info
|
||||
}
|
||||
STBTT_free(vertices, info->userdata);
|
||||
return gbm.pixels;
|
||||
}
|
||||
}
|
||||
|
||||
STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff)
|
||||
{
|
||||
@ -3693,7 +3693,7 @@ STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigne
|
||||
int ix0,iy0;
|
||||
stbtt_vertex *vertices;
|
||||
int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices);
|
||||
stbtt__bitmap gbm;
|
||||
stbtt__bitmap gbm;
|
||||
|
||||
stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,0,0);
|
||||
gbm.pixels = output;
|
||||
@ -3715,7 +3715,7 @@ STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *
|
||||
STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff)
|
||||
{
|
||||
return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y,shift_x,shift_y, stbtt_FindGlyphIndex(info,codepoint), width,height,xoff,yoff);
|
||||
}
|
||||
}
|
||||
|
||||
STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int codepoint)
|
||||
{
|
||||
@ -3730,7 +3730,7 @@ STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, uns
|
||||
STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff)
|
||||
{
|
||||
return stbtt_GetCodepointBitmapSubpixel(info, scale_x, scale_y, 0.0f,0.0f, codepoint, width,height,xoff,yoff);
|
||||
}
|
||||
}
|
||||
|
||||
STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint)
|
||||
{
|
||||
@ -3855,7 +3855,7 @@ static void stbrp_init_target(stbrp_context *con, int pw, int ph, stbrp_node *no
|
||||
con->y = 0;
|
||||
con->bottom_y = 0;
|
||||
STBTT__NOTUSED(nodes);
|
||||
STBTT__NOTUSED(num_nodes);
|
||||
STBTT__NOTUSED(num_nodes);
|
||||
}
|
||||
|
||||
static void stbrp_pack_rects(stbrp_context *con, stbrp_rect *rects, int num_rects)
|
||||
@ -4250,7 +4250,7 @@ STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsigned char
|
||||
n = 0;
|
||||
for (i=0; i < num_ranges; ++i)
|
||||
n += ranges[i].num_chars;
|
||||
|
||||
|
||||
rects = (stbrp_rect *) STBTT_malloc(sizeof(*rects) * n, spc->user_allocator_context);
|
||||
if (rects == NULL)
|
||||
return 0;
|
||||
@ -4261,7 +4261,7 @@ STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsigned char
|
||||
n = stbtt_PackFontRangesGatherRects(spc, &info, ranges, num_ranges, rects);
|
||||
|
||||
stbtt_PackFontRangesPackRects(spc, rects, n);
|
||||
|
||||
|
||||
return_value = stbtt_PackFontRangesRenderIntoRects(spc, &info, ranges, num_ranges, rects);
|
||||
|
||||
STBTT_free(rects, spc->user_allocator_context);
|
||||
@ -4422,7 +4422,7 @@ static int stbtt__compute_crossings_x(float x, float y, int nverts, stbtt_vertex
|
||||
int x1 = (int) verts[i ].x, y1 = (int) verts[i ].y;
|
||||
if (y > STBTT_min(y0,y1) && y < STBTT_max(y0,y1) && x > STBTT_min(x0,x1)) {
|
||||
float x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0;
|
||||
if (x_inter < x)
|
||||
if (x_inter < x)
|
||||
winding += (y0 < y1) ? 1 : -1;
|
||||
}
|
||||
}
|
||||
@ -4448,7 +4448,7 @@ static int stbtt__compute_crossings_x(float x, float y, int nverts, stbtt_vertex
|
||||
y1 = (int)verts[i ].y;
|
||||
if (y > STBTT_min(y0,y1) && y < STBTT_max(y0,y1) && x > STBTT_min(x0,x1)) {
|
||||
float x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0;
|
||||
if (x_inter < x)
|
||||
if (x_inter < x)
|
||||
winding += (y0 < y1) ? 1 : -1;
|
||||
}
|
||||
} else {
|
||||
@ -4460,7 +4460,7 @@ static int stbtt__compute_crossings_x(float x, float y, int nverts, stbtt_vertex
|
||||
if (hits[1][0] < 0)
|
||||
winding += (hits[1][1] < 0 ? -1 : 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return winding;
|
||||
@ -4536,7 +4536,7 @@ STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float sc
|
||||
|
||||
// invert for y-downwards bitmaps
|
||||
scale_y = -scale_y;
|
||||
|
||||
|
||||
{
|
||||
int x,y,i,j;
|
||||
float *precompute;
|
||||
@ -4685,7 +4685,7 @@ STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float sc
|
||||
STBTT_free(verts, info->userdata);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, float scale, int codepoint, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff)
|
||||
{
|
||||
@ -4703,7 +4703,7 @@ STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata)
|
||||
//
|
||||
|
||||
// check if a utf8 string contains a prefix which is the utf16 string; if so return length of matching utf8 string
|
||||
static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint8 *s1, stbtt_int32 len1, stbtt_uint8 *s2, stbtt_int32 len2)
|
||||
static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint8 *s1, stbtt_int32 len1, stbtt_uint8 *s2, stbtt_int32 len2)
|
||||
{
|
||||
stbtt_int32 i=0;
|
||||
|
||||
@ -4742,7 +4742,7 @@ static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint8 *s1, s
|
||||
return i;
|
||||
}
|
||||
|
||||
static int stbtt_CompareUTF8toUTF16_bigendian_internal(char *s1, int len1, char *s2, int len2)
|
||||
static int stbtt_CompareUTF8toUTF16_bigendian_internal(char *s1, int len1, char *s2, int len2)
|
||||
{
|
||||
return len1 == stbtt__CompareUTF8toUTF16_bigendian_prefix((stbtt_uint8*) s1, len1, (stbtt_uint8*) s2, len2);
|
||||
}
|
||||
@ -4871,7 +4871,7 @@ STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset,
|
||||
|
||||
STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index)
|
||||
{
|
||||
return stbtt_GetFontOffsetForIndex_internal((unsigned char *) data, index);
|
||||
return stbtt_GetFontOffsetForIndex_internal((unsigned char *) data, index);
|
||||
}
|
||||
|
||||
STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data)
|
||||
@ -4964,38 +4964,38 @@ This software is available under 2 licenses -- choose whichever you prefer.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE A - MIT License
|
||||
Copyright (c) 2017 Sean Barrett
|
||||
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
|
||||
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
|
||||
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
|
||||
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.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE B - Public Domain (www.unlicense.org)
|
||||
This is free and unencumbered software released into the public domain.
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
this software under copyright law.
|
||||
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 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
|
||||
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 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.
|
||||
------------------------------------------------------------------------------
|
||||
*/
|
||||
|
220
stb_vorbis.c
220
stb_vorbis.c
@ -41,7 +41,7 @@
|
||||
// 1.14 - 2018-02-11 - delete bogus dealloca usage
|
||||
// 1.13 - 2018-01-29 - fix truncation of last frame (hopefully)
|
||||
// 1.12 - 2017-11-21 - limit residue begin/end to blocksize/2 to avoid large temp allocs in bad/corrupt files
|
||||
// 1.11 - 2017-07-23 - fix MinGW compilation
|
||||
// 1.11 - 2017-07-23 - fix MinGW compilation
|
||||
// 1.10 - 2017-03-03 - more robust seeking; fix negative ilog(); clear error in open_memory
|
||||
// 1.09 - 2016-04-04 - back out 'truncation of last frame' fix from previous version
|
||||
// 1.08 - 2016-04-02 - warnings; setup memory leaks; truncation of last frame
|
||||
@ -844,7 +844,7 @@ struct stb_vorbis
|
||||
int current_loc_valid;
|
||||
|
||||
// per-blocksize precomputed data
|
||||
|
||||
|
||||
// twiddle factors
|
||||
float *A[2],*B[2],*C[2];
|
||||
float *window[2];
|
||||
@ -1166,7 +1166,7 @@ static void compute_sorted_huffman(Codebook *c, uint8 *lengths, uint32 *values)
|
||||
if (!c->sparse) {
|
||||
int k = 0;
|
||||
for (i=0; i < c->entries; ++i)
|
||||
if (include_in_sort(c, lengths[i]))
|
||||
if (include_in_sort(c, lengths[i]))
|
||||
c->sorted_codewords[k++] = bit_reverse(c->codewords[i]);
|
||||
assert(k == c->sorted_entries);
|
||||
} else {
|
||||
@ -1349,7 +1349,7 @@ static int getn(vorb *z, uint8 *data, int n)
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifndef STB_VORBIS_NO_STDIO
|
||||
#ifndef STB_VORBIS_NO_STDIO
|
||||
if (fread(data, n, 1, z->f) == 1)
|
||||
return 1;
|
||||
else {
|
||||
@ -1432,7 +1432,7 @@ static int start_page_no_capturepattern(vorb *f)
|
||||
// header flag
|
||||
f->page_flag = get8(f);
|
||||
// absolute granule position
|
||||
loc0 = get32(f);
|
||||
loc0 = get32(f);
|
||||
loc1 = get32(f);
|
||||
// @TODO: validate loc0,loc1 as valid positions?
|
||||
// stream serial number -- vorbis doesn't interleave, so discard
|
||||
@ -1924,69 +1924,69 @@ static int predict_point(int x, int x0, int x1, int y0, int y1)
|
||||
// the following table is block-copied from the specification
|
||||
static float inverse_db_table[256] =
|
||||
{
|
||||
1.0649863e-07f, 1.1341951e-07f, 1.2079015e-07f, 1.2863978e-07f,
|
||||
1.3699951e-07f, 1.4590251e-07f, 1.5538408e-07f, 1.6548181e-07f,
|
||||
1.7623575e-07f, 1.8768855e-07f, 1.9988561e-07f, 2.1287530e-07f,
|
||||
2.2670913e-07f, 2.4144197e-07f, 2.5713223e-07f, 2.7384213e-07f,
|
||||
2.9163793e-07f, 3.1059021e-07f, 3.3077411e-07f, 3.5226968e-07f,
|
||||
3.7516214e-07f, 3.9954229e-07f, 4.2550680e-07f, 4.5315863e-07f,
|
||||
4.8260743e-07f, 5.1396998e-07f, 5.4737065e-07f, 5.8294187e-07f,
|
||||
6.2082472e-07f, 6.6116941e-07f, 7.0413592e-07f, 7.4989464e-07f,
|
||||
7.9862701e-07f, 8.5052630e-07f, 9.0579828e-07f, 9.6466216e-07f,
|
||||
1.0273513e-06f, 1.0941144e-06f, 1.1652161e-06f, 1.2409384e-06f,
|
||||
1.3215816e-06f, 1.4074654e-06f, 1.4989305e-06f, 1.5963394e-06f,
|
||||
1.7000785e-06f, 1.8105592e-06f, 1.9282195e-06f, 2.0535261e-06f,
|
||||
2.1869758e-06f, 2.3290978e-06f, 2.4804557e-06f, 2.6416497e-06f,
|
||||
2.8133190e-06f, 2.9961443e-06f, 3.1908506e-06f, 3.3982101e-06f,
|
||||
3.6190449e-06f, 3.8542308e-06f, 4.1047004e-06f, 4.3714470e-06f,
|
||||
4.6555282e-06f, 4.9580707e-06f, 5.2802740e-06f, 5.6234160e-06f,
|
||||
5.9888572e-06f, 6.3780469e-06f, 6.7925283e-06f, 7.2339451e-06f,
|
||||
7.7040476e-06f, 8.2047000e-06f, 8.7378876e-06f, 9.3057248e-06f,
|
||||
9.9104632e-06f, 1.0554501e-05f, 1.1240392e-05f, 1.1970856e-05f,
|
||||
1.2748789e-05f, 1.3577278e-05f, 1.4459606e-05f, 1.5399272e-05f,
|
||||
1.6400004e-05f, 1.7465768e-05f, 1.8600792e-05f, 1.9809576e-05f,
|
||||
2.1096914e-05f, 2.2467911e-05f, 2.3928002e-05f, 2.5482978e-05f,
|
||||
2.7139006e-05f, 2.8902651e-05f, 3.0780908e-05f, 3.2781225e-05f,
|
||||
3.4911534e-05f, 3.7180282e-05f, 3.9596466e-05f, 4.2169667e-05f,
|
||||
4.4910090e-05f, 4.7828601e-05f, 5.0936773e-05f, 5.4246931e-05f,
|
||||
5.7772202e-05f, 6.1526565e-05f, 6.5524908e-05f, 6.9783085e-05f,
|
||||
7.4317983e-05f, 7.9147585e-05f, 8.4291040e-05f, 8.9768747e-05f,
|
||||
9.5602426e-05f, 0.00010181521f, 0.00010843174f, 0.00011547824f,
|
||||
0.00012298267f, 0.00013097477f, 0.00013948625f, 0.00014855085f,
|
||||
0.00015820453f, 0.00016848555f, 0.00017943469f, 0.00019109536f,
|
||||
0.00020351382f, 0.00021673929f, 0.00023082423f, 0.00024582449f,
|
||||
0.00026179955f, 0.00027881276f, 0.00029693158f, 0.00031622787f,
|
||||
0.00033677814f, 0.00035866388f, 0.00038197188f, 0.00040679456f,
|
||||
0.00043323036f, 0.00046138411f, 0.00049136745f, 0.00052329927f,
|
||||
0.00055730621f, 0.00059352311f, 0.00063209358f, 0.00067317058f,
|
||||
0.00071691700f, 0.00076350630f, 0.00081312324f, 0.00086596457f,
|
||||
0.00092223983f, 0.00098217216f, 0.0010459992f, 0.0011139742f,
|
||||
0.0011863665f, 0.0012634633f, 0.0013455702f, 0.0014330129f,
|
||||
0.0015261382f, 0.0016253153f, 0.0017309374f, 0.0018434235f,
|
||||
0.0019632195f, 0.0020908006f, 0.0022266726f, 0.0023713743f,
|
||||
0.0025254795f, 0.0026895994f, 0.0028643847f, 0.0030505286f,
|
||||
0.0032487691f, 0.0034598925f, 0.0036847358f, 0.0039241906f,
|
||||
0.0041792066f, 0.0044507950f, 0.0047400328f, 0.0050480668f,
|
||||
0.0053761186f, 0.0057254891f, 0.0060975636f, 0.0064938176f,
|
||||
0.0069158225f, 0.0073652516f, 0.0078438871f, 0.0083536271f,
|
||||
0.0088964928f, 0.009474637f, 0.010090352f, 0.010746080f,
|
||||
0.011444421f, 0.012188144f, 0.012980198f, 0.013823725f,
|
||||
0.014722068f, 0.015678791f, 0.016697687f, 0.017782797f,
|
||||
0.018938423f, 0.020169149f, 0.021479854f, 0.022875735f,
|
||||
0.024362330f, 0.025945531f, 0.027631618f, 0.029427276f,
|
||||
0.031339626f, 0.033376252f, 0.035545228f, 0.037855157f,
|
||||
0.040315199f, 0.042935108f, 0.045725273f, 0.048696758f,
|
||||
0.051861348f, 0.055231591f, 0.058820850f, 0.062643361f,
|
||||
0.066714279f, 0.071049749f, 0.075666962f, 0.080584227f,
|
||||
0.085821044f, 0.091398179f, 0.097337747f, 0.10366330f,
|
||||
0.11039993f, 0.11757434f, 0.12521498f, 0.13335215f,
|
||||
0.14201813f, 0.15124727f, 0.16107617f, 0.17154380f,
|
||||
0.18269168f, 0.19456402f, 0.20720788f, 0.22067342f,
|
||||
0.23501402f, 0.25028656f, 0.26655159f, 0.28387361f,
|
||||
0.30232132f, 0.32196786f, 0.34289114f, 0.36517414f,
|
||||
0.38890521f, 0.41417847f, 0.44109412f, 0.46975890f,
|
||||
0.50028648f, 0.53279791f, 0.56742212f, 0.60429640f,
|
||||
0.64356699f, 0.68538959f, 0.72993007f, 0.77736504f,
|
||||
1.0649863e-07f, 1.1341951e-07f, 1.2079015e-07f, 1.2863978e-07f,
|
||||
1.3699951e-07f, 1.4590251e-07f, 1.5538408e-07f, 1.6548181e-07f,
|
||||
1.7623575e-07f, 1.8768855e-07f, 1.9988561e-07f, 2.1287530e-07f,
|
||||
2.2670913e-07f, 2.4144197e-07f, 2.5713223e-07f, 2.7384213e-07f,
|
||||
2.9163793e-07f, 3.1059021e-07f, 3.3077411e-07f, 3.5226968e-07f,
|
||||
3.7516214e-07f, 3.9954229e-07f, 4.2550680e-07f, 4.5315863e-07f,
|
||||
4.8260743e-07f, 5.1396998e-07f, 5.4737065e-07f, 5.8294187e-07f,
|
||||
6.2082472e-07f, 6.6116941e-07f, 7.0413592e-07f, 7.4989464e-07f,
|
||||
7.9862701e-07f, 8.5052630e-07f, 9.0579828e-07f, 9.6466216e-07f,
|
||||
1.0273513e-06f, 1.0941144e-06f, 1.1652161e-06f, 1.2409384e-06f,
|
||||
1.3215816e-06f, 1.4074654e-06f, 1.4989305e-06f, 1.5963394e-06f,
|
||||
1.7000785e-06f, 1.8105592e-06f, 1.9282195e-06f, 2.0535261e-06f,
|
||||
2.1869758e-06f, 2.3290978e-06f, 2.4804557e-06f, 2.6416497e-06f,
|
||||
2.8133190e-06f, 2.9961443e-06f, 3.1908506e-06f, 3.3982101e-06f,
|
||||
3.6190449e-06f, 3.8542308e-06f, 4.1047004e-06f, 4.3714470e-06f,
|
||||
4.6555282e-06f, 4.9580707e-06f, 5.2802740e-06f, 5.6234160e-06f,
|
||||
5.9888572e-06f, 6.3780469e-06f, 6.7925283e-06f, 7.2339451e-06f,
|
||||
7.7040476e-06f, 8.2047000e-06f, 8.7378876e-06f, 9.3057248e-06f,
|
||||
9.9104632e-06f, 1.0554501e-05f, 1.1240392e-05f, 1.1970856e-05f,
|
||||
1.2748789e-05f, 1.3577278e-05f, 1.4459606e-05f, 1.5399272e-05f,
|
||||
1.6400004e-05f, 1.7465768e-05f, 1.8600792e-05f, 1.9809576e-05f,
|
||||
2.1096914e-05f, 2.2467911e-05f, 2.3928002e-05f, 2.5482978e-05f,
|
||||
2.7139006e-05f, 2.8902651e-05f, 3.0780908e-05f, 3.2781225e-05f,
|
||||
3.4911534e-05f, 3.7180282e-05f, 3.9596466e-05f, 4.2169667e-05f,
|
||||
4.4910090e-05f, 4.7828601e-05f, 5.0936773e-05f, 5.4246931e-05f,
|
||||
5.7772202e-05f, 6.1526565e-05f, 6.5524908e-05f, 6.9783085e-05f,
|
||||
7.4317983e-05f, 7.9147585e-05f, 8.4291040e-05f, 8.9768747e-05f,
|
||||
9.5602426e-05f, 0.00010181521f, 0.00010843174f, 0.00011547824f,
|
||||
0.00012298267f, 0.00013097477f, 0.00013948625f, 0.00014855085f,
|
||||
0.00015820453f, 0.00016848555f, 0.00017943469f, 0.00019109536f,
|
||||
0.00020351382f, 0.00021673929f, 0.00023082423f, 0.00024582449f,
|
||||
0.00026179955f, 0.00027881276f, 0.00029693158f, 0.00031622787f,
|
||||
0.00033677814f, 0.00035866388f, 0.00038197188f, 0.00040679456f,
|
||||
0.00043323036f, 0.00046138411f, 0.00049136745f, 0.00052329927f,
|
||||
0.00055730621f, 0.00059352311f, 0.00063209358f, 0.00067317058f,
|
||||
0.00071691700f, 0.00076350630f, 0.00081312324f, 0.00086596457f,
|
||||
0.00092223983f, 0.00098217216f, 0.0010459992f, 0.0011139742f,
|
||||
0.0011863665f, 0.0012634633f, 0.0013455702f, 0.0014330129f,
|
||||
0.0015261382f, 0.0016253153f, 0.0017309374f, 0.0018434235f,
|
||||
0.0019632195f, 0.0020908006f, 0.0022266726f, 0.0023713743f,
|
||||
0.0025254795f, 0.0026895994f, 0.0028643847f, 0.0030505286f,
|
||||
0.0032487691f, 0.0034598925f, 0.0036847358f, 0.0039241906f,
|
||||
0.0041792066f, 0.0044507950f, 0.0047400328f, 0.0050480668f,
|
||||
0.0053761186f, 0.0057254891f, 0.0060975636f, 0.0064938176f,
|
||||
0.0069158225f, 0.0073652516f, 0.0078438871f, 0.0083536271f,
|
||||
0.0088964928f, 0.009474637f, 0.010090352f, 0.010746080f,
|
||||
0.011444421f, 0.012188144f, 0.012980198f, 0.013823725f,
|
||||
0.014722068f, 0.015678791f, 0.016697687f, 0.017782797f,
|
||||
0.018938423f, 0.020169149f, 0.021479854f, 0.022875735f,
|
||||
0.024362330f, 0.025945531f, 0.027631618f, 0.029427276f,
|
||||
0.031339626f, 0.033376252f, 0.035545228f, 0.037855157f,
|
||||
0.040315199f, 0.042935108f, 0.045725273f, 0.048696758f,
|
||||
0.051861348f, 0.055231591f, 0.058820850f, 0.062643361f,
|
||||
0.066714279f, 0.071049749f, 0.075666962f, 0.080584227f,
|
||||
0.085821044f, 0.091398179f, 0.097337747f, 0.10366330f,
|
||||
0.11039993f, 0.11757434f, 0.12521498f, 0.13335215f,
|
||||
0.14201813f, 0.15124727f, 0.16107617f, 0.17154380f,
|
||||
0.18269168f, 0.19456402f, 0.20720788f, 0.22067342f,
|
||||
0.23501402f, 0.25028656f, 0.26655159f, 0.28387361f,
|
||||
0.30232132f, 0.32196786f, 0.34289114f, 0.36517414f,
|
||||
0.38890521f, 0.41417847f, 0.44109412f, 0.46975890f,
|
||||
0.50028648f, 0.53279791f, 0.56742212f, 0.60429640f,
|
||||
0.64356699f, 0.68538959f, 0.72993007f, 0.77736504f,
|
||||
0.82788260f, 0.88168307f, 0.9389798f, 1.0f
|
||||
};
|
||||
|
||||
@ -2347,11 +2347,11 @@ void inverse_mdct_slow(float *buffer, int n, vorb *f, int blocktype)
|
||||
#if LIBVORBIS_MDCT
|
||||
// directly call the vorbis MDCT using an interface documented
|
||||
// by Jeff Roberts... useful for performance comparison
|
||||
typedef struct
|
||||
typedef struct
|
||||
{
|
||||
int n;
|
||||
int log2n;
|
||||
|
||||
|
||||
float *trig;
|
||||
int *bitrev;
|
||||
|
||||
@ -2370,7 +2370,7 @@ void inverse_mdct(float *buffer, int n, vorb *f, int blocktype)
|
||||
if (M1.n == n) M = &M1;
|
||||
else if (M2.n == n) M = &M2;
|
||||
else if (M1.n == 0) { mdct_init(&M1, n); M = &M1; }
|
||||
else {
|
||||
else {
|
||||
if (M2.n) __asm int 3;
|
||||
mdct_init(&M2, n);
|
||||
M = &M2;
|
||||
@ -2783,7 +2783,7 @@ static void inverse_mdct(float *buffer, int n, vorb *f, int blocktype)
|
||||
d1[0] = u[k4+1];
|
||||
d0[1] = u[k4+2];
|
||||
d0[0] = u[k4+3];
|
||||
|
||||
|
||||
d0 -= 4;
|
||||
d1 -= 4;
|
||||
bitrev += 2;
|
||||
@ -2864,7 +2864,7 @@ static void inverse_mdct(float *buffer, int n, vorb *f, int blocktype)
|
||||
float p0,p1,p2,p3;
|
||||
|
||||
p3 = e[6]*B[7] - e[7]*B[6];
|
||||
p2 = -e[6]*B[6] - e[7]*B[7];
|
||||
p2 = -e[6]*B[6] - e[7]*B[7];
|
||||
|
||||
d0[0] = p3;
|
||||
d1[3] = - p3;
|
||||
@ -2872,7 +2872,7 @@ static void inverse_mdct(float *buffer, int n, vorb *f, int blocktype)
|
||||
d3[3] = p2;
|
||||
|
||||
p1 = e[4]*B[5] - e[5]*B[4];
|
||||
p0 = -e[4]*B[4] - e[5]*B[5];
|
||||
p0 = -e[4]*B[4] - e[5]*B[5];
|
||||
|
||||
d0[1] = p1;
|
||||
d1[2] = - p1;
|
||||
@ -2880,7 +2880,7 @@ static void inverse_mdct(float *buffer, int n, vorb *f, int blocktype)
|
||||
d3[2] = p0;
|
||||
|
||||
p3 = e[2]*B[3] - e[3]*B[2];
|
||||
p2 = -e[2]*B[2] - e[3]*B[3];
|
||||
p2 = -e[2]*B[2] - e[3]*B[3];
|
||||
|
||||
d0[2] = p3;
|
||||
d1[1] = - p3;
|
||||
@ -2888,7 +2888,7 @@ static void inverse_mdct(float *buffer, int n, vorb *f, int blocktype)
|
||||
d3[1] = p2;
|
||||
|
||||
p1 = e[0]*B[1] - e[1]*B[0];
|
||||
p0 = -e[0]*B[0] - e[1]*B[1];
|
||||
p0 = -e[0]*B[0] - e[1]*B[1];
|
||||
|
||||
d0[3] = p1;
|
||||
d1[0] = - p1;
|
||||
@ -3520,7 +3520,7 @@ static int is_whole_packet_present(stb_vorbis *f)
|
||||
first = FALSE;
|
||||
}
|
||||
for (; s == -1;) {
|
||||
uint8 *q;
|
||||
uint8 *q;
|
||||
int n;
|
||||
|
||||
// check that we have the page header ready
|
||||
@ -3618,7 +3618,7 @@ static int start_decoder(vorb *f)
|
||||
|
||||
// second packet!
|
||||
if (!start_page(f)) return FALSE;
|
||||
|
||||
|
||||
if (!start_packet(f)) return FALSE;
|
||||
|
||||
if (!next_segment(f)) return FALSE;
|
||||
@ -3636,7 +3636,7 @@ static int start_decoder(vorb *f)
|
||||
//user comments
|
||||
f->comment_list_length = get32_packet(f);
|
||||
f->comment_list = (char**)setup_malloc(f, sizeof(char*) * (f->comment_list_length));
|
||||
|
||||
|
||||
for(i=0; i < f->comment_list_length; ++i) {
|
||||
len = get32_packet(f);
|
||||
f->comment_list[i] = (char*)setup_malloc(f, sizeof(char) * (len+1));
|
||||
@ -3651,7 +3651,7 @@ static int start_decoder(vorb *f)
|
||||
x = get8_packet(f);
|
||||
if (!(x & 1)) return error(f, VORBIS_invalid_setup);
|
||||
|
||||
|
||||
|
||||
skip(f, f->bytes_in_seg);
|
||||
f->bytes_in_seg = 0;
|
||||
|
||||
@ -3925,7 +3925,7 @@ static int start_decoder(vorb *f)
|
||||
} else {
|
||||
stbv__floor_ordering p[31*8+2];
|
||||
Floor1 *g = &f->floor_config[i].floor1;
|
||||
int max_class = -1;
|
||||
int max_class = -1;
|
||||
g->partitions = get_bits(f, 5);
|
||||
for (j=0; j < g->partitions; ++j) {
|
||||
g->partition_class_list[j] = get_bits(f, 4);
|
||||
@ -4038,7 +4038,7 @@ static int start_decoder(vorb *f)
|
||||
if (f->mapping == NULL) return error(f, VORBIS_outofmem);
|
||||
memset(f->mapping, 0, f->mapping_count * sizeof(*f->mapping));
|
||||
for (i=0; i < f->mapping_count; ++i) {
|
||||
Mapping *m = f->mapping + i;
|
||||
Mapping *m = f->mapping + i;
|
||||
int mapping_type = get_bits(f,16);
|
||||
if (mapping_type != 0) return error(f, VORBIS_invalid_setup);
|
||||
m->chan = (MappingChannel *) setup_malloc(f, f->channels * sizeof(*m->chan));
|
||||
@ -5060,7 +5060,7 @@ stb_vorbis * stb_vorbis_open_filename(const char *filename, int *error, const st
|
||||
#else
|
||||
f = fopen(filename, "rb");
|
||||
#endif
|
||||
if (f)
|
||||
if (f)
|
||||
return stb_vorbis_open_file(f, TRUE, error, alloc);
|
||||
if (error) *error = VORBIS_file_open_failure;
|
||||
return NULL;
|
||||
@ -5123,7 +5123,7 @@ static int8 channel_position[7][6] =
|
||||
#define MAGIC(SHIFT) (1.5f * (1 << (23-SHIFT)) + 0.5f/(1 << SHIFT))
|
||||
#define ADDEND(SHIFT) (((150-SHIFT) << 23) + (1 << 22))
|
||||
#define FAST_SCALED_FLOAT_TO_INT(temp,x,s) (temp.f = (x) + MAGIC(s), temp.i - ADDEND(s))
|
||||
#define check_endianness()
|
||||
#define check_endianness()
|
||||
#else
|
||||
#define FAST_SCALED_FLOAT_TO_INT(temp,x,s) ((int) ((x) * (1 << (s))))
|
||||
#define check_endianness()
|
||||
@ -5455,13 +5455,13 @@ int stb_vorbis_get_samples_float(stb_vorbis *f, int channels, float **buffer, in
|
||||
1.14 - 2018-02-11 - delete bogus dealloca usage
|
||||
1.13 - 2018-01-29 - fix truncation of last frame (hopefully)
|
||||
1.12 - 2017-11-21 - limit residue begin/end to blocksize/2 to avoid large temp allocs in bad/corrupt files
|
||||
1.11 - 2017-07-23 - fix MinGW compilation
|
||||
1.11 - 2017-07-23 - fix MinGW compilation
|
||||
1.10 - 2017-03-03 - more robust seeking; fix negative ilog(); clear error in open_memory
|
||||
1.09 - 2016-04-04 - back out 'avoid discarding last frame' fix from previous version
|
||||
1.08 - 2016-04-02 - fixed multiple warnings; fix setup memory leaks;
|
||||
avoid discarding last frame of audio data
|
||||
1.07 - 2015-01-16 - fixed some warnings, fix mingw, const-correct API
|
||||
some more crash fixes when out of memory or with corrupt files
|
||||
some more crash fixes when out of memory or with corrupt files
|
||||
1.06 - 2015-08-31 - full, correct support for seeking API (Dougall Johnson)
|
||||
some crash fixes when out of memory or with corrupt files
|
||||
1.05 - 2015-04-19 - don't define __forceinline if it's redundant
|
||||
@ -5517,38 +5517,38 @@ This software is available under 2 licenses -- choose whichever you prefer.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE A - MIT License
|
||||
Copyright (c) 2017 Sean Barrett
|
||||
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
|
||||
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
|
||||
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
|
||||
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.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE B - Public Domain (www.unlicense.org)
|
||||
This is free and unencumbered software released into the public domain.
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
this software under copyright law.
|
||||
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 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
|
||||
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 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.
|
||||
------------------------------------------------------------------------------
|
||||
*/
|
||||
|
@ -817,7 +817,7 @@ struct stbvox_input_description
|
||||
// Indexed by 3D coordinate. Contains the color for all faces of the block.
|
||||
// The core color value is 0..63.
|
||||
// Encode with STBVOX_MAKE_COLOR(color_number, tex1_enable, tex2_enable)
|
||||
|
||||
|
||||
unsigned char *block_color;
|
||||
// Array indexed by blocktype containing the color value to apply to the faces.
|
||||
// The core color value is 0..63.
|
||||
@ -936,7 +936,7 @@ struct stbvox_input_description
|
||||
// Indexed by 3D coordinates, specifies which faces should use the
|
||||
// color defined in color2. No rotation value is applied.
|
||||
// Encode with STBVOX_MAKE_FACE_MASK(e,n,w,s,u,d)
|
||||
|
||||
|
||||
unsigned char *color3;
|
||||
// Indexed by 3D coordinates, specifies an alternative color to apply
|
||||
// to some of the faces of the block.
|
||||
@ -944,9 +944,9 @@ struct stbvox_input_description
|
||||
|
||||
unsigned char *color3_facemask;
|
||||
// Indexed by 3D coordinates, specifies which faces should use the
|
||||
// color defined in color3. No rotation value is applied.
|
||||
// color defined in color3. No rotation value is applied.
|
||||
// Encode with STBVOX_MAKE_FACE_MASK(e,n,w,s,u,d)
|
||||
|
||||
|
||||
unsigned char *texlerp_simple;
|
||||
// Indexed by 3D coordinates, this is the smallest texlerp encoding
|
||||
// that can do useful work. It consits of three values: baselerp,
|
||||
@ -962,7 +962,7 @@ struct stbvox_input_description
|
||||
// Encode with STBVOX_MAKE_TEXLERP_SIMPLE(baselerp, vertlerp, face_vertlerp)
|
||||
|
||||
// The following texlerp encodings are experimental and maybe not
|
||||
// that useful.
|
||||
// that useful.
|
||||
|
||||
unsigned char *texlerp;
|
||||
// Indexed by 3D coordinates, this defines four values:
|
||||
@ -1251,7 +1251,7 @@ struct stbvox_mesh_maker
|
||||
// shouldn't improve performance, although obviously it allow you
|
||||
// to create larger worlds without streaming.
|
||||
//
|
||||
//
|
||||
//
|
||||
// ----------- Two textures ----------- -- One texture -- ---- Color only ----
|
||||
// Mode: 0 1 2 3 4 5 6 10 11 12 20 21 22 23 24
|
||||
// ============================================================================================================
|
||||
@ -1273,15 +1273,15 @@ struct stbvox_mesh_maker
|
||||
// Mode: 0 1 2 3 4 5 6 10 11 12 20 21 22 23 24
|
||||
// =============================================================================================================
|
||||
// bytes per quad 32 20 14 12 10 6 6 8 8 4 20 10 6 4
|
||||
//
|
||||
//
|
||||
// vertex x bits 7 7 0 6 0 0 0 0 0 0 7 0 0 0
|
||||
// vertex y bits 7 7 0 0 0 0 0 0 0 0 7 0 0 0
|
||||
// vertex z bits 9 9 7 4 2 0 0 2 2 0 9 2 0 0
|
||||
// vertex ao bits 6 6 6 6 6 0 0 6 6 0 6 6 0 0
|
||||
// vertex txl bits 3 3 3 0 0 0 0 0 0 0 (3) 0 0 0
|
||||
//
|
||||
// face tex1 bits (8) 8 8 8 8 8 8 8 8 8
|
||||
// face tex2 bits (8) 8 8 8 8 8 7 - - -
|
||||
// face tex1 bits (8) 8 8 8 8 8 8 8 8 8
|
||||
// face tex2 bits (8) 8 8 8 8 8 7 - - -
|
||||
// face color bits (8) 8 8 8 8 8 8 3 0 0 24 24 24 8
|
||||
// face normal bits (8) 8 8 8 6 4 7 4 4 3 8 3 4 3
|
||||
// face x bits 7 0 6 7 6 6 7 7 0 7 7 7
|
||||
@ -1710,7 +1710,7 @@ static const char *stbvox_fragment_program =
|
||||
" uint color_id = facedata.z;\n"
|
||||
|
||||
#ifndef STBVOX_CONFIG_PREFER_TEXBUFFER
|
||||
// load from uniforms / texture buffers
|
||||
// load from uniforms / texture buffers
|
||||
" vec3 texgen_s = texgen[texprojid];\n"
|
||||
" vec3 texgen_t = texgen[texprojid+32u];\n"
|
||||
" float tex1_scale = texscale[tex1_id & 63u].x;\n"
|
||||
@ -1822,7 +1822,7 @@ static const char *stbvox_fragment_program =
|
||||
" vec3 dist = voxelspace_pos + (transform[1] - camera_pos.xyz);\n"
|
||||
" lit_color = compute_fog(lit_color, dist, fragment_alpha);\n"
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef STBVOX_CONFIG_UNPREMULTIPLY
|
||||
" vec4 final_color = vec4(lit_color/fragment_alpha, fragment_alpha);\n"
|
||||
#else
|
||||
@ -1849,7 +1849,7 @@ static const char *stbvox_fragment_program =
|
||||
"{\n"
|
||||
" float f = dot(relative_pos,relative_pos)*ambient[3].w;\n"
|
||||
//" f = rlerp(f, -2,1);\n"
|
||||
" f = clamp(f, 0.0, 1.0);\n"
|
||||
" f = clamp(f, 0.0, 1.0);\n"
|
||||
" f = 3.0*f*f - 2.0*f*f*f;\n" // smoothstep
|
||||
//" f = f*f;\n" // fade in more smoothly
|
||||
#ifdef STBVOX_CONFIG_PREMULTIPLIED_ALPHA
|
||||
@ -1903,7 +1903,7 @@ static const char *stbvox_fragment_program_alpha_only =
|
||||
" uint color_id = facedata.z;\n"
|
||||
|
||||
#ifndef STBVOX_CONFIG_PREFER_TEXBUFFER
|
||||
// load from uniforms / texture buffers
|
||||
// load from uniforms / texture buffers
|
||||
" vec3 texgen_s = texgen[texprojid];\n"
|
||||
" vec3 texgen_t = texgen[texprojid+32u];\n"
|
||||
" float tex1_scale = texscale[tex1_id & 63u].x;\n"
|
||||
@ -2034,7 +2034,7 @@ static unsigned char stbvox_rotate_face[6][4] =
|
||||
{ 2,3,0,1 },
|
||||
{ 3,0,1,2 },
|
||||
{ 4,4,4,4 },
|
||||
{ 5,5,5,5 },
|
||||
{ 5,5,5,5 },
|
||||
};
|
||||
|
||||
#define STBVOX_ROTATE(x,r) stbvox_rotate_face[x][r] // (((x)+(r))&3)
|
||||
@ -2190,7 +2190,7 @@ static unsigned char stbvox_vertex_selector[6][4] =
|
||||
|
||||
static stbvox_mesh_vertex stbvox_vmesh_delta_normal[6][4] =
|
||||
{
|
||||
{ stbvox_vertex_encode(1,0,1,0,0) ,
|
||||
{ stbvox_vertex_encode(1,0,1,0,0) ,
|
||||
stbvox_vertex_encode(1,1,1,0,0) ,
|
||||
stbvox_vertex_encode(1,1,0,0,0) ,
|
||||
stbvox_vertex_encode(1,0,0,0,0) },
|
||||
@ -2218,7 +2218,7 @@ static stbvox_mesh_vertex stbvox_vmesh_delta_normal[6][4] =
|
||||
|
||||
static stbvox_mesh_vertex stbvox_vmesh_pre_vheight[6][4] =
|
||||
{
|
||||
{ stbvox_vertex_encode(1,0,0,0,0) ,
|
||||
{ stbvox_vertex_encode(1,0,0,0,0) ,
|
||||
stbvox_vertex_encode(1,1,0,0,0) ,
|
||||
stbvox_vertex_encode(1,1,0,0,0) ,
|
||||
stbvox_vertex_encode(1,0,0,0,0) },
|
||||
@ -2246,7 +2246,7 @@ static stbvox_mesh_vertex stbvox_vmesh_pre_vheight[6][4] =
|
||||
|
||||
static stbvox_mesh_vertex stbvox_vmesh_delta_half_z[6][4] =
|
||||
{
|
||||
{ stbvox_vertex_encode(1,0,2,0,0) ,
|
||||
{ stbvox_vertex_encode(1,0,2,0,0) ,
|
||||
stbvox_vertex_encode(1,1,2,0,0) ,
|
||||
stbvox_vertex_encode(1,1,0,0,0) ,
|
||||
stbvox_vertex_encode(1,0,0,0,0) },
|
||||
@ -2274,7 +2274,7 @@ static stbvox_mesh_vertex stbvox_vmesh_delta_half_z[6][4] =
|
||||
|
||||
static stbvox_mesh_vertex stbvox_vmesh_crossed_pair[6][4] =
|
||||
{
|
||||
{ stbvox_vertex_encode(1,0,2,0,0) ,
|
||||
{ stbvox_vertex_encode(1,0,2,0,0) ,
|
||||
stbvox_vertex_encode(0,1,2,0,0) ,
|
||||
stbvox_vertex_encode(0,1,0,0,0) ,
|
||||
stbvox_vertex_encode(1,0,0,0,0) },
|
||||
@ -2521,7 +2521,7 @@ static unsigned char stbvox_optimized_face_up_normal[4][4][4][4] =
|
||||
// @TODO: this table was constructed by hand and may have bugs
|
||||
// nw se sw
|
||||
static unsigned char stbvox_planar_face_up_normal[4][4][4] =
|
||||
{
|
||||
{
|
||||
{ // sw,se,nw,ne; ne = se+nw-sw
|
||||
{ STBVF_u , 0 , 0 , 0 }, // 0,0,0,0; 1,0,0,-1; 2,0,0,-2; 3,0,0,-3;
|
||||
{ STBVF_u , STBVF_u , 0 , 0 }, // 0,1,0,1; 1,1,0, 0; 2,1,0,-1; 3,1,0,-2;
|
||||
@ -2908,7 +2908,7 @@ static void stbvox_make_mesh_for_block(stbvox_mesh_maker *mm, stbvox_pos pos, in
|
||||
mesh = mm->input.selector[v_off];
|
||||
else if (mm->input.block_selector)
|
||||
mesh = mm->input.block_selector[mm->input.blocktype[v_off]];
|
||||
|
||||
|
||||
// check if we're going off the end
|
||||
if (mm->output_cur[mesh][0] + mm->output_size[mesh][0]*6 > mm->output_end[mesh][0]) {
|
||||
mm->full = 1;
|
||||
@ -3119,7 +3119,7 @@ static void stbvox_make_mesh_for_block_with_geo(stbvox_mesh_maker *mm, stbvox_po
|
||||
mesh = mm->input.selector[v_off];
|
||||
else if (mm->input.block_selector)
|
||||
mesh = mm->input.block_selector[bt];
|
||||
|
||||
|
||||
if (geo <= STBVOX_GEOM_ceil_slope_north_is_bottom) {
|
||||
// this is the simple case, we can just use regular block gen with special vmesh calculated with vheight
|
||||
stbvox_mesh_vertex basevert;
|
||||
@ -3344,7 +3344,7 @@ static void stbvox_make_mesh_for_block_with_geo(stbvox_mesh_maker *mm, stbvox_po
|
||||
|
||||
if ((visible_faces & (1 << STBVOX_FACE_north)) || (extreme && (ht[2] == 3 || ht[3] == 3)))
|
||||
stbvox_make_mesh_for_face(mm, rotate, STBVOX_FACE_north, v_off, pos, basevert, vmesh[STBVOX_FACE_north], mesh, STBVOX_FACE_north);
|
||||
if ((visible_faces & (1 << STBVOX_FACE_south)) || (extreme && (ht[0] == 3 || ht[1] == 3)))
|
||||
if ((visible_faces & (1 << STBVOX_FACE_south)) || (extreme && (ht[0] == 3 || ht[1] == 3)))
|
||||
stbvox_make_mesh_for_face(mm, rotate, STBVOX_FACE_south, v_off, pos, basevert, vmesh[STBVOX_FACE_south], mesh, STBVOX_FACE_south);
|
||||
if ((visible_faces & (1 << STBVOX_FACE_east)) || (extreme && (ht[1] == 3 || ht[3] == 3)))
|
||||
stbvox_make_mesh_for_face(mm, rotate, STBVOX_FACE_east , v_off, pos, basevert, vmesh[STBVOX_FACE_east ], mesh, STBVOX_FACE_east);
|
||||
@ -3362,7 +3362,7 @@ static void stbvox_make_mesh_for_block_with_geo(stbvox_mesh_maker *mm, stbvox_po
|
||||
mesh = mm->input.selector[v_off];
|
||||
simple_rot = mesh >> 4;
|
||||
mesh &= 15;
|
||||
}
|
||||
}
|
||||
if (mm->input.block_selector) {
|
||||
mesh = mm->input.block_selector[bt];
|
||||
}
|
||||
@ -3644,7 +3644,7 @@ void stbvox_set_input_stride(stbvox_mesh_maker *mm, int x_stride_in_bytes, int y
|
||||
+ stbvox_vertex_vector[f][v][2] ;
|
||||
mm->vertex_gather_offset[f][v] = (stbvox_vertex_vector[f][v][0]-1) * mm->x_stride_in_bytes
|
||||
+ (stbvox_vertex_vector[f][v][1]-1) * mm->y_stride_in_bytes
|
||||
+ (stbvox_vertex_vector[f][v][2]-1) ;
|
||||
+ (stbvox_vertex_vector[f][v][2]-1) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3770,38 +3770,38 @@ This software is available under 2 licenses -- choose whichever you prefer.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE A - MIT License
|
||||
Copyright (c) 2017 Sean Barrett
|
||||
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
|
||||
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
|
||||
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
|
||||
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.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE B - Public Domain (www.unlicense.org)
|
||||
This is free and unencumbered software released into the public domain.
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
this software under copyright law.
|
||||
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 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
|
||||
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 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.
|
||||
------------------------------------------------------------------------------
|
||||
*/
|
||||
|
@ -226,38 +226,38 @@ This software is available under 2 licenses -- choose whichever you prefer.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE A - MIT License
|
||||
Copyright (c) 2017 Sean Barrett
|
||||
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
|
||||
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
|
||||
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
|
||||
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.
|
||||
------------------------------------------------------------------------------
|
||||
ALTERNATIVE B - Public Domain (www.unlicense.org)
|
||||
This is free and unencumbered software released into the public domain.
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and successors. We intend this dedication to be an
|
||||
overt act of relinquishment in perpetuity of all present and future rights to
|
||||
this software under copyright law.
|
||||
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 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
|
||||
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 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.
|
||||
------------------------------------------------------------------------------
|
||||
*/
|
||||
|
32
tools/trailing_whitespace.c
Normal file
32
tools/trailing_whitespace.c
Normal file
@ -0,0 +1,32 @@
|
||||
#define STB_DEFINE
|
||||
#include "stb.h"
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int i;
|
||||
for (i=1; i < argc; ++i) {
|
||||
int len;
|
||||
FILE *f;
|
||||
char *s = stb_file(argv[i], &len);
|
||||
char *end, *src, *dest;
|
||||
if (s == NULL) {
|
||||
printf("Couldn't read file '%s'.\n", argv[i]);
|
||||
continue;
|
||||
}
|
||||
end = s + len;
|
||||
src = dest = s;
|
||||
while (src < end) {
|
||||
char *start=0;
|
||||
while (src < end && *src != '\n' && *src != '\r')
|
||||
*dest++ = *src++;
|
||||
while (dest-1 > s && (dest[-1] == ' ' || dest[-1] == '\t'))
|
||||
--dest;
|
||||
while (src < end && (*src == '\n' || *src == '\r'))
|
||||
*dest++ = *src++;
|
||||
}
|
||||
f = fopen(argv[i], "wb");
|
||||
fwrite(s, 1, dest-s, f);
|
||||
fclose(f);
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user