@@ -169,9 +169,13 @@ void Background2D::RenderBgEff(int bgId, int layer) {
169169 FadeCount = ScrWork[SW_BGEFF1_FADECT + structOffset];
170170 FadeRange = ScrWork[SW_BGEFF1_MASKFADERANGE + structOffset];
171171
172- Angle = (ScrWork[SW_BGEFF1_ROTZ + structOffset] +
173- ScrWork[SW_BGEFF1_ROTZ_OFS + structOfsOffset]) *
174- (float )(2 .0f * M_PI / (float )(1 << 16 ));
172+ Rotation = ScrWorkAnglesToQuaternion (
173+ ScrWork[SW_BGEFF1_ROTX + structOffset] +
174+ ScrWork[SW_BGEFF1_ROTX_OFS + structOfsOffset],
175+ ScrWork[SW_BGEFF1_ROTY + structOffset] +
176+ ScrWork[SW_BGEFF1_ROTY_OFS + structOfsOffset],
177+ ScrWork[SW_BGEFF1_ROTZ + structOffset] +
178+ ScrWork[SW_BGEFF1_ROTZ_OFS + structOfsOffset]);
175179
176180 Scale = glm::vec2 ((ScrWork[SW_BGEFF1_SIZE + structOffset] +
177181 ScrWork[SW_BGEFF1_SIZE_OFS + structOfsOffset]) /
@@ -222,6 +226,14 @@ void Background2D::RenderBgEff(int bgId, int layer) {
222226 Origin = {0 .0f , 0 .0f };
223227 for (const glm::vec2 vertex : vertices) Origin += vertex / (float )vertexCount;
224228
229+ // Transform vertices
230+ const glm::mat4 transformation = TransformationMatrix (
231+ Origin, Scale, {Origin, 0 .0f }, Rotation, DisplayCoords);
232+ std::transform (vertices.begin (), vertices.end (), vertices.begin (),
233+ [transformation](const glm::vec2 vertex) {
234+ return transformation * glm::vec4 (vertex, 0 .0f , 1 .0f );
235+ });
236+
225237 // Draw
226238 if (maskType == 0 ) { // Rectangle
227239 const glm::vec2 maskDimensions = vertices[3 ] - vertices[0 ];
@@ -241,43 +253,43 @@ void Background2D::RenderBgEff(int bgId, int layer) {
241253}
242254
243255void Background2D::RenderRegular () {
244- Renderer->DrawSpriteOffset (BgSprite, DisplayCoords, Origin, Tint, Scale,
245- Angle, false );
256+ const glm::mat4 transformation = TransformationMatrix (
257+ Origin, Scale, {Origin, 0 .0f }, Rotation, DisplayCoords);
258+ Renderer->DrawSprite (BgSprite, transformation, Tint, false );
246259
247260 for (int i = 0 ; i < MaxLinkedBgBuffers; i++) {
248261 if (Links[i].Direction != LD_Off && Links[i].LinkedBuffer != NULL ) {
249- Renderer->DrawSpriteOffset (Links[i].LinkedBuffer ->BgSprite ,
250- Links[i].DisplayCoords , Origin, Tint, Scale,
251- Angle, false );
262+ const glm::mat4 linkTransformation =
263+ transformation *
264+ glm::translate (glm::mat4 (1 .0f ), {Links[i].DisplayCoords , 0 .0f });
265+
266+ Renderer->DrawSprite (Links[i].LinkedBuffer ->BgSprite , transformation,
267+ Tint, false );
252268 }
253269 }
254270}
255271
256272void Background2D::RenderMasked () {
257- Renderer->DrawMaskedSpriteOffset (BgSprite, Masks2D[MaskNumber].MaskSprite ,
258- DisplayCoords, Origin, FadeCount, FadeRange,
259- Tint, Scale, Angle, false , false , false );
273+ const glm::mat4 transformation = TransformationMatrix (
274+ Origin, Scale, {Origin, 0 .0f }, Rotation, DisplayCoords);
275+
276+ Renderer->DrawMaskedSprite (BgSprite, Masks2D[MaskNumber].MaskSprite ,
277+ FadeCount, FadeRange, transformation, Tint, false ,
278+ false );
260279}
261280
262281void Background2D::RenderMaskedInverted () {
263- Renderer->DrawMaskedSpriteOffset (BgSprite, Masks2D[MaskNumber].MaskSprite ,
264- DisplayCoords, Origin, FadeCount, FadeRange,
265- Tint, Scale, Angle, false , true , false );
282+ const glm::mat4 transformation = TransformationMatrix (
283+ Origin, Scale, {Origin, 0 .0f }, Rotation, DisplayCoords);
284+ Renderer->DrawMaskedSprite (BgSprite, Masks2D[MaskNumber].MaskSprite ,
285+ FadeCount, FadeRange, transformation, Tint, true ,
286+ false );
266287}
267288
268289void Background2D::RenderFade () {
269290 Tint.a *= FadeCount / 256 .0f ;
270291
271- Renderer->DrawSpriteOffset (BgSprite, DisplayCoords, Origin, Tint, Scale,
272- Angle, false );
273-
274- for (int i = 0 ; i < MaxLinkedBgBuffers; i++) {
275- if (Links[i].Direction != LD_Off && Links[i].LinkedBuffer != NULL ) {
276- Renderer->DrawSpriteOffset (Links[i].LinkedBuffer ->BgSprite ,
277- Links[i].DisplayCoords , Origin, Tint, Scale,
278- Angle, false );
279- }
280- }
292+ RenderRegular ();
281293}
282294
283295} // namespace Impacto
0 commit comments