restore y axis sprite sort
This commit is contained in:
@@ -14,7 +14,7 @@ var make_point_obj = function (o, p) {
|
||||
|
||||
var sprite_addbucket = function (sprite) {
|
||||
if (!sprite.image) return;
|
||||
var layer = 1000000 + sprite.gameobject.drawlayer * 1000 - sprite.gameobject.pos.y;
|
||||
var layer = sprite.z_value();
|
||||
sprite_buckets[layer] ??= {};
|
||||
sprite_buckets[layer][sprite.image.texture.path] ??= [];
|
||||
sprite_buckets[layer][sprite.image.texture.path].push(sprite);
|
||||
@@ -40,6 +40,9 @@ var sprite = {
|
||||
image: undefined,
|
||||
get diffuse() { return this.image.texture; },
|
||||
set diffuse(x) {},
|
||||
z_value() {
|
||||
return 100000 + this.gameobject.drawlayer * 1000 - this.gameobject.pos.y;
|
||||
},
|
||||
anim_speed: 1,
|
||||
play(str, loop = true, reverse = false) {
|
||||
if (!this.animset) {
|
||||
@@ -148,7 +151,7 @@ var sprite = {
|
||||
},
|
||||
anchor: [0, 0],
|
||||
sync() {
|
||||
var layer = 1000000 + this.gameobject.drawlayer * 1000 - this.gameobject.pos.y;
|
||||
var layer = this.z_value();
|
||||
if (layer === this._oldlayer && this.path === this._oldpath) return;
|
||||
|
||||
sprite_rmbucket(this);
|
||||
|
||||
@@ -72,6 +72,7 @@ var entity = {
|
||||
},
|
||||
set pos(x) {
|
||||
this.transform.pos = x;
|
||||
this.sync();
|
||||
},
|
||||
get angle() {
|
||||
return this.transform.angle;
|
||||
|
||||
@@ -709,6 +709,38 @@ render.draw_gui = true;
|
||||
render.draw_gizmos = true;
|
||||
|
||||
render.sprites = function render_sprites() {
|
||||
// bucket & draw
|
||||
/* var sorted = allsprites.sort((a,b) => {
|
||||
if (a.gameobject.drawlayer !== b.gameobject.drawlayer) return a.gameobject.drawlayer - b.gameobject.drawlayer;
|
||||
if (a.image.texture !== b.image.texture) return a.image.texture.path.localeCompare(b.image.texture.path);
|
||||
return a.gameobject.transform.pos.y - b.gameobject.transform.pos.y;
|
||||
});
|
||||
|
||||
if (sorted.length === 0) return;
|
||||
|
||||
var tex = undefined;
|
||||
var buckets = [];
|
||||
var group = [sorted[0]];
|
||||
|
||||
for (var i = 1; i < sorted.length; i++) {
|
||||
if (sorted[i].image.texture !== sorted[i-1].image.texture) {
|
||||
buckets.push(group);
|
||||
group = [];
|
||||
}
|
||||
group.push(sorted[i]);
|
||||
}
|
||||
if (group.length>0) buckets.push(group);
|
||||
render.use_shader(spritessboshader);
|
||||
for (var img of buckets) {
|
||||
var sparray = img;
|
||||
if (sparray.length === 0) continue;
|
||||
var ss = sparray[0];
|
||||
ss.baseinstance = render.make_sprite_ssbo(sparray,sprite_ssbo);
|
||||
render.use_mat(ss);
|
||||
render.draw(shape.quad,sprite_ssbo,sparray.length);
|
||||
}
|
||||
*/
|
||||
|
||||
profile.report("sprites");
|
||||
profile.report("drawing");
|
||||
render.use_shader(spritessboshader);
|
||||
|
||||
Reference in New Issue
Block a user