summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2023-06-02 21:29:13 -0400
committerrealtradam <[email protected]>2023-06-02 21:29:13 -0400
commit9eaee25e671d47dcb7a2cbb333e6d3283401087f (patch)
treea35e8b71dc1a79797e554d89a88742de079d81c8
parent40a78e6865794db16988bf92a99f69c88c152c8a (diff)
downloadRodeoKit-9eaee25e671d47dcb7a2cbb333e6d3283401087f.tar.gz
RodeoKit-9eaee25e671d47dcb7a2cbb333e6d3283401087f.zip
resizeable desktop window
-rw-r--r--buildShaders.mk13
-rw-r--r--src/input/rodeo_input.c35
-rw-r--r--src/rodeo.c101
-rw-r--r--src/rodeo_internal.h12
-rw-r--r--src/rodeo_internal_types.h6
5 files changed, 137 insertions, 30 deletions
diff --git a/buildShaders.mk b/buildShaders.mk
index fd5ea4b..c34585f 100644
--- a/buildShaders.mk
+++ b/buildShaders.mk
@@ -3,7 +3,7 @@ DEFAULT_SHADER_FLAGS = --verbose -i external/bgfx/src/
BUILD_DIR = build_dir/shaders/
.PHONY: all
-all: spirv 100_es
+all: spirv 100_es opengl
$(BUILD_DIR)spirv/simple.fragment.bin: src/shaders/simple.fragment.sc
@mkdir -p $(@D)
@@ -27,3 +27,14 @@ $(BUILD_DIR)100_es/simple.vertex.bin: src/shaders/simple.vertex.sc
.PHONY: 100_es
100_es: $(BUILD_DIR)100_es/simple.fragment.bin $(BUILD_DIR)100_es/simple.vertex.bin
+$(BUILD_DIR)opengl/simple.fragment.bin: src/shaders/simple.fragment.sc
+ @mkdir -p $(@D)
+ $(SHADER_COMPILER) -f src/shaders/simple.fragment.sc -o $(BUILD_DIR)opengl/simple.fragment.bin --platform linux --type fragment $(DEFAULT_SHADER_FLAGS)
+
+$(BUILD_DIR)opengl/simple.vertex.bin: src/shaders/simple.vertex.sc
+ @mkdir -p $(@D)
+ $(SHADER_COMPILER) -f src/shaders/simple.vertex.sc -o $(BUILD_DIR)opengl/simple.vertex.bin --platform linux --type vertex $(DEFAULT_SHADER_FLAGS)
+
+.PHONY: opengl
+opengl: $(BUILD_DIR)opengl/simple.fragment.bin $(BUILD_DIR)opengl/simple.vertex.bin
+
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;