diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/input/rodeo_input.c | 35 | ||||
| -rw-r--r-- | src/rodeo.c | 101 | ||||
| -rw-r--r-- | src/rodeo_internal.h | 12 | ||||
| -rw-r--r-- | src/rodeo_internal_types.h | 6 |
4 files changed, 125 insertions, 29 deletions
diff --git a/src/input/rodeo_input.c b/src/input/rodeo_input.c index 158fa79..f6f0d9f 100644 --- a/src/input/rodeo_input.c +++ b/src/input/rodeo_input.c @@ -4,9 +4,15 @@ #include "rodeo/input.h" #include "irodeo_input_t.h" #include "rodeo/log.h" +// pirvate +#include "rodeo_internal.h" // -- external -- #include "SDL.h" +#include "bgfx/c99/bgfx.h" + +// -- system -- +#include <inttypes.h> static irodeo_input_state_t istate = {0}; @@ -22,7 +28,34 @@ rodeo_input_events_poll(void) { return true; } - break; + //break; + case SDL_WINDOWEVENT: + { + if(SDL_WINDOWEVENT_SIZE_CHANGED == event.window.event) + { + int32_t width = event.window.data1; + int32_t height = event.window.data2; + //SDL_GetWindowSize(irodeo_window_get(), &width, &height); + bgfx_reset((uint32_t)width, (uint32_t)height, + //BGFX_RESET_MSAA_X16 | BGFX_RESET_MAXANISOTROPY, + BGFX_RESET_VSYNC, + BGFX_TEXTURE_FORMAT_COUNT + ); + irodeo_screen_width_set((uint16_t)width); + irodeo_screen_height_set((uint16_t)height); + rodeo_log( + rodeo_logLevel_warning, + "%"PRIu16"x", + rodeo_screen_width_get() + ); + rodeo_log( + rodeo_logLevel_warning, + "%"PRIu16"\n", + rodeo_screen_height_get() + ); + } + } + // keep going, to check for inputs // - Binary - case SDL_KEYUP: case SDL_KEYDOWN: diff --git a/src/rodeo.c b/src/rodeo.c index afeefba..6978a52 100644 --- a/src/rodeo.c +++ b/src/rodeo.c @@ -79,7 +79,7 @@ rodeo_window_init( SDL_WINDOWPOS_UNDEFINED, screen_width, screen_height, - SDL_WINDOW_SHOWN + SDL_WINDOW_SHOWN //| SDL_WINDOW_RESIZABLE ); if(state.window == NULL) { @@ -136,8 +136,9 @@ rodeo_window_init( bgfx_init_t init = {0}; bgfx_init_ctor(&init); - init.type = BGFX_RENDERER_TYPE_COUNT; // auto determine renderer - //init.type = BGFX_RENDERER_TYPE_OPENGL; // force opengl renderer + //init.type = BGFX_RENDERER_TYPE_COUNT; // auto determine renderer + init.type = BGFX_RENDERER_TYPE_OPENGL; // force opengl renderer + //SDL_GetWindowSize(state.window, &state.screen_width, &state.screen_height); init.resolution.width = state.screen_width; init.resolution.height = state.screen_height; init.resolution.reset = BGFX_RESET_VSYNC; @@ -147,6 +148,8 @@ rodeo_window_init( bgfx_set_debug(BGFX_DEBUG_TEXT); //bgfx_set_state(BGFX_STATE_CULL_CCW, 0); + + //bgfx_dbg_text_clear(0x65, false); bgfx_set_view_clear( 0, @@ -188,6 +191,12 @@ rodeo_window_init( "shaders/spirv/" ); break; + case BGFX_RENDERER_TYPE_OPENGL: + cstr_assign( + &shader_path, + "shaders/opengl/" + ); + break; default: rodeo_log( rodeo_logLevel_error, @@ -257,6 +266,40 @@ rodeo_window_init( state.active_texture_p = &state.default_texture.internal_texture->texture_bgfx; } + SDL_SetWindowResizable(state.window, true); + + /* + rodeo_log( + rodeo_logLevel_info, + "%"PRIu32", %b\n", + bgfx_get_caps()->limits.transientVbSize, + bgfx_get_caps()->homogeneousDepth + );*/ + + //vec3 eye = {0.0f, 0.0f, -35.0f}; + //vec3 center = {0.0f, 0.0f, 0.0f}; + //vec3 up = {0, 1, 0}; + + //glm_lookat(eye, center, up, view); + + glm_mat4_identity(state.view_matrix); + + //glm_perspective(glm_rad(60.f), 640.f / 480.f, 0.1f, 100.0f, proj); + + // TODO: figure out if why 'zo' is correct + // but 'no' is incorrect + glm_ortho_rh_zo( + 0, + (float)state.screen_width, + (float)state.screen_height, + 0, + // near + -0.1f, + // far + 100.0f, + state.proj_matrix + ); + rodeo_random_seed_set(SDL_GetTicks64()); state.end_frame = SDL_GetPerformanceCounter(); @@ -277,6 +320,12 @@ rodeo_window_deinit(void) SDL_Quit(); } +SDL_Window * +irodeo_window_get(void) +{ + return state.window; +} + uint16_t rodeo_screen_width_get(void) { @@ -290,39 +339,28 @@ rodeo_screen_height_get(void) } void -rodeo_frame_begin(void) +irodeo_screen_width_set(uint16_t width) { - //vec3 eye = {0.0f, 0.0f, -35.0f}; - //vec3 center = {0.0f, 0.0f, 0.0f}; - //vec3 up = {0, 1, 0}; - mat4 view; - //glm_lookat(eye, center, up, view); - glm_mat4_identity(view); + state.screen_width = width; +} - mat4 proj; - //glm_perspective(glm_rad(60.f), 640.f / 480.f, 0.1f, 100.0f, proj); +void +irodeo_screen_height_set(uint16_t height) +{ + state.screen_height = height; +} - // TODO: figure out if why 'zo' is correct - // but 'no' is incorrect - glm_ortho_rh_zo( - 0, - (float)state.screen_width, - (float)state.screen_height, - 0, - // near - -0.1f, - // far - 100.0f, - proj - ); - bgfx_set_view_transform(0, view, proj); +void +rodeo_frame_begin(void) +{ + state.quit = rodeo_input_events_poll(); + + bgfx_set_view_transform(0, state.view_matrix, state.proj_matrix); bgfx_set_view_rect(0, 0, 0, state.screen_width, state.screen_height); bgfx_touch(0); irodeo_render_buffer_transient_alloc(); - state.quit = rodeo_input_events_poll(); - state.start_frame = state.end_frame; } @@ -351,6 +389,13 @@ rodeo_frame_end(void) float temp_frame_time = ((float)(state.end_frame - state.start_frame) * 1000.0f / (float)SDL_GetPerformanceFrequency()); state.frame_time = (temp_frame_time < ((1.0f/minimum_fps) * 1000)) ? temp_frame_time : ((1.0f / minimum_fps) * 1000); */ + /* + rodeo_log( + rodeo_logLevel_info, + "Vertex Buffer Used: %f", + (float)bgfx_get_stats()->transientVbUsed / (float)bgfx_get_caps()->limits.transientVbSize + ); + */ } void diff --git a/src/rodeo_internal.h b/src/rodeo_internal.h index 057f2ae..167215b 100644 --- a/src/rodeo_internal.h +++ b/src/rodeo_internal.h @@ -5,6 +5,9 @@ // private #include "rodeo_internal_types.h" +// -- external -- +#include "SDL.h" + #define \ mrodeo_bgfx_vertex_layout_do(vertex_layout) \ mrodeo_defer_do( \ @@ -15,6 +18,15 @@ mrodeo_bgfx_vertex_layout_do(vertex_layout) \ bgfx_vertex_layout_end(vertex_layout) \ ) +SDL_Window * +irodeo_window_get(void); + +void +irodeo_screen_width_set(uint16_t width); + +void +irodeo_screen_height_set(uint16_t height); + void irodeo_render_buffer_transient_alloc(void); diff --git a/src/rodeo_internal_types.h b/src/rodeo_internal_types.h index 531d450..4b3a6ff 100644 --- a/src/rodeo_internal_types.h +++ b/src/rodeo_internal_types.h @@ -13,6 +13,10 @@ #include "SDL_syswm.h" #include "bgfx/c99/bgfx.h" #include "stc/crandom.h" +/*#define CGLM_FORCE_LEFT_HANDED*/ +#define CGLM_FORCE_DEPTH_ZERO_TO_ONE +/*#define CGLM_CLIPSPACE_INCLUDE_ALL*/ +#include "cglm/cglm.h" typedef uint16_t irodeo_index_type_t; @@ -43,6 +47,8 @@ typedef struct bgfx_shader_handle_t fragment_shader; bgfx_program_handle_t program_shader; bgfx_uniform_handle_t texture_uniforms[2]; + mat4 view_matrix; + mat4 proj_matrix; stc64_t random_seed; |
