Skip to content

Commit e4090f6

Browse files
committed
refac: renderer ext now uses starter ext & renamed shader variant ext to shader tools
1 parent c6f2097 commit e4090f6

16 files changed

+961
-1296
lines changed

.github/workflows/build.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ jobs:
185185
if not exist ../out/pl_platform_ext.dll exit 1
186186
if not exist ../out/pilot_light.exe exit 1
187187
if not exist ../out/pl_script_camera.dll exit 1
188-
if not exist ../out/pl_shader_variant_ext.dll exit 1
188+
if not exist ../out/pl_shader_tools_ext.dll exit 1
189189
if not exist ../out/pl_dds_ext.dll exit 1
190190
cd ..
191191
@@ -389,7 +389,7 @@ jobs:
389389
test -f ./out/pl_config_ext.dylib || exit 1
390390
test -f ./out/pl_platform_ext.dylib || exit 1
391391
test -f ./out/pl_script_camera.dylib || exit 1
392-
test -f ./out/pl_shader_variant_ext.dylib || exit 1
392+
test -f ./out/pl_shader_tools_ext.dylib || exit 1
393393
test -f ./out/pl_dds_ext.dylib || exit 1
394394
395395
- name: Package Pilot Light
@@ -604,7 +604,7 @@ jobs:
604604
test -f ./out/pl_config_ext.so || exit 1
605605
test -f ./out/pl_platform_ext.so || exit 1
606606
test -f ./out/pl_script_camera.so || exit 1
607-
test -f ./out/pl_shader_variant_ext.so || exit 1
607+
test -f ./out/pl_shader_tools_ext.so || exit 1
608608
test -f ./out/pl_dds_ext.so || exit 1
609609
610610
- name: Package Pilot Light

docs/version.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ the API is complete. It just means we won't break what currently exists.
7171
* Rectangle Packing v1.0.0 (pl_rect_pack_ext.h)
7272
* Screen Log v2.0.0 (pl_screen_log_ext.h)
7373
* Shader v1.1.0 (pl_shader_ext.h)
74-
* Starter v1.0.2 (pl_starter_ext.h)
74+
* Starter v1.1.0 (pl_starter_ext.h)
7575
* Stats v1.0.0 (pl_stats_ext.h)
7676
* String Interning v1.0.1 (pl_string_intern_ext.h)
7777
* UI Tools v1.0.0 (pl_tools_ext.h)
@@ -90,7 +90,7 @@ the API is complete. It just means we won't break what currently exists.
9090
* Collision v0.2.0 (pl_collision_ext.h)
9191
* Mesh v0.1.0 (pl_mesh_ext.h)
9292
* Mesh Builder v0.1.0 (pl_mesh_ext.h)
93-
* Shader Variant v0.2.0 (pl_shader_variant_ext.h)
93+
* Shader Tools v0.2.0 (pl_shader_tools_ext.h)
9494
* DDS v0.2.0 (pl_dds_ext.h)
9595

9696
## Unstable Extensions

editor/app.c

Lines changed: 128 additions & 214 deletions
Large diffs are not rendered by default.

editor/editor.cpp

Lines changed: 66 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ pl_app_load(plApiRegistryI* ptApiRegistry, plAppData* ptAppData)
8484
gptStarter = pl_get_api_latest(ptApiRegistry, plStarterI);
8585
gptAnimation = pl_get_api_latest(ptApiRegistry, plAnimationI);
8686
gptMesh = pl_get_api_latest(ptApiRegistry, plMeshI);
87-
gptShaderVariant = pl_get_api_latest(ptApiRegistry, plShaderVariantI);
87+
gptShaderTools = pl_get_api_latest(ptApiRegistry, plShaderToolsI);
8888
gptVfs = pl_get_api_latest(ptApiRegistry, plVfsI);
8989
gptPak = pl_get_api_latest(ptApiRegistry, plPakI);
9090
gptDateTime = pl_get_api_latest(ptApiRegistry, plDateTimeI);
@@ -140,7 +140,7 @@ pl_app_load(plApiRegistryI* ptApiRegistry, plAppData* ptAppData)
140140
gptStarter = pl_get_api_latest(ptApiRegistry, plStarterI);
141141
gptAnimation = pl_get_api_latest(ptApiRegistry, plAnimationI);
142142
gptMesh = pl_get_api_latest(ptApiRegistry, plMeshI);
143-
gptShaderVariant = pl_get_api_latest(ptApiRegistry, plShaderVariantI);
143+
gptShaderTools = pl_get_api_latest(ptApiRegistry, plShaderToolsI);
144144
gptVfs = pl_get_api_latest(ptApiRegistry, plVfsI);
145145
gptPak = pl_get_api_latest(ptApiRegistry, plPakI);
146146
gptDateTime = pl_get_api_latest(ptApiRegistry, plDateTimeI);
@@ -164,6 +164,7 @@ pl_app_load(plApiRegistryI* ptApiRegistry, plAppData* ptAppData)
164164
ptAppData->bShowPilotLightTool = true;
165165
ptAppData->bShowSkybox = true;
166166
ptAppData->bFrustumCulling = true;
167+
ptAppData->bVSync = true;
167168

168169
gptConfig->load_from_disk(nullptr);
169170
ptAppData->bShowEntityWindow = gptConfig->load_bool("bShowEntityWindow", false);
@@ -178,18 +179,6 @@ pl_app_load(plApiRegistryI* ptApiRegistry, plAppData* ptAppData)
178179
// initialize APIs that require it
179180
gptEcsTools->initialize();
180181
gptPhysics->initialize({});
181-
182-
// initialize shader compiler
183-
static plShaderOptions tDefaultShaderOptions = PL_ZERO_INIT;
184-
tDefaultShaderOptions.apcIncludeDirectories[0] = "/shaders/";
185-
tDefaultShaderOptions.apcDirectories[0] = "/shaders/";
186-
tDefaultShaderOptions.apcDirectories[1] = "/shader-temp/";
187-
tDefaultShaderOptions.pcCacheOutputDirectory = "/shader-temp/";
188-
tDefaultShaderOptions.tFlags = PL_SHADER_FLAGS_AUTO_OUTPUT | PL_SHADER_FLAGS_INCLUDE_DEBUG | PL_SHADER_FLAGS_ALWAYS_COMPILE;
189-
gptShader->initialize(&tDefaultShaderOptions);
190-
191-
// initialize job system
192-
gptJobs->initialize({});
193182

194183
// create window (only 1 allowed currently)
195184
plWindowDesc tWindowDesc = {
@@ -203,30 +192,51 @@ pl_app_load(plApiRegistryI* ptApiRegistry, plAppData* ptAppData)
203192
gptWindows->create(tWindowDesc, &ptAppData->ptWindow);
204193
gptWindows->show(ptAppData->ptWindow);
205194

206-
// initialize graphics
207-
plGraphicsInit tGraphicsDesc = PL_ZERO_INIT;
208-
tGraphicsDesc.tFlags = PL_GRAPHICS_INIT_FLAGS_SWAPCHAIN_ENABLED | PL_GRAPHICS_INIT_FLAGS_VALIDATION_ENABLED;
209-
gptGfx->initialize(&tGraphicsDesc);
195+
plStarterInit tStarterInit = {};
196+
tStarterInit.tFlags = PL_STARTER_FLAGS_NONE;
197+
tStarterInit.ptWindow = ptAppData->ptWindow;
198+
199+
// extensions handled by starter
200+
tStarterInit.tFlags |= PL_STARTER_FLAGS_GRAPHICS_EXT;
201+
tStarterInit.tFlags |= PL_STARTER_FLAGS_PROFILE_EXT;
202+
tStarterInit.tFlags |= PL_STARTER_FLAGS_STATS_EXT;
203+
tStarterInit.tFlags |= PL_STARTER_FLAGS_CONSOLE_EXT;
204+
tStarterInit.tFlags |= PL_STARTER_FLAGS_TOOLS_EXT;
205+
tStarterInit.tFlags |= PL_STARTER_FLAGS_DRAW_EXT;
206+
tStarterInit.tFlags |= PL_STARTER_FLAGS_UI_EXT;
207+
tStarterInit.tFlags |= PL_STARTER_FLAGS_SCREEN_LOG_EXT;
208+
209+
// initial flags
210+
tStarterInit.tFlags |= PL_STARTER_FLAGS_DEPTH_BUFFER;
211+
212+
// from a graphics standpoint, the starter extension is handling device, swapchain, renderpass
213+
// etc. which we will get to in later examples
214+
gptStarter->initialize(tStarterInit);
215+
216+
// initialize shader compiler
217+
static plShaderOptions tDefaultShaderOptions = PL_ZERO_INIT;
218+
tDefaultShaderOptions.apcIncludeDirectories[0] = "/shaders/";
219+
tDefaultShaderOptions.apcDirectories[0] = "/shaders/";
220+
tDefaultShaderOptions.apcDirectories[1] = "/shader-temp/";
221+
tDefaultShaderOptions.pcCacheOutputDirectory = "/shader-temp/";
222+
tDefaultShaderOptions.tFlags = PL_SHADER_FLAGS_AUTO_OUTPUT | PL_SHADER_FLAGS_INCLUDE_DEBUG | PL_SHADER_FLAGS_ALWAYS_COMPILE;
223+
gptShader->initialize(&tDefaultShaderOptions);
224+
225+
ptAppData->ptDevice = gptStarter->get_device();
210226

211-
ptAppData->ptSurface = gptGfx->create_surface(ptAppData->ptWindow);
212-
ptAppData->ptDevice = gptStarter->create_device(ptAppData->ptSurface);
227+
// initialize job system
228+
gptJobs->initialize({});
213229

214-
const plShaderVariantInit tShaderVariantInit = {
230+
const plShaderToolsInit tShaderVariantInit = {
215231
ptAppData->ptDevice
216232
};
217-
gptShaderVariant->initialize(tShaderVariantInit);
218-
219-
// create swapchain
220-
plSwapchainInit tSwapInit = PL_ZERO_INIT;
221-
tSwapInit.bVSync = true;
222-
tSwapInit.tSampleCount = 1;
223-
ptAppData->ptSwap = gptGfx->create_swapchain(ptAppData->ptDevice, ptAppData->ptSurface, &tSwapInit);
233+
gptShaderTools->initialize(tShaderVariantInit);
224234

225235
// setup reference renderer
226236
plRendererSettings tRenderSettings = PL_ZERO_INIT;
227237
tRenderSettings.ptDevice = ptAppData->ptDevice;
228238
tRenderSettings.uMaxTextureResolution = 1024;
229-
tRenderSettings.ptSwap = ptAppData->ptSwap;
239+
tRenderSettings.ptSwap = gptStarter->get_swapchain();
230240
gptRenderer->initialize(tRenderSettings);
231241

232242
// initialize ecs component library
@@ -256,14 +266,6 @@ pl_app_load(plApiRegistryI* ptApiRegistry, plAppData* ptAppData)
256266

257267
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~setup draw extensions~~~~~~~~~~~~~~~~~~~~~~~~~~~~
258268

259-
// initialize
260-
gptDraw->initialize(nullptr);
261-
gptDrawBackend->initialize(ptAppData->ptDevice);
262-
263-
// create font atlas
264-
plFontAtlas* ptAtlas = gptDraw->create_font_atlas();
265-
gptDraw->set_font_atlas(ptAtlas);
266-
267269
// create fonts
268270
plFontRange tFontRange = PL_ZERO_INIT;
269271
tFontRange.iFirstCodePoint = 0x0020;
@@ -276,7 +278,7 @@ pl_app_load(plApiRegistryI* ptApiRegistry, plAppData* ptAppData)
276278
tFontConfig0.uVOverSampling = 1;
277279
tFontConfig0.ptRanges = &tFontRange;
278280
tFontConfig0.uRangeCount = 1;
279-
ptAppData->tDefaultFont = gptDraw->add_font_from_file_ttf(ptAtlas, tFontConfig0, "/fonts/Cousine-Regular.ttf");
281+
ptAppData->tDefaultFont = gptDraw->add_font_from_file_ttf(gptDraw->get_current_font_atlas(), tFontConfig0, "/fonts/Cousine-Regular.ttf");
280282

281283
plFontRange tIconRange = PL_ZERO_INIT;
282284
tIconRange.iFirstCodePoint = ICON_MIN_FA;
@@ -290,30 +292,21 @@ pl_app_load(plApiRegistryI* ptApiRegistry, plAppData* ptAppData)
290292
tFontConfig1.ptMergeFont = ptAppData->tDefaultFont;
291293
tFontConfig1.ptRanges = &tIconRange;
292294
tFontConfig1.uRangeCount = 1;
293-
gptDraw->add_font_from_file_ttf(ptAtlas, tFontConfig1, "/fonts/fa-solid-900.otf");
294-
295-
// build font atlas
296-
plCommandBuffer* ptCmdBuffer = gptGfx->request_command_buffer(gptRenderer->get_command_pool());
297-
gptDrawBackend->build_font_atlas(ptCmdBuffer, ptAtlas);
298-
gptGfx->return_command_buffer(ptCmdBuffer);
299-
300-
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~message extension~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
301-
302-
gptScreenLog->initialize({ptAppData->tDefaultFont});
303-
304-
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ui extension~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
305-
306-
gptUI->initialize();
295+
gptDraw->add_font_from_file_ttf(gptDraw->get_current_font_atlas(), tFontConfig1, "/fonts/fa-solid-900.otf");
296+
gptStarter->set_default_font(ptAppData->tDefaultFont);
307297
gptUI->set_default_font(ptAppData->tDefaultFont);
308298

299+
gptStarter->finalize();
300+
309301
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~app stuff~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
310302

311303
// temporary draw layer for submitting fullscreen quad of offscreen render
312304
ptAppData->ptDrawLayer = gptDraw->request_2d_layer(gptUI->get_draw_list());
313305

314306
pl__find_models(ptAppData);
315307

316-
gptDearImGui->initialize(ptAppData->ptDevice, ptAppData->ptSwap, gptRenderer->get_main_render_pass());
308+
gptDearImGui->initialize(ptAppData->ptDevice, gptStarter->get_swapchain(), gptStarter->get_render_pass());
309+
// ImGui::GetIO().ConfigFlags &= ~ImGuiBackendFlags_PlatformHasViewports;
317310
ImPlot::SetCurrentContext((ImPlotContext*)ptDataRegistry->get_data("implot"));
318311
ImGuiIO& tImGuiIO = ImGui::GetIO();
319312
tImGuiIO.IniFilename = nullptr;
@@ -351,26 +344,18 @@ pl_app_shutdown(plAppData* ptAppData)
351344

352345
gptConfig->save_to_disk(nullptr);
353346
gptConfig->cleanup();
354-
355-
gptDrawBackend->cleanup_font_atlas(gptDraw->get_current_font_atlas());
356-
gptUI->cleanup();
357347
gptEcsTools->cleanup();
358348
gptPhysics->cleanup();
359349
gptShader->cleanup();
360-
gptConsole->cleanup();
361350
gptScreenLog->cleanup();
362-
gptDrawBackend->cleanup();
363351
if(ptAppData->ptView)
364352
gptRenderer->cleanup_view(ptAppData->ptView);
365353
if(ptAppData->ptScene)
366354
gptRenderer->cleanup_scene(ptAppData->ptScene);
367355
gptEcs->cleanup();
368356
gptRenderer->cleanup();
369-
gptShaderVariant->cleanup();
370-
gptGfx->cleanup_swapchain(ptAppData->ptSwap);
371-
gptGfx->cleanup_surface(ptAppData->ptSurface);
372-
gptGfx->cleanup_device(ptAppData->ptDevice);
373-
gptGfx->cleanup();
357+
gptShaderTools->cleanup();
358+
gptStarter->cleanup();
374359
gptWindows->destroy(ptAppData->ptWindow);
375360
pl_sb_free(ptAppData->sbtTestModels);
376361
PL_FREE(ptAppData);
@@ -385,7 +370,7 @@ pl_app_resize(plWindow*, plAppData* ptAppData)
385370
{
386371
plIO* ptIO = gptIO->get_io();
387372
ptAppData->bResize = true;
388-
gptRenderer->resize();
373+
gptStarter->resize();
389374
}
390375

391376
//-----------------------------------------------------------------------------
@@ -395,23 +380,19 @@ pl_app_resize(plWindow*, plAppData* ptAppData)
395380
PL_EXPORT void
396381
pl_app_update(plAppData* ptAppData)
397382
{
398-
gptProfile->begin_frame();
383+
if(!gptStarter->begin_frame())
384+
return;
385+
399386
pl_begin_cpu_sample(gptProfile, 0, __FUNCTION__);
400387

401-
gptIO->new_frame();
402388
gptResource->new_frame();
403389

404390
// for convience
405391
plIO* ptIO = gptIO->get_io();
406392

407-
if(!gptRenderer->begin_frame())
408-
{
409-
pl_end_cpu_sample(gptProfile, 0);
410-
gptProfile->end_frame();
411-
return;
412-
}
393+
gptRenderer->begin_frame();
413394

414-
gptDearImGui->new_frame(ptAppData->ptDevice, gptRenderer->get_main_render_pass());
395+
gptDearImGui->new_frame(ptAppData->ptDevice, gptStarter->get_render_pass());
415396

416397
if(ptAppData->bResize)
417398
{
@@ -421,20 +402,8 @@ pl_app_update(plAppData* ptAppData)
421402
ptAppData->bResize = false;
422403
}
423404

424-
gptDrawBackend->new_frame();
425-
gptUI->new_frame();
426-
427405
// update statistics
428-
gptStats->new_frame();
429-
static double* pdFrameTimeCounter = nullptr;
430-
static double* pdMemoryCounter = nullptr;
431-
if(!pdFrameTimeCounter)
432-
pdFrameTimeCounter = gptStats->get_counter("frametime (ms)");
433-
if(!pdMemoryCounter)
434-
pdMemoryCounter = gptStats->get_counter("CPU memory");
435-
*pdFrameTimeCounter = (double)ptIO->fDeltaTime * 1000.0;
436-
*pdMemoryCounter = (double)gptMemory->get_memory_usage();
437-
gptShaderVariant->update_stats();
406+
gptShaderTools->update_stats();
438407

439408
if(ptAppData->ptScene)
440409
{
@@ -571,13 +540,6 @@ pl_app_update(plAppData* ptAppData)
571540
gptRenderer->render_view(ptAppData->ptView, ptCamera, ptAppData->bFrustumCulling ? ptActiveCullCamera : nullptr);
572541
}
573542

574-
if(gptIO->is_key_pressed(PL_KEY_F1, false))
575-
{
576-
gptConsole->open();
577-
}
578-
579-
gptConsole->update();
580-
581543
ImGui::DockSpaceOverViewport(0, 0, ImGuiDockNodeFlags_PassthruCentralNode);
582544

583545
if(ImGui::BeginMainMenuBar())
@@ -619,8 +581,6 @@ pl_app_update(plAppData* ptAppData)
619581
if(ptAppData->bShowUiDemo)
620582
pl__show_ui_demo_window(ptAppData);
621583

622-
gptTools->update();
623-
624584
if(ptAppData->bShowUiStyle)
625585
gptUI->show_style_editor_window(&ptAppData->bShowUiStyle);
626586

@@ -677,31 +637,11 @@ pl_app_update(plAppData* ptAppData)
677637
if(ptAppData->bShowImGuiDemo)
678638
ImGui::ShowDemoWindow(&ptAppData->bShowImGuiDemo);
679639

680-
plRenderEncoder* ptRenderEncoder = nullptr;
681-
plCommandBuffer* ptCommandBuffer = nullptr;
682-
gptRenderer->begin_final_pass(&ptRenderEncoder, &ptCommandBuffer);
683-
684-
// render ui
685-
pl_begin_cpu_sample(gptProfile, 0, "render ui");
686-
687-
gptDearImGui->render(ptRenderEncoder, ptCommandBuffer);
688-
689-
gptUI->end_frame();
690-
691-
float fWidth = ptIO->tMainViewportSize.x;
692-
float fHeight = ptIO->tMainViewportSize.y;
693-
gptDrawBackend->submit_2d_drawlist(gptUI->get_draw_list(), ptRenderEncoder, fWidth, fHeight, gptGfx->get_swapchain_info(ptAppData->ptSwap).tSampleCount);
694-
gptDrawBackend->submit_2d_drawlist(gptUI->get_debug_draw_list(), ptRenderEncoder, fWidth, fHeight, gptGfx->get_swapchain_info(ptAppData->ptSwap).tSampleCount);
695-
pl_end_cpu_sample(gptProfile, 0);
696-
697-
plDrawList2D* ptMessageDrawlist = gptScreenLog->get_drawlist(tLogOffset.x, tLogOffset.y, fWidth * 0.2f, fHeight);
698-
gptDrawBackend->submit_2d_drawlist(ptMessageDrawlist, ptRenderEncoder, fWidth, fHeight, gptGfx->get_swapchain_info(ptAppData->ptSwap).tSampleCount);
699-
700-
701-
gptRenderer->end_final_pass(ptRenderEncoder, ptCommandBuffer);
702-
640+
plRenderEncoder* ptRenderEncoder = gptStarter->begin_main_pass();
641+
gptDearImGui->render(ptRenderEncoder, gptGfx->get_encoder_command_buffer(ptRenderEncoder));
642+
gptStarter->end_main_pass();
703643
pl_end_cpu_sample(gptProfile, 0);
704-
gptProfile->end_frame();
644+
gptStarter->end_frame();
705645
}
706646

707647
//-----------------------------------------------------------------------------
@@ -1084,8 +1024,13 @@ pl__show_editor_window(plAppData* ptAppData)
10841024
if(ImGui::CollapsingHeader(ICON_FA_DICE_D6 " Graphics"))
10851025
{
10861026
plRendererRuntimeOptions* ptRuntimeOptions = gptRenderer->get_runtime_options();
1087-
if(ImGui::Checkbox("VSync", &ptRuntimeOptions->bVSync))
1088-
ptRuntimeOptions->bReloadSwapchain = true;
1027+
if(ImGui::Checkbox("VSync", &ptAppData->bVSync))
1028+
{
1029+
if(ptAppData->bVSync)
1030+
gptStarter->activate_vsync();
1031+
else
1032+
gptStarter->deactivate_vsync();
1033+
}
10891034
ImGui::Checkbox("Show Origin", &ptRuntimeOptions->bShowOrigin);
10901035
ImGui::Checkbox("Show BVH", &ptAppData->bShowBVH);
10911036
ImGui::Checkbox("Show Skybox", &ptAppData->bShowSkybox);

0 commit comments

Comments
 (0)