src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLTextRenderer.m
branchmetal-prototype-branch
changeset 57462 db2be8544d10
parent 57441 ee34e24af607
child 57476 64365a5764cd
equal deleted inserted replaced
57458:3a7c29ba6b1c 57462:db2be8544d10
   313 
   313 
   314 static jboolean
   314 static jboolean
   315 MTLTR_DrawGrayscaleGlyphNoCache(MTLContext *mtlc,
   315 MTLTR_DrawGrayscaleGlyphNoCache(MTLContext *mtlc,
   316                                 GlyphInfo *ginfo, jint x, jint y, BMTLSDOps *dstOps)
   316                                 GlyphInfo *ginfo, jint x, jint y, BMTLSDOps *dstOps)
   317 {
   317 {
   318     jfloat dx1, dy1, dx2, dy2;
   318     jint tw, th;
   319     jint width = ginfo->width;
   319     jint sx, sy, sw, sh;
   320     jint height = ginfo->height;
   320     jint x0;
       
   321     jint w = ginfo->width;
       
   322     jint h = ginfo->height;
   321 
   323 
   322     J2dTraceLn(J2D_TRACE_INFO, "MTLTR_DrawGrayscaleGlyphNoCache");
   324     J2dTraceLn(J2D_TRACE_INFO, "MTLTR_DrawGrayscaleGlyphNoCache");
   323     /*
       
   324      * TODO : Glyph caching is not used yet we need to
       
   325      * implement it.
       
   326      */
       
   327     if (glyphMode != MODE_NO_CACHE_GRAY) {
   325     if (glyphMode != MODE_NO_CACHE_GRAY) {
       
   326         //OGLTR_DisableGlyphModeState();
       
   327         //CHECK_PREVIOUS_OP(OGL_STATE_MASK_OP);
   328         glyphMode = MODE_NO_CACHE_GRAY;
   328         glyphMode = MODE_NO_CACHE_GRAY;
   329     }
   329     }
   330 
   330 
   331     dx1 = (jfloat)x;
   331     x0 = x;
   332     dy1 = (jfloat)y;
   332     tw = MTLVC_MASK_CACHE_TILE_WIDTH;
   333     dx2 = x + width;
   333     th = MTLVC_MASK_CACHE_TILE_HEIGHT;
   334     dy2 = y + height;
   334 
   335     J2dTraceLn4(J2D_TRACE_INFO,
   335     for (sy = 0; sy < h; sy += th, y += th) {
   336         "Destination coordinates dx1 = %f dy1 = %f dx2 = %f dy2 = %f", dx1, dy1, dx2, dy2);
   336         x = x0;
   337     MTLVertexCache_AddGlyphTexture(mtlc, width, height, ginfo, dstOps);
   337         sh = ((sy + th) > h) ? (h - sy) : th;
   338     MTLVertexCache_AddVertexTriangles(dx1, dy1, dx2, dy2);
   338 
       
   339         for (sx = 0; sx < w; sx += tw, x += tw) {
       
   340             sw = ((sx + tw) > w) ? (w - sx) : tw;
       
   341 
       
   342             J2dTraceLn7(J2D_TRACE_INFO, "sx = %d sy = %d x = %d y = %d sw = %d sh = %d w = %d", sx, sy, x, y, sw, sh, w);
       
   343             MTLVertexCache_AddMaskQuad(mtlc,
       
   344                                        sx, sy, x, y, sw, sh,
       
   345                                        w, ginfo->image,
       
   346                                        dstOps,
       
   347                                        ginfo->width);
       
   348         }
       
   349     }
       
   350 
   339     return JNI_TRUE;
   351     return JNI_TRUE;
   340 }
   352 }
   341 
   353 
   342 static jboolean
   354 static jboolean
   343 MTLTR_DrawLCDGlyphNoCache(MTLContext *mtlc, MTLSDOps *dstOps,
   355 MTLTR_DrawLCDGlyphNoCache(MTLContext *mtlc, MTLSDOps *dstOps,
   383     glyphMode = MODE_NOT_INITED;
   395     glyphMode = MODE_NOT_INITED;
   384     isCachedDestValid = JNI_FALSE;
   396     isCachedDestValid = JNI_FALSE;
   385     J2dTraceLn1(J2D_TRACE_INFO, "totalGlyphs = %d", totalGlyphs);
   397     J2dTraceLn1(J2D_TRACE_INFO, "totalGlyphs = %d", totalGlyphs);
   386 
   398 
   387     MTLVertexCache_CreateSamplingEncoder(mtlc, dstOps);
   399     MTLVertexCache_CreateSamplingEncoder(mtlc, dstOps);
   388     MTLVertexCache_InitVertexCache();
   400     MTLVertexCache_EnableMaskCache(mtlc);
   389 
   401 
   390     for (glyphCounter = 0; glyphCounter < totalGlyphs; glyphCounter++) {
   402     for (glyphCounter = 0; glyphCounter < totalGlyphs; glyphCounter++) {
   391         J2dTraceLn(J2D_TRACE_INFO, "Entered for loop for glyph list");
   403         J2dTraceLn(J2D_TRACE_INFO, "Entered for loop for glyph list");
   392         jint x, y;
   404         jint x, y;
   393         jfloat glyphx, glyphy;
   405         jfloat glyphx, glyphy;
   422         if (ginfo->image == NULL) {
   434         if (ginfo->image == NULL) {
   423             J2dTraceLn(J2D_TRACE_INFO, "Glyph image is null");
   435             J2dTraceLn(J2D_TRACE_INFO, "Glyph image is null");
   424             continue;
   436             continue;
   425         }
   437         }
   426 
   438 
       
   439         J2dTraceLn2(J2D_TRACE_INFO, "Glyph width = %d height = %d", ginfo->width, ginfo->height);
   427         //TODO : Right now we have initial texture mapping logic
   440         //TODO : Right now we have initial texture mapping logic
   428         // as we implement LCD, cache usage add new selection condition.
   441         // as we implement LCD, cache usage add new selection condition.
   429 
       
   430         if (grayscale) {
   442         if (grayscale) {
   431             // grayscale or monochrome glyph data
   443             // grayscale or monochrome glyph data
   432             if (ginfo->width <= MTLTR_CACHE_CELL_WIDTH &&
   444             if (ginfo->width <= MTLTR_CACHE_CELL_WIDTH &&
   433                 ginfo->height <= MTLTR_CACHE_CELL_HEIGHT)
   445                 ginfo->height <= MTLTR_CACHE_CELL_HEIGHT)
   434             {
   446             {
   455             // TODO: Implement LCD text rendering
   467             // TODO: Implement LCD text rendering
   456             if (rowBytesOffset == 0 &&
   468             if (rowBytesOffset == 0 &&
   457                 ginfo->width <= MTLTR_CACHE_CELL_WIDTH &&
   469                 ginfo->width <= MTLTR_CACHE_CELL_WIDTH &&
   458                 ginfo->height <= MTLTR_CACHE_CELL_HEIGHT)
   470                 ginfo->height <= MTLTR_CACHE_CELL_HEIGHT)
   459             {
   471             {
   460                 J2dTraceLn(J2D_TRACE_INFO, "LCD cache");
   472                 J2dTraceLn(J2D_TRACE_INFO, "LCD cache not implemented");
   461                 /*ok = MTLTR_DrawLCDGlyphViaCache(oglc, dstOps,
   473                 /*ok = MTLTR_DrawLCDGlyphViaCache(oglc, dstOps,
   462                                                 ginfo, x, y,
   474                                                 ginfo, x, y,
   463                                                 glyphCounter, totalGlyphs,
   475                                                 glyphCounter, totalGlyphs,
   464                                                 rgbOrder, lcdContrast,
   476                                                 rgbOrder, lcdContrast,
   465                                                 dstTextureID);*/
   477                                                 dstTextureID);*/
   466                 ok = JNI_FALSE;
   478                 ok = JNI_FALSE;
   467             } else {
   479             } else {
   468                 J2dTraceLn(J2D_TRACE_INFO, "LCD no cache");
   480                 J2dTraceLn(J2D_TRACE_INFO, "LCD no cache not implemented");
   469                 /*ok = MTLTR_DrawLCDGlyphNoCache(oglc, dstOps,
   481                 /*ok = MTLTR_DrawLCDGlyphNoCache(oglc, dstOps,
   470                                                ginfo, x, y,
   482                                                ginfo, x, y,
   471                                                rowBytesOffset,
   483                                                rowBytesOffset,
   472                                                rgbOrder, lcdContrast,
   484                                                rgbOrder, lcdContrast,
   473                                                dstTextureID);*/
   485                                                dstTextureID);*/