trunk/src/osd/sdl/drawogl.c
| r30950 | r30951 | |
| 2284 | 2284 | // copyline_palette16 |
| 2285 | 2285 | //============================================================ |
| 2286 | 2286 | |
| 2287 | | INLINE void copyline_palette16(UINT32 *dst, const UINT16 *src, int width, const rgb_t *palette, int xborderpix) |
| 2287 | INLINE void copyline_palette16(UINT32 *dst, const UINT16 *src, int width, const rgb_t *palette, int xborderpix, int xprescale) |
| 2288 | 2288 | { |
| 2289 | 2289 | int x; |
| 2290 | 2290 | |
| r30950 | r30951 | |
| 2292 | 2292 | if (xborderpix) |
| 2293 | 2293 | *dst++ = 0xff000000 | palette[*src]; |
| 2294 | 2294 | for (x = 0; x < width; x++) |
| 2295 | | *dst++ = 0xff000000 | palette[*src++]; |
| 2295 | { |
| 2296 | int srcpix = *src++; |
| 2297 | for (int x2 = 0; x2 < xprescale; x2++) |
| 2298 | *dst++ = 0xff000000 | palette[srcpix]; |
| 2299 | } |
| 2296 | 2300 | if (xborderpix) |
| 2297 | 2301 | *dst++ = 0xff000000 | palette[*--src]; |
| 2298 | 2302 | } |
| r30950 | r30951 | |
| 2303 | 2307 | // copyline_palettea16 |
| 2304 | 2308 | //============================================================ |
| 2305 | 2309 | |
| 2306 | | INLINE void copyline_palettea16(UINT32 *dst, const UINT16 *src, int width, const rgb_t *palette, int xborderpix) |
| 2310 | INLINE void copyline_palettea16(UINT32 *dst, const UINT16 *src, int width, const rgb_t *palette, int xborderpix, int xprescale) |
| 2307 | 2311 | { |
| 2308 | 2312 | int x; |
| 2309 | 2313 | |
| r30950 | r30951 | |
| 2311 | 2315 | if (xborderpix) |
| 2312 | 2316 | *dst++ = palette[*src]; |
| 2313 | 2317 | for (x = 0; x < width; x++) |
| 2314 | | *dst++ = palette[*src++]; |
| 2318 | { |
| 2319 | int srcpix = *src++; |
| 2320 | for (int x2 = 0; x2 < xprescale; x2++) |
| 2321 | *dst++ = palette[srcpix]; |
| 2322 | } |
| 2315 | 2323 | if (xborderpix) |
| 2316 | 2324 | *dst++ = palette[*--src]; |
| 2317 | 2325 | } |
| r30950 | r30951 | |
| 2322 | 2330 | // copyline_rgb32 |
| 2323 | 2331 | //============================================================ |
| 2324 | 2332 | |
| 2325 | | INLINE void copyline_rgb32(UINT32 *dst, const UINT32 *src, int width, const rgb_t *palette, int xborderpix) |
| 2333 | INLINE void copyline_rgb32(UINT32 *dst, const UINT32 *src, int width, const rgb_t *palette, int xborderpix, int xprescale) |
| 2326 | 2334 | { |
| 2327 | 2335 | int x; |
| 2328 | 2336 | |
| r30950 | r30951 | |
| 2339 | 2347 | for (x = 0; x < width; x++) |
| 2340 | 2348 | { |
| 2341 | 2349 | rgb_t srcpix = *src++; |
| 2342 | | *dst++ = 0xff000000 | palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()]; |
| 2350 | for (int x2 = 0; x2 < xprescale; x2++) |
| 2351 | { |
| 2352 | *dst++ = 0xff000000 | palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()]; |
| 2353 | } |
| 2343 | 2354 | } |
| 2344 | 2355 | if (xborderpix) |
| 2345 | 2356 | { |
| r30950 | r30951 | |
| 2354 | 2365 | if (xborderpix) |
| 2355 | 2366 | *dst++ = 0xff000000 | *src; |
| 2356 | 2367 | for (x = 0; x < width; x++) |
| 2357 | | *dst++ = 0xff000000 | *src++; |
| 2368 | { |
| 2369 | rgb_t srcpix = *src++; |
| 2370 | |
| 2371 | for (int x2 = 0; x2 < xprescale; x2++) |
| 2372 | { |
| 2373 | *dst++ = 0xff000000 | srcpix; |
| 2374 | } |
| 2375 | } |
| 2358 | 2376 | if (xborderpix) |
| 2359 | 2377 | *dst++ = 0xff000000 | *--src; |
| 2360 | 2378 | } |
| r30950 | r30951 | |
| 2364 | 2382 | // copyline_argb32 |
| 2365 | 2383 | //============================================================ |
| 2366 | 2384 | |
| 2367 | | INLINE void copyline_argb32(UINT32 *dst, const UINT32 *src, int width, const rgb_t *palette, int xborderpix) |
| 2385 | INLINE void copyline_argb32(UINT32 *dst, const UINT32 *src, int width, const rgb_t *palette, int xborderpix, int xprescale) |
| 2368 | 2386 | { |
| 2369 | 2387 | int x; |
| 2370 | 2388 | |
| r30950 | r30951 | |
| 2381 | 2399 | for (x = 0; x < width; x++) |
| 2382 | 2400 | { |
| 2383 | 2401 | rgb_t srcpix = *src++; |
| 2384 | | *dst++ = (srcpix & 0xff000000) | palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()]; |
| 2402 | for (int x2 = 0; x2 < xprescale; x2++) |
| 2403 | *dst++ = (srcpix & 0xff000000) | palette[0x200 + srcpix.r()] | palette[0x100 + srcpix.g()] | palette[srcpix.b()]; |
| 2385 | 2404 | } |
| 2386 | 2405 | if (xborderpix) |
| 2387 | 2406 | { |
| r30950 | r30951 | |
| 2396 | 2415 | if (xborderpix) |
| 2397 | 2416 | *dst++ = *src; |
| 2398 | 2417 | for (x = 0; x < width; x++) |
| 2399 | | *dst++ = *src++; |
| 2418 | { |
| 2419 | rgb_t srcpix = *src++; |
| 2420 | for (int x2 = 0; x2 < xprescale; x2++) |
| 2421 | *dst++ = srcpix; |
| 2422 | } |
| 2400 | 2423 | if (xborderpix) |
| 2401 | 2424 | *dst++ = *--src; |
| 2402 | 2425 | } |
| r30950 | r30951 | |
| 2447 | 2470 | // copyline_yuy16_to_argb |
| 2448 | 2471 | //============================================================ |
| 2449 | 2472 | |
| 2450 | | INLINE void copyline_yuy16_to_argb(UINT32 *dst, const UINT16 *src, int width, const rgb_t *palette, int xborderpix) |
| 2473 | INLINE void copyline_yuy16_to_argb(UINT32 *dst, const UINT16 *src, int width, const rgb_t *palette, int xborderpix, int xprescale) |
| 2451 | 2474 | { |
| 2452 | 2475 | int x; |
| 2453 | 2476 | |
| r30950 | r30951 | |
| 2472 | 2495 | UINT16 srcpix1 = *src++; |
| 2473 | 2496 | UINT8 cb = srcpix0 & 0xff; |
| 2474 | 2497 | UINT8 cr = srcpix1 & 0xff; |
| 2475 | | *dst++ = ycc_to_rgb(palette[0x000 + (srcpix0 >> 8)], cb, cr); |
| 2476 | | *dst++ = ycc_to_rgb(palette[0x000 + (srcpix1 >> 8)], cb, cr); |
| 2498 | for (int x2 = 0; x2 < xprescale/2; x2++) |
| 2499 | { |
| 2500 | *dst++ = ycc_to_rgb(palette[0x000 + (srcpix0 >> 8)], cb, cr); |
| 2501 | *dst++ = ycc_to_rgb(palette[0x000 + (srcpix1 >> 8)], cb, cr); |
| 2502 | } |
| 2477 | 2503 | } |
| 2478 | 2504 | if (xborderpix) |
| 2479 | 2505 | { |
| r30950 | r30951 | |
| 2504 | 2530 | UINT16 srcpix1 = *src++; |
| 2505 | 2531 | UINT8 cb = srcpix0 & 0xff; |
| 2506 | 2532 | UINT8 cr = srcpix1 & 0xff; |
| 2507 | | *dst++ = ycc_to_rgb(srcpix0 >> 8, cb, cr); |
| 2508 | | *dst++ = ycc_to_rgb(srcpix1 >> 8, cb, cr); |
| 2533 | for (int x2 = 0; x2 < xprescale/2; x2++) |
| 2534 | { |
| 2535 | *dst++ = ycc_to_rgb(srcpix0 >> 8, cb, cr); |
| 2536 | *dst++ = ycc_to_rgb(srcpix1 >> 8, cb, cr); |
| 2537 | } |
| 2509 | 2538 | } |
| 2510 | 2539 | if (xborderpix) |
| 2511 | 2540 | { |
| r30950 | r30951 | |
| 2551 | 2580 | // when nescesarry copy (and convert) the data |
| 2552 | 2581 | if (!texture->nocopy) |
| 2553 | 2582 | { |
| 2554 | | int y; |
| 2583 | int y, y2; |
| 2555 | 2584 | UINT8 *dst; |
| 2556 | 2585 | |
| 2557 | 2586 | for (y = 0; y < texsource->height; y++) |
| 2558 | 2587 | { |
| 2559 | | dst = (UINT8 *)(texture->data + (y * texture->yprescale + texture->borderpix) * texture->rawwidth); |
| 2560 | | |
| 2561 | | switch (PRIMFLAG_GET_TEXFORMAT(flags)) |
| 2588 | for (y2 = 0; y2 < texture->yprescale; y2++) |
| 2562 | 2589 | { |
| 2563 | | case TEXFORMAT_PALETTE16: |
| 2564 | | copyline_palette16((UINT32 *)dst, (UINT16 *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette, texture->borderpix); |
| 2565 | | break; |
| 2590 | dst = (UINT8 *)(texture->data + (y * texture->yprescale + texture->borderpix + y2) * texture->rawwidth); |
| 2566 | 2591 | |
| 2567 | | case TEXFORMAT_PALETTEA16: |
| 2568 | | copyline_palettea16((UINT32 *)dst, (UINT16 *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette, texture->borderpix); |
| 2569 | | break; |
| 2592 | switch (PRIMFLAG_GET_TEXFORMAT(flags)) |
| 2593 | { |
| 2594 | case TEXFORMAT_PALETTE16: |
| 2595 | copyline_palette16((UINT32 *)dst, (UINT16 *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette, texture->borderpix, texture->xprescale); |
| 2596 | break; |
| 2570 | 2597 | |
| 2571 | | case TEXFORMAT_RGB32: |
| 2572 | | copyline_rgb32((UINT32 *)dst, (UINT32 *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette, texture->borderpix); |
| 2573 | | break; |
| 2598 | case TEXFORMAT_PALETTEA16: |
| 2599 | copyline_palettea16((UINT32 *)dst, (UINT16 *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette, texture->borderpix, texture->xprescale); |
| 2600 | break; |
| 2574 | 2601 | |
| 2575 | | case TEXFORMAT_ARGB32: |
| 2576 | | copyline_argb32((UINT32 *)dst, (UINT32 *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette, texture->borderpix); |
| 2577 | | break; |
| 2602 | case TEXFORMAT_RGB32: |
| 2603 | copyline_rgb32((UINT32 *)dst, (UINT32 *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette, texture->borderpix, texture->xprescale); |
| 2604 | break; |
| 2578 | 2605 | |
| 2579 | | case TEXFORMAT_YUY16: |
| 2580 | | copyline_yuy16_to_argb((UINT32 *)dst, (UINT16 *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette, texture->borderpix); |
| 2581 | | break; |
| 2606 | case TEXFORMAT_ARGB32: |
| 2607 | copyline_argb32((UINT32 *)dst, (UINT32 *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette, texture->borderpix, texture->xprescale); |
| 2608 | break; |
| 2582 | 2609 | |
| 2583 | | default: |
| 2584 | | osd_printf_error("Unknown texture blendmode=%d format=%d\n", PRIMFLAG_GET_BLENDMODE(flags), PRIMFLAG_GET_TEXFORMAT(flags)); |
| 2585 | | break; |
| 2610 | case TEXFORMAT_YUY16: |
| 2611 | copyline_yuy16_to_argb((UINT32 *)dst, (UINT16 *)texsource->base + y * texsource->rowpixels, texsource->width, texsource->palette, texture->borderpix, texture->xprescale); |
| 2612 | break; |
| 2613 | |
| 2614 | default: |
| 2615 | osd_printf_error("Unknown texture blendmode=%d format=%d\n", PRIMFLAG_GET_BLENDMODE(flags), PRIMFLAG_GET_TEXFORMAT(flags)); |
| 2616 | break; |
| 2617 | } |
| 2586 | 2618 | } |
| 2587 | 2619 | } |
| 2588 | 2620 | } |