sokol-luajit/editor/editor.lua

192 lines
6.0 KiB
Lua
Raw Normal View History

2024-12-12 20:56:46 +08:00
local dirtools = require("tools.vfs.dirtools")
dirtools.init("sokol%-luajit")
dirtools.add_package_path("editor"..dirtools.sep.."twig")
2024-12-12 20:56:46 +08:00
--_G.SOKOL_DLL = "sokol_debug_dll"
local sapp = require("sokol_app")
sg = require("sokol_gfx")
sg = require("sokol_nuklear")
local nk = sg
2024-12-12 20:56:46 +08:00
local slib = require("sokol_libs") -- Warn - always after gfx!!
local hmm = require("hmm")
local hutils = require("hmm_utils")
local stb = require("stb")
2024-12-12 20:56:46 +08:00
local utils = require("utils")
local ffi = require("ffi")
-- --------------------------------------------------------------------------------------
2025-10-23 12:15:32 +08:00
local smgr = require("engine.utils.statemanager")
local engineState = require("engine.state_engine")
-- --------------------------------------------------------------------------------------
local shell32 = ffi.load("shell32")
ffi.cdef[[
void Sleep(uint32_t ms);
void * ShellExecuteA(const void * hwnd, const char * lpOperation, const char * lpFile, const char * lpParameters, char* lpDirectory, int nShowCmd);
int ShowWindow(const void * hWnd, int nCmdShow);
]]
local SW_MAXIMIZE = 3
-- --------------------------------------------------------------------------------------
local enabled_profile = arg[1] == "-profile"
local profile = nil
if(enabled_profile) then
profile = require("jit.profile")
function cb(thread, samples, vmstate)
print(profile.dumpstack(thread, "l\n", 1))
end
profile.start("fi4", cb)
end
-- --------------------------------------------------------------------------------------
-- Grab some gui elements for testing
local SmainGui = require("editor.states.mainGui")
engineState.queue( "mainGui", SmainGui, true )
-- --------------------------------------------------------------------------------------
local width = 1920
local height = 1080
if(arg[1] and arg[2]) then
width = tonumber(arg[1])
height = tonumber(arg[2])
end
print("Display: "..width .. " x ".. height)
-- --------------------------------------------------------------------------------------
local function ErrorCheck(status, err)
if(status == false) then
print(status)
print(err)
print(debug.traceback())
os.exit()
end
end
-- --------------------------------------------------------------------------------------
-- The project manager handles configuration of the project data (build, debug etc)
-- Project manager defines what worlds, assets and folders are accessible for the project
-- Note: the editor should _always_ have an active project. If it doesnt have one, it will
-- show a load panel to load one.
local projectmgr = require("editor.project-manager")
2024-12-12 20:56:46 +08:00
local function init()
projectmgr:init()
2024-12-12 20:56:46 +08:00
local desc = ffi.new("sg_desc[1]")
desc[0].environment = slib.sglue_environment()
desc[0].logger.func = slib.slog_func
desc[0].disable_validation = false
sg.sg_setup( desc )
local snk = ffi.new("snk_desc_t[1]")
snk[0].dpi_scale = sapp.sapp_dpi_scale()
snk[0].logger.func = slib.slog_func
nk.snk_setup(snk)
2024-12-12 20:56:46 +08:00
print("Sokol Is Valid: "..tostring(sg.sg_isvalid()))
engineState.ready = nil
mainState.ctx = nil
sapp.sapp_show_mouse(true)
sapp.sapp_set_window_title("Thunc Editor v"..PROJECT_VERSION)
2024-12-12 20:56:46 +08:00
local hwnd = sapp.sapp_win32_get_hwnd()
ffi.C.ShowWindow(hwnd, SW_MAXIMIZE)
end
2024-12-12 20:56:46 +08:00
-- --------------------------------------------------------------------------------------
local function input(event)
-- Only kick things off once the window is ready.
if(event.type == sapp.SAPP_EVENTTYPE_RESIZED) then
engineState.ready = true
2025-10-23 12:15:32 +08:00
if(mainState.ctx) then
local w = sapp.sapp_widthf()
local h = sapp.sapp_heightf()
local mainGui = smgr:GetState("mainGui")
mainGui:ReSize(w, h)
end
end
engineState.input(event, {})
2024-12-12 20:56:46 +08:00
end
-- --------------------------------------------------------------------------------------
local function frame()
-- /* NOTE: the vs_params_t struct has been code-generated by the shader-code-gen */
local w = sapp.sapp_widthf()
local h = sapp.sapp_heightf()
local t = (sapp.sapp_frame_duration() * 60.0)
local dt = sapp.sapp_frame_duration()
local ctx = nk.snk_new_frame()
if(engineState.ready == true and mainState.ctx == nil) then
mainState.ctx = ctx
ErrorCheck( pcall( engineState.init, w, h ) )
nk.nk_style_show_cursor(ctx)
elseif(mainState.ctx) then
mainState.ctx = ctx
end
ErrorCheck( pcall( engineState.update, dt ) )
2024-12-12 20:56:46 +08:00
-- // the sokol_gfx draw pass
local pass = ffi.new("sg_pass[1]")
pass[0].action.colors[0].load_action = sg.SG_LOADACTION_CLEAR
pass[0].action.colors[0].clear_value = { 0.25, 0.5, 0.7, 1.0 }
pass[0].swapchain = slib.sglue_swapchain()
sg.sg_begin_pass(pass)
nk.snk_render(sapp.sapp_width(), sapp.sapp_height())
sg.sg_end_pass()
sg.sg_commit()
2024-12-12 20:56:46 +08:00
-- Display frame stats in console.
-- hutils.show_stats()
end
-- --------------------------------------------------------------------------------------
local function cleanup()
nk.snk_shutdown()
2025-10-16 22:09:25 +08:00
sg.sg_shutdown()
2024-12-12 20:56:46 +08:00
end
-- --------------------------------------------------------------------------------------
local app_desc = ffi.new("sapp_desc[1]")
app_desc[0].init_cb = init
app_desc[0].frame_cb = frame
app_desc[0].cleanup_cb = cleanup
app_desc[0].event_cb = input
app_desc[0].width = width
app_desc[0].height = height
app_desc[0].high_dpi = true
2024-12-12 20:56:46 +08:00
app_desc[0].window_title = "editor - sokol"
app_desc[0].fullscreen = false
-- app_desc[0].icon.sokol_default = true
2024-12-12 20:56:46 +08:00
app_desc[0].enable_clipboard = true
app_desc[0].ios_keyboard_resizes_canvas = false
2024-12-12 20:56:46 +08:00
app_desc[0].logger.func = slib.slog_func
sapp.sapp_run( app_desc )
-- --------------------------------------------------------------------------------------
if(profile) then profile.stop() end
-- --------------------------------------------------------------------------------------