1
0
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:
Ted John
2016-06-05 19:25:01 +01:00
parent 18f3aa12a1
commit ffd7b7f7e0
7 changed files with 36 additions and 7 deletions

View File

@@ -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;

View File

@@ -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)

View File

@@ -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);

View File

@@ -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;

View File

@@ -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);

View File

@@ -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)){

View File

@@ -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);