From 252aab3dd289cdd7cc5f4fe0edb31654e687ec22 Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Wed, 9 Oct 2024 20:45:05 -0600 Subject: [PATCH] Merge: crisel -> main --- src/input.c | 109 +++++++++++++++++++++++++++++++++++++-------------- src/main.c | 3 +- src/main.h | 49 ++++++++++++----------- src/window.c | 42 +++++++++++--------- 4 files changed, 130 insertions(+), 73 deletions(-) diff --git a/src/input.c b/src/input.c index 7808448..b761aa2 100644 --- a/src/input.c +++ b/src/input.c @@ -2,52 +2,100 @@ #include #include -#define ANGLE ((float)0x02/0xff*2*GLM_PI) +#define ANGLE ((float)0x01/0xff*2*GLM_PI) + +unsigned char selected_axis = 0; +int window_width; +int window_height; versor q = GLM_QUAT_IDENTITY_INIT; + vec3 axis[3] = { - {1,0,0}, - {0,1,0}, - {0,0,1}, + {1, 0, 0}, + {0, 1, 0}, + {0, 0, 1}, }; -quat_t poll_input( window_t window ) +void __window_callback(GLFWwindow * window, int w, int h) +{ + int m; + + m = (w < h) ? w : h; + window_width = w; + window_height = h; + + glViewport((w - m) / 2, (h - m) / 2, m, m); +} + +void __mouse_callback(GLFWwindow* window, int button, int action, int mods) +{ + unsigned char green_value; + double xpos, ypos; + + if( button != GLFW_MOUSE_BUTTON_LEFT || action != GLFW_PRESS ) + return; + + glfwGetCursorPos(window, &xpos, &ypos); + glReadPixels((int)xpos, (int)(window_height - ypos), 1, 1, GL_GREEN, GL_UNSIGNED_BYTE, &green_value); + + + switch(green_value) + { + case 0xD3: + case 0xD4: + case 0xD5: + selected_axis = green_value-0xD3; + } +} + +void __scroll_callback(GLFWwindow* window, double xoffset, double yoffset) { versor p = GLM_QUAT_IDENTITY_INIT; - if( glfwGetKey( (void*)window, 'Q' ) == GLFW_PRESS ) + glm_quatv(p, yoffset*ANGLE, axis[selected_axis]); + + glm_quat_mul(p, q, q); + glm_quat_rotatev(p, axis[0], axis[0]); + glm_quat_rotatev(p, axis[1], axis[1]); + glm_quat_rotatev(p, axis[2], axis[2]); +} + +quat_t poll_input(window_t window) +{ + versor p = GLM_QUAT_IDENTITY_INIT; + + if( glfwGetKey((GLFWwindow*)window, 'Q') == GLFW_PRESS ) { - glm_quatv( p, ANGLE, axis[0] ); + glm_quatv(p, ANGLE, axis[0]); goto end; } - if( glfwGetKey( (void*)window, 'W' ) == GLFW_PRESS ) + if( glfwGetKey((GLFWwindow*)window, 'W') == GLFW_PRESS ) { - glm_quatv( p, -ANGLE, axis[0] ); + glm_quatv(p, -ANGLE, axis[0]); + goto end; + } + if( glfwGetKey((GLFWwindow*)window, 'A') == GLFW_PRESS ) + { + glm_quatv(p, ANGLE, axis[1]); + goto end; + } + if( glfwGetKey((GLFWwindow*)window, 'S') == GLFW_PRESS ) + { + glm_quatv(p, -ANGLE, axis[1]); + goto end; + } + if( glfwGetKey((GLFWwindow*)window, 'Z') == GLFW_PRESS ) + { + glm_quatv(p, ANGLE, axis[2]); + goto end; + } + if( glfwGetKey((GLFWwindow*)window, 'X') == GLFW_PRESS ) + { + glm_quatv(p, -ANGLE, axis[2]); goto end; } - if( glfwGetKey( (void*)window, 'A' ) == GLFW_PRESS ) - { - glm_quatv( p, ANGLE, axis[1] ); - goto end; - } - if( glfwGetKey( (void*)window, 'S' ) == GLFW_PRESS ) - { - glm_quatv( p, -ANGLE, axis[1] ); - goto end; - } - - if( glfwGetKey( (void*)window, 'Z' ) == GLFW_PRESS ) - { - glm_quatv( p, ANGLE, axis[2] ); - goto end; - } - if( glfwGetKey( (void*)window, 'X' ) == GLFW_PRESS ) - { - glm_quatv( p, -ANGLE, axis[2] ); - goto end; - } end: glm_quat_mul( p, q, q ); glm_quat_rotatev( p, axis[0], axis[0] ); @@ -56,3 +104,4 @@ end: glm_quat_normalize( q ); return q; } + diff --git a/src/main.c b/src/main.c index 554f207..927b0f4 100644 --- a/src/main.c +++ b/src/main.c @@ -3,8 +3,7 @@ #include "data/axis.h" #include "data/shaders.h" #include -//#include - + #define WIDTH 512 #define HEIGHT 512 diff --git a/src/main.h b/src/main.h index a6c57ce..1fb5ea4 100644 --- a/src/main.h +++ b/src/main.h @@ -1,3 +1,6 @@ +#include +#include + typedef const void * window_t; typedef unsigned int id_t; typedef void * mesh_t; @@ -12,48 +15,48 @@ enum VERTEX, FRAGMENT }; -window_t init_window( unsigned int w, unsigned int h, const char * name ); +window_t init_window(unsigned int w, unsigned int h, const char * name); -void use_window( window_t window ); +void use_window(window_t window); -int is_open_window( window_t window ); +int is_open_window(window_t window); -void close_window( window_t window ); +void close_window(window_t window); -mesh_t create_mesh( narray_float_t mesh ); +mesh_t create_mesh(narray_float_t mesh); -void destroy_mesh( mesh_t p ); +void destroy_mesh(mesh_t p); -void draw_mesh( mesh_t p ); +void draw_mesh(mesh_t p); -void set_clean_color_context( unsigned char, unsigned char, unsigned char ); +void set_clean_color_context(unsigned char, unsigned char, unsigned char); -void clean_context( void ); +void clean_context(void); -void destroy_shader( id_t shader ); +void destroy_shader(id_t shader); -id_t create_shader( void ); +id_t create_shader(void); -void use_shader( id_t program ); +void use_shader(id_t program); -unsigned char gload_program( id_t program, const char * src, unsigned int type ); +unsigned char gload_program(id_t program, const char * src, unsigned int type); -void gload_float( id_t program, char * var, float f ); +void gload_float(id_t program, char * var, float f); -void gload_mat4( id_t program, char * var, mat4_t m ); +void gload_mat4(id_t program, char * var, mat4_t m); -void load_fix_matrix( id_t shader, float ratio ); +void load_fix_matrix(id_t shader, float ratio); -void load_mdl_matrix( id_t shader, unsigned char i, unsigned char c ); +void load_mdl_matrix(id_t shader, unsigned char i, unsigned char c); -void load_rot_matrix( id_t shader, quat_t q ); +void load_rot_matrix(id_t shader, quat_t q); -id_t config_texture( unsigned short type ); +id_t config_texture(unsigned short type); -void use_texture( id_t texture ); +void use_texture(id_t texture); -void destroy_texture( id_t texture ); +void destroy_texture(id_t texture); -id_t create_palette_texture( const narray_u8_t colors ); +id_t create_palette_texture(const narray_u8_t colors); -quat_t poll_input( window_t window ); +quat_t poll_input(window_t window); diff --git a/src/window.c b/src/window.c index d9febdc..a02fb78 100644 --- a/src/window.c +++ b/src/window.c @@ -1,24 +1,24 @@ #include "main.h" #include -void __window_callback( GLFWwindow * window, int w, int h ) -{ - int m = ( w