This commit is contained in:
2025-01-17 16:18:40 -06:00
parent 406c7ea590
commit aa38fd2c19
3 changed files with 33 additions and 19 deletions

View File

@@ -28,6 +28,10 @@ var sprite = {
image: undefined,
get diffuse() { return this.image; },
set diffuse(x) {},
set color(x) {
this._sprite.color = x;
},
get color() { return this._sprite.color; },
anim_speed: 1,
play(str, loop = true, reverse = false, fn) {
if (!this.animset) {

View File

@@ -772,7 +772,7 @@ function sprites_to_queue(ysort = false)
//var culled = spritetree.find(prosperon.camera.pos, prosperon.camera.size);
//var culled = spritetree.find(prosperon.camera.transform.pos,prosperon.camera.size)
// var culled = os.cull_sprites(allsprites,prosperon.camera);
var cmd = render._main.make_sprite_queue(culled, prosperon.camera, sprite_pipeline);
var cmd = render._main.make_sprite_queue(culled, prosperon.camera, sprite_pipeline, 1);
return cmd;
var sprites = allsprites;
// for (var i = 0; i < sprites.length; i++)
@@ -911,6 +911,8 @@ render.rectangle = function render_rectangle(rect, color = Color.white, pipeline
render.particles = function render_particles(emitter, pipeline = sprite_pipeline)
{
if (!emitter.diffuse) throw new Error("emitter does not have a proper diffuse");
var mesh = render._main.make_sprite_mesh(emitter.particles);
if (mesh.num_indices === 0) return;
current_queue.push({
@@ -1069,9 +1071,13 @@ render.image = function image(image, rect = [0,0], rotation = 0, color, pipeline
if (pipeline) cmd.pipeline = pipeline;
if (color) cmd.color = color;
current_queue.push(cmd)
var sprite = os.make_sprite();
sprite.set_image(image);
sprite.set_rect(rect);
return sprite;
};
var sprite_buf = [];
render.images = function images(image, rects, config)
{
if (!image) throw Error ('Need an image to render.');
@@ -1085,10 +1091,8 @@ render.images = function images(image, rects, config)
for (var rect of rects) {
// get sprite from sprite_buf, or make a new one
rect.__proto__ = bb;
var sprite;
if (sprite_buf.length) sprite = sprite_buf.pop();
else sprite = os.make_sprite();
sprite.set_affine(rect);
var sprite = os.make_sprite();
sprite.set_rect(rect);
sprite.set_image(image);
sprites.push(sprite)
}
@@ -1098,7 +1102,14 @@ render.images = function images(image, rects, config)
for (var i = 0; i < cmds.length; i++)
current_queue.push(cmds[i])
sprite_buf = sprite_buf.concat(sprites)
return sprites;
}
render.sprites = function(sprites, sort = 0, pipeline = sprite_pipeline)
{
var cmds = render._main.make_sprite_queue(sprites, prosperon.camera, pipeline, sort);
for (var i = 0; i < cmds.length; i++)
current_queue.push(cmds[i]);
}
var tile_def = {repeat_x:true, repeat_y:true};

View File

@@ -2164,8 +2164,6 @@ int fibonacci(int n) {
JSC_CCALL(vector_fib,
int n = js2number(js,argv[0]);
int fib = fibonacci(n);
printf("ANSWER IS %d\n", fib);
)
JSC_CCALL(vector_from_to,
@@ -4105,6 +4103,7 @@ JSC_CCALL(gpu_make_sprite_queue,
sprite *sprites = NULL;
size_t quads = 0;
int needfree = 1;
int sort = js2number(js,argv[3]);
// test for fastest
size_t size;
@@ -4138,7 +4137,8 @@ JSC_CCALL(gpu_make_sprite_queue,
}
}
qsort(sprites, quads, sizeof(sprite), sort_sprite);
if (sort) qsort(sprites, quads, sizeof(sprite), sort_sprite);
else qsort(sprites, quads, sizeof(sprite), sort_sprite_texture);
struct quad_buffers buffers = quad_buffers_new(quads*4);
@@ -4487,7 +4487,6 @@ JSC_CCALL(gpu_upload,
// ensure it's large enough
size_t transfer_size = js_getnum_str(js,js_transfer, "size");
if (transfer_size < total_size_needed) {
printf("New transfer buffer needed of size %zu, old was %zu\n", total_size_needed, transfer_size);
total_size_needed *= 1.5;
transfer = SDL_CreateGPUTransferBuffer( gpu, &(SDL_GPUTransferBufferCreateInfo){
.usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD,
@@ -4935,7 +4934,7 @@ static const JSCFunctionListEntry js_SDL_GPUDevice_funcs[] = {
MIST_FUNC_DEF(gpu, load_texture, 2),
MIST_FUNC_DEF(gpu, texture, 1),
MIST_FUNC_DEF(gpu, make_sprite_mesh, 2),
MIST_FUNC_DEF(gpu, make_sprite_queue, 3),
MIST_FUNC_DEF(gpu, make_sprite_queue, 4),
MIST_FUNC_DEF(gpu, make_quad, 0),
MIST_FUNC_DEF(gpu, driver, 0),
MIST_FUNC_DEF(gpu, make_shader, 1),
@@ -5751,7 +5750,6 @@ JSC_SCALL(io_writepath,
JSC_SSCALL(io_gamemode,
const char *prefdir = PHYSFS_getPrefDir(str, str2);
printf("%s\n", prefdir);
PHYSFS_setWriteDir(prefdir);
)
@@ -7193,9 +7191,6 @@ int js_qtree_cmp(struct qtree_sprite *v, aabb *range)
.w = range->dims.w*2.0,
.h = range->dims.h*2.0
};
// printf("INTERSECT? %d\n", SDL_HasRectIntersectionFloat(&vrect,&ab));
// printf("ab: %g,%g,%g,%g\n", ab.x,ab.y,ab.w,ab.h);
// printf("vrect:%g,%g,%g,%g\n", vrect.x,vrect.y,vrect.w,vrect.h);
return SDL_HasRectIntersectionFloat(&v->rect, &ab);
}
@@ -7462,12 +7457,15 @@ JSC_GETSET(sprite, color, color)
JSC_CCALL(sprite_set_affine,
sprite *sp = js2sprite(js,self);
transform *t = js2transform(js,argv[0]);
if (!t)
sp->affine = js2rect(js,argv[0]);
else
if (t)
sp->affine = transform2rect(t);
)
JSC_CCALL(sprite_set_rect,
sprite *sp = js2sprite(js,self);
sp->affine = js2rect(js,argv[0]);
)
JSC_CCALL(sprite_set_image,
sprite *sp = js2sprite(js,self);
if (!JS_IsUndefined(sp->image))
@@ -7481,6 +7479,7 @@ JSC_CCALL(sprite_set_image,
static const JSCFunctionListEntry js_sprite_funcs[] = {
MIST_FUNC_DEF(sprite, set_affine, 1),
MIST_FUNC_DEF(sprite, set_rect, 1),
MIST_FUNC_DEF(sprite, set_image, 1),
CGETSET_ADD(sprite, layer),
CGETSET_ADD(sprite, color),