mirror of https://github.com/stella-emu/stella.git
added VSYNC warning to console info overlay in developer mode
This commit is contained in:
parent
7a8845548d
commit
6cbb06b10a
|
@ -367,6 +367,11 @@ class Console : public Serializable, public ConsoleIO
|
||||||
*/
|
*/
|
||||||
void changeJitterRecovery(int direction = +1) const;
|
void changeJitterRecovery(int direction = +1) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Return whether vertical sync length is according to spec.
|
||||||
|
*/
|
||||||
|
bool vsyncCorrect() const { return myFrameManager->vsyncCorrect(); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update vcenter
|
* Update vcenter
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -374,11 +374,11 @@ int FBSurface::drawString(const GUI::Font& font, const string& s,
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FBSurface::drawString(const GUI::Font& font, const string& s,
|
int FBSurface::drawString(const GUI::Font& font, const string& s,
|
||||||
int x, int y, int w,
|
int x, int y, int w,
|
||||||
ColorId color, TextAlign align,
|
ColorId color, TextAlign align,
|
||||||
int deltax, bool useEllipsis, ColorId shadowColor,
|
int deltax, bool useEllipsis, ColorId shadowColor,
|
||||||
size_t linkStart, size_t linkLen, bool underline)
|
size_t linkStart, size_t linkLen, bool underline)
|
||||||
{
|
{
|
||||||
#ifdef GUI_SUPPORT
|
#ifdef GUI_SUPPORT
|
||||||
const string ELLIPSIS = "\x1d"; // "..."
|
const string ELLIPSIS = "\x1d"; // "..."
|
||||||
|
@ -443,6 +443,7 @@ void FBSurface::drawString(const GUI::Font& font, const string& s,
|
||||||
hLine(x0, y + font.getFontHeight() - 1, x1, kTextColorLink);
|
hLine(x0, y + font.getFontHeight() - 1, x1, kTextColorLink);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
|
@ -251,12 +251,14 @@ class FBSurface
|
||||||
@param linkLen The length of a link in drawn string
|
@param linkLen The length of a link in drawn string
|
||||||
@param underline Whether to underline the link
|
@param underline Whether to underline the link
|
||||||
|
|
||||||
|
@return x coordinate of end of string
|
||||||
|
|
||||||
*/
|
*/
|
||||||
virtual void drawString(const GUI::Font& font, const string& s, int x, int y, int w,
|
virtual int drawString(const GUI::Font& font, const string& s, int x, int y, int w,
|
||||||
ColorId color, TextAlign align = TextAlign::Left,
|
ColorId color, TextAlign align = TextAlign::Left,
|
||||||
int deltax = 0, bool useEllipsis = true, ColorId shadowColor = kNone,
|
int deltax = 0, bool useEllipsis = true, ColorId shadowColor = kNone,
|
||||||
size_t linkStart = string::npos, size_t linkLen = string::npos,
|
size_t linkStart = string::npos, size_t linkLen = string::npos,
|
||||||
bool underline = false);
|
bool underline = false);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Splits a given string to a given width considering whitespaces.
|
Splits a given string to a given width considering whitespaces.
|
||||||
|
|
|
@ -701,7 +701,7 @@ void FrameBuffer::drawFrameStats(float framesPerSecond)
|
||||||
myStatsMsg.surface->invalidate();
|
myStatsMsg.surface->invalidate();
|
||||||
|
|
||||||
// draw scanlines
|
// draw scanlines
|
||||||
const ColorId color = myOSystem.console().tia().frameBufferScanlinesLastFrame() !=
|
ColorId color = myOSystem.console().tia().frameBufferScanlinesLastFrame() !=
|
||||||
myLastScanlines ? kDbgColorRed : myStatsMsg.color;
|
myLastScanlines ? kDbgColorRed : myStatsMsg.color;
|
||||||
|
|
||||||
ss
|
ss
|
||||||
|
@ -734,10 +734,26 @@ void FrameBuffer::drawFrameStats(float framesPerSecond)
|
||||||
ss.str("");
|
ss.str("");
|
||||||
|
|
||||||
ss << info.BankSwitch;
|
ss << info.BankSwitch;
|
||||||
if (myOSystem.settings().getBool("dev.settings")) ss << "| Developer";
|
int xPosEnd =
|
||||||
|
myStatsMsg.surface->drawString(f, ss.str(), xPos, yPos,
|
||||||
|
myStatsMsg.w, myStatsMsg.color, TextAlign::Left, 0, true, kBGColor);
|
||||||
|
|
||||||
myStatsMsg.surface->drawString(f, ss.str(), xPos, yPos,
|
if(myOSystem.settings().getBool("dev.settings"))
|
||||||
myStatsMsg.w, myStatsMsg.color, TextAlign::Left, 0, true, kBGColor);
|
{
|
||||||
|
xPosEnd = myStatsMsg.surface->drawString(f, "| ", xPosEnd, yPos,
|
||||||
|
myStatsMsg.w, color, TextAlign::Left, 0, true, kBGColor);
|
||||||
|
ss.str("");
|
||||||
|
color = myStatsMsg.color;
|
||||||
|
if(myOSystem.console().vsyncCorrect())
|
||||||
|
ss << "Developer";
|
||||||
|
else
|
||||||
|
{
|
||||||
|
color = kDbgColorRed;
|
||||||
|
ss << "VSYNC!";
|
||||||
|
}
|
||||||
|
myStatsMsg.surface->drawString(f, ss.str(), xPosEnd, yPos,
|
||||||
|
myStatsMsg.w, color, TextAlign::Left, 0, true, kBGColor);
|
||||||
|
}
|
||||||
|
|
||||||
myStatsMsg.surface->setDstPos(imageRect().x() + 10, imageRect().y() + 8);
|
myStatsMsg.surface->setDstPos(imageRect().x() + 10, imageRect().y() + 8);
|
||||||
myStatsMsg.surface->setDstSize(myStatsMsg.w * hidpiScaleFactor(),
|
myStatsMsg.surface->setDstSize(myStatsMsg.w * hidpiScaleFactor(),
|
||||||
|
|
|
@ -148,6 +148,11 @@ class AbstractFrameManager : public Serializable
|
||||||
*/
|
*/
|
||||||
virtual void enableJitter(bool enabled) {}
|
virtual void enableJitter(bool enabled) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is vsync according to spec?
|
||||||
|
*/
|
||||||
|
virtual bool vsyncCorrect() const { return true; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The scanline difference between the last two frames. Used in the TIA to
|
* The scanline difference between the last two frames. Used in the TIA to
|
||||||
* clear any scanlines that were not repainted.
|
* clear any scanlines that were not repainted.
|
||||||
|
|
|
@ -55,6 +55,8 @@ class FrameManager: public AbstractFrameManager {
|
||||||
|
|
||||||
void enableJitter(bool enabled) override { myJitterEnabled = enabled; }
|
void enableJitter(bool enabled) override { myJitterEnabled = enabled; }
|
||||||
|
|
||||||
|
bool vsyncCorrect() const override { return !myJitterEnabled || myJitterEmulation.vsyncCorrect(); }
|
||||||
|
|
||||||
uInt32 height() const override { return myHeight; }
|
uInt32 height() const override { return myHeight; }
|
||||||
|
|
||||||
uInt32 getY() const override { return myY; }
|
uInt32 getY() const override { return myY; }
|
||||||
|
|
|
@ -76,6 +76,8 @@ void JitterEmulation::frameComplete(Int32 scanlineCount, Int32 vsyncCycles)
|
||||||
const bool vsyncLinesStable = abs(vsyncCycles - myLastFrameVsyncCycles) < myVsyncDelta1;
|
const bool vsyncLinesStable = abs(vsyncCycles - myLastFrameVsyncCycles) < myVsyncDelta1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
myVsyncCorrect = abs(vsyncCycles - 76 * 3) <= 3; // 3 cycles tolerance
|
||||||
|
|
||||||
if(!scanlinesStable || !vsyncCyclesStable || !vsyncLinesStable)
|
if(!scanlinesStable || !vsyncCyclesStable || !vsyncLinesStable)
|
||||||
{
|
{
|
||||||
if(++myUnstableCount >= myUnstableFrames)
|
if(++myUnstableCount >= myUnstableFrames)
|
||||||
|
|
|
@ -50,6 +50,8 @@ class JitterEmulation : public Serializable
|
||||||
void frameComplete(Int32 scanlineCount, Int32 vsyncCycles);
|
void frameComplete(Int32 scanlineCount, Int32 vsyncCycles);
|
||||||
Int32 jitter() const { return myJitter; }
|
Int32 jitter() const { return myJitter; }
|
||||||
|
|
||||||
|
bool vsyncCorrect() const { return myVsyncCorrect; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save state.
|
* Save state.
|
||||||
*/
|
*/
|
||||||
|
@ -101,6 +103,7 @@ class JitterEmulation : public Serializable
|
||||||
Int32 myUnstableFrames{MAX_UNSTABLE_FRAMES};
|
Int32 myUnstableFrames{MAX_UNSTABLE_FRAMES};
|
||||||
Int32 myJitterLines{MIN_JITTER_LINES};
|
Int32 myJitterLines{MIN_JITTER_LINES};
|
||||||
Int32 myVsyncLines{MIN_VSYNC_LINES};
|
Int32 myVsyncLines{MIN_VSYNC_LINES};
|
||||||
|
bool myVsyncCorrect{true};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
JitterEmulation(const JitterEmulation&) = delete;
|
JitterEmulation(const JitterEmulation&) = delete;
|
||||||
|
|
Loading…
Reference in New Issue