1
0
Fork 0
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:
jules 2012-12-29 15:29:51 +00:00
parent 5f99835313
commit 04518ac15d
2 changed files with 17 additions and 12 deletions

View file

@ -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);"

View file

@ -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));
} }
}; };