--- old/src/java.desktop/windows/native/libawt/java2d/d3d/D3DVertexCacher.cpp 2016-09-09 02:02:18.327888600 +0300 +++ new/src/java.desktop/windows/native/libawt/java2d/d3d/D3DVertexCacher.cpp 2016-09-09 02:02:17.735313400 +0300 @@ -211,6 +211,16 @@ RETURN_STATUS_IF_FAILED(res); lpD3DDevice->SetFVF(D3DFVF_J2DLVERTEX); + + fudge2 = HV_FF2; + if (fudge2 > 0) { + D3DADAPTER_IDENTIFIER9 aid; + if (SUCCEEDED(pCtx->Get3DObject()->GetAdapterIdentifier(pCtx-> + getAdapterOrdinal(), 0, &aid)) && aid.VendorId == 0x8086) { + // Intel + fudge2 -= 0.09f; + } + } return res; } @@ -233,10 +243,10 @@ if (x1 > x2) { fx1 = (float)x2+HV_FF3; - fx2 = (float)x1+HV_FF2; + fx2 = (float)x1+fudge2; } else if (x1 < x2) { fx1 = (float)x1+HV_FF3; - fx2 = (float)x2+HV_FF2; + fx2 = (float)x2+fudge2; } else { // single point, offset a little so that a single // pixel is rendered @@ -251,10 +261,10 @@ fx2 = fx1; if (y1 > y2) { fy1 = (float)y2+HV_FF3; - fy2 = (float)y1+HV_FF2; + fy2 = (float)y1+fudge2; } else { fy1 = (float)y1+HV_FF3; - fy2 = (float)y2+HV_FF2; + fy2 = (float)y2+fudge2; } } else { // diagonal @@ -387,7 +397,7 @@ reqVerts -= vertsInBatch; do { x1 = ((float)*(scanlines++)) +HV_FF3; - x2 = ((float)*(scanlines++)) +HV_FF2; + x2 = ((float)*(scanlines++)) +fudge2; y = ((float)*(scanlines++)) +HV_FF1; ADD_LINE_XYC(x1, y, x2, y, color); vertsInBatch -= 2; @@ -443,13 +453,13 @@ float fy2 = (float)y2; // horiz: top left - top right - ADD_LINE_XYC(fx1+HV_FF3, fy1+HV_FF1, fx2-1.0f+HV_FF2, fy1+HV_FF1,color); + ADD_LINE_XYC(fx1+HV_FF3, fy1+HV_FF1, fx2-1.0f+fudge2, fy1+HV_FF1,color); // horiz: bottom left - bottom right - ADD_LINE_XYC(fx1+1.0f+HV_FF3, fy2+HV_FF1, fx2+HV_FF2, fy2+HV_FF1,color); + ADD_LINE_XYC(fx1+1.0f+HV_FF3, fy2+HV_FF1, fx2+fudge2, fy2+HV_FF1,color); // vert : top right - bottom right - ADD_LINE_XYC(fx2+HV_FF1, fy1+HV_FF3, fx2+HV_FF1, fy2-1.0f+HV_FF2,color); + ADD_LINE_XYC(fx2+HV_FF1, fy1+HV_FF3, fx2+HV_FF1, fy2-1.0f+fudge2,color); // vert : top left - bottom left - ADD_LINE_XYC(fx1+HV_FF1, fy1+1.0f+HV_FF3, fx1+HV_FF1, fy2+HV_FF2,color); + ADD_LINE_XYC(fx1+HV_FF1, fy1+1.0f+HV_FF3, fx1+HV_FF1, fy2+fudge2,color); } return res; }