diff --git a/Extra2D/src/render/batch/shape_batcher.cpp b/Extra2D/src/render/batch/shape_batcher.cpp index aeb2e11..1ec3df6 100644 --- a/Extra2D/src/render/batch/shape_batcher.cpp +++ b/Extra2D/src/render/batch/shape_batcher.cpp @@ -351,6 +351,11 @@ void ShapeBatcher::draw(const RenderCommand &command) { const auto &data = std::get(command.data); switch (data.shapeType) { + case ShapeType::Point: + if (data.points.size() >= 1) { + drawFilledCircle(data.points[0], data.lineWidth * 0.5f, data.color, 8); + } + break; case ShapeType::Line: if (data.points.size() >= 2) { drawLine(data.points[0], data.points[1], data.color, data.lineWidth); diff --git a/Extra2D/src/scene/shape_node.cpp b/Extra2D/src/scene/shape_node.cpp index 8c6da0e..14f4282 100644 --- a/Extra2D/src/scene/shape_node.cpp +++ b/Extra2D/src/scene/shape_node.cpp @@ -284,10 +284,11 @@ void ShapeNode::onDraw(RenderBackend &renderer) { break; case ShapeType::Rect: + case ShapeType::FilledRect: if (points_.size() >= 4) { - if (filled_) { - Rect rect(points_[0].x, points_[0].y, points_[2].x - points_[0].x, - points_[2].y - points_[0].y); + Rect rect(points_[0].x, points_[0].y, points_[2].x - points_[0].x, + points_[2].y - points_[0].y); + if (filled_ || shapeType_ == ShapeType::FilledRect) { renderer.fillRect(rect, color_); } else { for (size_t i = 0; i < points_.size(); ++i) { @@ -300,9 +301,10 @@ void ShapeNode::onDraw(RenderBackend &renderer) { break; case ShapeType::Circle: + case ShapeType::FilledCircle: if (points_.size() >= 2) { float radius = points_[1].x; - if (filled_) { + if (filled_ || shapeType_ == ShapeType::FilledCircle) { renderer.fillCircle(points_[0], radius, color_, segments_); } else { renderer.drawCircle(points_[0], radius, color_, segments_, lineWidth_); @@ -311,8 +313,9 @@ void ShapeNode::onDraw(RenderBackend &renderer) { break; case ShapeType::Triangle: + case ShapeType::FilledTriangle: if (points_.size() >= 3) { - if (filled_) { + if (filled_ || shapeType_ == ShapeType::FilledTriangle) { renderer.fillPolygon(points_.data(), 3, color_); } else { renderer.drawLine(points_[0], points_[1], color_, lineWidth_); @@ -323,11 +326,13 @@ void ShapeNode::onDraw(RenderBackend &renderer) { break; case ShapeType::Polygon: + case ShapeType::FilledPolygon: if (!points_.empty()) { - if (filled_) { + if (filled_ || shapeType_ == ShapeType::FilledPolygon) { renderer.fillPolygon(points_.data(), points_.size(), color_); } else { - renderer.drawPolygon(points_.data(), points_.size(), color_, lineWidth_); + renderer.drawPolygon(points_.data(), points_.size(), color_, + lineWidth_); } } break; @@ -359,37 +364,44 @@ void ShapeNode::generateRenderCommand(std::vector &commands, case ShapeType::Line: if (points_.size() >= 2) { - commands.push_back(RenderCommand::makeLine( - points_[0] + offset, points_[1] + offset, color_, lineWidth_, zOrder)); + commands.push_back(RenderCommand::makeLine(points_[0] + offset, + points_[1] + offset, color_, + lineWidth_, zOrder)); } break; case ShapeType::Rect: + case ShapeType::FilledRect: if (points_.size() >= 4) { Rect rect(points_[0].x, points_[0].y, points_[2].x - points_[0].x, points_[2].y - points_[0].y); commands.push_back(RenderCommand::makeRect( - Rect(rect.origin + offset, rect.size), color_, lineWidth_, filled_, zOrder)); + Rect(rect.origin + offset, rect.size), color_, lineWidth_, + filled_ || shapeType_ == ShapeType::FilledRect, zOrder)); } break; case ShapeType::Circle: + case ShapeType::FilledCircle: if (points_.size() >= 2) { float radius = points_[1].x; commands.push_back(RenderCommand::makeCircle( - points_[0] + offset, radius, color_, segments_, filled_, zOrder)); + points_[0] + offset, radius, color_, segments_, + filled_ || shapeType_ == ShapeType::FilledCircle, zOrder)); } break; case ShapeType::Triangle: + case ShapeType::FilledTriangle: if (points_.size() >= 3) { commands.push_back(RenderCommand::makeTriangle( - points_[0] + offset, points_[1] + offset, points_[2] + offset, - color_, filled_, zOrder)); + points_[0] + offset, points_[1] + offset, points_[2] + offset, color_, + filled_ || shapeType_ == ShapeType::FilledTriangle, zOrder)); } break; case ShapeType::Polygon: + case ShapeType::FilledPolygon: if (!points_.empty()) { std::vector transformedPoints; transformedPoints.reserve(points_.size()); @@ -397,7 +409,8 @@ void ShapeNode::generateRenderCommand(std::vector &commands, transformedPoints.push_back(p + offset); } commands.push_back(RenderCommand::makePolygon( - transformedPoints, color_, filled_, zOrder)); + transformedPoints, color_, + filled_ || shapeType_ == ShapeType::FilledPolygon, zOrder)); } break; }