aurora: Commit set_viewport/set_scissor changes

This commit is contained in:
Luke Street 2022-03-14 18:32:03 -04:00
parent af856de6a8
commit 9062e54c76
1 changed files with 15 additions and 3 deletions

View File

@ -61,12 +61,14 @@ struct Command {
float height; float height;
float znear; float znear;
float zfar; float zfar;
bool operator==(const SetViewportCommand& rhs) const = default;
} setViewport; } setViewport;
struct SetScissorCommand { struct SetScissorCommand {
uint32_t x; uint32_t x;
uint32_t y; uint32_t y;
uint32_t w; uint32_t w;
uint32_t h; uint32_t h;
auto operator<=>(const SetScissorCommand&) const = default;
} setScissor; } setScissor;
ShaderDrawCommand draw; ShaderDrawCommand draw;
} data; } data;
@ -234,11 +236,21 @@ static void push_draw_command(ShaderDrawCommand data) { g_commands.push_back({Co
bool get_dxt_compression_supported() noexcept { return g_device.HasFeature(wgpu::FeatureName::TextureCompressionBC); } bool get_dxt_compression_supported() noexcept { return g_device.HasFeature(wgpu::FeatureName::TextureCompressionBC); }
void set_viewport(const zeus::CRectangle& rect, float znear, float zfar) noexcept { static Command::Data::SetViewportCommand g_cachedViewport;
g_commands.push_back({CommandType::SetViewport, {.setViewport = {rect, znear, zfar}}}); void set_viewport(float left, float top, float width, float height, float znear, float zfar) noexcept {
Command::Data::SetViewportCommand cmd{left, top, width, height, znear, zfar};
if (cmd != g_cachedViewport) {
g_commands.push_back({CommandType::SetViewport, {.setViewport = cmd}});
g_cachedViewport = cmd;
}
} }
static Command::Data::SetScissorCommand g_cachedScissor;
void set_scissor(uint32_t x, uint32_t y, uint32_t w, uint32_t h) noexcept { void set_scissor(uint32_t x, uint32_t y, uint32_t w, uint32_t h) noexcept {
g_commands.push_back({CommandType::SetScissor, {.setScissor = {x, y, w, h}}}); Command::Data::SetScissorCommand cmd{x, y, w, h};
if (cmd != g_cachedScissor) {
g_commands.push_back({CommandType::SetScissor, {.setScissor = cmd}});
g_cachedScissor = cmd;
}
} }
void resolve_color(const ClipRect& rect, uint32_t bind, bool clear_depth) noexcept { void resolve_color(const ClipRect& rect, uint32_t bind, bool clear_depth) noexcept {