backdrop testing
This commit is contained in:
parent
06ad3b9341
commit
537b637ccc
@ -43,7 +43,7 @@ DateTime PLT_W32_DateTimeFromWin32SystemTime(SYSTEMTIME st)
|
|||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
//~ Timer job
|
//~ Timer worker
|
||||||
|
|
||||||
void PLT_W32_SyncTimerForever(WaveLaneCtx *lane)
|
void PLT_W32_SyncTimerForever(WaveLaneCtx *lane)
|
||||||
{
|
{
|
||||||
@ -56,7 +56,7 @@ void PLT_W32_SyncTimerForever(WaveLaneCtx *lane)
|
|||||||
Panic(Lit("Failed to create high resolution timer"));
|
Panic(Lit("Failed to create high resolution timer"));
|
||||||
}
|
}
|
||||||
|
|
||||||
i32 periods_index = 0;
|
i32 period_idx = 0;
|
||||||
i64 periods[PLT_W32_NumRollingTimerPeriods] = Zi;
|
i64 periods[PLT_W32_NumRollingTimerPeriods] = Zi;
|
||||||
for (i32 i = 0; i < (i32)countof(periods); ++i)
|
for (i32 i = 0; i < (i32)countof(periods); ++i)
|
||||||
{
|
{
|
||||||
@ -64,7 +64,6 @@ void PLT_W32_SyncTimerForever(WaveLaneCtx *lane)
|
|||||||
}
|
}
|
||||||
|
|
||||||
i64 prev_cycle_ns = 0;
|
i64 prev_cycle_ns = 0;
|
||||||
// FIXME: shutdown
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
@ -84,10 +83,10 @@ void PLT_W32_SyncTimerForever(WaveLaneCtx *lane)
|
|||||||
|
|
||||||
// Compute mean period
|
// Compute mean period
|
||||||
{
|
{
|
||||||
periods[periods_index++] = period_ns;
|
periods[period_idx++] = period_ns;
|
||||||
if (periods_index == countof(periods))
|
if (period_idx >= countof(periods))
|
||||||
{
|
{
|
||||||
periods_index = 0;
|
period_idx = 0;
|
||||||
}
|
}
|
||||||
f64 periods_sum_ns = 0;
|
f64 periods_sum_ns = 0;
|
||||||
for (i32 i = 0; i < (i32)countof(periods); ++i)
|
for (i32 i = 0; i < (i32)countof(periods); ++i)
|
||||||
|
|||||||
@ -36,6 +36,6 @@ DWORD PLT_W32_CompressionAlgorithmFromLevel(PLT_CompressionLevel level);
|
|||||||
DateTime PLT_W32_DateTimeFromWin32SystemTime(SYSTEMTIME st);
|
DateTime PLT_W32_DateTimeFromWin32SystemTime(SYSTEMTIME st);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
//~ Timer job
|
//~ Timer worker
|
||||||
|
|
||||||
void PLT_W32_SyncTimerForever(WaveLaneCtx *lane);
|
void PLT_W32_SyncTimerForever(WaveLaneCtx *lane);
|
||||||
|
|||||||
BIN
src/pp/pp_res/backdrop.ase
(Stored with Git LFS)
Normal file
BIN
src/pp/pp_res/backdrop.ase
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -4753,6 +4753,14 @@ void V_TickForever(WaveLaneCtx *lane)
|
|||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- Build gpu data
|
//- Build gpu data
|
||||||
|
|
||||||
|
// Backdrop
|
||||||
|
{
|
||||||
|
SPR_SheetKey sheet = SPR_SheetKeyFromResource(ResourceKeyFromStore(&P_Resources, Lit("backdrop.ase")));
|
||||||
|
SPR_Sprite sprite = SPR_SpriteFromSheet(sheet, SPR_NilSpanKey, 0);
|
||||||
|
frame->backdrop = sprite.tex;
|
||||||
|
frame->backdrop_slice_uv = DivRng2Vec2(sprite.tex_rect, sprite.tex_dims);
|
||||||
|
}
|
||||||
|
|
||||||
// Tiles
|
// Tiles
|
||||||
{
|
{
|
||||||
for (P_TileKind tile_kind = 0; tile_kind < P_TileKind_COUNT; ++tile_kind)
|
for (P_TileKind tile_kind = 0; tile_kind < P_TileKind_COUNT; ++tile_kind)
|
||||||
|
|||||||
@ -600,19 +600,62 @@ ImplComputeShader2D(V_CompositeCS)
|
|||||||
Vec2 shade_pos = mul(frame.af.screen_to_shade, Vec3(screen_pos.xy, 1));
|
Vec2 shade_pos = mul(frame.af.screen_to_shade, Vec3(screen_pos.xy, 1));
|
||||||
Vec2 tile_pos = mul(frame.af.world_to_tile, Vec3(world_pos, 1));
|
Vec2 tile_pos = mul(frame.af.world_to_tile, Vec3(world_pos, 1));
|
||||||
|
|
||||||
Vec2 half_world_dims = Vec2(P_WorldPitch, P_WorldPitch) * 0.5;
|
Rng2 world_bounds = { Vec2(-P_WorldPitch, -P_WorldPitch) * 0.5, Vec2(P_WorldPitch, P_WorldPitch) * 0.5 };
|
||||||
Vec2 world_bounds_screen_p0 = mul(frame.af.world_to_screen, Vec3(-half_world_dims.xy, 1));
|
Vec2 world_bounds_screen_p0 = mul(frame.af.world_to_screen, Vec3(world_bounds.p0, 1));
|
||||||
Vec2 world_bounds_screen_p1 = mul(frame.af.world_to_screen, Vec3(half_world_dims.xy, 1));
|
Vec2 world_bounds_screen_p1 = mul(frame.af.world_to_screen, Vec3(world_bounds.p1, 1));
|
||||||
b32 is_in_world = IsInside(cell_pos, P_WorldCellsDims);
|
b32 is_in_world = IsInside(cell_pos, P_WorldCellsDims);
|
||||||
b32 is_in_screen = IsInside(screen_pos, frame.screen_dims);
|
b32 is_in_screen = IsInside(screen_pos, frame.screen_dims);
|
||||||
|
|
||||||
P_TileKind tile = tiles[tile_pos];
|
P_TileKind tile = tiles[tile_pos];
|
||||||
P_TileKind equipped_tile = frame.equipped_tile;
|
P_TileKind equipped_tile = frame.equipped_tile;
|
||||||
|
|
||||||
|
//////////////////////////////
|
||||||
|
//- Backdrop color
|
||||||
|
|
||||||
|
Vec4 backdrop_color = Vec4(0.025, 0.025, 0.025, 1);
|
||||||
|
{
|
||||||
|
// if (!frame.is_editing)
|
||||||
|
if (1)
|
||||||
|
{
|
||||||
|
Texture2D<Vec4> backdrop_tex = G_Dereference<Vec4>(frame.backdrop);
|
||||||
|
|
||||||
|
f32 parallax = 2;
|
||||||
|
Vec2 cam_center = frame.camera_pos + frame.screen_dims * 0.5;
|
||||||
|
Vec2 backdrop_pos = lerp(cam_center, world_pos, parallax);
|
||||||
|
|
||||||
|
Vec2 samp_t = frac(abs(backdrop_pos - world_bounds.p0) / (world_bounds.p1 - world_bounds.p0));
|
||||||
|
samp_t = clamp(samp_t, 0.00001, 1.0 - 0.00001);
|
||||||
|
|
||||||
|
Vec2 samp_uv = lerp(frame.backdrop_slice_uv.p0, frame.backdrop_slice_uv.p1, samp_t);
|
||||||
|
backdrop_color = backdrop_tex.SampleLevel(sampler, samp_uv, 0);
|
||||||
|
}
|
||||||
|
else if (is_in_world)
|
||||||
|
{
|
||||||
|
// Checkered grid
|
||||||
|
i32 color_idx = 0;
|
||||||
|
Vec4 colors[2] = {
|
||||||
|
LinearFromSrgb(Vec4(0.30, 0.30, 0.30, 1)),
|
||||||
|
LinearFromSrgb(Vec4(0.15, 0.15, 0.15, 1))
|
||||||
|
};
|
||||||
|
Vec2 tile_pos_mod = fmod(abs(tile_pos), Vec2(2, 2));
|
||||||
|
if (tile_pos_mod.x < 1)
|
||||||
|
{
|
||||||
|
color_idx = !color_idx;
|
||||||
|
}
|
||||||
|
if (tile_pos_mod.y < 1)
|
||||||
|
{
|
||||||
|
color_idx = !color_idx;
|
||||||
|
}
|
||||||
|
backdrop_color = colors[color_idx];
|
||||||
|
}
|
||||||
|
|
||||||
|
backdrop_color.rgb *= backdrop_color.a;
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- World color
|
//- World color
|
||||||
|
|
||||||
Vec4 world_color = Vec4(0.025, 0.025, 0.025, 1);
|
Vec4 world_color = 0;
|
||||||
if (is_in_world)
|
if (is_in_world)
|
||||||
{
|
{
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
@ -665,27 +708,8 @@ ImplComputeShader2D(V_CompositeCS)
|
|||||||
V_TileDesc tile_desc = frame.tile_descs[tile];
|
V_TileDesc tile_desc = frame.tile_descs[tile];
|
||||||
Texture2D<Vec4> tile_tex = G_Dereference<Vec4>(tile_desc.tex);
|
Texture2D<Vec4> tile_tex = G_Dereference<Vec4>(tile_desc.tex);
|
||||||
Vec2 samp_t = clamp(frac(world_pos), 0.00001, 1.0 - 0.00001);
|
Vec2 samp_t = clamp(frac(world_pos), 0.00001, 1.0 - 0.00001);
|
||||||
Vec2 tile_samp_uv = lerp(tile_desc.tex_slice_uv.p0, tile_desc.tex_slice_uv.p1, samp_t);
|
Vec2 samp_uv = lerp(tile_desc.tex_slice_uv.p0, tile_desc.tex_slice_uv.p1, samp_t);
|
||||||
tile_color = tile_tex.SampleLevel(sampler, tile_samp_uv, 0);
|
tile_color = tile_tex.SampleLevel(sampler, samp_uv, 0);
|
||||||
}
|
|
||||||
else if (tile == P_TileKind_Empty)
|
|
||||||
{
|
|
||||||
// Checkered grid
|
|
||||||
i32 color_idx = 0;
|
|
||||||
Vec4 colors[2] = {
|
|
||||||
LinearFromSrgb(Vec4(0.30, 0.30, 0.30, 1)),
|
|
||||||
LinearFromSrgb(Vec4(0.15, 0.15, 0.15, 1))
|
|
||||||
};
|
|
||||||
Vec2 tile_pos_mod = fmod(abs(tile_pos), Vec2(2, 2));
|
|
||||||
if (tile_pos_mod.x < 1)
|
|
||||||
{
|
|
||||||
color_idx = !color_idx;
|
|
||||||
}
|
|
||||||
if (tile_pos_mod.y < 1)
|
|
||||||
{
|
|
||||||
color_idx = !color_idx;
|
|
||||||
}
|
|
||||||
tile_color = colors[color_idx];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -796,10 +820,10 @@ ImplComputeShader2D(V_CompositeCS)
|
|||||||
|
|
||||||
Vec4 selection_color = 0;
|
Vec4 selection_color = 0;
|
||||||
if (
|
if (
|
||||||
|
is_in_world &&
|
||||||
frame.is_editing &&
|
frame.is_editing &&
|
||||||
frame.edit_mode == V_EditMode_Tile &&
|
frame.edit_mode == V_EditMode_Tile &&
|
||||||
frame.has_mouse_focus &&
|
frame.has_mouse_focus
|
||||||
is_in_world
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Vec4 border_color = LinearFromSrgb(Vec4(1, 1, 1, 1));
|
Vec4 border_color = LinearFromSrgb(Vec4(1, 1, 1, 1));
|
||||||
@ -845,7 +869,7 @@ ImplComputeShader2D(V_CompositeCS)
|
|||||||
//- Grid
|
//- Grid
|
||||||
|
|
||||||
Vec4 grid_color = 0;
|
Vec4 grid_color = 0;
|
||||||
if (is_in_world)
|
if (is_in_world && frame.is_editing)
|
||||||
{
|
{
|
||||||
b32 debug_draw = !!frame.show_console;
|
b32 debug_draw = !!frame.show_console;
|
||||||
|
|
||||||
@ -943,6 +967,7 @@ ImplComputeShader2D(V_CompositeCS)
|
|||||||
//- Compose result
|
//- Compose result
|
||||||
|
|
||||||
Vec4 result = 0;
|
Vec4 result = 0;
|
||||||
|
result = BlendPremul(backdrop_color, result);
|
||||||
result = BlendPremul(world_color, result);
|
result = BlendPremul(world_color, result);
|
||||||
result = BlendPremul(overlay_color, result);
|
result = BlendPremul(overlay_color, result);
|
||||||
|
|
||||||
|
|||||||
@ -341,6 +341,9 @@ Struct(V_SharedFrame)
|
|||||||
|
|
||||||
G_SamplerStateRef basic_samplers[G_BasicSamplerKind_COUNT];
|
G_SamplerStateRef basic_samplers[G_BasicSamplerKind_COUNT];
|
||||||
|
|
||||||
|
G_Texture2DRef backdrop;
|
||||||
|
Rng2 backdrop_slice_uv;
|
||||||
|
|
||||||
V_TileDesc tile_descs[P_TileKind_COUNT];
|
V_TileDesc tile_descs[P_TileKind_COUNT];
|
||||||
G_Texture2DRef tiles;
|
G_Texture2DRef tiles;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user