mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
openGL image rendering fix.
This commit is contained in:
parent
5f99835313
commit
04518ac15d
2 changed files with 17 additions and 12 deletions
|
|
@ -457,11 +457,7 @@ public:
|
||||||
const GLfloat m[] = { t.mat00, t.mat01, t.mat02, t.mat10, t.mat11, t.mat12 };
|
const GLfloat m[] = { t.mat00, t.mat01, t.mat02, t.mat10, t.mat11, t.mat12 };
|
||||||
matrix.set (m, 6);
|
matrix.set (m, 6);
|
||||||
|
|
||||||
const float halfPixelX = 0.5f / imageWidth;
|
imageLimits.set (fullWidthProportion, fullHeightProportion);
|
||||||
const float halfPixelY = 0.5f / imageHeight;
|
|
||||||
imageLimits.set (halfPixelX, halfPixelY,
|
|
||||||
fullWidthProportion - halfPixelX,
|
|
||||||
fullHeightProportion - halfPixelY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void setMatrix (const AffineTransform& trans, const OpenGLTextureFromImage& im,
|
void setMatrix (const AffineTransform& trans, const OpenGLTextureFromImage& im,
|
||||||
|
|
@ -477,11 +473,11 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
#define JUCE_DECLARE_IMAGE_UNIFORMS "uniform sampler2D imageTexture;" \
|
#define JUCE_DECLARE_IMAGE_UNIFORMS "uniform sampler2D imageTexture;" \
|
||||||
"uniform " JUCE_MEDIUMP " vec4 imageLimits;" \
|
"uniform " JUCE_MEDIUMP " vec2 imageLimits;" \
|
||||||
JUCE_DECLARE_MATRIX_UNIFORM JUCE_DECLARE_VARYING_COLOUR JUCE_DECLARE_VARYING_PIXELPOS
|
JUCE_DECLARE_MATRIX_UNIFORM JUCE_DECLARE_VARYING_COLOUR JUCE_DECLARE_VARYING_PIXELPOS
|
||||||
#define JUCE_GET_IMAGE_PIXEL "swizzleRGBOrder (texture2D (imageTexture, vec2 (texturePos.x, 1.0 - texturePos.y)))"
|
#define JUCE_GET_IMAGE_PIXEL "swizzleRGBOrder (texture2D (imageTexture, vec2 (texturePos.x, 1.0 - texturePos.y)))"
|
||||||
#define JUCE_CLAMP_TEXTURE_COORD JUCE_HIGHP " vec2 texturePos = clamp (" JUCE_MATRIX_TIMES_FRAGCOORD ", imageLimits.xy, imageLimits.zw);"
|
#define JUCE_CLAMP_TEXTURE_COORD JUCE_HIGHP " vec2 texturePos = clamp (" JUCE_MATRIX_TIMES_FRAGCOORD ", vec2 (0, 0), imageLimits);"
|
||||||
#define JUCE_MOD_TEXTURE_COORD JUCE_HIGHP " vec2 texturePos = clamp (mod (" JUCE_MATRIX_TIMES_FRAGCOORD ", imageLimits.zw + imageLimits.xy), imageLimits.xy, imageLimits.zw);"
|
#define JUCE_MOD_TEXTURE_COORD JUCE_HIGHP " vec2 texturePos = mod (" JUCE_MATRIX_TIMES_FRAGCOORD ", imageLimits);"
|
||||||
|
|
||||||
struct ImageProgram : public ShaderBase
|
struct ImageProgram : public ShaderBase
|
||||||
{
|
{
|
||||||
|
|
@ -570,10 +566,10 @@ public:
|
||||||
"{"
|
"{"
|
||||||
JUCE_HIGHP " vec2 texturePos = " JUCE_MATRIX_TIMES_FRAGCOORD ";"
|
JUCE_HIGHP " vec2 texturePos = " JUCE_MATRIX_TIMES_FRAGCOORD ";"
|
||||||
JUCE_HIGHP " float roundingError = 0.00001;"
|
JUCE_HIGHP " float roundingError = 0.00001;"
|
||||||
"if (texturePos.x >= imageLimits.x - roundingError"
|
"if (texturePos.x >= -roundingError"
|
||||||
"&& texturePos.y >= imageLimits.y - roundingError"
|
"&& texturePos.y >= -roundingError"
|
||||||
"&& texturePos.x <= imageLimits.z + roundingError"
|
"&& texturePos.x <= imageLimits.x + roundingError"
|
||||||
"&& texturePos.y <= imageLimits.w + roundingError)"
|
"&& texturePos.y <= imageLimits.y + roundingError)"
|
||||||
"gl_FragColor = frontColour * " JUCE_GET_IMAGE_PIXEL ".a;"
|
"gl_FragColor = frontColour * " JUCE_GET_IMAGE_PIXEL ".a;"
|
||||||
"else "
|
"else "
|
||||||
"gl_FragColor = vec4 (0, 0, 0, 0);"
|
"gl_FragColor = vec4 (0, 0, 0, 0);"
|
||||||
|
|
|
||||||
|
|
@ -91,8 +91,17 @@ struct Flipper
|
||||||
for (int x = 0; x < w; ++x)
|
for (int x = 0; x < w; ++x)
|
||||||
dst[x].set (src[x]);
|
dst[x].set (src[x]);
|
||||||
|
|
||||||
|
if (textureW > w)
|
||||||
|
dst[w].set (PixelARGB (0));
|
||||||
|
|
||||||
srcData += lineStride;
|
srcData += lineStride;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for textures which are larger than the area of interest, clear the pixels that lie
|
||||||
|
// just outside the actual image, so that the texture interpolation doesn't read junk.
|
||||||
|
if (textureH > h)
|
||||||
|
zeromem (dataCopy + textureW * (textureH - 1 - h),
|
||||||
|
sizeof (PixelARGB) * jmin (textureW, w + 1));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue