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);*/ |