Skip to content

Commit

Permalink
Merge dynsprite_experiment into main
Browse files Browse the repository at this point in the history
  • Loading branch information
Grisgram committed May 19, 2023
2 parents dcbb16b + 95eeaae commit 658e8fc
Show file tree
Hide file tree
Showing 15 changed files with 127 additions and 19 deletions.
1 change: 1 addition & 0 deletions gml-outline-shader-drawer.resource_order
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
{"name":"CanvasIsCanvas","order":4,"path":"scripts/CanvasIsCanvas/CanvasIsCanvas.yy",},
{"name":"sprite_to_canvas","order":5,"path":"scripts/sprite_to_canvas/sprite_to_canvas.yy",},
{"name":"DemoPotion","order":6,"path":"objects/DemoPotion/DemoPotion.yy",},
{"name":"sprRedPotionAnim","order":9,"path":"sprites/sprRedPotionAnim/sprRedPotionAnim.yy",},
{"name":"sprHellToHeaven","order":4,"path":"sprites/sprHellToHeaven/sprHellToHeaven.yy",},
{"name":"__CanvasCleanupQueue","order":1,"path":"scripts/__CanvasCleanupQueue/__CanvasCleanupQueue.yy",},
{"name":"__CanvasTrace","order":6,"path":"scripts/__CanvasTrace/__CanvasTrace.yy",},
Expand Down
1 change: 1 addition & 0 deletions gml-outline-shader-drawer.yyp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions objects/DemoPotion/DemoPotion.yy

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

32 changes: 25 additions & 7 deletions objects/OutlineObjectBaked/Create_0.gml
Original file line number Diff line number Diff line change
@@ -1,15 +1,23 @@
/// @description bake on first draw
event_inherited();
canvas = undefined;
canvas = undefined;
dynsprite = undefined;
origsprite = sprite_index;

__browser_flip = (os_browser != browser_not_a_browser) ? -1 : 1;

__free = function() {
if (canvas != undefined)
canvas.free();

if (dynsprite != undefined)
sprite_delete(dynsprite);
}

/// @function bake()
bake = function() {
if (canvas != undefined) canvas.free();
__free();
origsprite = sprite_index;
show_debug_message("Pre-Baking sprite '{0}' with {1} frames", sprite_get_name(sprite_index), image_number);
var begintime = current_time;
var shader = shd_outline;
Expand All @@ -19,7 +27,7 @@ bake = function() {
var u_thickness = shader_get_uniform(shader, "u_vThickness");
var u_vPulse = shader_get_uniform(shader, "u_vPulse");

canvas = sprite_to_canvas(sprite_index, -1, outline_strength + TEXTURE_PAGE_BORDER_SIZE);
canvas = sprite_to_canvas(sprite_index, -1, outliner.outline_strength + TEXTURE_PAGE_BORDER_SIZE);
// now bake it with the outliner
var target = new Canvas(canvas.canvas.GetWidth(), canvas.canvas.GetHeight(), true);
target.Start();
Expand All @@ -42,16 +50,26 @@ bake = function() {
canvas.canvas.Free();
// ...and inject the pre-baked
canvas.canvas = target;

dynsprite = canvas.create_sprite();
sprite_set_bbox_mode(dynsprite, bboxmode_manual);
sprite_set_bbox(dynsprite,
sprite_get_bbox_left (sprite_index) + __browser_flip * (2 * outliner.outline_strength + TEXTURE_PAGE_BORDER_SIZE / 2),
sprite_get_bbox_top (sprite_index) + __browser_flip * (2 * outliner.outline_strength + TEXTURE_PAGE_BORDER_SIZE / 2),
sprite_get_bbox_right (sprite_index) + __browser_flip * (2 * outliner.outline_strength + TEXTURE_PAGE_BORDER_SIZE / 2),
sprite_get_bbox_bottom(sprite_index) + __browser_flip * (2 * outliner.outline_strength + TEXTURE_PAGE_BORDER_SIZE / 2));

show_debug_message("Pre-Baking took {0}ms", current_time - begintime);
}

__draw = function() {
if (canvas == undefined) bake();
var before = sprite_index;
sprite_index = (outline_always || (outline_on_mouse_over && mouse_is_over)) ? dynsprite : origsprite;
if (sprite_index != before && (os_browser != browser_not_a_browser)) image_yscale *= __browser_flip;
image_index = canvas.get_image_index(delta_time, image_speed);
if (outline_always || (outline_on_mouse_over && mouse_is_over))
canvas.draw_frame_ext(image_index, x, y, depth, image_xscale, image_yscale, image_angle, image_blend, image_alpha);
else
draw_self();

draw_self();
}

if (sprite_index != -1) bake();
6 changes: 3 additions & 3 deletions options/html5/options_html5.yy

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions options/windows/options_windows.yy

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion rooms/rmDemo/rmDemo.yy

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 13 additions & 3 deletions scripts/sprite_to_canvas/sprite_to_canvas.gml
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,14 @@ function CanvasSprite(_canvas, _image_count, _fps, _xoffset, _yoffset, _bordersi
__matrix = matrix_build(xp, yp, draw_depth, 0, 0, rot * __browser_flip, xscale, yscale * __browser_flip, 1);
matrix_set(matrix_world, __matrix);
//_left, _top, _width, _height, _x, _y, _xscale, _yscale, _rot, _col1, _col2, _col3, _col4, _alpha
canvas.DrawGeneral(subimages[@ frame], 0, image_width, image_height,
canvas.DrawGeneral(subimages[@ frame], 0,
image_width, image_height,
-xoffset - bordersize, -yoffset - bordersize + __render_y,
1, 1, 0, col, col, col, col, alpha);
matrix_set(matrix_world, matrix_build_identity());
}

/// @function get_image_index = function(_elapsed, _image_speed)
/// @function get_image_index(_elapsed, _image_speed)
/// @description Should be called every STEP to ensure continuous correct animation
/// when you draw this sprite manually.
/// Example (STEP event):
Expand All @@ -94,7 +95,16 @@ function CanvasSprite(_canvas, _image_count, _fps, _xoffset, _yoffset, _bordersi

return sub_idx;
}


/// @function create_sprite()
/// @description Creates a dynamic sprite out of the frames of this canvas surface
static create_sprite = function() {
var rv = sprite_create_from_surface(canvas.GetSurfaceID(),0,0,image_width,image_height,false,false,xoffset+bordersize,yoffset+bordersize);
for (var i = 1, len = array_length(subimages); i < len; i++)
sprite_add_from_surface(rv,canvas.GetSurfaceID(),subimages[@i],0,image_width,image_height,false,false);
return rv;
}

/// @function free()
/// @description Release the underlying canvas
static free = function() {
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
78 changes: 78 additions & 0 deletions sprites/sprRedPotionAnim/sprRedPotionAnim.yy

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 658e8fc

Please sign in to comment.