Closed kev4cards closed 4 years ago
Yeah I have those too, as well as there is a few other garbage pixels in various areas and some other menus. Here is more screenshots of the garbage pixels. Bottom left corner of N64 logo title screen: Exhibition pause screen: Thin black line under the Bob-ombs: Red/pinkish outline of the text in Play Mode: I found out you can eliminate the above pictures issue if you have "Enable colored halos" option On (I do not know if having that on causes other issues right now):
The pinkish outline does not appear in native resolution FWIW.
The black lines under the bob-ombs go away if you check the "copy auxiliary color to N64 memory" box under the frame buffer tab. However, the shadows of the players will become corrupted.
I haven't found anything that affects the garbage pixel lines or the two green dots above the zeroes on the start screen. I think the garbage pixel line is a regression (not sure, though).
Issues in the first three pictures are due to degenerate rectangles. For example, the pause menu has rectangle with ulx: 348.0, lrx: 604.0, uly: 36.0, lry: 36.0
, which has height 0
. I'm guessing the N64 rasterizer discards any generated span/scanline.
The issues are present in master due to lry = max(lry, uly + 1.0f);
in gDPTextureRectangle()
introduced in the old commit 048a1576fbfd189b0fbd6292eaa57b1e8620b6df.
Goldeneye has rects of height 0.75
which render correctly in native res even without that commit but incorrectly in non-native resolutions.
x: 0.000000 - 439.750000, y: 16.000000 - 16.750000
x: 0.000000 - 439.750000, y: 17.000000 - 17.750000
Perhaps it is worth discarding any rectangles with height 0 or negative. Something like:
bool degenerate = lry - uly <= 0.0f || lrx - ulx <= 0.0;
...
if (!degenerate)
drawer.drawTexturedRect(params);
I'm not very sure about keeping lry = max(lry, uly + 1.0f);
. It is ok for goldeneye and perhaps other similar situations, but might be creating some issues. Perphaps it's better making this game specific.
I tend to agree that lry = max(lry, uly + 1.0f);
does not seem to be right. I need to review the patents and command summary related to the N64 RDP to see if there are any clues on how to better approach this. I've been busy with other matters as of late, so I haven't been able to playtest, check for regressions, and give myself a better understanding of the RDP as I would like.
The issues are present in master due to
lry = max(lry, uly + 1.0f);
ingDPTextureRectangle()
introduced in the old commit 048a157.
Thanks for finding that!
I replaced lry = max(lry, uly + 1.0f);
by lry = ceil(lry);
, 9561a586e
It fixes issues with zero-height rects and still works for Goldeneye .
Can confirm. The green dots and garbage pixel lines are gone. However, a new issue (HLE only) popped up between this commit and July 17th. The scoreboard names are displayed incorrectly, and the scoreboard and serve speed meter have brick framing on the normal fast court instead of the correct blue like the image above.
The scoreboard names are displayed incorrectly, and the scoreboard and serve speed meter have brick framing on the normal fast court instead of the correct blue like the image above.
Screenshot please. I don't see problems with scoreboard.
I can't see issues either. Besides, Mario Tennis has no texrect call where lry
has non-zero fractional part (at least ingame, where I tested), so ceil(lry)
should do nothing for this game.
I can't reproduce it anymore. I think it was probably a fluke. Cleared the shader cache to be sure. Sorry for the false alarm.
There are glowing green dots (in sync with "press start") on the start menu of Mario Tennis. The problem has existed since Public Release 1.0 (maybe earlier) for both HLE and LLE. Everything looks fine in angrylion-plus r8.