particles render without texture filter

This commit is contained in:
2024-11-07 16:24:07 -06:00
parent 413812b249
commit 03b4f9b52e
3 changed files with 26 additions and 20 deletions

View File

@@ -29,6 +29,8 @@ emitter.spawn = function (t) {
var par = this.dead.shift();
if (par) {
par.transform.unit();
par.transform.pos = t.pos;
par.transform.scale = this.scale;
this.particles.push(par);
par.time = 0;
@@ -65,6 +67,7 @@ emitter.step = function (dt) {
// update all particles
for (var p of this.particles) {
p.time += dt;
p.transform.move(p.body.velocity.scale(dt));
this.step_hook?.(p);
if (this.kill_hook?.(p) || p.time >= p.life) {
@@ -98,7 +101,6 @@ function update_emitters(dt) {
var arr = [];
function draw_emitters() {
return;
ssbo ??= render.make_textssbo();
render.use_shader("shaders/baseparticle.cg");
var buckets = {};
@@ -115,7 +117,7 @@ function draw_emitters() {
arr.length = 0;
var bucket = buckets[path];
bucket[0].baseinstance = base;
render.use_mat(bucket[0]);
render.use_mat({diffuse:bucket[0].diffuse.texture});
for (var e of bucket) {
if (e.particles.length === 0) continue;
for (var p of e.particles) arr.push(p);

View File

@@ -380,7 +380,7 @@ function create_shader_obj(file) {
var filez = inc.match(/#include <(.*)>/)[1];
var macro = io.slurp(filez);
if (!macro) {
filez = `shaders/${filez}`;
filez = `${filez}`;
macro = io.slurp(filez);
}
shader = shader.replace(inc, macro);
@@ -471,8 +471,8 @@ function make_shader(shader, pipe) {
var file = shader;
shader = io.slurp(file);
if (!shader) {
console.info(`not found! slurping shaders/${file}`);
shader = io.slurp(`shaders/${file}`);
console.info(`not found! slurping ${file}`);
shader = io.slurp(`${file}`);
}
var writejson = `.prosperon/${file.name()}.shader.json`;
@@ -653,18 +653,18 @@ var polyssboshader;
var sprite_ssbo;
render.init = function () {
textshader = make_shader("shaders/text_base.cg");
render.spriteshader = make_shader("shaders/sprite.cg");
spritessboshader = make_shader("shaders/sprite_ssbo.cg");
textshader = make_shader("text_base.cg");
render.spriteshader = make_shader("sprite.cg");
spritessboshader = make_shader("sprite_ssbo.cg");
var postpipe = Object.create(base_pipeline);
postpipe.cull = cull_map.none;
postpipe.primitive = primitive_map.triangle;
render.postshader = make_shader("shaders/simplepost.cg", postpipe);
slice9shader = make_shader("shaders/9slice.cg");
circleshader = make_shader("shaders/circle.cg");
polyshader = make_shader("shaders/poly.cg");
parshader = make_shader("shaders/baseparticle.cg");
polyssboshader = make_shader("shaders/poly_ssbo.cg");
render.postshader = make_shader("simplepost.cg", postpipe);
slice9shader = make_shader("9slice.cg");
circleshader = make_shader("circle.cg");
polyshader = make_shader("poly.cg");
parshader = make_shader("baseparticle.cg");
polyssboshader = make_shader("poly_ssbo.cg");
poly_ssbo = render.make_textssbo();
sprite_ssbo = render.make_textssbo();
@@ -839,7 +839,7 @@ function flush_poly() {
poly_idx = 0;
}
render.line = function render_line(points, color = Color.white, thickness = 1) {
render.line = function render_line(points, color = Color.white, thickness = 1, shader = polyssboshader, pipe = base_pipeline) {
for (var i = 0; i < points.length - 1; i++) {
var a = points[i];
var b = points[i + 1];
@@ -850,6 +850,8 @@ render.line = function render_line(points, color = Color.white, thickness = 1) {
poly.transform.scale = [dist, thickness, 1];
poly.color = color;
}
queued_shader = shader;
queued_pipe = pipe;
check_flush(flush_poly);
};
@@ -882,7 +884,6 @@ render.coordinate = function render_coordinate(pos, size, color) {
var queued_shader;
var queued_pipe;
render.rectangle = function render_rectangle(rect, color = Color.white, shader = polyssboshader, pipe = base_pipeline) {
var transform = os.make_transform();
var wh = [rect.width, rect.height];
var poly = poly_e();
var pos = [rect.x,rect.y].add([rect.width,rect.height].scale(0.5));
@@ -981,7 +982,7 @@ render.fillmask = function(ref)
{
render.forceflush();
var pipe = stencil_writer(ref);
render.use_shader('shaders/screenfill.cg', pipe);
render.use_shader('screenfill.cg', pipe);
render.draw(shape.quad);
}
@@ -1006,7 +1007,7 @@ Object.assign(stencil_inverter, {
render.invertmask = function()
{
render.forceflush();
render.use_shader('shaders/screenfill.cg', stencil_inverter);
render.use_shader('screenfill.cg', stencil_inverter);
render.draw(shape.quad);
}
@@ -1021,7 +1022,7 @@ render.mask = function mask(image, pos, scale, rotation = 0, ref = 1)
else scale = vector.v3one;
var pipe = stencil_writer(ref);
render.use_shader('shaders/sprite.cg', pipe);
render.use_shader('sprite.cg', pipe);
var t = os.make_transform();
t.trs(pos, undefined,scale);
set_model(t);
@@ -1082,6 +1083,8 @@ render.slice9 = function (image, rect = [0,0], slice = 0, color = Color.white) {
var tex = image.texture;
var image_size = calc_image_size(image);
var size = [rect.width ? rect.width : image_size.x, rect.height ? rect.height : image_size.y];
check_flush();
slice9_t.trs([rect.x,rect.y].sub(size.scale([rect.anchor_x, rect.anchor_y])), undefined, size);
slice = clay.normalizeSpacing(slice);
@@ -1394,8 +1397,8 @@ prosperon.render = function () {
render.viewport(prosperon.camera.view(), false);
if (render.draw_sprites) render.sprites();
if (render.draw_particles) draw_emitters();
prosperon.draw();
if (render.draw_particles) draw_emitters();
render.fillmask(0);
render.forceflush();

View File

@@ -35,6 +35,7 @@ in vec4 color0;
out vec4 color;
texture2D diffuse;
@sampler_type smp nonfiltering
sampler smp;
void main()