clz
This commit is contained in:
parent
d3cb9278a9
commit
bbbfb97b60
2
Makefile
2
Makefile
|
@ -83,7 +83,7 @@ ifeq ($(OS), WIN32)
|
||||||
EXT = .exe
|
EXT = .exe
|
||||||
else
|
else
|
||||||
LINKER_FLAGS = $(QFLAGS) -L/usr/local/lib -rdynamic
|
LINKER_FLAGS = $(QFLAGS) -L/usr/local/lib -rdynamic
|
||||||
ELIBS = engine pthread yughc glfw3 quickjs tcc c m dl
|
ELIBS = engine pthread yughc glfw3 tcc quickjs c m dl
|
||||||
CLIBS =
|
CLIBS =
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -35,9 +35,13 @@ void mYughLog(int category, int priority, int line, const char *file, const char
|
||||||
|
|
||||||
if (priority >= logLevel) {
|
if (priority >= logLevel) {
|
||||||
time_t now = time(0);
|
time_t now = time(0);
|
||||||
|
char timestr[50];
|
||||||
|
// strftime(timestr,50,"
|
||||||
char *dt = ctime(&now);
|
char *dt = ctime(&now);
|
||||||
dt[strlen(dt) - 1] = '\0'; // The above time conversion adds a \n; this removes it
|
dt[strlen(dt) - 1] = '\0'; // The above time conversion adds a \n; this removes it
|
||||||
|
|
||||||
|
double ticks = (double)clock()/CLOCKS_PER_SEC;
|
||||||
|
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, message);
|
va_start(args, message);
|
||||||
char msgbuffer[ERROR_BUFFER] = { '\0' };
|
char msgbuffer[ERROR_BUFFER] = { '\0' };
|
||||||
|
@ -45,7 +49,7 @@ void mYughLog(int category, int priority, int line, const char *file, const char
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
char buffer[ERROR_BUFFER] = { '\0' };
|
char buffer[ERROR_BUFFER] = { '\0' };
|
||||||
snprintf(buffer, ERROR_BUFFER, "%s:%d: %s, %s: %s\n", file, line, logstr[priority], catstr[category], msgbuffer);
|
snprintf(buffer, ERROR_BUFFER, "%g | %s:%d: %s, %s: %s\n", ticks, file, line, logstr[priority], catstr[category], msgbuffer);
|
||||||
|
|
||||||
log_print(buffer);
|
log_print(buffer);
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,8 @@ void engine_init()
|
||||||
if (!glfwInit()) {
|
if (!glfwInit()) {
|
||||||
YughError("Could not init GLFW. Exiting.");
|
YughError("Could not init GLFW. Exiting.");
|
||||||
exit(1);
|
exit(1);
|
||||||
|
} else {
|
||||||
|
YughInfo("Initted GLFW.");
|
||||||
}
|
}
|
||||||
|
|
||||||
resources_init();
|
resources_init();
|
||||||
|
|
|
@ -8,10 +8,22 @@
|
||||||
#include "time.h"
|
#include "time.h"
|
||||||
#include "font.h"
|
#include "font.h"
|
||||||
|
|
||||||
|
#inlcude "stb_ds.h"
|
||||||
|
|
||||||
int32_t mouseWheelX = 0;
|
int32_t mouseWheelX = 0;
|
||||||
int32_t mouseWheelY = 0;
|
int32_t mouseWheelY = 0;
|
||||||
float deltaT = 0;
|
float deltaT = 0;
|
||||||
|
|
||||||
|
JSValue jsinput;
|
||||||
|
JSValue jsnum;
|
||||||
|
JSValue jsgamepadstr[15];
|
||||||
|
JSValue jsaxesstr[4];
|
||||||
|
JSValue jsinputstate[5];
|
||||||
|
JSValue jsaxis;
|
||||||
|
JSValue jsany;
|
||||||
|
JSValue jsmouse;
|
||||||
|
JSValue jspos;
|
||||||
|
|
||||||
cpVect mouse_pos = {0,0};
|
cpVect mouse_pos = {0,0};
|
||||||
cpVect mouse_delta = {0,0};
|
cpVect mouse_delta = {0,0};
|
||||||
|
|
||||||
|
@ -28,6 +40,26 @@ static int mquit = 0;
|
||||||
static struct callee pawn_callee;
|
static struct callee pawn_callee;
|
||||||
static struct callee gamepad_callee;
|
static struct callee gamepad_callee;
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
char *key;
|
||||||
|
JSValue value;
|
||||||
|
} *jshash = NULL;
|
||||||
|
|
||||||
|
JSValue input2js(const char *input)
|
||||||
|
{
|
||||||
|
int idx = shgeti(jshash, input);
|
||||||
|
if (idx != -1)
|
||||||
|
return jshash[idx].value;
|
||||||
|
|
||||||
|
if (shlen(jshash) == 0)
|
||||||
|
sh_new_arena(jshash);
|
||||||
|
|
||||||
|
JSValue n = str2js(input);
|
||||||
|
shput(jshash, input, str2js(input));
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
const char *gamepad2str(int btn)
|
const char *gamepad2str(int btn)
|
||||||
{
|
{
|
||||||
switch(btn) {
|
switch(btn) {
|
||||||
|
@ -84,22 +116,25 @@ static void cursor_pos_cb(GLFWwindow *w, double xpos, double ypos)
|
||||||
mouse_pos.x = xpos;
|
mouse_pos.x = xpos;
|
||||||
mouse_pos.y = ypos;
|
mouse_pos.y = ypos;
|
||||||
|
|
||||||
JSValue argv[2];
|
JSValue argv[4];
|
||||||
argv[0] = JS_NewString(js, "input_mouse_pos");
|
argv[0] = jsinput;
|
||||||
argv[1] = vec2js(mouse_pos);
|
argv[1] = jsmouse;
|
||||||
script_callee(pawn_callee, 2, argv);
|
argv[2] = jspos;
|
||||||
JS_FreeValue(js, argv[0]);
|
argv[3] = vec2js(mouse_pos);
|
||||||
JS_FreeValue(js, argv[1]);
|
script_callee(pawn_callee, 4, argv);
|
||||||
|
JS_FreeValue(js, argv[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pawn_call_keydown(int key)
|
static void pawn_call_keydown(int key)
|
||||||
{
|
{
|
||||||
JSValue argv[2];
|
JSValue argv[4];
|
||||||
argv[0] = JS_NewString(js, "input_num_pressed");
|
argv[0] = jsinput;
|
||||||
argv[1] = JS_NewInt32(js, key);
|
argv[1] = jsnum;
|
||||||
script_callee(pawn_callee, 2, argv);
|
argv[2] = jsinputstate[2];
|
||||||
JS_FreeValue(js, argv[0]);
|
/* TODO: Could cache */
|
||||||
JS_FreeValue(js, argv[1]);
|
argv[3] = JS_NewInt32(js, key);
|
||||||
|
script_callee(pawn_callee, 4, argv);
|
||||||
|
JS_FreeValue(js, argv[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void scroll_cb(GLFWwindow *w, double xoffset, double yoffset)
|
static void scroll_cb(GLFWwindow *w, double xoffset, double yoffset)
|
||||||
|
@ -112,33 +147,33 @@ static void mb_cb(GLFWwindow *w, int button, int action, int mods)
|
||||||
{
|
{
|
||||||
const char *act = NULL;
|
const char *act = NULL;
|
||||||
const char *btn = NULL;
|
const char *btn = NULL;
|
||||||
|
JSValue argv[3];
|
||||||
|
argv[0] = jsinput;
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case GLFW_PRESS:
|
case GLFW_PRESS:
|
||||||
act = "pressed";
|
argv[3] = jsinputstate[2];
|
||||||
add_downkey(button);
|
add_downkey(button);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GLFW_RELEASE:
|
case GLFW_RELEASE:
|
||||||
act = "released";
|
|
||||||
rm_downkey(button);
|
rm_downkey(button);
|
||||||
call_input_signal("input_any_released");
|
argv[2] = jsinputstate[0];
|
||||||
|
argv[1] = jsany;
|
||||||
|
script_callee(pawn_callee,3,argv);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GLFW_REPEAT:
|
case GLFW_REPEAT:
|
||||||
act = "repeat";
|
argv[2] = jsinputstate[1];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
btn = keyname_extd(button, button);
|
|
||||||
|
|
||||||
if (!act || !btn) {
|
if (!act || !btn) {
|
||||||
YughError("Tried to call a mouse action that doesn't exist.");
|
YughError("Tried to call a mouse action that doesn't exist.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
char keystr[50] = {'\0'};
|
argv[1] = input2js(keyname_extd(button,button));
|
||||||
snprintf(keystr, 50, "input_%s_%s", btn, act);
|
script_callee(pawn_callee,3,argv);
|
||||||
call_input_signal(keystr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_mouse_mode(int mousemode)
|
void set_mouse_mode(int mousemode)
|
||||||
|
@ -187,9 +222,6 @@ void joystick_cb(int jid, int event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JSValue jsgamepadstr[15];
|
|
||||||
JSValue jsaxesstr[4];
|
|
||||||
JSValue jsaxis;
|
|
||||||
|
|
||||||
void input_init()
|
void input_init()
|
||||||
{
|
{
|
||||||
|
@ -215,6 +247,17 @@ void input_init()
|
||||||
/* Grab all joysticks initially present */
|
/* Grab all joysticks initially present */
|
||||||
for (int i = 0; i < 16; i++)
|
for (int i = 0; i < 16; i++)
|
||||||
if (glfwJoystickPresent(i)) joystick_add(i);
|
if (glfwJoystickPresent(i)) joystick_add(i);
|
||||||
|
|
||||||
|
jsinputstate[0] = str2js("released");
|
||||||
|
jsinputstate[1] = str2js("rep");
|
||||||
|
jsinputstate[2] = str2js("pressed");
|
||||||
|
jsinputstate[3] = str2js("pressrep");
|
||||||
|
jsinputstate[4] = str2js("down");
|
||||||
|
jsinput = str2js("input");
|
||||||
|
jsnum = str2js("num");
|
||||||
|
jsany = str2js("any");
|
||||||
|
jsmouse = str2js("mouse");
|
||||||
|
jspos = str2js("pos");
|
||||||
}
|
}
|
||||||
|
|
||||||
void input_to_nuke()
|
void input_to_nuke()
|
||||||
|
@ -360,9 +403,11 @@ const char *keyname_extd(int key, int scancode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void call_input_down(int *key) {
|
void call_input_down(int *key) {
|
||||||
char keystr[50] = {'\0'};
|
JSValue argv[3];
|
||||||
snprintf(keystr, 50, "input_%s_down", keyname_extd(*key, 0));
|
argv[0] = jsinput;
|
||||||
call_input_signal(keystr);
|
argv[1] = input2js(keyname_extd(*key, *key));
|
||||||
|
argv[2] = jsinputstate[4];
|
||||||
|
script_callee(pawn_callee,3,argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -461,37 +506,39 @@ int key_is_num(int key) {
|
||||||
|
|
||||||
void win_key_callback(GLFWwindow *w, int key, int scancode, int action, int mods)
|
void win_key_callback(GLFWwindow *w, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
char keystr[50] = {'\0'};
|
JSValue argv[3];
|
||||||
char kkey[50] = {'\0'};
|
argv[0] = jsinput;
|
||||||
snprintf(kkey, 50, "%s", keyname_extd(key,scancode));
|
argv[1] = input2js(keyname_extd(key,scancode));
|
||||||
|
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case GLFW_PRESS:
|
case GLFW_PRESS:
|
||||||
snprintf(keystr, 50, "input_%s_pressed", kkey);
|
argv[2] = jsinputstate[2];
|
||||||
call_input_signal(keystr);
|
script_callee(pawn_callee, 3, argv);
|
||||||
snprintf(keystr,50,"input_%s_pressrep", kkey);
|
argv[2] = jsinputstate[3];
|
||||||
call_input_signal(keystr);
|
script_callee(pawn_callee,3,argv);
|
||||||
add_downkey(key);
|
add_downkey(key);
|
||||||
call_input_signal("input_any_pressed");
|
argv[1] = jsany;
|
||||||
|
argv[2] = jsinputstate[2];
|
||||||
|
script_callee(pawn_callee,3,argv);
|
||||||
|
|
||||||
if (key_is_num(key)) {
|
if (key_is_num(key))
|
||||||
pawn_call_keydown(key-48);
|
pawn_call_keydown(key-48);
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GLFW_RELEASE:
|
case GLFW_RELEASE:
|
||||||
snprintf(keystr, 50, "input_%s_released", kkey);
|
argv[2] = jsinputstate[0];
|
||||||
call_input_signal(keystr);
|
script_callee(pawn_callee,3,argv);
|
||||||
rm_downkey(key);
|
rm_downkey(key);
|
||||||
call_input_signal("input_any_released");
|
argv[1] = jsany;
|
||||||
|
script_callee(pawn_callee,3,argv);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GLFW_REPEAT:
|
case GLFW_REPEAT:
|
||||||
snprintf(keystr, 50, "input_%s_rep", kkey);
|
argv[2] = jsinputstate[1];
|
||||||
call_input_signal(keystr);
|
script_callee(pawn_callee,3,argv);
|
||||||
snprintf(keystr,50,"input_%s_pressrep", kkey);
|
argv[2] = jsinputstate[3];
|
||||||
call_input_signal(keystr);
|
script_callee(pawn_callee,3,argv);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,7 +95,6 @@ GLuint load_shader_from_file(const char *path, int type)
|
||||||
void shader_compile(struct shader *shader)
|
void shader_compile(struct shader *shader)
|
||||||
{
|
{
|
||||||
YughInfo("Making shader with %s and %s.", shader->vertpath, shader->fragpath);
|
YughInfo("Making shader with %s and %s.", shader->vertpath, shader->fragpath);
|
||||||
clock_t startt = clock();
|
|
||||||
|
|
||||||
GLuint vert = load_shader_from_file(shader->vertpath, GL_VERTEX_SHADER);
|
GLuint vert = load_shader_from_file(shader->vertpath, GL_VERTEX_SHADER);
|
||||||
GLuint frag = load_shader_from_file(shader->fragpath, GL_FRAGMENT_SHADER);
|
GLuint frag = load_shader_from_file(shader->fragpath, GL_FRAGMENT_SHADER);
|
||||||
|
@ -108,9 +107,6 @@ void shader_compile(struct shader *shader)
|
||||||
|
|
||||||
glDeleteShader(vert);
|
glDeleteShader(vert);
|
||||||
glDeleteShader(frag);
|
glDeleteShader(frag);
|
||||||
|
|
||||||
startt = clock() - startt;
|
|
||||||
YughInfo("Created shader in %d ticks (%f seconds).", startt, ((float)startt/CLOCKS_PER_SEC));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void shader_use(struct shader *shader)
|
void shader_use(struct shader *shader)
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
#define MINIAUDIO_IMPLEMENTATION
|
#define MINIAUDIO_IMPLEMENTATION
|
||||||
#include "miniaudio.h"
|
#include "miniaudio.h"
|
||||||
|
|
||||||
|
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
|
|
||||||
#include "quickjs/quickjs.h"
|
#include "quickjs/quickjs.h"
|
||||||
|
@ -58,7 +57,18 @@ int fps;
|
||||||
#define SIM_PLAY 1
|
#define SIM_PLAY 1
|
||||||
#define SIM_PAUSE 2
|
#define SIM_PAUSE 2
|
||||||
#define SIM_STEP 3
|
#define SIM_STEP 3
|
||||||
|
/*
|
||||||
|
int __builtin_clz(unsigned int a)
|
||||||
|
{
|
||||||
|
int to;
|
||||||
|
__asm__ __volatile__(
|
||||||
|
"bsr %edi, %eax\n\t"
|
||||||
|
"xor $31, %eax\n\t"
|
||||||
|
: "=&a"(to));
|
||||||
|
|
||||||
|
return to;
|
||||||
|
}
|
||||||
|
*/
|
||||||
void print_stacktrace()
|
void print_stacktrace()
|
||||||
{
|
{
|
||||||
void *ents[512];
|
void *ents[512];
|
||||||
|
@ -195,6 +205,8 @@ int main(int argc, char **args) {
|
||||||
input_init();
|
input_init();
|
||||||
openglInit();
|
openglInit();
|
||||||
|
|
||||||
|
YughWarn("%d", __builtin_clz(500));
|
||||||
|
|
||||||
if (ed)
|
if (ed)
|
||||||
script_dofile("scripts/editor.js");
|
script_dofile("scripts/editor.js");
|
||||||
else
|
else
|
||||||
|
|
|
@ -472,8 +472,9 @@ var Register = {
|
||||||
this.nk_guis.forEach(x => x[0].call(x[1]));
|
this.nk_guis.forEach(x => x[0].call(x[1]));
|
||||||
},
|
},
|
||||||
|
|
||||||
kbm_input(fn, ...args) {
|
kbm_input(src, btn, state, ...args) {
|
||||||
Player.players[0].input(fn, ...args);
|
var input = `${src}_${btn}_${state}`;
|
||||||
|
Player.players[0].input(input, ...args);
|
||||||
},
|
},
|
||||||
|
|
||||||
gamepad_playermap: [],
|
gamepad_playermap: [],
|
||||||
|
|
Loading…
Reference in a new issue