mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-04 13:42:55 +01:00
implement draw line for OpenGL
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)){
|
||||
|
||||
13
src/intro.c
13
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);
|
||||
|
||||
Reference in New Issue
Block a user