@@ -47,6 +47,8 @@ struct SpriteBatchDesc
4747 SpriteTransform Transform;
4848 // Optional flip, applied to the whole batch as the last transform
4949 Common::GraphicFlip Flip = Common::kFlip_None ;
50+ // Reference size, used mainly for deducing absolute rotation pivot
51+ Size SizeRef;
5052 // Optional bitmap to draw sprites upon. Used exclusively by the software rendering mode.
5153 // TODO: merge with the RenderTexture?
5254 PBitmap Surface;
@@ -58,11 +60,12 @@ struct SpriteBatchDesc
5860
5961 SpriteBatchDesc () = default ;
6062 SpriteBatchDesc (uint32_t parent, const Rect viewport, const SpriteTransform &transform,
61- Common::GraphicFlip flip = Common::kFlip_None , PBitmap surface = nullptr ,
63+ Size size_ref = Size(), Common::GraphicFlip flip = Common::kFlip_None , PBitmap surface = nullptr ,
6264 uint32_t filter_flags = 0 )
6365 : Parent(parent)
6466 , Viewport(viewport)
6567 , Transform(transform)
68+ , SizeRef(size_ref)
6669 , Flip(flip)
6770 , Surface(surface)
6871 , FilterFlags(filter_flags)
@@ -75,6 +78,7 @@ struct SpriteBatchDesc
7578 : Parent(parent)
7679 , Viewport(viewport)
7780 , Transform(transform)
81+ , SizeRef(render_target ? Size(render_target->GetWidth (), render_target->GetHeight()) : Size())
7882 , Flip(flip)
7983 , RenderTarget(render_target)
8084 , FilterFlags(filter_flags)
@@ -145,15 +149,18 @@ class GraphicsDriverBase : public IGraphicsDriver
145149 //
146150 // Prepares next sprite batch, a list of sprites with defined viewport and optional
147151 // global model transformation.
148- void BeginSpriteBatch (const Rect &viewport, const SpriteTransform &transform, uint32_t filter_flags = 0 ) override ;
152+ void BeginSpriteBatch (const Rect &viewport, const SpriteTransform &transform, uint32_t filter_flags) override ;
153+ void BeginSpriteBatch (const Rect &viewport, const SpriteTransform &transform, const Size &size_ref, uint32_t filter_flags) override ;
149154 // Begins a sprite batch with defined viewport and a global model transformation
150155 // and a global flip setting. Optionally provides a surface which should be rendered
151156 // underneath the rest of the sprites.
152157 void BeginSpriteBatch (const Rect &viewport, const SpriteTransform &transform,
153- Common::GraphicFlip flip, PBitmap surface = nullptr , uint32_t filter_flags = 0 ) override ;
158+ Common::GraphicFlip flip, PBitmap surface, uint32_t filter_flags) override ;
159+ void BeginSpriteBatch (const Rect &viewport, const SpriteTransform &transform, const Size &size_ref,
160+ Common::GraphicFlip flip, PBitmap surface, uint32_t filter_flags) override ;
154161 // Begins a sprite batch which will be rendered on a target texture.
155162 void BeginSpriteBatch (IDriverDependantBitmap *render_target, const Rect &viewport, const SpriteTransform &transform,
156- Common::GraphicFlip flip = Common:: kFlip_None , uint32_t filter_flags = 0 ) override ;
163+ Common::GraphicFlip flip, uint32_t filter_flags) override ;
157164 // Ends current sprite batch
158165 void EndSpriteBatch () override ;
159166 // Clears all sprite batches, resets batch counter
0 commit comments