mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-26 03:38:55 +01:00
graphics: Bug fix: TestImageEdge failed on MacBook Pro (#491)
This commit is contained in:
parent
b385a63856
commit
52350c1b1b
@ -51,19 +51,13 @@ varying vec2 varying_tex_coord;
|
|||||||
varying vec2 varying_tex_coord_min;
|
varying vec2 varying_tex_coord_min;
|
||||||
varying vec2 varying_tex_coord_max;
|
varying vec2 varying_tex_coord_max;
|
||||||
|
|
||||||
const float minHighpValue = 1.0 / 32768.0;
|
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
varying_tex_coord = vec2(tex_coord[0], tex_coord[1]);
|
varying_tex_coord = vec2(tex_coord[0], tex_coord[1]);
|
||||||
// varying_tex_coord_min and varying_tex_coord_max mean endmost texel values
|
// varying_tex_coord_min and varying_tex_coord_max mean endmost texel values
|
||||||
// in the source rect. As varying_tex_coord is adjusted with minHighpValue
|
// in the source rect. As varying_tex_coord is adjusted with minHighpValue
|
||||||
// in vertices.go, re-adjust them so that exact endmost texel values.
|
// in vertices.go, re-adjust them so that exact endmost texel values.
|
||||||
varying_tex_coord_min = vec2(
|
varying_tex_coord_min = vec2(min(tex_coord[0], tex_coord[2]), min(tex_coord[1], tex_coord[3]));
|
||||||
min(tex_coord[0], tex_coord[2]) - minHighpValue,
|
varying_tex_coord_max = vec2(max(tex_coord[0], tex_coord[2]), max(tex_coord[1], tex_coord[3]));
|
||||||
min(tex_coord[1], tex_coord[3]) - minHighpValue);
|
|
||||||
varying_tex_coord_max = vec2(
|
|
||||||
max(tex_coord[0], tex_coord[2]) + minHighpValue,
|
|
||||||
max(tex_coord[1], tex_coord[3]) + minHighpValue);
|
|
||||||
gl_Position = projection_matrix * vec4(vertex, 0, 1);
|
gl_Position = projection_matrix * vec4(vertex, 0, 1);
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
@ -102,6 +96,13 @@ highp vec2 roundTexel(highp vec2 p) {
|
|||||||
void main(void) {
|
void main(void) {
|
||||||
highp vec2 pos = varying_tex_coord;
|
highp vec2 pos = varying_tex_coord;
|
||||||
|
|
||||||
|
// Adjust texels to be slightly inside the source rect. Without this
|
||||||
|
// adjustment, texels can be exactly as same values as the (lower and left) edges'
|
||||||
|
// positions and it could happen that outside of the source is rendered. (#491)
|
||||||
|
// 1.0 / 4096.0 is an arbitrary number that doesn't cause problems on MacBook Pro.
|
||||||
|
pos.x = min(varying_tex_coord_max.x - 1.0 / 4096.0, pos.x);
|
||||||
|
pos.y = min(varying_tex_coord_max.y - 1.0 / 4096.0, pos.y);
|
||||||
|
|
||||||
#if defined(FILTER_NEAREST)
|
#if defined(FILTER_NEAREST)
|
||||||
vec4 color = texture2D(texture, pos);
|
vec4 color = texture2D(texture, pos);
|
||||||
if (pos.x < varying_tex_coord_min.x ||
|
if (pos.x < varying_tex_coord_min.x ||
|
||||||
|
@ -87,15 +87,6 @@ func vertices(sx0, sy0, sx1, sy1 int, width, height int, geo *affine.GeoM) []flo
|
|||||||
hf := float32(h)
|
hf := float32(h)
|
||||||
u0, v0, u1, v1 := float32(sx0)/wf, float32(sy0)/hf, float32(sx1)/wf, float32(sy1)/hf
|
u0, v0, u1, v1 := float32(sx0)/wf, float32(sy0)/hf, float32(sx1)/wf, float32(sy1)/hf
|
||||||
|
|
||||||
// Adjust texels to be slightly inside the source rect. Without this
|
|
||||||
// adjustment, texels can be exactly as same values as the edges'
|
|
||||||
// positions and it could happen that outside of the source is rendered. (#491)
|
|
||||||
const minHighpValue = 1.0 / 32768.0
|
|
||||||
u0 += minHighpValue
|
|
||||||
v0 += minHighpValue
|
|
||||||
u1 -= minHighpValue
|
|
||||||
v1 -= minHighpValue
|
|
||||||
|
|
||||||
x, y := geo.Apply32(x0, y0)
|
x, y := geo.Apply32(x0, y0)
|
||||||
// Vertex coordinates
|
// Vertex coordinates
|
||||||
vs[0] = x
|
vs[0] = x
|
||||||
|
Loading…
Reference in New Issue
Block a user