Tidy up graphics API additions
This commit is contained in:
parent
4e3263b352
commit
c2a95726ca
|
@ -119,7 +119,7 @@ pub const Command = union (enum) {
|
||||||
draw_font: DrawFont,
|
draw_font: DrawFont,
|
||||||
draw_texture: DrawTexture,
|
draw_texture: DrawTexture,
|
||||||
set_effect: SetEffect,
|
set_effect: SetEffect,
|
||||||
set_scissor: SetScissor,
|
set_scissor_rect: ?Rect,
|
||||||
set_target: SetTarget,
|
set_target: SetTarget,
|
||||||
|
|
||||||
pub const DrawFont = struct {
|
pub const DrawFont = struct {
|
||||||
|
@ -147,10 +147,6 @@ pub const Command = union (enum) {
|
||||||
properties: []const u8,
|
properties: []const u8,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const SetScissor = struct {
|
|
||||||
has_rect: ?Rect,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub const SetTarget = struct {
|
pub const SetTarget = struct {
|
||||||
texture: ?Texture = null,
|
texture: ?Texture = null,
|
||||||
clear_color: ?Color,
|
clear_color: ?Color,
|
||||||
|
@ -261,8 +257,8 @@ pub const Commands = struct {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_scissor(self: Self, command: Command.SetScissor) std.mem.Allocator.Error!void {
|
pub fn set_scissor_rect(self: Self, has_rect: Rect) std.mem.Allocator.Error!void {
|
||||||
try self.pending.stack.push_grow(.{.set_scissor = command});
|
try self.pending.stack.push_grow(.{.set_scissor_rect = has_rect});
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_target(self: Self, command: Command.SetTarget) std.mem.Allocator.Error!void {
|
pub fn set_target(self: Self, command: Command.SetTarget) std.mem.Allocator.Error!void {
|
||||||
|
|
|
@ -224,10 +224,10 @@ const Frame = struct {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_scissor(self: *Frame, resources: *Resources, command: gfx.Command.SetScissor) void {
|
pub fn set_scissor_rect(self: *Frame, resources: *Resources, has_rect: gfx.Rect) void {
|
||||||
self.flush(resources);
|
self.flush(resources);
|
||||||
|
|
||||||
if (command.has_rect) |rect| {
|
if (has_rect) |rect| {
|
||||||
const width, const height = rect.size();
|
const width, const height = rect.size();
|
||||||
|
|
||||||
sokol.gfx.applyScissorRect(
|
sokol.gfx.applyScissorRect(
|
||||||
|
@ -428,7 +428,7 @@ pub fn process_work(pending_work: *gfx.Assets.WorkQueue, window: *ext.SDL_Window
|
||||||
.draw_font => |draw_font| frame.draw_font(&resources, draw_font),
|
.draw_font => |draw_font| frame.draw_font(&resources, draw_font),
|
||||||
.draw_texture => |draw_texture| frame.draw_texture(&resources, draw_texture),
|
.draw_texture => |draw_texture| frame.draw_texture(&resources, draw_texture),
|
||||||
.set_effect => |set_effect| frame.set_effect(&resources, set_effect),
|
.set_effect => |set_effect| frame.set_effect(&resources, set_effect),
|
||||||
.set_scissor => |set_scissor| frame.set_scissor(&resources, set_scissor),
|
.set_scissor_rect => |has_rect| frame.set_scissor_rect(&resources, has_rect),
|
||||||
.set_target => |set_target| frame.set_target(&resources, set_target),
|
.set_target => |set_target| frame.set_target(&resources, set_target),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -202,9 +202,7 @@ pub fn exit(canvas: ona.Write(Canvas)) !void {
|
||||||
pub fn render(commands: gfx.Commands, canvas: ona.Read(Canvas)) !void {
|
pub fn render(commands: gfx.Commands, canvas: ona.Read(Canvas)) !void {
|
||||||
// TODO: Investigate if scissor rects are necessary for clipping content that overflows.
|
// TODO: Investigate if scissor rects are necessary for clipping content that overflows.
|
||||||
for (canvas.state.drawable_blocks.values()) |block| {
|
for (canvas.state.drawable_blocks.values()) |block| {
|
||||||
try commands.set_scissor(.{
|
try commands.set_scissor_rect(block.clip);
|
||||||
.has_rect = block.clip,
|
|
||||||
});
|
|
||||||
|
|
||||||
try commands.draw_texture(.{
|
try commands.draw_texture(.{
|
||||||
.size = .{block.box.width, block.box.height},
|
.size = .{block.box.width, block.box.height},
|
||||||
|
@ -216,9 +214,7 @@ pub fn render(commands: gfx.Commands, canvas: ona.Read(Canvas)) !void {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (canvas.state.drawable_labels.values()) |label| {
|
for (canvas.state.drawable_labels.values()) |label| {
|
||||||
try commands.set_scissor(.{
|
try commands.set_scissor_rect(label.clip);
|
||||||
.has_rect = label.clip,
|
|
||||||
});
|
|
||||||
|
|
||||||
try commands.draw_font(.{
|
try commands.draw_font(.{
|
||||||
.size = .{label.box.width, label.box.height},
|
.size = .{label.box.width, label.box.height},
|
||||||
|
@ -229,10 +225,6 @@ pub fn render(commands: gfx.Commands, canvas: ona.Read(Canvas)) !void {
|
||||||
.font = label.state.font,
|
.font = label.state.font,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
try commands.set_scissor(.{
|
|
||||||
.has_rect = null,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn setup(world: *ona.World) !void {
|
pub fn setup(world: *ona.World) !void {
|
||||||
|
|
Loading…
Reference in New Issue