diff --git a/meson.build b/meson.build index 496fc178..be6aaa01 100644 --- a/meson.build +++ b/meson.build @@ -71,7 +71,9 @@ sdl3_opts.add_cmake_defines({ 'SDL_SHARED': 'OFF', 'SDL_TEST': 'OFF', 'CMAKE_BUILD_TYPE': 'Release', - 'SDL_THREADS': 'ON' + 'SDL_THREADS': 'ON', + 'SDL_PIPEWIRE': 'ON', + 'SDL_PULSEAUDIO': 'ON', }) cc = meson.get_compiler('c') diff --git a/scripts/modules/draw2d.js b/scripts/modules/draw2d.js index 55408ebe..f0052d0f 100644 --- a/scripts/modules/draw2d.js +++ b/scripts/modules/draw2d.js @@ -387,8 +387,12 @@ draw.slice9 = function slice9(image, rect = [0,0], slice = 0, info = slice9_info if (!image) throw Error('Need an image to render.') if (typeof image === "string") image = graphics.texture(image) - var mesh = geometry.slice9(image.texture, rect, util.normalizeSpacing(slice), info) - render.queue({ + + render.slice9(image, rect, slice, slice9_info, pipeline); +// var mesh = geometry.slice9(image.texture, rect, util.normalizeSpacing(slice), info) +// console.log(json.encode(mesh)) +// render.geometry(image, mesh, pipeline) +/* render.queue({ type: 'geometry', mesh, image, @@ -396,6 +400,7 @@ draw.slice9 = function slice9(image, rect = [0,0], slice = 0, info = slice9_info first_index:0, num_indices:mesh.num_indices }) +*/ } draw.slice9[prosperon.DOC] = ` :param image: An image object or string path to a texture. diff --git a/scripts/modules/sdl_render.js b/scripts/modules/sdl_render.js index bbdb6a7c..3519ed42 100644 --- a/scripts/modules/sdl_render.js +++ b/scripts/modules/sdl_render.js @@ -2,6 +2,8 @@ var render = {} var context +var util = use('util') + render.initialize = function(config) { var default_conf = { @@ -97,9 +99,14 @@ render.settings = function(set) context.draw_color(set.color) } -render.geometry = function(mesh, pipeline) +render.geometry = function(image, mesh, pipeline) { - + context.geometry(image, mesh) +} + +render.slice9 = function(image, rect, slice, info, pipeline) +{ + context.slice9(image.texture, image.rect_px, util.normalizeSpacing(slice), rect); } render.get_image = function(rect) diff --git a/source/jsffi.c b/source/jsffi.c index 8b4c9011..f6558dad 100644 --- a/source/jsffi.c +++ b/source/jsffi.c @@ -1087,6 +1087,11 @@ QJSCLASS(datastream,) QJSCLASS(SDL_Window,) QJSCLASS(SDL_Camera,) +void SDL_AudioStream_free(JSRuntime *rt, SDL_AudioStream *st) { + SDL_DestroyAudioStream(st); +} +QJSCLASS(SDL_AudioStream,) + void SDL_Texture_free(JSRuntime *rt, SDL_Texture *t){ SDL_DestroyTexture(t); } @@ -2907,6 +2912,7 @@ JSC_CCALL(renderer_geometry, JS_FreeValue(js,color); JS_FreeValue(js,uv); JS_FreeValue(js,indices); + printf("AMDET\n"); ) JSC_CCALL(renderer_logical_size, @@ -3093,6 +3099,15 @@ JSC_CCALL(renderer_sprite, SDL_RenderTexture(ctx->sdl, tex, &uv, &dst); ) +JSC_CCALL(renderer_slice9, + renderer_ctx *ctx = js2renderer_ctx(js, self); + SDL_Texture *tex = js2SDL_Texture(js,argv[0]); + rect src = js2rect(js, argv[1]); + lrtb exts = js2lrtb(js, argv[2]); + rect dst = renderer_worldrect_to_screen(ctx, js2rect(js, argv[3])); + SDL_RenderTexture9Grid(ctx->sdl, tex, &src, exts.l, exts.r, exts.t, exts.b, 0.0f, &dst); +) + static const JSCFunctionListEntry js_renderer_ctx_funcs[] = { MIST_FUNC_DEF(SDL_Renderer, draw_color, 1), MIST_FUNC_DEF(SDL_Renderer, present, 0), @@ -3105,6 +3120,7 @@ static const JSCFunctionListEntry js_renderer_ctx_funcs[] = { MIST_FUNC_DEF(renderer, sprite, 1), MIST_FUNC_DEF(renderer, load_texture, 1), MIST_FUNC_DEF(renderer, get_image, 1), + MIST_FUNC_DEF(renderer, slice9, 4), MIST_FUNC_DEF(renderer, scale, 1), MIST_FUNC_DEF(renderer, logical_size,1), @@ -3119,6 +3135,85 @@ static const JSCFunctionListEntry js_renderer_ctx_funcs[] = { MIST_FUNC_DEF(renderer, make_sprite_mesh, 2), }; +static int format_str_to_enum(const char *f, SDL_AudioFormat *out) +{ + struct { const char *s; SDL_AudioFormat f; } map[] = { + {"u8", SDL_AUDIO_U8 }, {"s16", SDL_AUDIO_S16}, + {"s32", SDL_AUDIO_S32}, {"f32", SDL_AUDIO_F32} + }; + for (size_t i=0;imodule_registry, MISTLINE(wota)); arrput(rt->module_registry, MISTLINE(crypto)); arrput(rt->module_registry, MISTLINE(blob)); + + arrput(rt->module_registry, MISTLINE(sdl_audio)); #ifdef TRACY_ENABLE arrput(rt->module_registry, MISTLINE(tracy)); diff --git a/source/prosperon.c b/source/prosperon.c index 82c9f522..9721cf33 100644 --- a/source/prosperon.c +++ b/source/prosperon.c @@ -1328,7 +1328,7 @@ int main(int argc, char **argv) } } - SDL_Init(SDL_INIT_EVENTS | SDL_INIT_VIDEO); + SDL_Init(SDL_INIT_EVENTS | SDL_INIT_VIDEO | SDL_INIT_AUDIO); queue_event = SDL_RegisterEvents(1); int cores = SDL_GetNumLogicalCPUCores(); diff --git a/tests/camera.js b/tests/camera.js index 18e70d04..6f0db572 100644 --- a/tests/camera.js +++ b/tests/camera.js @@ -37,8 +37,7 @@ var hudcam = { var angle = 0 var pos = [0,0,0] -var s = 0 -var f = 0 + function loop() { pos.x += 1 @@ -59,9 +58,18 @@ function loop() draw.rectangle({x:350, y:60, width:200, height:120}, {radius:10,thickness:3}) */ render.camera(hudcam) - draw.image("button_grey", [0,0]) + draw.slice9("button_grey", {x:0,y:0,width:200,height:250}, 10) render.present() $_.delay(loop, 1/60) } +var sound = use('sound') +prosperon.myguy = sound.play("test.mp3") + +var ss = use('sdl_audio') +console.log(ss.drivers()) +console.log(ss.devices()) + +var feeder = ss.open_stream("playback", {format: "f32", channels:2, freq:48000}) + loop()