Skip to content

Commit 59f5d0d

Browse files
authored
Merge pull request #99 from yuchanns/feat/ext-material
feat(extlua): support external material
2 parents 9e0fce6 + 376c4d0 commit 59f5d0d

53 files changed

Lines changed: 3882 additions & 2284 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Makefile

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,20 +58,25 @@ $(LUA_O) : $(LUASRC)
5858

5959
SHADER_SRC=$(wildcard src/*.glsl)
6060
SHADER_O=$(patsubst src/%.glsl,$(BUILD)/%.glsl.h,$(SHADER_SRC))
61+
EXTLUA_SHADER_SRC=$(wildcard extlua/*.glsl)
62+
EXTLUA_SHADER_O=$(patsubst extlua/%.glsl,$(BUILD)/%.glsl.h,$(EXTLUA_SHADER_SRC))
6163
SHADERINC=-I$(BUILD)
6264

6365
$(BUILD)/%.glsl.h : src/%.glsl
6466
$(SHDC) --input $< --output $@ --slang hlsl4 --format sokol
6567

66-
shader : $(SHADER_O)
68+
$(BUILD)/%.glsl.h : extlua/%.glsl
69+
$(SHDC) --input $< --output $@ --slang hlsl4 --format sokol
70+
71+
shader : $(SHADER_O) $(EXTLUA_SHADER_O)
6772

6873
MAIN_FULL=$(wildcard src/*.c)
6974
PLATFORM_FULL=$(wildcard src/platform/windows/*.c)
7075
MAIN_C=$(notdir $(MAIN_FULL))
7176
MAIN_O=$(patsubst %.c,$(BUILD)/soluna_%.o,$(MAIN_C))
7277
PLATFORM_C=$(notdir $(PLATFORM_FULL))
7378
PLATFORM_O=$(patsubst %.c,$(BUILD)/platform_%.o,$(PLATFORM_C))
74-
EXTLUA_O=$(BUILD)/extlua_impl.o
79+
EXTLUA_O=$(BUILD)/extlua_impl.o $(BUILD)/sokolapi_impl.o $(BUILD)/solunaapi_impl.o
7580

7681
$(MAIN_O) : $(SHADER_O)
7782

@@ -82,7 +87,7 @@ LTASK_O=$(patsubst %.c,$(BUILD)/ltask_%.o,$(LTASK_C))
8287
LTASK_LUASRC=\
8388
3rd/ltask/service/root.lua\
8489
3rd/ltask/service/timer.lua\
85-
$(wildcard 3rd/ltask/lualib/*.lua src/lualib/*.lua src/service/*.lua)
90+
$(wildcard 3rd/ltask/lualib/*.lua src/lualib/*.lua src/service/*.lua src/material/*.lua)
8691

8792
LTASK_LUACODE=$(patsubst %.lua, $(BUILD)/%.lua.h, $(notdir $(LTASK_LUASRC)))
8893

@@ -116,6 +121,9 @@ $(BUILD)/%.lua.h : src/lualib/%.lua
116121
$(BUILD)/%.lua.h : src/service/%.lua
117122
$(COMPILE_LUA)
118123

124+
$(BUILD)/%.lua.h : src/material/%.lua
125+
$(COMPILE_LUA)
126+
119127
$(BUILD)/%.dl.h : src/data/%.dl
120128
$(COMPILE_DATALIST)
121129

@@ -153,11 +161,17 @@ $(BUILD)/minizip_%.o : 3rd/zlib/contrib/minizip/%.c
153161
$(BUILD)/extlua_impl.o : extlua/extlua_impl.c
154162
$(COMPILE_C) $(LUAINC)
155163

164+
$(BUILD)/sokolapi_impl.o : extlua/sokolapi_impl.c
165+
$(COMPILE_C) $(3RDINC)
166+
167+
$(BUILD)/solunaapi_impl.o : extlua/solunaapi_impl.c
168+
$(COMPILE_C) $(LUAINC) $(3RDINC)
169+
156170
$(BIN)/$(APPNAME): $(MAIN_O) $(PLATFORM_O) $(EXTLUA_O) $(LTASK_O) $(LUA_O) $(DATALIST_O) $(BUILD)/yoga.o $(ZLIB_O) $(MINIZIP_O)
157171
$(LD) $(OUTPUT_EXE) $@ $^ $(LDFLAGS)
158172

159-
$(BIN)/sample.dll : extlua/extlua.c extlua/extlua_sample.c
160-
$(CC) $(CFLAGS) $(SHARED) $(OUTPUT_EXE) $@ $^ $(LUAINC)
173+
$(BIN)/sample.dll : extlua/extlua.c extlua/sokolapi.c extlua/solunaapi.c extlua/extlua_sample.c | $(EXTLUA_SHADER_O)
174+
$(CC) $(CFLAGS) $(SHARED) $(OUTPUT_EXE) $@ $^ $(LUAINC) $(3RDINC) $(SHADERINC) -Iextlua
161175

162176
extlua_sample: $(BIN)/sample.dll
163177

clibs/sample/make.lua

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
local lm = require "luamake"
2+
local platform = require "bee.platform"
3+
4+
lm.rootdir = lm.basedir
5+
6+
local function shdc_plat()
7+
if lm.os == "windows" then
8+
return "win32"
9+
end
10+
if lm.os == "linux" then
11+
return "linux"
12+
end
13+
if lm.os == "macos" then
14+
return platform.Arch == "arm64" and "osx_arm64" or "osx"
15+
end
16+
return "unknown"
17+
end
18+
19+
local paths = {
20+
windows = "$PATH/$NAME.exe",
21+
macos = "$PATH/$NAME",
22+
linux = "$PATH/$NAME",
23+
}
24+
25+
local shdc = assert(paths[lm.os]):gsub("%$(%u+)", {
26+
PATH = tostring(lm.basedir / "bin/sokol-tools-bin/bin" / shdc_plat()),
27+
NAME = "sokol-shdc",
28+
})
29+
30+
local function shader_lang()
31+
local plat = lm.platform
32+
if plat == "msvc" or plat == "clang-cl" or plat == "mingw" then
33+
return "hlsl4"
34+
end
35+
if plat == "macos" then
36+
return "metal_macos"
37+
end
38+
if plat == "emcc" then
39+
return "wgsl"
40+
end
41+
if plat == "linux" then
42+
return "glsl430"
43+
end
44+
return "unknown"
45+
end
46+
47+
local function compile_shader(src, name)
48+
local dep = name .. "_shader"
49+
local target = lm.builddir .. "/" .. name
50+
lm:runlua(dep) {
51+
script = lm.basedir .. "/clibs/soluna/shader2c.lua",
52+
inputs = lm.basedir .. "/" .. src,
53+
outputs = lm.basedir .. "/" .. target,
54+
args = {
55+
shdc,
56+
"$in",
57+
"$out",
58+
shader_lang(),
59+
},
60+
}
61+
return dep
62+
end
63+
64+
local sample_shader = compile_shader("extlua/perspective_quad.glsl", "perspective_quad.glsl.h")
65+
66+
lm:dll "sample" {
67+
sources = {
68+
"extlua/extlua.c",
69+
"extlua/sokolapi.c",
70+
"extlua/solunaapi.c",
71+
"extlua/extlua_sample.c",
72+
},
73+
objdeps = {
74+
sample_shader,
75+
},
76+
includes = {
77+
"3rd/lua",
78+
"3rd",
79+
"build",
80+
"extlua",
81+
},
82+
}

clibs/soluna/compile_lua.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ local lua_code_src = {
3030
"3rd/ltask/lualib",
3131
"src/service",
3232
"src/lualib",
33+
"src/material",
3334
}
3435

3536
return function(objdeps)

clibs/soluna/make.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ lm:source_set "soluna_src" {
3131
sources = {
3232
"src/*.c",
3333
"extlua/extlua_impl.c",
34+
"extlua/sokolapi_impl.c",
35+
"extlua/solunaapi_impl.c",
3436
},
3537
objdeps = objdeps,
3638
defines = {

docs/material_perspective_quad.lua

Lines changed: 0 additions & 27 deletions
This file was deleted.

0 commit comments

Comments
 (0)