From 3ac1120fd40b84507c51f867559bd05adff4eecf Mon Sep 17 00:00:00 2001 From: dec05eba Date: Wed, 21 Apr 2021 13:29:01 +0200 Subject: Use shader for rounded rectangle, improve circle shader --- src/RoundedRectangle.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/RoundedRectangle.cpp (limited to 'src/RoundedRectangle.cpp') diff --git a/src/RoundedRectangle.cpp b/src/RoundedRectangle.cpp new file mode 100644 index 0000000..6b956e8 --- /dev/null +++ b/src/RoundedRectangle.cpp @@ -0,0 +1,46 @@ +#include "../include/RoundedRectangle.hpp" +#include +#include +#include + +namespace QuickMedia { + RoundedRectangle::RoundedRectangle(sf::Vector2f size, float radius, sf::Color color, sf::Shader *rounded_rectangle_shader) : radius(radius), pos(0.0f, 0.0f), size(size), rounded_rectangle_shader(rounded_rectangle_shader) { + assert(rounded_rectangle_shader); + vertices[0].color = color; + vertices[1].color = color; + vertices[2].color = color; + vertices[3].color = color; + + vertices[0].texCoords = sf::Vector2f(0.0f, 0.0f); + vertices[1].texCoords = sf::Vector2f(1.0f, 0.0f); + vertices[2].texCoords = sf::Vector2f(1.0f, 1.0f); + vertices[3].texCoords = sf::Vector2f(0.0f, 1.0f); + } + + void RoundedRectangle::set_position(sf::Vector2f pos) { + this->pos = pos; + vertices[0].position = pos; + vertices[1].position = pos + sf::Vector2f(size.x, 0.0f); + vertices[2].position = pos + sf::Vector2f(size.x, size.y); + vertices[3].position = pos + sf::Vector2f(0.0f, size.y); + } + + void RoundedRectangle::set_size(sf::Vector2f size) { + this->size = size; + set_position(pos); + } + + sf::Vector2f RoundedRectangle::get_position() const { + return pos; + } + + sf::Vector2f RoundedRectangle::get_size() const { + return size; + } + + void RoundedRectangle::draw(sf::RenderWindow &window) { + rounded_rectangle_shader->setUniform("resolution", size); + rounded_rectangle_shader->setUniform("radius", radius); + window.draw(vertices, 4, sf::Quads, rounded_rectangle_shader); + } +} \ No newline at end of file -- cgit v1.2.3