mirror of https://github.com/stella-emu/stella.git
Fixed bug in text rendering when switching between fullscreen and windowed
mode in software mode. This error is pretty serious; I'm surprised nobody reported it before. I'm probably going to do a 3.0.1 release just to address this. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1938 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
c12a2e6043
commit
c9e1735527
|
@ -135,6 +135,10 @@ bool FrameBufferSoft::setVidMode(VideoMode& mode)
|
|||
// a different sized screen
|
||||
myRectList->start();
|
||||
|
||||
// Any previously allocated surfaces have probably changed as well,
|
||||
// so we should refresh them
|
||||
resetSurfaces();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -534,7 +538,7 @@ FBSurfaceSoft::FBSurfaceSoft(const FrameBufferSoft& buffer, SDL_Surface* surface
|
|||
myXOffset(0),
|
||||
myYOffset(0)
|
||||
{
|
||||
recalc();
|
||||
reload();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -648,14 +652,14 @@ void FBSurfaceSoft::drawChar(const GUI::Font* font, uInt8 chr,
|
|||
|
||||
uInt8* buf_ptr = buffer;
|
||||
for(int x = 0; x < bbw; x++, mask >>= 1)
|
||||
{
|
||||
{
|
||||
if(ptr & mask)
|
||||
{
|
||||
*buf_ptr++ = a; *buf_ptr++ = b; *buf_ptr++ = c;
|
||||
{
|
||||
*buf_ptr++ = a; *buf_ptr++ = b; *buf_ptr++ = c;
|
||||
}
|
||||
else
|
||||
buf_ptr += 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -663,7 +667,6 @@ void FBSurfaceSoft::drawChar(const GUI::Font* font, uInt8 chr,
|
|||
{
|
||||
// Get buffer position where upper-left pixel of the character will be drawn
|
||||
uInt32* buffer = (uInt32*)getBasePtr(tx + bbx, ty + desc.ascent - bby - bbh);
|
||||
|
||||
for(int y = 0; y < bbh; y++, buffer += myPitch)
|
||||
{
|
||||
const uInt16 ptr = *tmp++;
|
||||
|
@ -839,7 +842,7 @@ void FBSurfaceSoft::update()
|
|||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void FBSurfaceSoft::recalc()
|
||||
void FBSurfaceSoft::reload()
|
||||
{
|
||||
switch(mySurface->format->BytesPerPixel)
|
||||
{
|
||||
|
|
|
@ -204,10 +204,9 @@ class FBSurfaceSoft : public FBSurface
|
|||
void translateCoords(Int32& x, Int32& y) const;
|
||||
void update();
|
||||
void free() { } // Not required for software mode
|
||||
void reload() { } // Not required for software mode
|
||||
void reload();
|
||||
|
||||
private:
|
||||
void recalc();
|
||||
inline void* getBasePtr(uInt32 x, uInt32 y) {
|
||||
return static_cast<void *>(static_cast<uInt8*>(mySurface->pixels) +
|
||||
(myYOffset + y) * mySurface->pitch + (myXOffset + x) *
|
||||
|
|
Loading…
Reference in New Issue