gonetz / GLideN64

A new generation, open-source graphics plugin for N64 emulators.
Other
770 stars 178 forks source link

Mario Tennis- Green Dots on Start Menu #2157

Closed kev4cards closed 4 years ago

kev4cards commented 4 years ago

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.

GLideN64_MarioTennis_001

IronYoshi64 commented 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: GLideN64_MarioTennis_001 Exhibition pause screen: GLideN64_MarioTennis_000 Thin black line under the Bob-ombs: GLideN64_MarioTennis_004 Red/pinkish outline of the text in Play Mode: GLideN64_MarioTennis_002 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): GLideN64_MarioTennis_003

kev4cards commented 4 years ago

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).

ghost commented 4 years ago

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.

kev4cards commented 4 years ago

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.

gonetz commented 4 years ago

The issues are present in master due to lry = max(lry, uly + 1.0f); in gDPTextureRectangle() 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 .

kev4cards commented 4 years ago

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.

gonetz commented 4 years ago

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.

ghost commented 4 years ago

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.

kev4cards commented 4 years ago

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.