1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-02 09:03:37 +00:00

Change heuristic to render texture rectangles

This commit is contained in:
s2s 2021-04-06 18:57:56 +02:00 committed by Sergey Lipskiy
parent f94ffe2b9d
commit 4aa7fe9fc2
2 changed files with 15 additions and 13 deletions

View File

@ -957,7 +957,7 @@ public:
"uniform lowp vec2 uTexMirrorEn1; \n"
"uniform lowp vec2 uTexClampEn0; \n"
"uniform lowp vec2 uTexClampEn1; \n"
"uniform highp vec2 uTexCoordOffset; \n"
"uniform highp vec2 uTexCoordOffset[2]; \n"
"uniform lowp int uUseTexCoordBounds; \n"
"uniform highp vec4 uTexCoordBounds0; \n"
"uniform highp vec4 uTexCoordBounds1; \n"
@ -2596,8 +2596,8 @@ public:
m_part +=
" highp vec2 mTexCoord0 = vTexCoord0 + vec2(0.0001); \n"
" highp vec2 mTexCoord1 = vTexCoord1 + vec2(0.0001); \n"
" mTexCoord0 += uTexCoordOffset; \n"
" mTexCoord1 += uTexCoordOffset; \n"
" mTexCoord0 += uTexCoordOffset[0]; \n"
" mTexCoord1 += uTexCoordOffset[1]; \n"
" if (uUseTexCoordBounds != 0) { \n"
" mTexCoord0 = clamp(mTexCoord0, uTexCoordBounds0.xy, uTexCoordBounds0.zw); \n"
" mTexCoord1 = clamp(mTexCoord1, uTexCoordBounds1.xy, uTexCoordBounds1.zw); \n"

View File

@ -221,7 +221,8 @@ class URasterInfo : public UniformGroup {
public:
URasterInfo(GLuint _program) {
LocateUniform(uVertexOffset);
LocateUniform(uTexCoordOffset);
LocateUniform(uTexCoordOffset[0]);
LocateUniform(uTexCoordOffset[1]);
LocateUniform(uUseTexCoordBounds);
LocateUniform(uTexCoordBounds0);
LocateUniform(uTexCoordBounds1);
@ -245,14 +246,14 @@ public:
/* effective. Still, an heuristic is applied to render texture rectangles as correctly as possible */
/* in higher resolutions too. See issue #2324 for details. */
const float vertexOffset = isNativeRes ? 0.5f : 0.0f;
float texCoordOffset[2] = { 0.0f, 0.0f };
float texCoordOffset[2][2] = { 0.0f, 0.0f };
if (isTexRect && !isNativeRes) {
if (gDP.otherMode.textureFilter != G_TF_POINT && gDP.otherMode.cycleType != G_CYC_COPY) {
texCoordOffset[0] = -0.5f * gDP.lastTexRectInfo.dsdx;
texCoordOffset[1] = -0.5f * gDP.lastTexRectInfo.dtdy;
} else {
texCoordOffset[0] = (gDP.lastTexRectInfo.dsdx >= 0.0f ? -0.5f / scale[0] : -1.0f + 0.5f / scale[0]) * gDP.lastTexRectInfo.dsdx;
texCoordOffset[1] = (gDP.lastTexRectInfo.dtdy >= 0.0f ? -0.5f / scale[1] : -1.0f + 0.5f / scale[1]) * gDP.lastTexRectInfo.dtdy;
for (int t = 0; t < 2; t++) {
const CachedTexture* _pTexture = textureCache().current[t];
if (_pTexture != nullptr) {
texCoordOffset[t][0] = (gDP.lastTexRectInfo.dsdx >= 0.0f ? -0.5f / scale[0] : -1.0f + 0.5f / scale[0]) * gDP.lastTexRectInfo.dsdx * _pTexture->hdRatioS;
texCoordOffset[t][1] = (gDP.lastTexRectInfo.dtdy >= 0.0f ? -0.5f / scale[1] : -1.0f + 0.5f / scale[1]) * gDP.lastTexRectInfo.dtdy * _pTexture->hdRatioT;
}
}
}
float tcbounds[2][4] = {};
@ -305,7 +306,8 @@ public:
}
uVertexOffset.set(vertexOffset, vertexOffset, _force);
uTexCoordOffset.set(texCoordOffset[0], texCoordOffset[1], _force);
uTexCoordOffset[0].set(texCoordOffset[0][0], texCoordOffset[0][1], _force);
uTexCoordOffset[1].set(texCoordOffset[1][0], texCoordOffset[1][1], _force);
uUseTexCoordBounds.set(useTexCoordBounds ? 1 : 0, _force);
uTexCoordBounds0.set(tcbounds[0], _force);
uTexCoordBounds1.set(tcbounds[1], _force);
@ -313,7 +315,7 @@ public:
private:
fv2Uniform uVertexOffset;
fv2Uniform uTexCoordOffset;
fv2Uniform uTexCoordOffset[2];
iUniform uUseTexCoordBounds;
fv4Uniform uTexCoordBounds0;
fv4Uniform uTexCoordBounds1;