[Scummvm-git-logs] scummvm master -> 36f2a6fdf00c67a68b8d57b709d2a805d673db2a
OMGPizzaGuy
noreply at scummvm.org
Sat Sep 9 00:09:41 UTC 2023
This automated email contains information about 6 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
dc5ca71404 ULTIMA8: Alter fill32 method to use TEX32_PACK_RGB format
d7cd2d5cba ULTIMA8: Alter drawLine32 method to use TEX32_PACK_RGB format
600403e7a2 ULTIMA8: Use TEX32_PACK_RGBA macro when calling fillBlended
42a88e23d8 ULTIMA8: Use TEX32_PACK_RGBA in remaining places colors are hard-coded
77c16212c8 ULTIMA8: Remove render surface fillAlpha method.
36f2a6fdf0 ULTIMA8: Add frameRect32 to replace less efficient gump border drawing
Commit: dc5ca714040f023773b665cdd789e82e3f4ad80e
https://github.com/scummvm/scummvm/commit/dc5ca714040f023773b665cdd789e82e3f4ad80e
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2023-09-08T18:30:25-05:00
Commit Message:
ULTIMA8: Alter fill32 method to use TEX32_PACK_RGB format
Use of these macros will allow us to be more consistent in render surface and easily alter the format later.
Changed paths:
engines/ultima/ultima8/graphics/avi_player.cpp
engines/ultima/ultima8/graphics/fonts/jp_rendered_text.cpp
engines/ultima/ultima8/graphics/fonts/shape_rendered_text.cpp
engines/ultima/ultima8/graphics/render_surface.cpp
engines/ultima/ultima8/graphics/render_surface.h
engines/ultima/ultima8/graphics/skf_player.cpp
engines/ultima/ultima8/graphics/texture.h
engines/ultima/ultima8/gumps/credits_gump.cpp
engines/ultima/ultima8/gumps/cru_credits_gump.cpp
engines/ultima/ultima8/gumps/cru_demo_gump.cpp
engines/ultima/ultima8/gumps/cru_energy_gump.cpp
engines/ultima/ultima8/gumps/cru_health_gump.cpp
engines/ultima/ultima8/gumps/difficulty_gump.cpp
engines/ultima/ultima8/gumps/fast_area_vis_gump.cpp
engines/ultima/ultima8/gumps/message_box_gump.cpp
engines/ultima/ultima8/gumps/message_box_gump.h
engines/ultima/ultima8/gumps/mini_stats_gump.cpp
engines/ultima/ultima8/gumps/minimap_gump.cpp
engines/ultima/ultima8/gumps/movie_gump.cpp
engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
engines/ultima/ultima8/ultima8.cpp
engines/ultima/ultima8/world/item_sorter.cpp
engines/ultima/ultima8/world/target_reticle_process.cpp
diff --git a/engines/ultima/ultima8/graphics/avi_player.cpp b/engines/ultima/ultima8/graphics/avi_player.cpp
index a1e7f0a9e4e..7b0581e902a 100644
--- a/engines/ultima/ultima8/graphics/avi_player.cpp
+++ b/engines/ultima/ultima8/graphics/avi_player.cpp
@@ -22,6 +22,7 @@
#include "ultima/ultima8/audio/music_process.h"
#include "ultima/ultima8/graphics/avi_player.h"
#include "ultima/ultima8/graphics/render_surface.h"
+#include "ultima/ultima8/graphics/texture.h"
#include "video/avi_decoder.h"
namespace Ultima {
@@ -116,7 +117,8 @@ void AVIPlayer::paint(RenderSurface *surf, int /*lerp*/) {
}
}
- surf->Fill32(0, _xoff, _yoff, _currentFrame.w, _currentFrame.h);
+ uint32 color = TEX32_PACK_RGB(0, 0, 0);
+ surf->fill32(color, _xoff, _yoff, _currentFrame.w, _currentFrame.h);
Common::Rect srcRect(_currentFrame.w, _currentFrame.h);
surf->Blit(_currentFrame, srcRect, _xoff, _yoff);
}
diff --git a/engines/ultima/ultima8/graphics/fonts/jp_rendered_text.cpp b/engines/ultima/ultima8/graphics/fonts/jp_rendered_text.cpp
index 573ac943d08..aa94ee3e54a 100644
--- a/engines/ultima/ultima8/graphics/fonts/jp_rendered_text.cpp
+++ b/engines/ultima/ultima8/graphics/fonts/jp_rendered_text.cpp
@@ -26,6 +26,7 @@
#include "ultima/ultima8/graphics/render_surface.h"
#include "ultima/ultima8/graphics/shape_frame.h"
#include "ultima/ultima8/graphics/palette_manager.h"
+#include "ultima/ultima8/graphics/texture.h"
namespace Ultima {
namespace Ultima8 {
@@ -51,6 +52,7 @@ void JPRenderedText::draw(RenderSurface *surface, int x, int y, bool /*destmaske
const Palette *savepal = _font->getPalette();
_font->setPalette(pal);
+ uint32 color = TEX32_PACK_RGB(0, 0, 0);
Std::list<PositionedText>::const_iterator iter;
for (iter = _lines.begin(); iter != _lines.end(); ++iter) {
@@ -69,7 +71,7 @@ void JPRenderedText::draw(RenderSurface *surface, int x, int y, bool /*destmaske
surface->Paint(_font, u8char, line_x, line_y);
if (i == iter->_cursor) {
- surface->Fill32(0xFF000000, line_x, line_y - _font->getBaseline(),
+ surface->fill32(color, line_x, line_y - _font->getBaseline(),
1, iter->_dims.height());
}
@@ -77,7 +79,7 @@ void JPRenderedText::draw(RenderSurface *surface, int x, int y, bool /*destmaske
}
if (iter->_cursor == textsize) {
- surface->Fill32(0xFF000000, line_x, line_y - _font->getBaseline(),
+ surface->fill32(color, line_x, line_y - _font->getBaseline(),
1, iter->_dims.height());
}
}
diff --git a/engines/ultima/ultima8/graphics/fonts/shape_rendered_text.cpp b/engines/ultima/ultima8/graphics/fonts/shape_rendered_text.cpp
index 9ba44def4e9..d99f159dea6 100644
--- a/engines/ultima/ultima8/graphics/fonts/shape_rendered_text.cpp
+++ b/engines/ultima/ultima8/graphics/fonts/shape_rendered_text.cpp
@@ -24,6 +24,7 @@
#include "ultima/ultima8/graphics/fonts/shape_font.h"
#include "ultima/ultima8/graphics/render_surface.h"
+#include "ultima/ultima8/graphics/texture.h"
namespace Ultima {
namespace Ultima8 {
@@ -43,6 +44,7 @@ ShapeRenderedText::~ShapeRenderedText() {
void ShapeRenderedText::draw(RenderSurface *surface, int x, int y, bool /*destmasked*/) {
// TODO support masking here???
+ uint32 color = TEX32_PACK_RGB(0, 0, 0);
Std::list<PositionedText>::const_iterator iter;
surface->BeginPainting();
@@ -58,7 +60,7 @@ void ShapeRenderedText::draw(RenderSurface *surface, int x, int y, bool /*destma
line_x, line_y);
if (i == iter->_cursor) {
- surface->Fill32(0xFF000000, line_x, line_y - _font->getBaseline(),
+ surface->fill32(color, line_x, line_y - _font->getBaseline(),
1, iter->_dims.height());
}
@@ -66,7 +68,7 @@ void ShapeRenderedText::draw(RenderSurface *surface, int x, int y, bool /*destma
}
if (iter->_cursor == textsize) {
- surface->Fill32(0xFF000000, line_x, line_y - _font->getBaseline(),
+ surface->fill32(color, line_x, line_y - _font->getBaseline(),
1, iter->_dims.height());
}
}
diff --git a/engines/ultima/ultima8/graphics/render_surface.cpp b/engines/ultima/ultima8/graphics/render_surface.cpp
index 00167b849e1..9948ff3b502 100644
--- a/engines/ultima/ultima8/graphics/render_surface.cpp
+++ b/engines/ultima/ultima8/graphics/render_surface.cpp
@@ -284,16 +284,11 @@ bool RenderSurface::IsFlipped() const {
return _flipped;
}
-//
-// RenderSurface::Fill32(uint32 rgb, int32 sx, int32 sy, int32 w, int32 h)
-//
-// Desc: Fill buffer (using a RGB colour)
-//
-void RenderSurface::Fill32(uint32 rgb, const Rect &r) {
+void RenderSurface::fill32(uint32 rgb, const Rect &r) {
Common::Rect rect(r.left, r.top, r.right, r.bottom);
rect.clip(_clipWindow);
rect.translate(_ox, _oy);
- rgb = _surface->format.RGBToColor((rgb >> 16) & 0xFF, (rgb >> 8) & 0xFF, rgb & 0xFF);
+ rgb = _surface->format.RGBToColor(TEX32_R(rgb), TEX32_G(rgb), TEX32_B(rgb));
_surface->fillRect(rect, rgb);
}
@@ -402,7 +397,7 @@ void inline fillBlendedLogic(uint8 *pixels, int32 pitch, uint32 rgba, const Comm
void RenderSurface::FillBlended(uint32 rgba, const Rect &r) {
int alpha = TEX32_A(rgba);
if (alpha == 0xFF) {
- Fill32(rgba, r);
+ fill32(rgba, r);
return;
} else if (!alpha) {
return;
diff --git a/engines/ultima/ultima8/graphics/render_surface.h b/engines/ultima/ultima8/graphics/render_surface.h
index a80dbeb5bf8..7c57107bb9b 100644
--- a/engines/ultima/ultima8/graphics/render_surface.h
+++ b/engines/ultima/ultima8/graphics/render_surface.h
@@ -130,17 +130,18 @@ public:
// Surface Filling
//
- //! Fill buffer (using a RGB colour)
- void Fill32(uint32 rgb, int32 sx, int32 sy, int32 w, int32 h) {
- Fill32(rgb, Rect(sx, sy, sx + w, sy + h));
+ //! Fill the region with a color in the TEX32_PACK_RGB format
+ void fill32(uint32 rgb, int32 sx, int32 sy, int32 w, int32 h) {
+ fill32(rgb, Rect(sx, sy, sx + w, sy + h));
}
- void Fill32(uint32 rgb, const Rect &r);
+ //! Fill the region with a color in the TEX32_PACK_RGB format
+ void fill32(uint32 rgb, const Rect &r);
//! Fill alpha channel
void FillAlpha(uint8 alpha, const Rect &r);
- //! Fill the region doing alpha blending
+ //! Fill the region doing alpha blending with a color in the TEX32_PACK_RGBA format
void FillBlended(uint32 rgba, const Rect &r);
//
diff --git a/engines/ultima/ultima8/graphics/skf_player.cpp b/engines/ultima/ultima8/graphics/skf_player.cpp
index c1e8ee60f30..cb58eba5688 100644
--- a/engines/ultima/ultima8/graphics/skf_player.cpp
+++ b/engines/ultima/ultima8/graphics/skf_player.cpp
@@ -104,7 +104,8 @@ void SKFPlayer::parseEventList(Common::ReadStream *eventlist) {
}
void SKFPlayer::start() {
- _buffer->Fill32(0, 0, 0, _width, _height);
+ uint32 color = TEX32_PACK_RGB(0, 0, 0);
+ _buffer->fill32(color, 0, 0, _width, _height);
MusicProcess *musicproc = MusicProcess::get_instance();
if (musicproc) musicproc->playMusic(0);
_playing = true;
diff --git a/engines/ultima/ultima8/graphics/texture.h b/engines/ultima/ultima8/graphics/texture.h
index 3d0641e1e2d..e88d717eda6 100644
--- a/engines/ultima/ultima8/graphics/texture.h
+++ b/engines/ultima/ultima8/graphics/texture.h
@@ -46,8 +46,11 @@ namespace Ultima8 {
#define TEX32_R_MASK 0x000000FF
#define TEX32_R(col32) (((col32)&TEX32_R_MASK)>>TEX32_R_SHIFT)
-#define TEX32_PACK_RGBA(r,g,b,a) (((a)<<TEX32_A_SHIFT)|((r)<<TEX32_R_SHIFT)|\
- ((g)<<TEX32_G_SHIFT)|((b)<<TEX32_B_SHIFT))
+#define TEX32_PACK_RGB(r, g, b) (uint32)(((0xFF) << TEX32_A_SHIFT) | ((r) << TEX32_R_SHIFT) | \
+ ((g) << TEX32_G_SHIFT) | ((b) << TEX32_B_SHIFT))
+
+#define TEX32_PACK_RGBA(r, g, b, a) (uint32)(((a) << TEX32_A_SHIFT) | ((r) << TEX32_R_SHIFT) | \
+ ((g) << TEX32_G_SHIFT) | ((b) << TEX32_B_SHIFT))
} // End of namespace Ultima8
} // End of namespace Ultima
diff --git a/engines/ultima/ultima8/gumps/credits_gump.cpp b/engines/ultima/ultima8/gumps/credits_gump.cpp
index 2fef5de3a05..b67ee93e05b 100644
--- a/engines/ultima/ultima8/gumps/credits_gump.cpp
+++ b/engines/ultima/ultima8/gumps/credits_gump.cpp
@@ -26,6 +26,7 @@
#include "ultima/ultima8/kernel/mouse.h"
#include "ultima/ultima8/graphics/render_surface.h"
+#include "ultima/ultima8/graphics/texture.h"
#include "ultima/ultima8/graphics/fonts/rendered_text.h"
#include "ultima/ultima8/graphics/fonts/font.h"
#include "ultima/ultima8/graphics/fonts/font_manager.h"
@@ -76,10 +77,13 @@ void CreditsGump::InitGump(Gump *newparent, bool take_focus) {
_scroll[1] = RenderSurface::CreateSecondaryRenderSurface(width, height);
_scroll[2] = RenderSurface::CreateSecondaryRenderSurface(width, height);
_scroll[3] = RenderSurface::CreateSecondaryRenderSurface(width, height);
- _scroll[0]->Fill32(0xFF000000, 0, 0, width, height); // black background
- _scroll[1]->Fill32(0xFF000000, 0, 0, width, height);
- _scroll[2]->Fill32(0xFF000000, 0, 0, width, height);
- _scroll[3]->Fill32(0xFF000000, 0, 0, width, height);
+
+ uint32 color = TEX32_PACK_RGB(0, 0, 0);
+ _scroll[0]->fill32(color, 0, 0, width, height); // black background
+ _scroll[1]->fill32(color, 0, 0, width, height);
+ _scroll[2]->fill32(color, 0, 0, width, height);
+ _scroll[3]->fill32(color, 0, 0, width, height);
+
_scrollHeight[0] = 156;
_scrollHeight[1] = 0;
_scrollHeight[2] = 0;
@@ -176,8 +180,12 @@ void CreditsGump::run() {
// time to render next block
Rect bounds;
_scroll[nextblock]->GetSurfaceDims(bounds);
- _scroll[nextblock]->Fill32(0xFF000000, 0, 0, bounds.width(), bounds.height());
- //_scroll[nextblock]->Fill32(0xFFFFFFFF, 0, 0, bounds.width(), 2); // block marker
+
+ uint32 color = TEX32_PACK_RGB(0, 0, 0);
+ _scroll[nextblock]->fill32(color, 0, 0, bounds.width(), bounds.height());
+
+ //color = TEX32_PACK_RGB(0xFF, 0xFF, 0xFF);
+ //_scroll[nextblock]->fill32(color, 0, 0, bounds.width(), 2); // block marker
_scrollHeight[nextblock] = 0;
Font *redfont, *yellowfont;
@@ -278,8 +286,8 @@ void CreditsGump::run() {
int linewidth = outline.size() * 8;
if (linewidth > 192) linewidth = 192;
- _scroll[nextblock]->
- Fill32(0xFFD43030, 128 - (linewidth / 2),
+ color = TEX32_PACK_RGB(0xD4, 0x30, 0x30);
+ _scroll[nextblock]->fill32(color, 128 - (linewidth / 2),
_scrollHeight[nextblock] + height + 3,
linewidth, 1);
height += 7;
@@ -349,8 +357,12 @@ void CreditsGump::run() {
}
void CreditsGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled) {
- surf->Fill32(0xFF000000, 0, 0, 320, 200); // black background
- surf->Fill32(0xFFD43030, 64, 41, 192, 1); // line between _title and scroller
+ uint32 color = TEX32_PACK_RGB(0, 0, 0);
+ surf->fill32(color, 0, 0, 320, 200);
+
+ // line between _title and scroller
+ color = TEX32_PACK_RGB(0xD4, 0x30, 0x30);
+ surf->fill32(color, 64, 41, 192, 1);
if (_title)
_title->draw(surf, 64, 34);
diff --git a/engines/ultima/ultima8/gumps/cru_credits_gump.cpp b/engines/ultima/ultima8/gumps/cru_credits_gump.cpp
index ba3f1593cb8..789ab95c32b 100644
--- a/engines/ultima/ultima8/gumps/cru_credits_gump.cpp
+++ b/engines/ultima/ultima8/gumps/cru_credits_gump.cpp
@@ -28,6 +28,7 @@
#include "ultima/ultima8/kernel/mouse.h"
#include "ultima/ultima8/graphics/render_surface.h"
#include "ultima/ultima8/graphics/palette_manager.h"
+#include "ultima/ultima8/graphics/texture.h"
#include "ultima/ultima8/graphics/fonts/rendered_text.h"
#include "ultima/ultima8/graphics/fonts/font.h"
#include "ultima/ultima8/graphics/fonts/font_manager.h"
@@ -52,7 +53,9 @@ CruCreditsGump::CruCreditsGump(Common::SeekableReadStream *txtrs,
{
Image::BitmapDecoder decoder;
_background = RenderSurface::CreateSecondaryRenderSurface(640, 480);
- _background->Fill32(0xFF000000, 0, 0, 640, 480); // black background
+
+ uint32 color = TEX32_PACK_RGB(0, 0, 0);
+ _background->fill32(color, 0, 0, 640, 480); // black background
if (decoder.loadStream(*bmprs)) {
// This does an extra copy via the ManagedSurface, but it's a once-off.
diff --git a/engines/ultima/ultima8/gumps/cru_demo_gump.cpp b/engines/ultima/ultima8/gumps/cru_demo_gump.cpp
index 21ca165d429..f2619f087cc 100644
--- a/engines/ultima/ultima8/gumps/cru_demo_gump.cpp
+++ b/engines/ultima/ultima8/gumps/cru_demo_gump.cpp
@@ -27,6 +27,7 @@
#include "ultima/ultima8/ultima8.h"
#include "ultima/ultima8/kernel/mouse.h"
#include "ultima/ultima8/graphics/render_surface.h"
+#include "ultima/ultima8/graphics/texture.h"
#include "ultima/ultima8/audio/music_process.h"
namespace Ultima {
@@ -43,7 +44,9 @@ CruDemoGump::CruDemoGump(Common::SeekableReadStream *bmprs, uint32 flags, int32
{
Image::BitmapDecoder decoder;
_background = RenderSurface::CreateSecondaryRenderSurface(640, 480);
- _background->Fill32(0xFF000000, 0, 0, 640, 480); // black background
+
+ uint32 color = TEX32_PACK_RGB(0, 0, 0);
+ _background->fill32(color, 0, 0, 640, 480); // black background
if (decoder.loadStream(*bmprs)) {
// This does an extra copy via the ManagedSurface, but it's a once-off.
diff --git a/engines/ultima/ultima8/gumps/cru_energy_gump.cpp b/engines/ultima/ultima8/gumps/cru_energy_gump.cpp
index d64dbc2c792..5b4cf252a1b 100644
--- a/engines/ultima/ultima8/gumps/cru_energy_gump.cpp
+++ b/engines/ultima/ultima8/gumps/cru_energy_gump.cpp
@@ -24,6 +24,7 @@
#include "ultima/ultima8/world/actors/main_actor.h"
#include "ultima/ultima8/graphics/palette_manager.h"
#include "ultima/ultima8/graphics/render_surface.h"
+#include "ultima/ultima8/graphics/texture.h"
#include "ultima/ultima8/world/get_object.h"
namespace Ultima {
@@ -76,8 +77,8 @@ void CruEnergyGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scale
int g = ENERGY_BAR_G;
int b = ENERGY_BAR_B;
gamepal->transformRGB(r, g, b);
- uint32 fillcolor = (r << 16) | (g << 8) | b;
- surf->Fill32(fillcolor, 34, 7, width, 14);
+ uint32 color = TEX32_PACK_RGB(r, g, b);
+ surf->fill32(color, 34, 7, width, 14);
}
void CruEnergyGump::saveData(Common::WriteStream *ws) {
diff --git a/engines/ultima/ultima8/gumps/cru_health_gump.cpp b/engines/ultima/ultima8/gumps/cru_health_gump.cpp
index 385604527ba..c615e66d9e7 100644
--- a/engines/ultima/ultima8/gumps/cru_health_gump.cpp
+++ b/engines/ultima/ultima8/gumps/cru_health_gump.cpp
@@ -24,6 +24,7 @@
#include "ultima/ultima8/world/actors/main_actor.h"
#include "ultima/ultima8/graphics/palette_manager.h"
#include "ultima/ultima8/graphics/render_surface.h"
+#include "ultima/ultima8/graphics/texture.h"
#include "ultima/ultima8/world/get_object.h"
namespace Ultima {
@@ -68,8 +69,8 @@ void CruHealthGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scale
int g = HEALTH_BAR_G;
int b = HEALTH_BAR_B;
gamepal->transformRGB(r, g, b);
- uint32 fillcolor = (r << 16) | (g << 8) | b;
- surf->Fill32(fillcolor, 34, 7, width, 14);
+ uint32 color = TEX32_PACK_RGB(r, g, b);
+ surf->fill32(color, 34, 7, width, 14);
}
void CruHealthGump::saveData(Common::WriteStream *ws) {
diff --git a/engines/ultima/ultima8/gumps/difficulty_gump.cpp b/engines/ultima/ultima8/gumps/difficulty_gump.cpp
index 04672eb441d..349b73aa2c6 100644
--- a/engines/ultima/ultima8/gumps/difficulty_gump.cpp
+++ b/engines/ultima/ultima8/gumps/difficulty_gump.cpp
@@ -23,6 +23,7 @@
#include "ultima/ultima8/graphics/render_surface.h"
#include "ultima/ultima8/graphics/gump_shape_archive.h"
#include "ultima/ultima8/graphics/palette_manager.h"
+#include "ultima/ultima8/graphics/texture.h"
#include "ultima/ultima8/ultima8.h"
#include "ultima/ultima8/games/game_data.h"
#include "ultima/ultima8/kernel/mouse.h"
@@ -136,7 +137,8 @@ void DifficultyGump::OnFocus(bool gain) {
void DifficultyGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled) {
// Paint a highlight around the current level
int highlihght_y = BUTTON_Y + ((_highlighted - 1) * (BUTTON_SPACE + BUTTON_HEIGHT));
- surf->Fill32(0xFF808080, BUTTON_X - 1, highlihght_y - 1, _buttonWidth + 2, _buttonHeight + 2);
+ uint32 color = TEX32_PACK_RGB(0x80, 0x80, 0x80);
+ surf->fill32(color, BUTTON_X - 1, highlihght_y - 1, _buttonWidth + 2, _buttonHeight + 2);
ModalGump::PaintThis(surf, lerp_factor, scaled);
}
diff --git a/engines/ultima/ultima8/gumps/fast_area_vis_gump.cpp b/engines/ultima/ultima8/gumps/fast_area_vis_gump.cpp
index 2434173c2bc..39c8805528a 100644
--- a/engines/ultima/ultima8/gumps/fast_area_vis_gump.cpp
+++ b/engines/ultima/ultima8/gumps/fast_area_vis_gump.cpp
@@ -25,6 +25,7 @@
#include "ultima/ultima8/world/get_object.h"
#include "ultima/ultima8/world/item.h"
#include "ultima/ultima8/graphics/render_surface.h"
+#include "ultima/ultima8/graphics/texture.h"
namespace Ultima {
namespace Ultima8 {
@@ -41,13 +42,18 @@ void FastAreaVisGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool sca
World *world = World::get_instance();
CurrentMap *currentmap = world->getCurrentMap();
- surf->Fill32(0xFF0000, 0, 0, MAP_NUM_CHUNKS + 2, MAP_NUM_CHUNKS + 2);
- surf->Fill32(0, 1, 1, MAP_NUM_CHUNKS, MAP_NUM_CHUNKS);
+ uint32 color = TEX32_PACK_RGB(0xFF, 0, 0);
+ surf->fill32(color, 0, 0, MAP_NUM_CHUNKS + 2, MAP_NUM_CHUNKS + 2);
+ color = TEX32_PACK_RGB(0, 0, 0);
+ surf->fill32(color, 1, 1, MAP_NUM_CHUNKS, MAP_NUM_CHUNKS);
+
+ color = TEX32_PACK_RGB(0xFF, 0xFF, 0xFF);
for (int yp = 0; yp < MAP_NUM_CHUNKS; yp++)
for (int xp = 0; xp < MAP_NUM_CHUNKS; xp++)
- if (currentmap->isChunkFast(xp, yp)) surf->Fill32(0xFFFFFFFF, xp + 1, yp + 1, 1, 1);
+ if (currentmap->isChunkFast(xp, yp))
+ surf->fill32(color, xp + 1, yp + 1, 1, 1);
// Put a red dot where the avatar is
Item *avatar = getItem(1);
@@ -57,8 +63,10 @@ void FastAreaVisGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool sca
int chunksize = currentmap->getChunkSize();
x /= chunksize;
y /= chunksize;
- if (x >= 0 && x < MAP_NUM_CHUNKS && y >= 0 && y < MAP_NUM_CHUNKS)
- surf->Fill32(0xFFFF1010, x + 1, y + 1, 1, 1);
+ if (x >= 0 && x < MAP_NUM_CHUNKS && y >= 0 && y < MAP_NUM_CHUNKS) {
+ color = TEX32_PACK_RGB(0xFF, 0x10, 0x10);
+ surf->fill32(color, x + 1, y + 1, 1, 1);
+ }
}
}
diff --git a/engines/ultima/ultima8/gumps/message_box_gump.cpp b/engines/ultima/ultima8/gumps/message_box_gump.cpp
index 3a40b2d8f62..c67c626acfb 100644
--- a/engines/ultima/ultima8/gumps/message_box_gump.cpp
+++ b/engines/ultima/ultima8/gumps/message_box_gump.cpp
@@ -26,6 +26,7 @@
#include "ultima/ultima8/graphics/fonts/font_manager.h"
#include "ultima/ultima8/kernel/mouse.h"
#include "ultima/ultima8/graphics/render_surface.h"
+#include "ultima/ultima8/graphics/texture.h"
namespace Ultima {
namespace Ultima8 {
@@ -33,7 +34,7 @@ namespace Ultima8 {
DEFINE_RUNTIME_CLASSTYPE_CODE(MessageBoxGump)
MessageBoxGump::MessageBoxGump()
- : ModalGump(), _titleColour(0) {
+ : ModalGump(), _titleColour(TEX32_PACK_RGB(0, 0, 0)) {
}
@@ -116,24 +117,25 @@ void MessageBoxGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool /*sc
// Background is partially transparent
surf->FillBlended(0x80000000, _dims);
- uint32 line_colour = 0xFFFFFFFF;
- if (!IsFocus()) line_colour = 0xFF7F7F7F;
+ uint32 color = TEX32_PACK_RGB(0xFF, 0xFF, 0xFF);
+ if (!IsFocus())
+ color = TEX32_PACK_RGB(0x7F, 0x7F, 0x7F);
// outer border
- surf->Fill32(line_colour, 0, 0, _dims.width(), 1);
- surf->Fill32(line_colour, 0, 0, 1, _dims.height());
- surf->Fill32(line_colour, 0, _dims.height() - 1, _dims.width(), 1);
- surf->Fill32(line_colour, _dims.width() - 1, 0, 1, _dims.height());
+ surf->fill32(color, 0, 0, _dims.width(), 1);
+ surf->fill32(color, 0, 0, 1, _dims.height());
+ surf->fill32(color, 0, _dims.height() - 1, _dims.width(), 1);
+ surf->fill32(color, _dims.width() - 1, 0, 1, _dims.height());
// line above _buttons
- surf->Fill32(line_colour, 0, _dims.height() - 28, _dims.width(), 1);
+ surf->fill32(color, 0, _dims.height() - 28, _dims.width(), 1);
// line below _title
- surf->Fill32(line_colour, 0, 23, _dims.width(), 1);
+ surf->fill32(color, 0, 23, _dims.width(), 1);
- // Highlight behind _message..
- if (IsFocus()) surf->Fill32(_titleColour, 1, 1, _dims.width() - 2, 22);
- else surf->Fill32(0xFF000000, 1, 1, _dims.width() - 2, 22);
+ // Highlight behind _message
+ color = IsFocus() ? _titleColour : TEX32_PACK_RGB(0, 0, 0);
+ surf->fill32(color, 1, 1, _dims.width() - 2, 22);
}
void MessageBoxGump::ChildNotify(Gump *child, uint32 msg) {
diff --git a/engines/ultima/ultima8/gumps/message_box_gump.h b/engines/ultima/ultima8/gumps/message_box_gump.h
index 0f5302fd758..b399d92cd55 100644
--- a/engines/ultima/ultima8/gumps/message_box_gump.h
+++ b/engines/ultima/ultima8/gumps/message_box_gump.h
@@ -28,6 +28,7 @@
#include "ultima/shared/std/string.h"
#include "ultima/shared/std/containers.h"
#include "ultima/ultima8/misc/classtype.h"
+#include "ultima/ultima8/graphics/texture.h"
namespace Ultima {
namespace Ultima8 {
@@ -63,9 +64,9 @@ public:
//! \param titleColour The colour to be displayed behind the title bar
//! \param buttons Array of button names to be displayed. Default is "Ok"
//! \return Pid of process that will have the result when finished
- static ProcId Show(Std::string title, Std::string message, uint32 titleColour = 0xFF30308F, Std::vector<Std::string> *buttons = 0);
+ static ProcId Show(Std::string title, Std::string message, uint32 titleColour, Std::vector<Std::string> *buttons = 0);
static ProcId Show(Std::string title, Std::string message, Std::vector<Std::string> *buttons) {
- return Show(title, message, 0xFF30308F, buttons);
+ return Show(title, message, TEX32_PACK_RGB(0x30, 0x30, 0x8F), buttons);
}
void ChildNotify(Gump *child, uint32 msg) override;
diff --git a/engines/ultima/ultima8/gumps/mini_stats_gump.cpp b/engines/ultima/ultima8/gumps/mini_stats_gump.cpp
index f8c62fed79e..cfa25fdb427 100644
--- a/engines/ultima/ultima8/gumps/mini_stats_gump.cpp
+++ b/engines/ultima/ultima8/gumps/mini_stats_gump.cpp
@@ -25,6 +25,7 @@
#include "ultima/ultima8/graphics/gump_shape_archive.h"
#include "ultima/ultima8/world/actors/main_actor.h"
#include "ultima/ultima8/graphics/render_surface.h"
+#include "ultima/ultima8/graphics/texture.h"
#include "ultima/ultima8/kernel/mouse.h"
#include "ultima/ultima8/world/get_object.h"
@@ -39,8 +40,17 @@ static const int manax = 13;
static const int bary = 19;
static const int barheight = 14;
-static const uint32 hpcolour[] = { 0x980404, 0xBC0C0C, 0xD43030 };
-static const uint32 manacolour[] = { 0x4050FC, 0x1C28FC, 0x0C0CCC };
+static const uint32 hpcolour[] = {
+ TEX32_PACK_RGB(0x98, 0x04, 0x04),
+ TEX32_PACK_RGB(0xBC, 0x0C, 0x0C),
+ TEX32_PACK_RGB(0xD4, 0x30, 0x30)
+};
+
+static const uint32 manacolour[] = {
+ TEX32_PACK_RGB(0x40, 0x50, 0xFC),
+ TEX32_PACK_RGB(0x1C, 0x28, 0xFC),
+ TEX32_PACK_RGB(0x0C, 0x0C, 0xCC)
+};
MiniStatsGump::MiniStatsGump() : Gump() {
@@ -87,8 +97,8 @@ void MiniStatsGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scale
hpheight = (hp * barheight) / maxhp;
for (int i = 0; i < 3; ++i) {
- surf->Fill32(hpcolour[i], hpx + i, bary - hpheight + 1, 1, hpheight);
- surf->Fill32(manacolour[i], manax + i, bary - manaheight + 1, 1, manaheight);
+ surf->fill32(hpcolour[i], hpx + i, bary - hpheight + 1, 1, hpheight);
+ surf->fill32(manacolour[i], manax + i, bary - manaheight + 1, 1, manaheight);
}
}
diff --git a/engines/ultima/ultima8/gumps/minimap_gump.cpp b/engines/ultima/ultima8/gumps/minimap_gump.cpp
index 54127cf15ec..25a15b25023 100644
--- a/engines/ultima/ultima8/gumps/minimap_gump.cpp
+++ b/engines/ultima/ultima8/gumps/minimap_gump.cpp
@@ -25,6 +25,7 @@
#include "ultima/ultima8/world/world.h"
#include "ultima/ultima8/world/actors/main_actor.h"
#include "ultima/ultima8/graphics/render_surface.h"
+#include "ultima/ultima8/graphics/texture.h"
#include "ultima/ultima8/world/get_object.h"
#include "ultima/ultima8/kernel/mouse.h"
@@ -120,7 +121,7 @@ void MiniMapGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled)
dims.grow(-1);
// Fill the background
- surf->Fill32(0xFF000000, dims);
+ surf->fill32(TEX32_PACK_RGB(0, 0, 0), dims);
// Center on avatar
int sx = _ax - dims.width() / 2;
diff --git a/engines/ultima/ultima8/gumps/movie_gump.cpp b/engines/ultima/ultima8/gumps/movie_gump.cpp
index 04bd5287892..f30b99ed4e7 100644
--- a/engines/ultima/ultima8/gumps/movie_gump.cpp
+++ b/engines/ultima/ultima8/gumps/movie_gump.cpp
@@ -27,6 +27,7 @@
#include "ultima/ultima8/graphics/shape.h"
#include "ultima/ultima8/graphics/shape_frame.h"
#include "ultima/ultima8/graphics/palette_manager.h"
+#include "ultima/ultima8/graphics/texture.h"
#include "ultima/ultima8/graphics/fade_to_modal_process.h"
#include "ultima/ultima8/ultima8.h"
#include "ultima/ultima8/games/game_data.h"
@@ -203,7 +204,7 @@ void MovieGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled) {
subtitle->getLocation(x, y);
subtitle->GetDims(textdims);
surf->GetSurfaceDims(screendims);
- surf->Fill32(0x000000,
+ surf->fill32(TEX32_PACK_RGB(0, 0, 0),
screendims.width() / 2 - 300 - screendims.left,
y - 3,
600,
diff --git a/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp b/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
index 7c2c32ee6f8..c24fff806cd 100644
--- a/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
+++ b/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
@@ -37,6 +37,7 @@
#include "ultima/ultima8/graphics/main_shape_archive.h"
#include "ultima/ultima8/graphics/gump_shape_archive.h"
#include "ultima/ultima8/graphics/mouse_shape_archive.h"
+#include "ultima/ultima8/graphics/texture.h"
#include "ultima/ultima8/filesys/file_system.h"
#include "ultima/ultima8/convert/u8/convert_shape_u8.h"
@@ -50,9 +51,24 @@ namespace Ultima8 {
DEFINE_RUNTIME_CLASSTYPE_CODE(ShapeViewerGump)
+static const uint32 background_colors[] = {
+ TEX32_PACK_RGB(0x10, 0x10, 0x10),
+ TEX32_PACK_RGB(0x90, 0x90, 0x90)
+};
+
+static const uint32 grid_colors[] = {
+ TEX32_PACK_RGB(0x20, 0x20, 0x20),
+ TEX32_PACK_RGB(0xA0, 0xA0, 0xA0)
+};
+
+static const uint32 axis_colors[] = {
+ TEX32_PACK_RGB(0x10, 0x30, 0x10),
+ TEX32_PACK_RGB(0x90, 0xB0, 0x90)
+};
+
ShapeViewerGump::ShapeViewerGump()
: ModalGump(), _curArchive(0), _curShape(0), _curFrame(0),
- _background(0x101010), _fontNo(0), _showGrid(false), _mirrored(false),
+ _background(0), _fontNo(0), _showGrid(false), _mirrored(false),
_shapeW(0), _shapeH(0), _shapeX(0), _shapeY(0) {
}
@@ -62,7 +78,7 @@ ShapeViewerGump::ShapeViewerGump(int x, int y, int width, int height,
uint32 flags, int32 layer)
: ModalGump(x, y, width, height, 0, flags, layer), _archives(archives),
_curArchive(0), _curShape(0), _curFrame(0),
- _background(0x101010), _fontNo(0), _showGrid(false), _mirrored(false),
+ _background(0), _fontNo(0), _showGrid(false), _mirrored(false),
_shapeW(0), _shapeH(0), _shapeX(0), _shapeY(0) {
if (GAME_IS_CRUSADER) {
@@ -89,7 +105,8 @@ void ShapeViewerGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool /*s
return;
}
- surf->Fill32(_background, _dims);
+ uint32 color = background_colors[_background];
+ surf->fill32(color, _dims);
int32 posx = (_dims.width() - _shapeW) / 2 + _shapeX;
int32 posy = (_dims.height() - _shapeH) / 2 + _shapeY - 25;
@@ -97,7 +114,7 @@ void ShapeViewerGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool /*s
if (_showGrid) {
const int step = 16;
- uint32 color = _background + 0x101010;
+ color = grid_colors[_background];
for (int i = step; i < _dims.width(); i += step) {
int32 x = posx + i;
if (x < _dims.right)
@@ -118,7 +135,7 @@ void ShapeViewerGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool /*s
surf->DrawLine32(color, _dims.left, y, _dims.right - 1, y);
}
- color = _background + 0x002000;
+ color = axis_colors[_background];
surf->DrawLine32(color, posx, _dims.top, posx, _dims.bottom - 1);
surf->DrawLine32(color, _dims.left, posy, _dims.right - 1, posy);
}
@@ -312,8 +329,7 @@ bool ShapeViewerGump::OnKeyDown(int key, int mod) {
}
break;
case Common::KEYCODE_b: {
- _background += 0x808080;
- _background &= 0xF0F0F0;
+ _background = _background ? 0 : 1;
} break;
case Common::KEYCODE_ESCAPE: {
Close();
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index 3bdc7c03f17..f5e348a1df5 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -683,7 +683,7 @@ void Ultima8Engine::paint() {
Rect r;
_screen->GetSurfaceDims(r);
if (_highRes)
- _screen->Fill32(0, r);
+ _screen->fill32(TEX32_PACK_RGB(0, 0, 0), r);
#ifdef DEBUG
// Fill the screen with an annoying color so we can see fast area bugs
diff --git a/engines/ultima/ultima8/world/item_sorter.cpp b/engines/ultima/ultima8/world/item_sorter.cpp
index c9fbe1e88ca..7501e7c7488 100644
--- a/engines/ultima/ultima8/world/item_sorter.cpp
+++ b/engines/ultima/ultima8/world/item_sorter.cpp
@@ -27,6 +27,7 @@
#include "ultima/ultima8/graphics/shape_frame.h"
#include "ultima/ultima8/graphics/main_shape_archive.h"
#include "ultima/ultima8/graphics/render_surface.h"
+#include "ultima/ultima8/graphics/texture.h"
#include "ultima/ultima8/games/game_data.h"
#include "ultima/ultima8/ultima8.h"
@@ -253,7 +254,8 @@ void ItemSorter::AddItem(const Item *add) {
void ItemSorter::PaintDisplayList(RenderSurface *surf, bool item_highlight) {
if (_sortLimit) {
// Clear the surface when debugging the sorter
- surf->Fill32(0, _clipWindow);
+ uint32 color = TEX32_PACK_RGB(0, 0, 0);
+ surf->fill32(color, _clipWindow);
}
SortItem *it = _items;
diff --git a/engines/ultima/ultima8/world/target_reticle_process.cpp b/engines/ultima/ultima8/world/target_reticle_process.cpp
index a1de56cc530..9b5adbe2717 100644
--- a/engines/ultima/ultima8/world/target_reticle_process.cpp
+++ b/engines/ultima/ultima8/world/target_reticle_process.cpp
@@ -200,7 +200,7 @@ void TargetReticleProcess::clearSprite() {
void TargetReticleProcess::toggle() {
bool newstate = !getEnabled();
Std::string msg = newstate ? _TL_("TARGETING RETICLE ACTIVE") : _TL_("TARGETING RETICLE INACTIVE");
- MessageBoxGump::Show("", msg, 0xFF707070);
+ MessageBoxGump::Show("", msg, TEX32_PACK_RGB(0x70, 0x70, 0x70));
setEnabled(newstate);
}
Commit: d7cd2d5cba33509dd00b52f309135f0e0411da18
https://github.com/scummvm/scummvm/commit/d7cd2d5cba33509dd00b52f309135f0e0411da18
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2023-09-08T18:30:26-05:00
Commit Message:
ULTIMA8: Alter drawLine32 method to use TEX32_PACK_RGB format
Changed paths:
engines/ultima/ultima8/graphics/render_surface.cpp
engines/ultima/ultima8/graphics/render_surface.h
engines/ultima/ultima8/gumps/minimap_gump.cpp
engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
engines/ultima/ultima8/world/actors/pathfinder.cpp
diff --git a/engines/ultima/ultima8/graphics/render_surface.cpp b/engines/ultima/ultima8/graphics/render_surface.cpp
index 9948ff3b502..3e354d0d075 100644
--- a/engines/ultima/ultima8/graphics/render_surface.cpp
+++ b/engines/ultima/ultima8/graphics/render_surface.cpp
@@ -412,13 +412,8 @@ void RenderSurface::FillBlended(uint32 rgba, const Rect &r) {
fillBlendedLogic<uint16>(_pixels, _pitch, rgba, rect, _surface->format);
}
-//
-// RenderSurface::DrawLine32(uint32 rgb, int32 sx, int32 sy, int32 ex, int32 ey);
-//
-// Desc: Draw a (non-antialiased) line from (sx,sy) to (ex,ey) with color rgb
-//
-void RenderSurface::DrawLine32(uint32 rgb, int32 sx, int32 sy, int32 ex, int32 ey) {
- rgb = _surface->format.RGBToColor((rgb >> 16) & 0xFF, (rgb >> 8) & 0xFF, rgb & 0xFF);
+void RenderSurface::drawLine32(uint32 rgb, int32 sx, int32 sy, int32 ex, int32 ey) {
+ rgb = _surface->format.RGBToColor(TEX32_R(rgb), TEX32_G(rgb), TEX32_B(rgb));
_surface->drawLine(sx + _ox, sy + _oy, ex + _ox, ey + _oy, rgb);
}
diff --git a/engines/ultima/ultima8/graphics/render_surface.h b/engines/ultima/ultima8/graphics/render_surface.h
index 7c57107bb9b..878a78e6fe0 100644
--- a/engines/ultima/ultima8/graphics/render_surface.h
+++ b/engines/ultima/ultima8/graphics/render_surface.h
@@ -178,8 +178,8 @@ public:
// Basic Line Drawing
//
- // Draw a RGB Line
- void DrawLine32(uint32 rgb, int32 sx, int32 sy, int32 ex, int32 ey);
+ // Draw a line with a color in the TEX32_PACK_RGB format
+ void drawLine32(uint32 rgb, int32 sx, int32 sy, int32 ex, int32 ey);
//
diff --git a/engines/ultima/ultima8/gumps/minimap_gump.cpp b/engines/ultima/ultima8/gumps/minimap_gump.cpp
index 25a15b25023..21a66d79b8a 100644
--- a/engines/ultima/ultima8/gumps/minimap_gump.cpp
+++ b/engines/ultima/ultima8/gumps/minimap_gump.cpp
@@ -34,8 +34,8 @@ namespace Ultima8 {
DEFINE_RUNTIME_CLASSTYPE_CODE(MiniMapGump)
-static const uint32 NORMAL_COLOR = 0xFFFFAF00;
-static const uint32 HIGHLIGHT_COLOR = 0xFFFFCF00;
+static const uint32 NORMAL_COLOR = TEX32_PACK_RGB(0xFF, 0xAF, 0x00);
+static const uint32 HIGHLIGHT_COLOR = TEX32_PACK_RGB(0xFF, 0xCF, 0x00);
MiniMapGump::MiniMapGump(int x, int y) : ResizableGump(x, y, 120, 120), _minimaps(), _ax(0), _ay(0) {
setMinSize(60, 60);
@@ -111,10 +111,10 @@ void MiniMapGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled)
color = HIGHLIGHT_COLOR;
// Draw the border
- surf->DrawLine32(color, _dims.left, _dims.top, _dims.right - 1, _dims.top);
- surf->DrawLine32(color, _dims.left, _dims.top, _dims.left, _dims.bottom - 1);
- surf->DrawLine32(color, _dims.left, _dims.bottom - 1, _dims.right - 1, _dims.bottom - 1);
- surf->DrawLine32(color, _dims.right -1, _dims.top, _dims.right - 1, _dims.bottom - 1);
+ surf->drawLine32(color, _dims.left, _dims.top, _dims.right - 1, _dims.top);
+ surf->drawLine32(color, _dims.left, _dims.top, _dims.left, _dims.bottom - 1);
+ surf->drawLine32(color, _dims.left, _dims.bottom - 1, _dims.right - 1, _dims.bottom - 1);
+ surf->drawLine32(color, _dims.right -1, _dims.top, _dims.right - 1, _dims.bottom - 1);
// Dimensions minus border
Rect dims = _dims;
@@ -166,10 +166,10 @@ void MiniMapGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled)
int32 ay = _ay - sy;
// Paint the avatar position marker
- surf->DrawLine32(color, ax - 1, ay + 1, ax, ay + 1);
- surf->DrawLine32(color, ax + 1, ay - 1, ax + 1, ay);
- surf->DrawLine32(color, ax + 2, ay + 1, ax + 3, ay + 1);
- surf->DrawLine32(color, ax + 1, ay + 2, ax + 1, ay + 3);
+ surf->drawLine32(color, ax - 1, ay + 1, ax, ay + 1);
+ surf->drawLine32(color, ax + 1, ay - 1, ax + 1, ay);
+ surf->drawLine32(color, ax + 2, ay + 1, ax + 3, ay + 1);
+ surf->drawLine32(color, ax + 1, ay + 2, ax + 1, ay + 3);
}
Gump *MiniMapGump::onMouseDown(int button, int32 mx, int32 my) {
diff --git a/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp b/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
index c24fff806cd..56689bab2fa 100644
--- a/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
+++ b/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
@@ -118,26 +118,26 @@ void ShapeViewerGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool /*s
for (int i = step; i < _dims.width(); i += step) {
int32 x = posx + i;
if (x < _dims.right)
- surf->DrawLine32(color, x, _dims.top, x, _dims.bottom - 1);
+ surf->drawLine32(color, x, _dims.top, x, _dims.bottom - 1);
x = posx - i;
if (x > _dims.left)
- surf->DrawLine32(color, x, _dims.top, x, _dims.bottom - 1);
+ surf->drawLine32(color, x, _dims.top, x, _dims.bottom - 1);
}
for (int i = step; i < _dims.height(); i += step) {
int32 y = posy + i;
if (y < _dims.bottom)
- surf->DrawLine32(color, _dims.left, y, _dims.right - 1, y);
+ surf->drawLine32(color, _dims.left, y, _dims.right - 1, y);
y = posy - i;
if (y > _dims.top)
- surf->DrawLine32(color, _dims.left, y, _dims.right - 1, y);
+ surf->drawLine32(color, _dims.left, y, _dims.right - 1, y);
}
color = axis_colors[_background];
- surf->DrawLine32(color, posx, _dims.top, posx, _dims.bottom - 1);
- surf->DrawLine32(color, _dims.left, posy, _dims.right - 1, posy);
+ surf->drawLine32(color, posx, _dims.top, posx, _dims.bottom - 1);
+ surf->drawLine32(color, _dims.left, posy, _dims.right - 1, posy);
}
ShapeArchive *archive = _archives[_curArchive]._archive;
diff --git a/engines/ultima/ultima8/world/actors/pathfinder.cpp b/engines/ultima/ultima8/world/actors/pathfinder.cpp
index 78dbf3529fe..32c3be1a2d9 100644
--- a/engines/ultima/ultima8/world/actors/pathfinder.cpp
+++ b/engines/ultima/ultima8/world/actors/pathfinder.cpp
@@ -280,11 +280,11 @@ static void drawbox(const Item *item) {
x3 = (d.width() / 2) + (ix - iy + yd) / 4;
y3 = (d.height() / 2) + (ix + iy - yd) / 8 - iz;
- screen->Fill32(0xFF0000FF, x0 - 1, y0 - 1, 3, 3);
+ screen->fill32(TEX32_PACK_RGB(0x00, 0x00, 0xFF), x0 - 1, y0 - 1, 3, 3);
- screen->DrawLine32(0xFF00FF00, x0, y0, x1, y1);
- screen->DrawLine32(0xFF00FF00, x0, y0, x2, y2);
- screen->DrawLine32(0xFF00FF00, x0, y0, x3, y3);
+ screen->drawLine32(TEX32_PACK_RGB(0x00, 0xFF, 0x00), x0, y0, x1, y1);
+ screen->drawLine32(TEX32_PACK_RGB(0x00, 0xFF, 0x00), x0, y0, x2, y2);
+ screen->drawLine32(TEX32_PACK_RGB(0x00, 0xFF, 0x00), x0, y0, x3, y3);
}
static void drawdot(int32 x, int32 y, int32 Z, int size, uint32 rgb) {
@@ -331,7 +331,7 @@ static void drawedge(const PathNode *from, const PathNode *to, uint32 rgb) {
x1 = (d.width() / 2) + (cx - cy) / 4;
y1 = (d.height() / 2) + (cx + cy) / 8 - cz;
- screen->DrawLine32(rgb, x0, y0, x1, y1);
+ screen->drawLine32(rgb, x0, y0, x1, y1);
}
static void drawpath(PathNode *to, uint32 rgb, bool done) {
@@ -342,12 +342,12 @@ static void drawpath(PathNode *to, uint32 rgb, bool done) {
drawedge(n1, n2, rgb);
if (done && n1 == to)
- drawdot(n1->state._x, n1->state._y, n1->state._z, 2, 0xFFFF0000);
+ drawdot(n1->state._x, n1->state._y, n1->state._z, 2, TEX32_PACK_RGB(0xFF, 0x00, 0x00));
else
- drawdot(n1->state._x, n1->state._y, n1->state._z, 1, 0xFFFFFFFF);
+ drawdot(n1->state._x, n1->state._y, n1->state._z, 1, TEX32_PACK_RGB(0xFF, 0xFF, 0xFF));
- drawdot(n2->state._x, n2->state._y, n2->state._z, 2, 0xFFFFFFFF);
+ drawdot(n2->state._x, n2->state._y, n2->state._z, 2, TEX32_PACK_RGB(0xFF, 0xFF, 0xFF));
n1 = n2;
n2 = n1->parent;
@@ -401,12 +401,12 @@ void Pathfinder::newNode(PathNode *oldnode, PathfindingState &state,
if (_actor->getObjId() == _visualDebugActor) {
RenderSurface *screen = Ultima8Engine::get_instance()->getRenderScreen();
screen->BeginPainting();
- drawpath(newnode, 0xFFFFFF00, done);
+ drawpath(newnode, TEX32_PACK_RGB(0xFF, 0xFF, 0x00), done);
screen->EndPainting();
g_system->delayMillis(50);
if (!done) {
screen->BeginPainting();
- drawpath(newnode, 0xFFB0B000, done);
+ drawpath(newnode, TEX32_PACK_RGB(0xB0, 0xB0, 0x00), done);
screen->EndPainting();
}
}
@@ -513,7 +513,7 @@ bool Pathfinder::pathfind(Std::vector<PathfindingAction> &path) {
if (_targetItem)
drawbox(_targetItem);
else
- drawdot(_targetX, _targetY, _targetZ, 2, 0xFF0000FF);
+ drawdot(_targetX, _targetY, _targetZ, 2, TEX32_PACK_RGB(0x00, 0x00, 0xFF));
screen->EndPainting();
}
#endif
Commit: 600403e7a2a6828e406096e1bab2a586f87708e6
https://github.com/scummvm/scummvm/commit/600403e7a2a6828e406096e1bab2a586f87708e6
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2023-09-08T18:30:26-05:00
Commit Message:
ULTIMA8: Use TEX32_PACK_RGBA macro when calling fillBlended
Changed paths:
engines/ultima/ultima8/graphics/render_surface.cpp
engines/ultima/ultima8/graphics/render_surface.h
engines/ultima/ultima8/gumps/desktop_gump.cpp
engines/ultima/ultima8/gumps/message_box_gump.cpp
diff --git a/engines/ultima/ultima8/graphics/render_surface.cpp b/engines/ultima/ultima8/graphics/render_surface.cpp
index 3e354d0d075..39bd9f07f4b 100644
--- a/engines/ultima/ultima8/graphics/render_surface.cpp
+++ b/engines/ultima/ultima8/graphics/render_surface.cpp
@@ -389,12 +389,7 @@ void inline fillBlendedLogic(uint8 *pixels, int32 pitch, uint32 rgba, const Comm
} // End of anonymous namespace
-//
-// RenderSurface::FillBlended(uint32 rgba, Rect r)
-//
-// Desc: Fill the region doing alpha blending
-//
-void RenderSurface::FillBlended(uint32 rgba, const Rect &r) {
+void RenderSurface::fillBlended(uint32 rgba, const Rect &r) {
int alpha = TEX32_A(rgba);
if (alpha == 0xFF) {
fill32(rgba, r);
diff --git a/engines/ultima/ultima8/graphics/render_surface.h b/engines/ultima/ultima8/graphics/render_surface.h
index 878a78e6fe0..c67115829ef 100644
--- a/engines/ultima/ultima8/graphics/render_surface.h
+++ b/engines/ultima/ultima8/graphics/render_surface.h
@@ -142,7 +142,7 @@ public:
void FillAlpha(uint8 alpha, const Rect &r);
//! Fill the region doing alpha blending with a color in the TEX32_PACK_RGBA format
- void FillBlended(uint32 rgba, const Rect &r);
+ void fillBlended(uint32 rgba, const Rect &r);
//
// The rule for painting methods:
diff --git a/engines/ultima/ultima8/gumps/desktop_gump.cpp b/engines/ultima/ultima8/gumps/desktop_gump.cpp
index fbfdb68225e..3ad25df85e1 100644
--- a/engines/ultima/ultima8/gumps/desktop_gump.cpp
+++ b/engines/ultima/ultima8/gumps/desktop_gump.cpp
@@ -21,6 +21,7 @@
#include "ultima/ultima8/gumps/desktop_gump.h"
#include "ultima/ultima8/graphics/render_surface.h"
+#include "ultima/ultima8/graphics/texture.h"
#include "ultima/ultima8/kernel/mouse.h"
#include "ultima/ultima8/gumps/target_gump.h"
@@ -60,7 +61,7 @@ void DesktopGump::PaintChildren(RenderSurface *surf, int32 lerp_factor, bool sca
// Background is partially transparent
if (_fadedModal && dynamic_cast<ModalGump *>(g) &&
!dynamic_cast<TargetGump *>(g) && !g->IsHidden())
- surf->FillBlended(0x7F000000, _dims);
+ surf->fillBlended(TEX32_PACK_RGBA(0, 0, 0, 0x80), _dims);
g->Paint(surf, lerp_factor, scaled);
}
diff --git a/engines/ultima/ultima8/gumps/message_box_gump.cpp b/engines/ultima/ultima8/gumps/message_box_gump.cpp
index c67c626acfb..a85eb9b3f8d 100644
--- a/engines/ultima/ultima8/gumps/message_box_gump.cpp
+++ b/engines/ultima/ultima8/gumps/message_box_gump.cpp
@@ -115,7 +115,7 @@ void MessageBoxGump::Close(bool no_del) {
void MessageBoxGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool /*scaled*/) {
// Background is partially transparent
- surf->FillBlended(0x80000000, _dims);
+ surf->fillBlended(TEX32_PACK_RGBA(0, 0, 0, 0x80), _dims);
uint32 color = TEX32_PACK_RGB(0xFF, 0xFF, 0xFF);
if (!IsFocus())
Commit: 42a88e23d8f311502a3f161c47e24175c4700990
https://github.com/scummvm/scummvm/commit/42a88e23d8f311502a3f161c47e24175c4700990
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2023-09-08T18:30:26-05:00
Commit Message:
ULTIMA8: Use TEX32_PACK_RGBA in remaining places colors are hard-coded
Changed paths:
engines/ultima/ultima8/games/start_crusader_process.cpp
engines/ultima/ultima8/graphics/fade_to_modal_process.cpp
engines/ultima/ultima8/graphics/palette_fader_process.cpp
engines/ultima/ultima8/gumps/message_box_gump.cpp
engines/ultima/ultima8/gumps/movie_gump.cpp
engines/ultima/ultima8/misc/debugger.cpp
engines/ultima/ultima8/ultima8.cpp
engines/ultima/ultima8/world/item_sorter.cpp
diff --git a/engines/ultima/ultima8/games/start_crusader_process.cpp b/engines/ultima/ultima8/games/start_crusader_process.cpp
index d35deabaf8e..26a84728e2d 100644
--- a/engines/ultima/ultima8/games/start_crusader_process.cpp
+++ b/engines/ultima/ultima8/games/start_crusader_process.cpp
@@ -32,6 +32,7 @@
#include "ultima/ultima8/world/item_factory.h"
#include "ultima/ultima8/world/actors/teleport_to_egg_process.h"
#include "ultima/ultima8/graphics/palette_fader_process.h"
+#include "ultima/ultima8/graphics/texture.h"
namespace Ultima {
namespace Ultima8 {
@@ -137,7 +138,7 @@ void StartCrusaderProcess::run() {
avatar->setActorFlag(Actor::ACT_WEAPONREADY);
}
- Process *fader = new PaletteFaderProcess(0x00FFFFFF, true, 0x7FFF, 60, false);
+ Process *fader = new PaletteFaderProcess(TEX32_PACK_RGBA(0xFF, 0xFF, 0xFF, 0x00), true, 0x7FFF, 60, false);
Kernel::get_instance()->addProcess(fader);
Ultima8Engine::get_instance()->setAvatarInStasis(false);
diff --git a/engines/ultima/ultima8/graphics/fade_to_modal_process.cpp b/engines/ultima/ultima8/graphics/fade_to_modal_process.cpp
index c0638b9bfeb..ae81f98ea0b 100644
--- a/engines/ultima/ultima8/graphics/fade_to_modal_process.cpp
+++ b/engines/ultima/ultima8/graphics/fade_to_modal_process.cpp
@@ -21,6 +21,7 @@
#include "ultima/ultima8/graphics/palette_fader_process.h"
#include "ultima/ultima8/graphics/fade_to_modal_process.h"
+#include "ultima/ultima8/graphics/texture.h"
#include "ultima/ultima8/kernel/kernel.h"
#include "ultima/ultima8/gumps/gump_notify_process.h"
@@ -45,7 +46,7 @@ void FadeToModalProcess::onWakeUp() {
// Jump in now and make sure the fade in is started (ie, we go to black)
// before the modal is closed, otherwise a single frame of the thing
// behind it will be shown first.
- _fader = new PaletteFaderProcess(0x00000000, true, 0x7FFF, 30, false);
+ _fader = new PaletteFaderProcess(TEX32_PACK_RGBA(0x00, 0x00, 0x00, 0x00), true, 0x7FFF, 30, false);
_fader->run();
}
}
@@ -54,7 +55,7 @@ void FadeToModalProcess::run() {
switch (_nextState) {
case FS_OpenFadeOut:
{
- _fader = new PaletteFaderProcess(0x00000000, false, 0x7FFF, 30, true);
+ _fader = new PaletteFaderProcess(TEX32_PACK_RGBA(0x00, 0x00, 0x00, 0x00), false, 0x7FFF, 30, true);
Kernel::get_instance()->addProcess(_fader);
_fader->setRunPaused();
_nextState = FS_ShowGump;
diff --git a/engines/ultima/ultima8/graphics/palette_fader_process.cpp b/engines/ultima/ultima8/graphics/palette_fader_process.cpp
index ed14d340958..7e81d46f41e 100644
--- a/engines/ultima/ultima8/graphics/palette_fader_process.cpp
+++ b/engines/ultima/ultima8/graphics/palette_fader_process.cpp
@@ -20,6 +20,7 @@
*/
#include "ultima/ultima8/graphics/palette_fader_process.h"
+#include "ultima/ultima8/graphics/texture.h"
#include "ultima/ultima8/kernel/kernel.h"
#include "ultima/ultima8/ultima8.h"
@@ -158,7 +159,7 @@ uint32 PaletteFaderProcess::I_fadeToBlack(const uint8 *args,
}
}
- _fader = new PaletteFaderProcess(0x00000000, false, 0x7FFF, nsteps, true);
+ _fader = new PaletteFaderProcess(TEX32_PACK_RGBA(0x00, 0x00, 0x00, 0x00), false, 0x7FFF, nsteps, true);
return Kernel::get_instance()->addProcess(_fader);
}
@@ -179,7 +180,7 @@ uint32 PaletteFaderProcess::I_fadeFromBlack(const uint8 *args,
}
}
- _fader = new PaletteFaderProcess(0x00000000, true, 0x7FFF, nsteps, false);
+ _fader = new PaletteFaderProcess(TEX32_PACK_RGBA(0x00, 0x00, 0x00, 0x00), true, 0x7FFF, nsteps, false);
return Kernel::get_instance()->addProcess(_fader);
}
@@ -190,7 +191,7 @@ uint32 PaletteFaderProcess::I_fadeToWhite(const uint8 * /*args*/,
else if (_fader && !_fader->is_terminated())
_fader->terminate();
- _fader = new PaletteFaderProcess(0x00FFFFFF, false, 0x7FFF, 30, true);
+ _fader = new PaletteFaderProcess(TEX32_PACK_RGBA(0xFF, 0xFF, 0xFF, 0x00), false, 0x7FFF, 30, true);
return Kernel::get_instance()->addProcess(_fader);
}
@@ -201,7 +202,7 @@ uint32 PaletteFaderProcess::I_fadeFromWhite(const uint8 * /*args*/,
else if (_fader && !_fader->is_terminated())
_fader->terminate();
- _fader = new PaletteFaderProcess(0x00FFFFFF, true, 0x7FFF, 30, false);
+ _fader = new PaletteFaderProcess(TEX32_PACK_RGBA(0xFF, 0xFF, 0xFF, 0x00), true, 0x7FFF, 30, false);
return Kernel::get_instance()->addProcess(_fader);
}
@@ -212,7 +213,7 @@ uint32 PaletteFaderProcess::I_lightningBolt(const uint8 * /*args*/,
else if (_fader && !_fader->is_terminated())
_fader->terminate();
- _fader = new PaletteFaderProcess(0x3FCFCFCF, true, -1, 10, false);
+ _fader = new PaletteFaderProcess(TEX32_PACK_RGBA(0xCF, 0xCF, 0xCF, 0x3F), true, -1, 10, false);
return Kernel::get_instance()->addProcess(_fader);
}
diff --git a/engines/ultima/ultima8/gumps/message_box_gump.cpp b/engines/ultima/ultima8/gumps/message_box_gump.cpp
index a85eb9b3f8d..e00ba5e2e72 100644
--- a/engines/ultima/ultima8/gumps/message_box_gump.cpp
+++ b/engines/ultima/ultima8/gumps/message_box_gump.cpp
@@ -94,7 +94,7 @@ void MessageBoxGump::InitGump(Gump *newparent, bool take_focus) {
// Buttons (right aligned)
int off = _dims.width() - buttons_w;
for (size_t i = 0; i < _buttons.size(); i++) {
- w = new ButtonWidget(off, _dims.height() - 23, _buttons[i], false, 1, 0x80D000D0);
+ w = new ButtonWidget(off, _dims.height() - 23, _buttons[i], false, 1, TEX32_PACK_RGBA(0xD0, 0x00, 0xD0, 0x80));
w->SetIndex(static_cast<int32>(i));
w->InitGump(this, false);
width = height = 0;
diff --git a/engines/ultima/ultima8/gumps/movie_gump.cpp b/engines/ultima/ultima8/gumps/movie_gump.cpp
index f30b99ed4e7..001bf583a23 100644
--- a/engines/ultima/ultima8/gumps/movie_gump.cpp
+++ b/engines/ultima/ultima8/gumps/movie_gump.cpp
@@ -178,7 +178,7 @@ void MovieGump::run() {
widget->InitGump(this);
widget->setRelativePosition(BOTTOM_CENTER, 0, -10);
// Subtitles should be white.
- widget->setBlendColour(0xffffffff);
+ widget->setBlendColour(TEX32_PACK_RGBA(0xFF, 0xFF, 0xFF, 0xFF));
_subtitleWidget = widget->getObjId();
}
}
diff --git a/engines/ultima/ultima8/misc/debugger.cpp b/engines/ultima/ultima8/misc/debugger.cpp
index 44a4e50a83c..eace5881c78 100644
--- a/engines/ultima/ultima8/misc/debugger.cpp
+++ b/engines/ultima/ultima8/misc/debugger.cpp
@@ -31,6 +31,7 @@
#include "ultima/ultima8/graphics/inverter_process.h"
#include "ultima/ultima8/graphics/main_shape_archive.h"
#include "ultima/ultima8/graphics/render_surface.h"
+#include "ultima/ultima8/graphics/texture.h"
#include "ultima/ultima8/gumps/fast_area_vis_gump.h"
#include "ultima/ultima8/gumps/game_map_gump.h"
#include "ultima/ultima8/gumps/minimap_gump.h"
@@ -1827,6 +1828,7 @@ bool Debugger::cmdBenchmarkRenderSurface(int argc, const char **argv) {
surface->BeginPainting();
uint32 start, end;
+ uint32 blendColor = TEX32_PACK_RGBA(0x7F, 0x00, 0x00, 0x7F);
start = g_system->getMillis();
for (int i = 0; i < count; i++) {
@@ -1858,14 +1860,14 @@ bool Debugger::cmdBenchmarkRenderSurface(int argc, const char **argv) {
start = g_system->getMillis();
for (int i = 0; i < count; i++) {
- surface->PaintHighlight(s, frame, 160, 100, false, false, 0x7F00007F);
+ surface->PaintHighlight(s, frame, 160, 100, false, false, blendColor);
}
end = g_system->getMillis();
debugPrintf("PaintHighlight: %d\n", end - start);
start = g_system->getMillis();
for (int i = 0; i < count; i++) {
- surface->PaintHighlightInvis(s, frame, 160, 100, false, false, 0x7F00007F);
+ surface->PaintHighlightInvis(s, frame, 160, 100, false, false, blendColor);
}
end = g_system->getMillis();
debugPrintf("PaintHighlightInvis: %d\n", end - start);
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index f5e348a1df5..fe5a375147c 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -687,7 +687,7 @@ void Ultima8Engine::paint() {
#ifdef DEBUG
// Fill the screen with an annoying color so we can see fast area bugs
- _screen->Fill32(0xFF10FF10, r);
+ _screen->fill32(TEX32_PACK_RGB(0x10, 0xFF, 0x10), r);
#endif
_desktopGump->Paint(_screen, _lerpFactor, false);
diff --git a/engines/ultima/ultima8/world/item_sorter.cpp b/engines/ultima/ultima8/world/item_sorter.cpp
index 7501e7c7488..123053e1d7c 100644
--- a/engines/ultima/ultima8/world/item_sorter.cpp
+++ b/engines/ultima/ultima8/world/item_sorter.cpp
@@ -42,6 +42,9 @@
namespace Ultima {
namespace Ultima8 {
+static const uint32 TRANSPARENT_COLOR = TEX32_PACK_RGBA(0x7F, 0x00, 0x00, 0x7F);
+static const uint32 HIGHLIGHT_COLOR = TEX32_PACK_RGBA(0xFF, 0xFF, 0x00, 0x1F);
+
ItemSorter::ItemSorter(int capacity) :
_shapes(nullptr), _clipWindow(0, 0, 0, 0), _items(nullptr), _itemsTail(nullptr),
_itemsUnused(nullptr), _painted(nullptr), _camSx(0), _camSy(0),
@@ -276,7 +279,8 @@ void ItemSorter::PaintDisplayList(RenderSurface *surf, bool item_highlight) {
it->_sxBot,
it->_syBot,
it->_trans,
- (it->_flags & Item::FLG_FLIPPED) != 0, 0x1f00ffff);
+ (it->_flags & Item::FLG_FLIPPED) != 0,
+ HIGHLIGHT_COLOR);
}
it = it->_next;
@@ -318,9 +322,9 @@ bool ItemSorter::PaintSortItem(RenderSurface *surf, SortItem *si) {
// if (wire) si->info->draw_box_back(s, dispx, dispy, 255);
if (si->_extFlags & Item::EXT_HIGHLIGHT && si->_extFlags & Item::EXT_TRANSPARENT)
- surf->PaintHighlightInvis(si->_shape, si->_frame, si->_sxBot, si->_syBot, si->_trans, (si->_flags & Item::FLG_FLIPPED) != 0, 0x7F00007F);
+ surf->PaintHighlightInvis(si->_shape, si->_frame, si->_sxBot, si->_syBot, si->_trans, (si->_flags & Item::FLG_FLIPPED) != 0, TRANSPARENT_COLOR);
if (si->_extFlags & Item::EXT_HIGHLIGHT)
- surf->PaintHighlight(si->_shape, si->_frame, si->_sxBot, si->_syBot, si->_trans, (si->_flags & Item::FLG_FLIPPED) != 0, 0x7F00007F);
+ surf->PaintHighlight(si->_shape, si->_frame, si->_sxBot, si->_syBot, si->_trans, (si->_flags & Item::FLG_FLIPPED) != 0, TRANSPARENT_COLOR);
else if (si->_extFlags & Item::EXT_TRANSPARENT)
surf->PaintInvisible(si->_shape, si->_frame, si->_sxBot, si->_syBot, si->_trans, (si->_flags & Item::FLG_FLIPPED) != 0);
else if (si->_flags & Item::FLG_FLIPPED)
Commit: 77c16212c8ad167797b0694181ef375ae08e60d4
https://github.com/scummvm/scummvm/commit/77c16212c8ad167797b0694181ef375ae08e60d4
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2023-09-08T18:30:26-05:00
Commit Message:
ULTIMA8: Remove render surface fillAlpha method.
This was only used for composited painting of text which is not enabled and has no effect on 16bpp surfaces.
Changed paths:
engines/ultima/ultima8/graphics/render_surface.cpp
engines/ultima/ultima8/graphics/render_surface.h
engines/ultima/ultima8/gumps/widgets/edit_widget.cpp
engines/ultima/ultima8/gumps/widgets/text_widget.cpp
diff --git a/engines/ultima/ultima8/graphics/render_surface.cpp b/engines/ultima/ultima8/graphics/render_surface.cpp
index 39bd9f07f4b..509b02c6631 100644
--- a/engines/ultima/ultima8/graphics/render_surface.cpp
+++ b/engines/ultima/ultima8/graphics/render_surface.cpp
@@ -292,69 +292,6 @@ void RenderSurface::fill32(uint32 rgb, const Rect &r) {
_surface->fillRect(rect, rgb);
}
-
-// #define CHECK_ALPHA_FILLS
-namespace {
-
-template<typename uintX>
-void inline fillAlphaLogic(uint8 *pixels, int32 pitch, uint8 alpha, const Common::Rect &rect, const Graphics::PixelFormat &format) {
- uint32 aMask = format.aMax() << format.aShift;
- int32 w = rect.width();
- int32 h = rect.height();
-
- if (!w || !h || !aMask)
- return;
-
- uint32 a = (((uint32)alpha) << format.aShift) & aMask;
-
-#ifdef CHECK_ALPHA_FILLS
- uint32 c;
- uint32 m;
- if (a == 0) {
- uint32 bMask = format.bMax() << format.bShift;
- c = (bMask >> 1) & bMask;
- m = bMask;
- } else {
- uint32 rMask = format.rMax() << format.rShift;
- c = (rMask >> 1) & rMask;
- m = rMask;
- }
-#endif
-
- uint8 *pixel = pixels + rect.top * pitch + rect.left * format.bytesPerPixel;
- int diff = pitch - w * format.bytesPerPixel;
-
- for (int y = 0; y < h; ++y) {
- for (int x = 0; x < w; ++x) {
- uintX *dest = reinterpret_cast<uintX *>(pixel);
- *dest = (*dest & ~aMask) | a;
-#ifdef CHECK_ALPHA_FILLS
- *dest = (*dest & ~m) | (c + (((*dest & m) >> 1) & m));
-#endif
- pixel += format.bytesPerPixel;
- }
-
- pixel += diff;
- }
-}
-
-} // End of anonymous namespace
-
-//
-// RenderSurface::FillAlpha(uint8 alpha, Rect r)
-//
-// Desc: Fill alpha channel
-//
-void RenderSurface::FillAlpha(uint8 alpha, const Rect &r) {
- Common::Rect rect(r.left, r.top, r.right, r.bottom);
- rect.clip(_clipWindow);
-
- if (_surface->format.bytesPerPixel == 4)
- fillAlphaLogic<uint32>(_pixels, _pitch, alpha, rect, _surface->format);
- else if (_surface->format.bytesPerPixel == 2)
- fillAlphaLogic<uint16>(_pixels, _pitch, alpha, rect, _surface->format);
-}
-
namespace {
template<typename uintX>
diff --git a/engines/ultima/ultima8/graphics/render_surface.h b/engines/ultima/ultima8/graphics/render_surface.h
index c67115829ef..93e10cdf1b2 100644
--- a/engines/ultima/ultima8/graphics/render_surface.h
+++ b/engines/ultima/ultima8/graphics/render_surface.h
@@ -138,9 +138,6 @@ public:
//! Fill the region with a color in the TEX32_PACK_RGB format
void fill32(uint32 rgb, const Rect &r);
- //! Fill alpha channel
- void FillAlpha(uint8 alpha, const Rect &r);
-
//! Fill the region doing alpha blending with a color in the TEX32_PACK_RGBA format
void fillBlended(uint32 rgba, const Rect &r);
diff --git a/engines/ultima/ultima8/gumps/widgets/edit_widget.cpp b/engines/ultima/ultima8/gumps/widgets/edit_widget.cpp
index a610dd49faa..435477ca694 100644
--- a/engines/ultima/ultima8/gumps/widgets/edit_widget.cpp
+++ b/engines/ultima/ultima8/gumps/widgets/edit_widget.cpp
@@ -158,7 +158,6 @@ void EditWidget::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled)
renderText();
if (scaled && _gameFont && getFont()->isHighRes()) {
- surf->FillAlpha(0xFF, _dims);
return;
}
@@ -178,7 +177,6 @@ void EditWidget::PaintComposited(RenderSurface *surf, int32 lerp_factor, int32 s
Rect rect(_dims);
GumpRectToScreenSpace(rect, ROUND_OUTSIDE);
- surf->FillAlpha(0x00, rect);
}
// don't handle any mouse motion events, so let parent handle them for us.
diff --git a/engines/ultima/ultima8/gumps/widgets/text_widget.cpp b/engines/ultima/ultima8/gumps/widgets/text_widget.cpp
index f0beddded5a..53c853ee984 100644
--- a/engines/ultima/ultima8/gumps/widgets/text_widget.cpp
+++ b/engines/ultima/ultima8/gumps/widgets/text_widget.cpp
@@ -164,7 +164,6 @@ void TextWidget::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled)
renderText();
if (scaled && _gameFont && getFont()->isHighRes()) {
- surf->FillAlpha(0xFF, _dims);
return;
}
@@ -196,7 +195,6 @@ void TextWidget::PaintComposited(RenderSurface *surf, int32 lerp_factor, int32 s
Rect rect(_dims);
GumpRectToScreenSpace(rect, ROUND_OUTSIDE);
- surf->FillAlpha(0x00, rect);
}
// don't handle any mouse motion events, so let parent handle them for us.
Commit: 36f2a6fdf00c67a68b8d57b709d2a805d673db2a
https://github.com/scummvm/scummvm/commit/36f2a6fdf00c67a68b8d57b709d2a805d673db2a
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2023-09-08T18:30:26-05:00
Commit Message:
ULTIMA8: Add frameRect32 to replace less efficient gump border drawing
Changed paths:
engines/ultima/ultima8/graphics/render_surface.cpp
engines/ultima/ultima8/graphics/render_surface.h
engines/ultima/ultima8/gumps/fast_area_vis_gump.cpp
engines/ultima/ultima8/gumps/minimap_gump.cpp
diff --git a/engines/ultima/ultima8/graphics/render_surface.cpp b/engines/ultima/ultima8/graphics/render_surface.cpp
index 509b02c6631..f98f053cc1e 100644
--- a/engines/ultima/ultima8/graphics/render_surface.cpp
+++ b/engines/ultima/ultima8/graphics/render_surface.cpp
@@ -344,6 +344,14 @@ void RenderSurface::fillBlended(uint32 rgba, const Rect &r) {
fillBlendedLogic<uint16>(_pixels, _pitch, rgba, rect, _surface->format);
}
+void RenderSurface::frameRect32(uint32 rgb, const Rect &r) {
+ Common::Rect rect(r.left, r.top, r.right, r.bottom);
+ rect.clip(_clipWindow);
+ rect.translate(_ox, _oy);
+ rgb = _surface->format.RGBToColor(TEX32_R(rgb), TEX32_G(rgb), TEX32_B(rgb));
+ _surface->frameRect(rect, rgb);
+}
+
void RenderSurface::drawLine32(uint32 rgb, int32 sx, int32 sy, int32 ex, int32 ey) {
rgb = _surface->format.RGBToColor(TEX32_R(rgb), TEX32_G(rgb), TEX32_B(rgb));
_surface->drawLine(sx + _ox, sy + _oy, ex + _ox, ey + _oy, rgb);
diff --git a/engines/ultima/ultima8/graphics/render_surface.h b/engines/ultima/ultima8/graphics/render_surface.h
index 93e10cdf1b2..bd745a8fa98 100644
--- a/engines/ultima/ultima8/graphics/render_surface.h
+++ b/engines/ultima/ultima8/graphics/render_surface.h
@@ -141,7 +141,10 @@ public:
//! Fill the region doing alpha blending with a color in the TEX32_PACK_RGBA format
void fillBlended(uint32 rgba, const Rect &r);
- //
+ //! Fill the region with a color in the TEX32_PACK_RGB format
+ void frameRect32(uint32 rgb, const Rect &r);
+
+ //
// The rule for painting methods:
//
// First arg are the source object to 'draw' with
diff --git a/engines/ultima/ultima8/gumps/fast_area_vis_gump.cpp b/engines/ultima/ultima8/gumps/fast_area_vis_gump.cpp
index 39c8805528a..d3763ee9dc0 100644
--- a/engines/ultima/ultima8/gumps/fast_area_vis_gump.cpp
+++ b/engines/ultima/ultima8/gumps/fast_area_vis_gump.cpp
@@ -43,7 +43,7 @@ void FastAreaVisGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool sca
CurrentMap *currentmap = world->getCurrentMap();
uint32 color = TEX32_PACK_RGB(0xFF, 0, 0);
- surf->fill32(color, 0, 0, MAP_NUM_CHUNKS + 2, MAP_NUM_CHUNKS + 2);
+ surf->frameRect32(color, _dims);
color = TEX32_PACK_RGB(0, 0, 0);
surf->fill32(color, 1, 1, MAP_NUM_CHUNKS, MAP_NUM_CHUNKS);
diff --git a/engines/ultima/ultima8/gumps/minimap_gump.cpp b/engines/ultima/ultima8/gumps/minimap_gump.cpp
index 21a66d79b8a..25c68a3df1d 100644
--- a/engines/ultima/ultima8/gumps/minimap_gump.cpp
+++ b/engines/ultima/ultima8/gumps/minimap_gump.cpp
@@ -111,10 +111,7 @@ void MiniMapGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled)
color = HIGHLIGHT_COLOR;
// Draw the border
- surf->drawLine32(color, _dims.left, _dims.top, _dims.right - 1, _dims.top);
- surf->drawLine32(color, _dims.left, _dims.top, _dims.left, _dims.bottom - 1);
- surf->drawLine32(color, _dims.left, _dims.bottom - 1, _dims.right - 1, _dims.bottom - 1);
- surf->drawLine32(color, _dims.right -1, _dims.top, _dims.right - 1, _dims.bottom - 1);
+ surf->frameRect32(color, _dims);
// Dimensions minus border
Rect dims = _dims;
More information about the Scummvm-git-logs
mailing list