On Tuesday, 17 May 2022 at 05:08:30 UTC, matheus wrote:


In D there would be a better way to do such thing?


Nothing really specific to D, but for one or two properties, you might just add them as function parameters with default values:

```d
void draw(float scale = 1.0f);
```

If you have a number of them (scale, color, blend state, etc.), then you might add them as members of the `Shape` class. You could then expand on that with a single draw function in the `Shape` class that handles the actual drawing, and the subclasses would then call that internally after, e.g., setting up any vertex buffers or whatever specific to the shapes.

```d
class Shape {
   private:
      float scale;
      RGBA color;
DrawBuffer buffer; // some API-specific vertex buffer or whatever

   protected:
      void drawImpl() { // get the shape on screen }

   public:
      abstract void draw();
}

class Circle {
   override void draw() {
      // set up buffer
      ...
      drawImpl();
}
```

Or you could have a `DrawProperties` struct independent of the `Shape` hierarchy that you can fill out and pass to every draw call. Or set global properties in the renderer and draw objects that have the same properties all at once.

There are several ways to go about it.

Reply via email to