modules/graphics/src/main/java/com/sun/prism/impl/ps/BaseShaderGraphics.java

Print this page




1144         float dydist = len(mxy, myy);
1145         if (dxdist == 0.0f || dydist == 0.0f) {
1146             // entire path has collapsed and occupies no area
1147             return true;
1148         }
1149         float pixelw = 1.0f / dxdist;
1150         float pixelh = 1.0f / dydist;
1151         float x0 = x - pad - pixelw * 0.5f;
1152         float y0 = y - pad - pixelh * 0.5f;
1153         float xc = x + w * 0.5f;
1154         float yc = y + h * 0.5f;
1155         float x1 = x + w + pad + pixelw * 0.5f;
1156         float y1 = y + h + pad + pixelh * 0.5f;
1157         Texture rTex = context.getWrapRectTexture();
1158         float wscale = 1.0f / rTex.getPhysicalWidth();
1159         float hscale = 1.0f / rTex.getPhysicalHeight();
1160         float ou0 = 0.5f * wscale;
1161         float ov0 = 0.5f * hscale;
1162         float ouc = ((w * 0.5f + pad) * dxdist + 1.0f) * wscale;
1163         float ovc = ((h * 0.5f + pad) * dydist + 1.0f) * hscale;
1164         float offsetx = lw * wscale;
1165         float offsety = lw * hscale;
1166         VertexBuffer vb = context.getVertexBuffer();
1167         if (xform.isTranslateOrIdentity()) {
1168             x0 += mxt;
1169             y0 += myt;
1170             xc += mxt;
1171             yc += myt;
1172             x1 += mxt;
1173             y1 += myt;
1174             xform = IDENT;
1175         } else if (xform.is2D()) {
1176             Shader shader =
1177                 context.validatePaintOp(this, IDENT, MaskType.ALPHA_TEXTURE_DIFF,
1178                                         rTex, x, y, w, h,
1179                                         offsetx, offsety, 0, 0, 0, 0);
1180             shader.setConstant("innerOffset", offsetx, offsety);
1181             AffineBase paintTx = getPaintTextureTx(IDENT, shader, x, y, w, h);
1182             float mxx_x0 = mxx * x0, myx_x0 = myx * x0;
1183             float mxy_y0 = mxy * y0, myy_y0 = myy * y0;
1184             float mxx_xc = mxx * xc, myx_xc = myx * xc;
1185             float mxy_yc = mxy * yc, myy_yc = myy * yc;




1144         float dydist = len(mxy, myy);
1145         if (dxdist == 0.0f || dydist == 0.0f) {
1146             // entire path has collapsed and occupies no area
1147             return true;
1148         }
1149         float pixelw = 1.0f / dxdist;
1150         float pixelh = 1.0f / dydist;
1151         float x0 = x - pad - pixelw * 0.5f;
1152         float y0 = y - pad - pixelh * 0.5f;
1153         float xc = x + w * 0.5f;
1154         float yc = y + h * 0.5f;
1155         float x1 = x + w + pad + pixelw * 0.5f;
1156         float y1 = y + h + pad + pixelh * 0.5f;
1157         Texture rTex = context.getWrapRectTexture();
1158         float wscale = 1.0f / rTex.getPhysicalWidth();
1159         float hscale = 1.0f / rTex.getPhysicalHeight();
1160         float ou0 = 0.5f * wscale;
1161         float ov0 = 0.5f * hscale;
1162         float ouc = ((w * 0.5f + pad) * dxdist + 1.0f) * wscale;
1163         float ovc = ((h * 0.5f + pad) * dydist + 1.0f) * hscale;
1164         float offsetx = lw * dxdist * wscale;
1165         float offsety = lw * dydist * hscale;
1166         VertexBuffer vb = context.getVertexBuffer();
1167         if (xform.isTranslateOrIdentity()) {
1168             x0 += mxt;
1169             y0 += myt;
1170             xc += mxt;
1171             yc += myt;
1172             x1 += mxt;
1173             y1 += myt;
1174             xform = IDENT;
1175         } else if (xform.is2D()) {
1176             Shader shader =
1177                 context.validatePaintOp(this, IDENT, MaskType.ALPHA_TEXTURE_DIFF,
1178                                         rTex, x, y, w, h,
1179                                         offsetx, offsety, 0, 0, 0, 0);
1180             shader.setConstant("innerOffset", offsetx, offsety);
1181             AffineBase paintTx = getPaintTextureTx(IDENT, shader, x, y, w, h);
1182             float mxx_x0 = mxx * x0, myx_x0 = myx * x0;
1183             float mxy_y0 = mxy * y0, myy_y0 = myy * y0;
1184             float mxx_xc = mxx * xc, myx_xc = myx * xc;
1185             float mxy_yc = mxy * yc, myy_yc = myy * yc;