[Scummvm-tracker] [ScummVM :: Bugs] #11862: EMI: Dark lines in the intro with TinyGL, clamping not supported
ScummVM :: Bugs
trac at scummvm.org
Thu Oct 15 22:31:49 UTC 2020
#11862: EMI: Dark lines in the intro with TinyGL, clamping not supported
---------------------+---------------------------------------
Reporter: aquadran | Owner: (none)
Type: defect | Status: new
Priority: normal | Component: Engine: Grim
Keywords: | Game: Escape from Monkey Island
---------------------+---------------------------------------
I think that's not new but I haven't found an issue here.
Reading an old post related to a GSoC, it was pointed to this commit:
a539832
With more specifically in our TinyGL case:
// FIXME: TinyGL only supports TGL_REPEAT
// Remove darkened lines in EMI intro
// if (g_grim->getGameType() == GType_MONKEY4 && clamp) {
// tglTexParameteri(TGL_TEXTURE_2D, TGL_TEXTURE_WRAP_S,
TGL_CLAMP);
// tglTexParameteri(TGL_TEXTURE_2D, TGL_TEXTURE_WRAP_T,
TGL_CLAMP);
// } else {
tglTexParameteri(TGL_TEXTURE_2D, TGL_TEXTURE_WRAP_S,
TGL_REPEAT);
tglTexParameteri(TGL_TEXTURE_2D, TGL_TEXTURE_WRAP_T,
TGL_REPEAT);
// }
But in the current code (0.4.0git), in gfx_tinygl.cpp, there is:
// TinyGL doesn't have issues with dark lines in EMI intro so
doesn't need TGL_CLAMP_TO_EDGE
tglTexParameteri(TGL_TEXTURE_2D, TGL_TEXTURE_WRAP_S, TGL_REPEAT);
tglTexParameteri(TGL_TEXTURE_2D, TGL_TEXTURE_WRAP_T, TGL_REPEAT);
I believe this is not a clamping issue, but probably an alpha issue: black
borders only appear when the texture is being blended. There may also be a
coordinate issue, as when the title screen (visible in above screenshot)
is being scaled, some borders are black but others brighter than normal,
suggesting triangle N+1 is drawing over triangle N for at least one
pixel's width.
I just tried implementing texture clamping, but it did not make any change
that I could see (I may also have done a mistake somewhere). EDIT: pushed
in my fork
It seems I was wrong to think alpha was a factor: if I understand
correctly, the intro scene works by fading-out triangles textured with
previous screen content over an image containing the whole next panel. So
I think this issue is about triangle coordinates rather than texture
coordinates.
I suspect it may be related to GfxTinyGL::drawBitmap's:
// adding '+ 1' fixing broken lines at edges of bitmaps
// example: EMI ship scene
in the sense that once this issue fixed, that hack may not be necessary
anymore.
I have a fix. Half of it seems good to me, the other half is more dodgy,
and causes a small glitch in GRIM's load screen.
The probably-good half: vertical and diagonal edges of adjacent triangles
in the intro while the fading effect is running are drawn twice. To avoid
this, I bias the triangle renderer against drawing that last pixel:
diff --git a/graphics/tinygl/ztriangle.cpp b/graphics/tinygl/ztriangle.cpp
index d16e92ad4..877b95ea5 100644
--- a/graphics/tinygl/ztriangle.cpp
+++ b/graphics/tinygl/ztriangle.cpp
@@ -365,7 +365,7 @@ void FrameBuffer::fillTriangle(ZBufferPoint *p0,
ZBufferPoint *p1, ZBufferPoint
dx2dy2 = (dx2 << 16) / dy2;
else
dx2dy2 = 0;
- x2 = pr1->x << 16;
+ x2 = (pr1->x << 16) - 1;
}
// we draw all the scan line of the part
The important bit here is subtracting after the shift, so it is on the
fractional part of resulting fixed-point value.
The more dodgy one: there are horizontal lines too. This seems to be a
similar issue, but there is no fixed-point value here, only a line
counter. So the best I could do was to truncate triangles by one row in
screen space. Models still look fine to me after this (just a few scenes
in GRIM and EMI, and a very quick look at MYST3 but I do not remember if
it uses this codepath), but GRIM load screen has a non-darkened line at
the bottom of its load screen fresco. Anyway, here it is:
--- a/graphics/tinygl/ztriangle.cpp
+++ b/graphics/tinygl/ztriangle.cpp
@@ -303,7 +303,7 @@ void FrameBuffer::fillTriangle(ZBufferPoint *p0,
ZBufferPoint *p1, ZBufferPoint
l1 = p1;
l2 = p2;
}
- nb_lines = p2->y - p1->y + 1;
+ nb_lines = p2->y - p1->y;
}
// compute the values for the left edge
I did not push them anywhere for now, because they are trivial to
recreate, and I'm not even sure what to put in the commit message...
If these look like good ideas, please give idea for the commit message.
https://github.com/residualvm/residualvm/issues/1613
--
Ticket URL: <https://bugs.scummvm.org/ticket/11862>
ScummVM :: Bugs <https://bugs.scummvm.org>
ScummVM
More information about the Scummvm-tracker
mailing list