alinebee / Boxer

The DOS game emulator that's fit for your Mac.
http://boxerapp.com/
774 stars 139 forks source link

Pixels are remaining on screen. #51

Closed Saleck closed 9 years ago

Saleck commented 9 years ago

Hello! I'd like to report a small problem. There seems to be pixels being left behind on the screen. http://s28.postimg.org/gkxl2xxhp/pixelproblems.png The arrow on the screen can be moved up and down but there is sometimes the odd pixel being left behind when moving the arrow. This happens in some other games that I play too.

Thanks for all your great work on Boxer!

alinebee commented 9 years ago

Hi Saleck, could you be more specific: which game is pictured, and which other games have you noticed the same problem in?

This is likely not a general graphical bug in Boxer but a game-specific incompatibility, or indeed simply a bug in the original game(s) themselves that would manifest on original hardware. I need to know the particular games in order to diagnose the issue further.

Saleck commented 9 years ago

Hey :)

The game pictured is Sword of the Samurai. I compiled the Boxer and Boxer Standalone from source. The problem only seems to appear when running the game in Boxer Standalone. Running just a regular .boxer file does not create the problem.

I've also noticed the problem (but its not as noticable) in Wizardry 6, Genghis Khan 2 and The Elder Scrolls: Arena

alinebee commented 9 years ago

Ah ok, then this is indeed a glitch in Boxer itself. So you've built both Boxer and Standalone from the latest master, and it's only Standalone that's exhibiting the problem?

Also, which OSX and XCode version are you compiling this on? (This may make a difference as to which SDK it's compiled against.)

JoshuaPettus commented 9 years ago

I have noticed this too, and is a problem on normal Boxer as well. I have 10.10, but have noticed this as early as 10.8.

Games like Tie fighter Collectors CD, Sonekeep, Silpheed, Epic Pinball, The need for speed. Sometimes setting it to skip a few frames can help, but not always. To be honest It has been getting a little better lately with the latest code changes.

alinebee commented 9 years ago

By "normal Boxer" do you mean Boxer 1.3.2, or non-standalone builds of the 2.x branch?

This smells like a bug in the way Boxer handles "dirty" scanlines. DOSBox keeps a list of which lines in the framebuffer were drawn into by the emulated video hardware during the current frame, and Boxer checks that list to decide which regions of its OpenGL frame texture to update. (This optimisation avoids updating the whole texture for frames that only changed a small area of the framebuffer, which was a common optimisation for DOS games.) It looks like that check may be off by one in some situations.

JoshuaPettus commented 9 years ago

Oops good point, It's only a problem when compiling off the 2.x branch. 1.3.2 is fine.

alinebee commented 9 years ago

Ah well that narrows it down, that probably means it's a regression from when I rewrote the renderer's frame-texture-updating code.

Saleck commented 9 years ago

I'm running 10.10 and I compiled the code in XCode 6.1, the latest you can get.

alinebee commented 9 years ago

Commit 48c13ac disables the dirty check, forcing a full texture refresh for each frame. This appears to have eliminated the stuck-pixels problem, but please let me know if the problem persists.

JoshuaPettus commented 9 years ago

Thanks Alun, that works great!