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:
parent
f94ffe2b9d
commit
4aa7fe9fc2
|
@ -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"
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue
Block a user