diff options
| author | 2025-06-11 10:13:08 -0400 | |
|---|---|---|
| committer | 2025-06-11 10:18:57 -0400 | |
| commit | dd5f84bee046fdb62f7ae5f31e3a4bd698de5c4b (patch) | |
| tree | edd1552ce242b12a2e6fcfd7c2574d61d2212e53 /src | |
| parent | 6e8fa1f2c625b8326065b8f0a6b67e048ba812b5 (diff) | |
| download | mauri-dd5f84bee046fdb62f7ae5f31e3a4bd698de5c4b.tar.gz mauri-dd5f84bee046fdb62f7ae5f31e3a4bd698de5c4b.tar.bz2 mauri-dd5f84bee046fdb62f7ae5f31e3a4bd698de5c4b.zip | |
Default color(4) to white, TUI improvements
- Add some default uniforms.
- Fix depth usage.
- Add new shader hack for HLSL compat.
- Update deps.
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src')
| -rw-r--r-- | src/context.h | 4 | ||||
| -rw-r--r-- | src/engine.cc | 1 | ||||
| -rw-r--r-- | src/engine.h | 1 | ||||
| -rw-r--r-- | src/gl.cc | 11 | ||||
| -rw-r--r-- | src/gl.h | 1 | ||||
| -rw-r--r-- | src/mauri.cc | 2 | ||||
| -rw-r--r-- | src/objects/effect.cc | 2 | ||||
| -rw-r--r-- | src/objects/object.cc | 2 | ||||
| -rw-r--r-- | src/objects/pass.cc | 18 | ||||
| -rw-r--r-- | src/objects/pass.h | 4 | ||||
| -rw-r--r-- | src/shader.cc | 27 |
11 files changed, 67 insertions, 6 deletions
diff --git a/src/context.h b/src/context.h index ab27cb2..dce9d5e 100644 --- a/src/context.h +++ b/src/context.h @@ -35,7 +35,8 @@ class Context this->window->pointer_pos_callback = pointer_pos_callback; this->window->should_close_callback = should_close_callback; this->window->userdata = this; - s32 flags = STELA_WINDOW_VSYNC | (monitor.empty() ? 0 : STELA_WINDOW_WALLPAPER); + s32 flags = STELA_WINDOW_VSYNC; + if (!monitor.empty()) flags |= STELA_WINDOW_WALLPAPER; if (!this->window->create_window(this->window, width, height, monitor.c_str(), name.c_str(), flags)) { return false; } @@ -44,7 +45,6 @@ class Context return false; } glEnable(GL_BLEND); - glEnable(GL_MULTISAMPLE); return true; } diff --git a/src/engine.cc b/src/engine.cc index 1943357..d4424a7 100644 --- a/src/engine.cc +++ b/src/engine.cc @@ -66,6 +66,7 @@ Engine::Engine(Scene *scene, f32 rate, bool audio) this->default_mat = glm::ortho(-1.f, 1.f, -1.f, 1.f, -3.f, 1.f); this->default_mat = glm::scale(this->default_mat, vec3{1.f, 1.f, 0.001f}); + this->default_mat_inverse = glm::inverse(this->default_mat); this->default_object = new RenderObject(DEFAULT); this->flipped_object = new RenderObject(DEFAULT_FLIPPED); diff --git a/src/engine.h b/src/engine.h index 991c226..4b90dbf 100644 --- a/src/engine.h +++ b/src/engine.h @@ -53,6 +53,7 @@ class Engine View view; mat4x4 default_mat; + mat4x4 default_mat_inverse; RenderObject *default_object; RenderObject *flipped_object; @@ -496,7 +496,9 @@ auto RenderFramebuffer::clear(vec4 color) -> void { if (!context()->is_draw_enabled()) return; glBindFramebuffer(GL_DRAW_FRAMEBUFFER, this->id); - glClearBufferfv(GL_COLOR | GL_DEPTH, 0, glm::value_ptr(color)); + glClearBufferfv(GL_COLOR, 0, glm::value_ptr(color)); + GLfloat depth = 0.f; + glClearBufferfv(GL_DEPTH, 0, &depth); } RenderFramebuffer::~RenderFramebuffer() @@ -518,6 +520,13 @@ auto Render::color_mask(f32 r, f32 g, f32 b, f32 a) -> void glColorMask(r, g, b, a); } +auto Render::depth_test(bool enabled) -> void +{ + if (!context()->is_draw_enabled()) return; + if (enabled) glEnable(GL_DEPTH_TEST); + else glDisable(GL_DEPTH_TEST); +} + auto Render::bind_framebuffer(s32 id) -> void { if (!context()->is_draw_enabled()) return; @@ -126,6 +126,7 @@ class Render public: static auto blend_func(s32 sfactor, s32 dfactor) -> void; static auto color_mask(f32 r, f32 g, f32 b, f32 a) -> void; + static auto depth_test(bool enabled) -> void; static auto bind_framebuffer(s32 id) -> void; static auto set_viewport(s32 x, s32 y, s32 width, s32 height) -> void; }; diff --git a/src/mauri.cc b/src/mauri.cc index 6e0bcbf..7cb1476 100644 --- a/src/mauri.cc +++ b/src/mauri.cc @@ -138,7 +138,7 @@ auto main(s32 argc, char *argv[]) -> s32 auto wmain(s32 argc, wchar_t **argv) -> s32 #endif { - if (!nn_common_init()) return EXIT_FAILURE; + if (!nn_common_init(NULL)) return EXIT_FAILURE; janus::ArgParser args(HELP_TEXT, "0.13"); args.newString("package p", ""); diff --git a/src/objects/effect.cc b/src/objects/effect.cc index 2a6960f..75b7187 100644 --- a/src/objects/effect.cc +++ b/src/objects/effect.cc @@ -1,3 +1,5 @@ +#include "../log.h" + #include "effect.h" #include "pass.h" diff --git a/src/objects/object.cc b/src/objects/object.cc index 6240c30..4e710ee 100644 --- a/src/objects/object.cc +++ b/src/objects/object.cc @@ -51,7 +51,7 @@ auto Object::parse(Parser &pr, const json &root) -> Object * warn("non 0 origin[2]"); object->origin[2] = 0.f; } - pr.map_value<vec3>(root, "color", &object->color, vec3(0.f)); + pr.map_value<vec3>(root, "color", &object->color, vec3(1.f)); pr.map_value<f32>(root, "alpha", &object->alpha, 1.f); pr.map_value<s32>(root, "colorBlendMode", &object->color_blend_mode, 0); diff --git a/src/objects/pass.cc b/src/objects/pass.cc index e2dc02d..b07e98f 100644 --- a/src/objects/pass.cc +++ b/src/objects/pass.cc @@ -1,6 +1,7 @@ #include "../gl.h" //#define AL_LOG_ENABLE_TRACE #include "../log.h" +#include "../context.h" #include "pass.h" @@ -45,6 +46,8 @@ auto Pass::parse(Parser &pr, const json &root, PassStage stage) -> Pass * if (pass->shader == "genericimage4") { pass->shader = "genericimage2"; } + pass->depthtest = root["depthtest"] != "disabled"; + pass->depthwrite = root["depthwrite"] != "disabled"; break; } @@ -130,6 +133,8 @@ auto Pass::load(Engine *engine, PassStage stage, Pass *pass) -> void case MATERIAL_ONLY_PASS: case MATERIAL_PASS: pass->shader = this->shader; + pass->depthtest = this->depthtest; + pass->depthwrite = this->depthwrite; break; } } @@ -163,6 +168,11 @@ RenderPass::RenderPass(Engine *engine, Pass *pass) this->model = pass->model; this->combine = pass->combine; + this->depth = pass->depthtest; + if (pass->depthtest || pass->depthwrite) + { + warn("depth test support incomplete"); + } this->shader = get_shader(pass->shader); @@ -213,6 +223,10 @@ RenderPass::RenderPass(Engine *engine, Pass *pass) for (Uniform *uniform : this->shader->uniforms) { + if (uniform->uname == "g_Color4") + { + uniform->value = &this->object->color4; + } for (UniformOverride *uniform_override : pass->uniforms) { if (uniform->name.empty()) continue; @@ -334,6 +348,8 @@ auto RenderPass::draw(Engine *engine) -> void if (!this->target) this->object->swap_buffers(); + if (this->depth) Render::depth_test(true); + if (this->combine) Render::blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); else Render::blend_func(GL_ONE, GL_ZERO); @@ -344,6 +360,8 @@ auto RenderPass::draw(Engine *engine) -> void this->render_object->draw(); + if (this->depth) Render::depth_test(false); + #ifdef FRAME_STEP adjusted_target->buffer->blit(0, context()->width(), context()->height()); context()->swap_buffers(); diff --git a/src/objects/pass.h b/src/objects/pass.h index fdec680..6d91a03 100644 --- a/src/objects/pass.h +++ b/src/objects/pass.h @@ -50,6 +50,9 @@ class Pass Object *object; Effect *effect; + bool depthtest; + bool depthwrite; + std::string shader; std::array<std::string, MAX_TEXTURES> binds = {}; @@ -77,6 +80,7 @@ class RenderPass bool model; bool combine; + bool depth; Shader *shader = nullptr; diff --git a/src/shader.cc b/src/shader.cc index 71597da..878f5b2 100644 --- a/src/shader.cc +++ b/src/shader.cc @@ -126,10 +126,30 @@ static auto bokeh_blur_hack(std::string_view &line) -> const std::string_view return line; } +static auto hlsl_hack(std::string_view &line) -> const std::string_view +{ + // https://learn.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-per-component-math#the-vector-type + // HLSL would take the first components in these situations (I think). + if (line == " float pointer = g_PointerPosition.xy * u_pointerSpeed;\r\n") + { + return " float pointer = g_PointerPosition.x * u_pointerSpeed;\r\n"; + } + if (line == "vec3 albedo = texSample2D(g_Texture0, v_TexCoord.xy);\r\n") + { + return "vec3 albedo = texSample2D(g_Texture0, v_TexCoord.xy).xyz;\r\n"; + } + if (line == "float scale = pow(length(abs(v_TexCoord - CAST2(u_offset)) * 1.0), 3.0) * u_scale;\r\n") + { + return "float scale = pow(length(abs(v_TexCoord.xy - CAST2(u_offset)) * 1.0), 3.0) * u_scale;\r\n"; + } + return line; +} + static auto apply_hacks(std::string_view line) -> const std::string_view { line = simple_audio_bars_hack(line); line = bokeh_blur_hack(line); + line = hlsl_hack(line); return line; } @@ -421,6 +441,10 @@ auto Shader::bind(RenderShader *shader, Engine *engine, Object *object, mat4x4 * shader->set_uniform("g_ModelViewProjectionMatrix", TYPE_MAT4, glm::value_ptr(*model)); shader->set_uniform("g_ModelViewProjectionMatrixInverse", TYPE_MAT4, glm::value_ptr(inverse)); shader->set_uniform("g_EffectModelViewProjectionMatrix", TYPE_MAT4, glm::value_ptr(engine->default_mat)); + shader->set_uniform("g_EffectModelViewProjectionMatrixInverse", TYPE_MAT4, glm::value_ptr(engine->default_mat_inverse)); + shader->set_uniform("g_EffectTextureProjectionMatrix", TYPE_MAT4, glm::value_ptr(engine->default_mat)); + shader->set_uniform("g_EffectTextureProjectionMatrixInverse", TYPE_MAT4, glm::value_ptr(engine->default_mat_inverse)); + shader->set_uniform("g_ModelMatrix", TYPE_MAT4, glm::value_ptr(engine->default_mat)); } @@ -434,10 +458,11 @@ auto Shader::bind(RenderShader *shader, Engine *engine, Object *object, mat4x4 * } cursor_pos[0] /= engine->view.width; cursor_pos[1] /= engine->view.height; + //cursor_pos[1] = -cursor_pos[1]; shader->set_uniform("g_PointerPosition", TYPE_VEC2, glm::value_ptr(cursor_pos)); shader->set_uniform("g_Alpha", TYPE_FLOAT, &object->alpha); shader->set_uniform("g_Color", TYPE_VEC3, glm::value_ptr(object->color)); - shader->set_uniform("g_Color4", TYPE_VEC4, glm::value_ptr(object->color4)); + //shader->set_uniform("g_Color4", TYPE_VEC4, glm::value_ptr(object->color4)); } static const std::array<f32, 64> empty_bars = {}; |