diff --git a/src/base/base_async.c b/src/base/base_async.c index 4bcd0d88..c65d20e4 100644 --- a/src/base/base_async.c +++ b/src/base/base_async.c @@ -41,7 +41,7 @@ void AsyncWorkerEntryPoint(WaveLaneCtx *lane) // Tick forever for (;;) - ProfZoneDF("Async Tick") + // ProfZoneDF("Async Tick") { AsyncWorkerCtx *w = &Base.async.worker; { diff --git a/src/config.h b/src/config.h index 97c8e4ef..246fa402 100644 --- a/src/config.h +++ b/src/config.h @@ -27,9 +27,9 @@ #define PROFILING_ENABLED 0 -#define PROFILER_PRIORITY_ASYNC 10 +#define PROFILER_PRIORITY_ASYNC 30 #define PROFILER_PRIORITY_SIM 20 -#define PROFILER_PRIORITY_VIS 30 +#define PROFILER_PRIORITY_VIS 10 diff --git a/src/glyph_cache/glyph_cache.c b/src/glyph_cache/glyph_cache.c index 8fb8a13c..f1df560d 100644 --- a/src/glyph_cache/glyph_cache.c +++ b/src/glyph_cache/glyph_cache.c @@ -270,10 +270,7 @@ void GC_TickAsync(WaveLaneCtx *lane, AsyncFrameLaneCtx *base_async_lane_frame) ResourceKey resource = glyph->desc.font.r; GC_GlyphDesc desc = glyph->desc; TTF_GlyphResult ttf_result = Zi; - ProfZoneDF("Rasterize glyph") - { - ttf_result = TTF_RasterizeGlyphFromCodepoint(frame_arena, desc.codepoint, resource, desc.font_size); - } + ttf_result = TTF_RasterizeGlyphFromCodepoint(frame_arena, desc.codepoint, resource, desc.font_size); glyph->font_size = desc.font_size; glyph->font_ascent = ttf_result.font_ascent; glyph->font_descent = ttf_result.font_descent; diff --git a/src/gpu/gpu.lay b/src/gpu/gpu.lay index f7ed7d2e..4a9ad4bb 100644 --- a/src/gpu/gpu.lay +++ b/src/gpu/gpu.lay @@ -5,11 +5,6 @@ @Dep platform -////////////////////////////// -//- Resources - -@EmbedDir G_Resources gpu_res - ////////////////////////////// //- Api diff --git a/src/gpu/gpu_common.c b/src/gpu/gpu_common.c index 68c91511..49b53524 100644 --- a/src/gpu/gpu_common.c +++ b/src/gpu/gpu_common.c @@ -31,29 +31,6 @@ void G_BootstrapCommon(void) ); } - // Init noise texture - { - String noise_data = DataFromResource(ResourceKeyFromStore(&G_Resources, Lit("noise_128x128x64_16.dat"))); - Vec3I32 noise_dims = G_BasicNoiseDims; - if (noise_data.len != noise_dims.x * noise_dims.y * noise_dims.z * 2) - { - Panic(Lit("Unexpected noise texture size")); - } - G.basic_noise_tex3d = G_PushTexture3D( - cl, gpu_perm, - G_TextureLayout_Common, - G_Format_R16_Uint, - noise_dims, - .name = Lit("Noise texture") - ); - G_CopyCpuToTexture( - cl, - G.basic_noise_tex3d, VEC3I32(0, 0, 0), - noise_data.text, noise_dims, - RNG3I32(VEC3I32(0, 0, 0), noise_dims) - ); - } - // Init basic samplers { { @@ -216,8 +193,3 @@ G_TextureRef G_Blank2D(void) { return G.blank_tex2d; } - -G_TextureRef G_BasicNoise3D(void) -{ - return G.basic_noise_tex3d; -} diff --git a/src/gpu/gpu_common.h b/src/gpu/gpu_common.h index 35571227..d753f86f 100644 --- a/src/gpu/gpu_common.h +++ b/src/gpu/gpu_common.h @@ -6,7 +6,6 @@ Struct(G_Ctx) // Common shared resources G_IndexBufferDesc quad_indices; G_TextureRef blank_tex2d; - G_TextureRef basic_noise_tex3d; G_SamplerRef basic_samplers[G_BasicSamplerKind_COUNT]; }; @@ -50,4 +49,3 @@ Rng2 G_ScissorFromTexture(G_TextureRef texture); G_SamplerRef G_BasicSamplerFromKind(G_BasicSamplerKind kind); G_IndexBufferDesc G_QuadIndices(void); G_TextureRef G_Blank2D(void); -G_TextureRef G_BasicNoise3D(void); diff --git a/src/gpu/gpu_res/noise_128x128x64_16.dat b/src/gpu/gpu_res/noise_128x128x64_16.dat deleted file mode 100644 index bfbdffc9..00000000 --- a/src/gpu/gpu_res/noise_128x128x64_16.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:35c141664e6879a3a336816112a8fbabe72067d5dcdd57c130d836de6dda5b2e -size 2097152 diff --git a/src/gpu/gpu_shared.cgh b/src/gpu/gpu_shared.cgh index ec5992d5..4583af50 100644 --- a/src/gpu/gpu_shared.cgh +++ b/src/gpu/gpu_shared.cgh @@ -76,11 +76,6 @@ Enum(G_BasicSamplerKind) G_BasicSamplerKind_COUNT }; -//////////////////////////////////////////////////////////// -//~ Basic noise - -#define G_BasicNoiseDims VEC3I32(128, 128, 64) - //////////////////////////////////////////////////////////// //~ Index buffers diff --git a/src/pp/pp.c b/src/pp/pp.c index 213ba8cb..1e5a4720 100644 --- a/src/pp/pp.c +++ b/src/pp/pp.c @@ -2376,6 +2376,10 @@ void P_StepFrame(P_Frame *frame) guy->is_guy = 1; guy->key = player->guy; guy->source = player->key; + if (player->is_bot) + { + guy->xf.r = Vec2FromAngle(Norm24(RandU64FromState(&world->rand)) * Tau); + } //- Choose guy spawn point { diff --git a/src/pp/pp.h b/src/pp/pp.h index 45fa09d4..1a241d3f 100644 --- a/src/pp/pp.h +++ b/src/pp/pp.h @@ -496,6 +496,7 @@ Enum(P_MsgKind) P_MsgKind_SaveWorld, P_MsgKind_ResetWorld, P_MsgKind_ClearBullets, + P_MsgKind_KillBots, P_MsgKind_Teleport, P_MsgKind_TileEdit, P_MsgKind_Prefab, diff --git a/src/pp/pp_sim/pp_sim_core.c b/src/pp/pp_sim/pp_sim_core.c index 1849b34f..35c27eb2 100644 --- a/src/pp/pp_sim/pp_sim_core.c +++ b/src/pp/pp_sim/pp_sim_core.c @@ -204,6 +204,7 @@ void S_TickForever(WaveLaneCtx *lane) ////////////////////////////// //- Connect clients + ProfZoneDF("Connect clients") for (P_MsgNode *msg_node = in_msgs.first; msg_node; msg_node = msg_node->next) { P_Msg *msg = &msg_node->msg; @@ -308,6 +309,7 @@ void S_TickForever(WaveLaneCtx *lane) ////////////////////////////// //- Read snapshots + ProfZoneDF("Read snapshots") for (P_MsgNode *msg_node = in_msgs.first; msg_node; msg_node = msg_node->next) { P_Msg *msg = &msg_node->msg; @@ -432,7 +434,7 @@ void S_TickForever(WaveLaneCtx *lane) //- Apply bot controls { - b32 should_bots_target_player = TweakBool("Swarm bots to player", 1); + b32 should_bots_target_player = TweakBool("Swarm bots to player", 0); if (should_bots_target_player) { P_Ent *target_player = &P_NilEnt; @@ -455,6 +457,7 @@ void S_TickForever(WaveLaneCtx *lane) bots_count += 1; } } + f32 damp = 1; { u64 bot_idx = 0; @@ -469,6 +472,7 @@ void S_TickForever(WaveLaneCtx *lane) { P_Ent *bot_guy = P_EntFromKey(world_frame, bot->guy); Vec2 dir_to_target = SubVec2(target_pos, bot_guy->xf.t); + dir_to_target = MulVec2(dir_to_target, Vec2Len(dir_to_target) / damp); bot->control.move = dir_to_target; bot->control.look = dir_to_target; } @@ -729,6 +733,21 @@ void S_TickForever(WaveLaneCtx *lane) } P_SpawnEntsFromList(world_frame, ents); } break; + //- Kill bots + case P_MsgKind_KillBots: + { + for (P_Ent *ent = P_FirstEnt(world_frame); !P_IsEntNil(ent); ent = P_NextEnt(ent)) + { + if (ent->is_bot) + { + P_Ent *bot_guy = P_EntFromKey(world_frame, ent->guy); + if (bot_guy->is_guy) + { + bot_guy->health = 0; + } + } + } + } break; //- Delete entity case P_MsgKind_Delete: { @@ -837,6 +856,7 @@ void S_TickForever(WaveLaneCtx *lane) ////////////////////////////// //- Send snapshots + ProfZoneDF("Send snapshots") for (S_Client *client = S.first_client; !S_IsClientNil(client); client = client->next) { Struct(PackedDeltaNode) @@ -973,6 +993,7 @@ void S_TickForever(WaveLaneCtx *lane) ////////////////////////////// //- Send messages + ProfZoneDF("Send network messages") { // Group messages by client for (P_MsgNode *msg_node = P_tl.out_msgs.first; msg_node; msg_node = msg_node->next) diff --git a/src/pp/pp_vis/pp_vis_core.c b/src/pp/pp_vis/pp_vis_core.c index 25c17358..37929226 100644 --- a/src/pp/pp_vis/pp_vis_core.c +++ b/src/pp/pp_vis/pp_vis_core.c @@ -3429,7 +3429,7 @@ void V_TickForever(WaveLaneCtx *lane) { V_Emitter emitter = Zi; emitter.kind = V_ParticleKind_Debris; - emitter.count = 32; + emitter.count = 128; f32 angle = AngleFromVec2(impact_dir); @@ -3743,39 +3743,55 @@ void V_TickForever(WaveLaneCtx *lane) emitter.angle.max = angle + angle_spread * 0.5; V_PushParticles(emitter); } - - // { - // V_Emitter emitter = Zi; - - // // emitter.kind = V_ParticleKind_BloodTrail; - // emitter.kind = V_ParticleKind_BloodDebris; - - // f32 angle = AngleFromVec2(frame->look); - // // f32 angle = 0; - // f32 angle_spread = Tau * 0.25; - // // f32 angle_spread = Tau; - // // f32 angle_spread = 0; - - // // f32 speed = 5; - // f32 speed = 10; - // // f32 speed = 50; - // // f32 speed = 100; - // f32 speed_spread = speed * 2; - - // emitter.pos.p0 = emitter.pos.p1 = frame->world_cursor; - // emitter.speed.min = speed - speed_spread * 0.5; - // emitter.speed.max = speed + speed_spread * 0.5; - // emitter.angle.min = angle - angle_spread * 0.5; - // emitter.angle.max = angle + angle_spread * 0.5; - // emitter.count = Kibi(32) * frame->dt; - // V_PushParticles(emitter); - // } } + if (frame->held_buttons[Button_B]) + // if (frame->held_buttons[Button_F] && !prev_frame->held_buttons[Button_F]) + // if (0) + { + { + V_Emitter emitter = Zi; + + emitter.kind = V_ParticleKind_BloodTrail; + // emitter.kind = V_ParticleKind_BloodDebris; + + f32 angle = AngleFromVec2(frame->look); + // f32 angle = 0; + // f32 angle_spread = Tau * 0.25; + f32 angle_spread = Tau; + // f32 angle_spread = 0; + + // f32 speed = 5; + // f32 speed = 25; + f32 speed = 500; + // f32 speed = 100; + f32 speed_spread = speed * 2; + + emitter.pos.p0 = prev_frame->world_cursor; + emitter.pos.p1 = frame->world_cursor; + emitter.count = Kibi(512) * frame->dt; + + emitter.speed.min = speed - speed_spread * 0.5; + emitter.speed.max = speed + speed_spread * 0.5; + emitter.angle.min = angle - angle_spread * 0.5; + emitter.angle.max = angle + angle_spread * 0.5; + V_PushParticles(emitter); + } + } + + + + + + + + + + ////////////////////////////// //- Push test explosion @@ -3802,7 +3818,7 @@ void V_TickForever(WaveLaneCtx *lane) emitter.pos.p0 = prev_frame->world_cursor; emitter.pos.p1 = frame->world_cursor; - emitter.count = Kibi(128) * frame->dt; + emitter.count = Mebi(1) * frame->dt; emitter.speed.min = speed - speed_spread * 0.5; emitter.speed.max = speed + speed_spread * 0.5; @@ -4207,6 +4223,8 @@ void V_TickForever(WaveLaneCtx *lane) panel->bg = theme.col.panel_bg; panel->bd = theme.col.panel_bd; panel->opacity = theme.col.panel_opacity; + panel->resizer_opacity = theme.col.panel_resizer_opacity; + panel->rounding = UI_Rpx(0); UI_PushDF(Tag, panel->contents_box.v) UI_PushDF(Parent, panel->contents_box) @@ -4717,6 +4735,9 @@ void V_TickForever(WaveLaneCtx *lane) { // FIXME: Finalize + panel->rounding = UI_Rpx(10 * theme.rounding); + panel->resizer_opacity = 0; + // // FIXME: Remove this @@ -4770,7 +4791,7 @@ void V_TickForever(WaveLaneCtx *lane) // UI_Size profiler_height = UI_Fnt(70, 1); UI_Size profiler_height = UI_Grow(1, 0); - UI_Size header_height = UI_Fnt(2, 1); + UI_Size header_height = UI_Fnt(1.5, 1); UI_Size footer_height = UI_Fnt(2, 1); UI_Size window_padding = UI_Fnt(0.60, 1); UI_Size minor_padding = UI_Fnt(0.15, 1); @@ -5259,6 +5280,7 @@ void V_TickForever(WaveLaneCtx *lane) // UI_PushDF(Parent, UI_BuildColumnEx(profiler_box)) // UI_PushDF(Parent, UI_BuildRow()) { + UI_BuildSpacer(window_padding, Axis_X); UI_BuildSpacer(window_padding, Axis_X); UI_PushDF(Parent, UI_BuildColumn()) { @@ -5266,13 +5288,13 @@ void V_TickForever(WaveLaneCtx *lane) // UI_PushDF(BackgroundColor, Color_Red) // UI_SetNext(BorderColor, Color_Red); // UI_SetNext(BorderSize, 1); - // UI_SetNext(ChildAlignment, UI_Region_Center); - // UI_PushDF(Height, header_height) - // UI_PushDF(Parent, UI_BuildBoxEx(UI_KeyF("profiler header"))) - // { - // UI_PushDF(TextColor, theme.col.hint) - // UI_BuildLabelF("Profiler"); - // } + UI_SetNext(ChildAlignment, UI_Region_Center); + UI_PushDF(Height, header_height) + UI_PushDF(Parent, UI_BuildBoxEx(UI_KeyF("profiler header"))) + { + UI_PushDF(TextColor, theme.col.hint) + UI_BuildLabelF("Profiler"); + } // UI_BuildSpacer(window_padding, Axis_Y); // UI_BuildSpacer(window_padding, Axis_Y); @@ -5280,10 +5302,10 @@ void V_TickForever(WaveLaneCtx *lane) //- Graph // UI_SetNext(BackgroundColor, Color_Cyan); - UI_SetNext(Height, graph_height); - UI_PushDF(Parent, UI_BuildBoxEx(profiler_graph_box)) - { - } + // UI_SetNext(Height, graph_height); + // UI_PushDF(Parent, UI_BuildBoxEx(profiler_graph_box)) + // { + // } // UI_BuildDivider(UI_Px(1, 1), theme.col.divider, Axis_Y); // UI_BuildDivider(UI_Px(1, 1), theme.col.divider, Axis_Y); @@ -5786,7 +5808,8 @@ void V_TickForever(WaveLaneCtx *lane) // UI_SetNext(TextColor, theme.col.positive); // UI_SetNext(TextColor, theme.col.button_active); - UI_SetNext(TextColor, theme.col.button_selected); + // UI_SetNext(TextColor, theme.col.button_selected); + UI_SetNext(TextColor, VEC4(1, 0.8, 0, 1)); UI_BuildLabelF("%F", FmtTimeNs(ruler_len_ns, .p = 2)); // UI_SetNext(TextColor, theme.col.button_selected); @@ -5893,6 +5916,7 @@ void V_TickForever(WaveLaneCtx *lane) } } UI_BuildSpacer(window_padding, Axis_X); + UI_BuildSpacer(window_padding, Axis_X); } } } @@ -6117,12 +6141,12 @@ void V_TickForever(WaveLaneCtx *lane) // { // V_Panel *panel = left_panel; // panel->parent = V.root_panel; - // panel->axis = Axis_X; + // panel->axis = Axis_Y; // DllQueuePush(panel->parent->first, panel->parent->last, panel); // panel->box = UI_RandKey(); // panel->contents_box = UI_KeyF("panel contents box %F", FmtUint(panel->box.v)); // panel->resizer_box = UI_KeyF("panel resizer box %F", FmtUint(panel->box.v)); - // panel->pct = 0.10; + // panel->pct = 0.20; // panel->is_organizational = 1; // } @@ -6140,6 +6164,20 @@ void V_TickForever(WaveLaneCtx *lane) // } // } + + // //- Test stats panel + // { + // V_Panel *parent = left_panel; + // V_Panel *panel = PushStruct(perm, V_Panel); + // panel->axis = Axis_X; + // DllQueuePush(parent->first, parent->last, panel); + // panel->box = UI_RandKey(); + // panel->contents_box = UI_KeyF("panel contents box %F", FmtUint(panel->box.v)); + // panel->resizer_box = UI_KeyF("panel resizer box %F", FmtUint(panel->box.v)); + // panel->flags |= V_PanelFlag_Stats; + // panel->pct = 0.5; + // } + // //- Test spawn panel // { // V_Panel *panel = PushStruct(perm, V_Panel); @@ -6163,7 +6201,7 @@ void V_TickForever(WaveLaneCtx *lane) // panel->contents_box = UI_KeyF("panel contents box %F", FmtUint(panel->box.v)); // panel->resizer_box = UI_KeyF("panel resizer box %F", FmtUint(panel->box.v)); // panel->flags |= V_PanelFlag_Profiler; - // panel->pct = 0.75; + // panel->pct = 0.15; // } // //- Vis screen panel @@ -6176,7 +6214,7 @@ void V_TickForever(WaveLaneCtx *lane) // panel->contents_box = vis_screen_panel_box; // panel->resizer_box = UI_KeyF("panel resizer box %F", FmtUint(panel->box.v)); // panel->flags |= V_PanelFlag_Screen; - // panel->pct = 0.25; + // panel->pct = 0.52; // } // //- Test console panel @@ -6190,7 +6228,7 @@ void V_TickForever(WaveLaneCtx *lane) // panel->resizer_box = UI_KeyF("panel resizer box %F", FmtUint(panel->box.v)); // panel->flags |= V_PanelFlag_Console; // // panel->flags |= V_PanelFlag_Spawn; - // panel->pct = 0.25; + // panel->pct = 0.10; // } // } @@ -6509,7 +6547,7 @@ void V_TickForever(WaveLaneCtx *lane) Vec4 panel_bd = panel->bd; Vec4 resizer_color = theme.col.divider; - resizer_color.a *= theme.col.panel_resizer_opacity; + resizer_color.a *= panel->resizer_opacity; panel_bd.a *= theme.col.panel_border_opacity; Vec2 dims_rate = VEC2(Inf, Inf); @@ -6567,6 +6605,7 @@ void V_TickForever(WaveLaneCtx *lane) UI_SetNext(BorderSize, 2); UI_SetNext(DimsRate, dims_rate); // UI_SetNext(Rounding, UI_Rpx(10 * theme.rounding)); + UI_SetNext(Rounding, panel->rounding); UI_SetNext(Flags, UI_BoxFlag_Scissor | (UI_BoxFlag_CaptureMouse * (!is_screen_panel_box && !panel->is_organizational))); UI_PushDF(Parent, UI_BuildBoxEx(contents_box)) { @@ -8491,6 +8530,7 @@ void V_TickForever(WaveLaneCtx *lane) msg->prefab = P_PrefabKind_Bot; msg->key = P_RandEntKey(); msg->xf.t = frame->world_cursor; + msg->xf.r = Vec2FromAngle(Norm24(RandU64FromState(&frame->rand)) * Tau); if (V_CountVisCmds(V_CmdKind_spawn_tp_bot)) { for (P_Ent *ent = P_FirstEnt(local_frame); !P_IsEntNil(ent); ent = P_NextEnt(ent)) @@ -8504,6 +8544,11 @@ void V_TickForever(WaveLaneCtx *lane) } } + if (V_CountVisCmds(V_CmdKind_kill_bots)) + { + P_PushMsg(P_MsgKind_KillBots, Zstr); + } + if (V_CountVisCmds(V_CmdKind_delete)) { if (!P_IsEntNil(hovered_ent)) @@ -8721,7 +8766,6 @@ void V_TickForever(WaveLaneCtx *lane) // Init registers G_SetRegister(cl, V_GpuReg_Flags, gpu_flags); G_SetRegister(cl, V_GpuReg_Frame, gpu_frame); - G_SetRegister(cl, V_GpuReg_NoiseTex, G_BasicNoise3D()); } G_Sync(cl); @@ -8929,57 +8973,9 @@ void V_TickForever(WaveLaneCtx *lane) } } - ////////////////////////////// - //- Prune sim ents - - // { - // i64 ents_to_prune_count = 0; - // P_Ent **ents_to_prune = PushStructsNoZero(frame->arena, P_Ent *, sim_frame->ents_count); - // for (P_Ent *ent = P_FirstEnt(sim_frame); !P_IsEntNil(ent); ent = P_NextEnt(ent)) - // { - // if (ent->exists <= 0) - // { - // ents_to_prune[ents_to_prune_count] = ent; - // ents_to_prune_count += 1; - // } - // } - - // for (i64 prune_idx = 0; prune_idx < ents_to_prune_count; ++prune_idx) - // { - // P_Ent *ent = ents_to_prune[prune_idx]; - // P_EntBin *bin = &sim_frame->ent_bins[ent->key.v % sim_frame->ent_bins_count]; - // DllQueueRemoveNP(bin->first, bin->last, ent, next_in_bin, prev_in_bin); - // DllQueueRemoveNPZ(&P_NilEnt, sim_frame->first_ent, sim_frame->last_ent, ent, next, prev); - // sim_frame->ents_count -= 1; - // SllStackPush(sim_world->first_free_ent, ent); - // } - // } - ////////////////////////////// //- Send messages - - - - // FIXME: Remove this (testing) - - // if (frame->held_buttons[Button_R] && !prev_frame->held_buttons[Button_R]) - // { - // LogDebugF("Sending test payload"); - // NET_Send(net_pipe, frame->sim_key, STRING(P_TilesCount, predict_world->tiles), NET_SendFlag_None); - // // NET_Send(net_pipe, frame->sim_key, Lit("Hello there!"), NET_SendFlag_None); - // } - - - - - // for (P_MsgNode *msg_node = P_tl.out_msgs.first; msg_node; msg_node = msg_node->next) - // { - // P_Msg *msg = &msg_node->msg; - // String packed = P_PackMessage(frame->arena, msg); - // NET_Send(net_pipe, frame->sim_key, packed, NET_SendFlag_None); - // } - ProfZoneDF("Publish net msgs") { if (P_tl.out_msgs.count > 0) @@ -9004,7 +9000,7 @@ void V_TickForever(WaveLaneCtx *lane) //- End frame - i32 vsync = !!TweakBool("Vsync", 1); + i32 vsync = !!TweakBool("Vsync", 0); UI_EndFrame(ui_frame, vsync); if (frame->tick == 1) diff --git a/src/pp/pp_vis/pp_vis_core.h b/src/pp/pp_vis/pp_vis_core.h index 01a827a2..9add753d 100644 --- a/src/pp/pp_vis/pp_vis_core.h +++ b/src/pp/pp_vis/pp_vis_core.h @@ -20,6 +20,7 @@ X(tp_player, Teleport Player, V_CmdDescFlag_None, V_HOTKEY( Button_Q, .alt = 1 ), ) \ X(spawn_tp_bot, Spawn/Teleport Bot, V_CmdDescFlag_None, V_HOTKEY( Button_T, .alt = 1 ), ) \ X(spawn_bot, Spawn Bot, V_CmdDescFlag_None, V_HOTKEY( Button_T, .alt = 1, .shift = 1 ), ) \ + X(kill_bots, Kill Bots, V_CmdDescFlag_None, V_HOTKEY( Button_K, .alt = 1 ), ) \ X(delete, Delete entity at cursor, V_CmdDescFlag_None, V_HOTKEY( Button_M2 ), ) \ X(reset_world, Reset world, V_CmdDescFlag_None, V_HOTKEY( Button_R, .ctrl = 1, .alt = 1 ), ) \ X(clear_particles, Clear particles, V_CmdDescFlag_None, V_HOTKEY( Button_C, .alt = 1, ), ) \ @@ -366,6 +367,8 @@ Struct(V_Panel) Vec4 bg; Vec4 bd; f32 opacity; + f32 resizer_opacity; + UI_Round rounding; }; //////////////////////////////////////////////////////////// diff --git a/src/pp/pp_vis/pp_vis_gpu.g b/src/pp/pp_vis/pp_vis_gpu.g index 4e0ffc24..da1bdb57 100644 --- a/src/pp/pp_vis/pp_vis_gpu.g +++ b/src/pp/pp_vis/pp_vis_gpu.g @@ -1,14 +1,6 @@ //////////////////////////////////////////////////////////// //~ Helpers -f32 V_RandFromPos(Vec3 pos) -{ - Texture3D noise3d = G_Deref(V_GpuReg_NoiseTex, Texture3D); - u32 noise = noise3d[(Vec3U32)pos % G_BasicNoiseDims]; - f32 rand = Norm16(noise); - return rand; -} - f32 V_LifetimeFromParticleDesc(V_ParticleDesc desc, u32 particle_idx) { u64 seed = MixU64(V_ParticleLifetimeBasis ^ particle_idx); diff --git a/src/pp/pp_vis/pp_vis_gpu.gh b/src/pp/pp_vis/pp_vis_gpu.gh index a4e334e4..4e8fc411 100644 --- a/src/pp/pp_vis/pp_vis_gpu.gh +++ b/src/pp/pp_vis/pp_vis_gpu.gh @@ -44,7 +44,6 @@ Struct(V_DVertPSOutput) //////////////////////////////////////////////////////////// //~ Helpers -f32 V_RandFromPos(Vec3 pos); f32 V_LifetimeFromParticleDesc(V_ParticleDesc desc, u32 particle_idx); f32 V_FalloffFromParticleDesc(V_ParticleDesc desc, u32 particle_idx); Vec4 V_ColorFromParticleDesc(V_ParticleDesc desc, u32 particle_idx, f32 alive_seconds, u32 density); diff --git a/src/pp/pp_vis/pp_vis_shared.cgh b/src/pp/pp_vis/pp_vis_shared.cgh index 36b23612..c8a930b8 100644 --- a/src/pp/pp_vis/pp_vis_shared.cgh +++ b/src/pp/pp_vis/pp_vis_shared.cgh @@ -15,9 +15,8 @@ Enum(V_GpuFlag) G_DeclRegister(V_GpuFlag, V_GpuReg_Flags, 0); G_DeclRegister(G_BufferRef, V_GpuReg_Frame, 1); -G_DeclRegister(G_TextureRef, V_GpuReg_NoiseTex, 2); -G_DeclRegister(i32, V_GpuReg_MipsCount, 3); -G_DeclRegister(i32, V_GpuReg_MipIdx, 4); +G_DeclRegister(i32, V_GpuReg_MipsCount, 2); +G_DeclRegister(i32, V_GpuReg_MipIdx, 3); //////////////////////////////////////////////////////////// //~ Particle types @@ -104,7 +103,7 @@ Enum(V_ParticleLayer) /* Stain rate, pen chance */ 0, 0, \ /* Lifetime */ Inf, Inf, \ /* Falloff */ 20, 30, \ - /* Prune speed threshold */ 0.1, \ + /* Prune speed threshold */ 0.01, \ /* Base color */ VEC4(2, 0.5, 0, 1), \ /* Dry color factor */ VEC4(0.2, 0.1, 0.1, 1) \ ) \ diff --git a/src/proto/proto.c b/src/proto/proto.c index 44dd08ba..15215752 100644 --- a/src/proto/proto.c +++ b/src/proto/proto.c @@ -25,7 +25,6 @@ void PT_RunForever(WaveLaneCtx *lane) // Gpu upload pass { G_ResetArena(cl, gpu_frame_arena); - frame->noise_tex = G_BasicNoise3D(); frame->sampler = G_BasicSamplerFromKind(G_BasicSamplerKind_PointClamp); frame->compute_target = G_PushTexture2D( cl, gpu_frame_arena, diff --git a/src/ttf/ttf_dwrite/ttf_dwrite.c b/src/ttf/ttf_dwrite/ttf_dwrite.c index 8c78b6ee..c966a503 100644 --- a/src/ttf/ttf_dwrite/ttf_dwrite.c +++ b/src/ttf/ttf_dwrite/ttf_dwrite.c @@ -107,7 +107,7 @@ TTF_GlyphResult TTF_RasterizeGlyphFromCodepoint(Arena *arena, u32 codepoint, Res Unlock(&lock); } if (!font) - ProfZoneDF("Load & cache DirectWrite font") + ProfZoneDF("Cache font") { Lock lock = LockE(&TTF_DW.font_bins_mutex); { @@ -180,7 +180,7 @@ TTF_GlyphResult TTF_RasterizeGlyphFromCodepoint(Arena *arena, u32 codepoint, Res f32 font_cap = font->design_metrics.capHeight * pixels_per_design_unit; TTF_GlyphResult result = Zi; - ProfZoneDF("Rasterize") + ProfZoneDF("Rasterize DirectWrite Glyph") { if (SUCCEEDED(hr)) {