diff --git a/src/drawing/IDrawingContext.h b/src/drawing/IDrawingContext.h index d14a60cfaf..9fecefbe6f 100644 --- a/src/drawing/IDrawingContext.h +++ b/src/drawing/IDrawingContext.h @@ -28,6 +28,7 @@ interface IDrawingContext virtual void Clear(uint32 colour) abstract; virtual void FillRect(uint32 colour, sint32 left, sint32 top, sint32 right, sint32 bottom) abstract; + virtual void DrawLine(uint32 colour, sint32 x1, sint32 y1, sint32 x2, sint32 y2) abstract; virtual void DrawSprite(uint32 image, sint32 x, sint32 y, uint32 tertiaryColour) abstract; virtual void DrawSpritePaletteSet(uint32 image, sint32 x, sint32 y, uint8 * palette, uint8 * unknown) abstract; virtual void DrawSpriteRawMasked(sint32 x, sint32 y, uint32 maskImage, uint32 colourImage) abstract; diff --git a/src/drawing/NewDrawing.cpp b/src/drawing/NewDrawing.cpp index 35b09d2510..10530f62c4 100644 --- a/src/drawing/NewDrawing.cpp +++ b/src/drawing/NewDrawing.cpp @@ -128,6 +128,15 @@ extern "C" } } + void gfx_draw_line(rct_drawpixelinfo *dpi, int x1, int y1, int x2, int y2, int colour) + { + if (_drawingEngine != nullptr) + { + IDrawingContext * dc = _drawingEngine->GetDrawingContext(dpi); + dc->DrawLine(colour, x1, y1, x2, y2); + } + } + void FASTCALL gfx_draw_sprite(rct_drawpixelinfo * dpi, int image, int x, int y, uint32 tertiary_colour) { if (_drawingEngine != nullptr) diff --git a/src/drawing/drawing.h b/src/drawing/drawing.h index d05931d966..9e4f311611 100644 --- a/src/drawing/drawing.h +++ b/src/drawing/drawing.h @@ -131,6 +131,7 @@ void gfx_draw_pickedup_peep(rct_drawpixelinfo *dpi); // line void gfx_draw_line(rct_drawpixelinfo *dpi, int x1, int y1, int x2, int y2, int colour); +void gfx_draw_line_software(rct_drawpixelinfo *dpi, int x1, int y1, int x2, int y2, int colour); // rect void gfx_fill_rect(rct_drawpixelinfo *dpi, int left, int top, int right, int bottom, int colour); diff --git a/src/drawing/engines/OpenGLDrawingEngine.cpp b/src/drawing/engines/OpenGLDrawingEngine.cpp index a4d62546ed..db3c4dfc2e 100644 --- a/src/drawing/engines/OpenGLDrawingEngine.cpp +++ b/src/drawing/engines/OpenGLDrawingEngine.cpp @@ -75,6 +75,7 @@ public: void Clear(uint32 colour) override; void FillRect(uint32 colour, sint32 x, sint32 y, sint32 w, sint32 h) override; + void DrawLine(uint32 colour, sint32 x1, sint32 y1, sint32 x2, sint32 y2) override; void DrawSprite(uint32 image, sint32 x, sint32 y, uint32 tertiaryColour) override; void DrawSpritePaletteSet(uint32 image, sint32 x, sint32 y, uint8 * palette, uint8 * unknown) override; void DrawSpriteRawMasked(sint32 x, sint32 y, uint32 maskImage, uint32 colourImage) override; @@ -362,6 +363,16 @@ void OpenGLDrawingContext::FillRect(uint32 colour, sint32 left, sint32 top, sint glEnd(); } +void OpenGLDrawingContext::DrawLine(uint32 colour, sint32 x1, sint32 y1, sint32 x2, sint32 y2) +{ + vec4f paletteColour = _engine->GLPalette[colour & 0xFF]; + glColor3f(paletteColour.r, paletteColour.g, paletteColour.b); + glBegin(GL_LINES); + glVertex2i(x1, y1); + glVertex2i(x2, y2); + glEnd(); +} + void OpenGLDrawingContext::DrawSprite(uint32 image, sint32 x, sint32 y, uint32 tertiaryColour) { int g1Id = image & 0x7FFFF; diff --git a/src/drawing/engines/SoftwareDrawingEngine.cpp b/src/drawing/engines/SoftwareDrawingEngine.cpp index 40d8dc58dd..fba6632af6 100644 --- a/src/drawing/engines/SoftwareDrawingEngine.cpp +++ b/src/drawing/engines/SoftwareDrawingEngine.cpp @@ -167,6 +167,7 @@ public: void Clear(uint32 colour) override; void FillRect(uint32 colour, sint32 x, sint32 y, sint32 w, sint32 h) override; + void DrawLine(uint32 colour, sint32 x1, sint32 y1, sint32 x2, sint32 y2) override; void DrawSprite(uint32 image, sint32 x, sint32 y, uint32 tertiaryColour) override; void DrawSpritePaletteSet(uint32 image, sint32 x, sint32 y, uint8 * palette, uint8 * unknown) override; void DrawSpriteRawMasked(sint32 x, sint32 y, uint32 maskImage, uint32 colourImage) override; @@ -817,6 +818,11 @@ void SoftwareDrawingContext::FillRect(uint32 colour, sint32 left, sint32 top, si } } +void SoftwareDrawingContext::DrawLine(uint32 colour, sint32 x1, sint32 y1, sint32 x2, sint32 y2) +{ + gfx_draw_line_software(_dpi, x1, y1, x2, y2, colour); +} + void SoftwareDrawingContext::DrawSprite(uint32 image, sint32 x, sint32 y, uint32 tertiaryColour) { gfx_draw_sprite_software(_dpi, image, x, y, tertiaryColour); diff --git a/src/drawing/line.c b/src/drawing/line.c index 921f7a667b..8c6d7adbf7 100644 --- a/src/drawing/line.c +++ b/src/drawing/line.c @@ -68,7 +68,7 @@ void gfx_draw_line_on_buffer(rct_drawpixelinfo *dpi, char colour, int y, int x, * y2 (dx) * colour (ebp) */ -void gfx_draw_line(rct_drawpixelinfo *dpi, int x1, int y1, int x2, int y2, int colour) +void gfx_draw_line_software(rct_drawpixelinfo *dpi, int x1, int y1, int x2, int y2, int colour) { // Check to make sure the line is within the drawing area if ((x1 < dpi->x) && (x2 < dpi->x)){ diff --git a/src/intro.c b/src/intro.c index ad84590b3a..34cccbbec5 100644 --- a/src/intro.c +++ b/src/intro.c @@ -196,12 +196,6 @@ void intro_draw(rct_drawpixelinfo *dpi) // Draw Chris Sawyer logo gfx_draw_sprite(dpi, SPR_INTRO_CHRIS_SAWYER_00, (screenWidth / 2) - 320 + 70, _introStateCounter, 0); gfx_draw_sprite(dpi, SPR_INTRO_CHRIS_SAWYER_10, (screenWidth / 2) - 320 + 320, _introStateCounter, 0); - - // Check if logo is off the screen...ish - if (_introStateCounter >= gScreenHeight + 40) { - gfx_transpose_palette(PALETTE_G1_IDX_LOGO, 0); - screen_intro_draw_logo(dpi); - } break; case INTRO_STATE_LOGO_FADE_IN: if (_introStateCounter <= 0xFF00) { @@ -266,6 +260,13 @@ static void screen_intro_draw_logo(rct_drawpixelinfo *dpi) sint32 imageWidth = 640; sint32 imageX = (screenWidth - imageWidth) / 2; + drawing_engine_invalidate_image(SPR_INTRO_LOGO_00); + drawing_engine_invalidate_image(SPR_INTRO_LOGO_10); + drawing_engine_invalidate_image(SPR_INTRO_LOGO_20); + drawing_engine_invalidate_image(SPR_INTRO_LOGO_01); + drawing_engine_invalidate_image(SPR_INTRO_LOGO_11); + drawing_engine_invalidate_image(SPR_INTRO_LOGO_21); + gfx_clear(dpi, BACKROUND_COLOUR_LOGO); gfx_draw_sprite(dpi, SPR_INTRO_LOGO_00, imageX + 0, 0, 0); gfx_draw_sprite(dpi, SPR_INTRO_LOGO_10, imageX + 220, 0, 0);