Mercurial > sdl-ios-xcode
comparison src/video/directfb/SDL_DirectFB_render.c @ 2698:e1da92da346c gsoc2008_nds
Clean up.
author | Darren Alton <dalton@stevens.edu> |
---|---|
date | Wed, 27 Aug 2008 04:23:38 +0000 |
parents | 5234868559fa |
children |
comparison
equal
deleted
inserted
replaced
2697:c9121b04cffa | 2698:e1da92da346c |
---|---|
313 data->format = texture->format; | 313 data->format = texture->format; |
314 data->pitch = (texture->w * SDL_BYTESPERPIXEL(data->format)); | 314 data->pitch = (texture->w * SDL_BYTESPERPIXEL(data->format)); |
315 data->vidlayer = NULL; | 315 data->vidlayer = NULL; |
316 if (renddata->isyuvdirect && (dispdata->vidID >= 0) | 316 if (renddata->isyuvdirect && (dispdata->vidID >= 0) |
317 && SDL_ISPIXELFORMAT_FOURCC(data->format)) { | 317 && SDL_ISPIXELFORMAT_FOURCC(data->format)) { |
318 SDL_DFB_CHECKERR(devdata->dfb-> | 318 SDL_DFB_CHECKERR(devdata-> |
319 GetDisplayLayer(devdata->dfb, dispdata->vidID, | 319 dfb->GetDisplayLayer(devdata->dfb, dispdata->vidID, |
320 &data->vidlayer)); | 320 &data->vidlayer)); |
321 layconf.flags = DLCONF_WIDTH | DLCONF_HEIGHT | DLCONF_PIXELFORMAT; | 321 layconf.flags = DLCONF_WIDTH | DLCONF_HEIGHT | DLCONF_PIXELFORMAT; |
322 layconf.width = texture->w; | 322 layconf.width = texture->w; |
323 layconf.height = texture->h; | 323 layconf.height = texture->h; |
324 layconf.pixelformat = SDLToDFBPixelFormat(data->format); | 324 layconf.pixelformat = SDLToDFBPixelFormat(data->format); |
325 | 325 |
326 SDL_DFB_CHECKERR(data->vidlayer-> | 326 SDL_DFB_CHECKERR(data->vidlayer->SetCooperativeLevel(data->vidlayer, |
327 SetCooperativeLevel(data->vidlayer, | 327 DLSCL_EXCLUSIVE)); |
328 DLSCL_EXCLUSIVE)); | 328 SDL_DFB_CHECKERR(data->vidlayer->SetConfiguration(data->vidlayer, |
329 SDL_DFB_CHECKERR(data->vidlayer-> | 329 &layconf)); |
330 SetConfiguration(data->vidlayer, &layconf)); | 330 SDL_DFB_CHECKERR(data->vidlayer->GetSurface(data->vidlayer, |
331 SDL_DFB_CHECKERR(data->vidlayer-> | 331 &data->surface)); |
332 GetSurface(data->vidlayer, &data->surface)); | 332 SDL_DFB_CHECKERR(data-> |
333 SDL_DFB_CHECKERR(data->vidlayer-> | 333 vidlayer->GetDescription(data->vidlayer, &laydsc)); |
334 GetDescription(data->vidlayer, &laydsc)); | |
335 SDL_DFB_DEBUG("Created HW YUV surface\n"); | 334 SDL_DFB_DEBUG("Created HW YUV surface\n"); |
336 } | 335 } |
337 if (!data->vidlayer) { | 336 if (!data->vidlayer) { |
338 /* fill surface description */ | 337 /* fill surface description */ |
339 dsc.flags = | 338 dsc.flags = |
354 } | 353 } |
355 | 354 |
356 data->pixels = NULL; | 355 data->pixels = NULL; |
357 | 356 |
358 /* Create the surface */ | 357 /* Create the surface */ |
359 SDL_DFB_CHECKERR(devdata->dfb-> | 358 SDL_DFB_CHECKERR(devdata->dfb->CreateSurface(devdata->dfb, &dsc, |
360 CreateSurface(devdata->dfb, &dsc, &data->surface)); | 359 &data->surface)); |
361 if (SDL_ISPIXELFORMAT_INDEXED(data->format) | 360 if (SDL_ISPIXELFORMAT_INDEXED(data->format) |
362 && !SDL_ISPIXELFORMAT_FOURCC(data->format)) { | 361 && !SDL_ISPIXELFORMAT_FOURCC(data->format)) { |
363 SDL_DFB_CHECKERR(data->surface-> | 362 SDL_DFB_CHECKERR(data->surface->GetPalette(data->surface, |
364 GetPalette(data->surface, &data->palette)); | 363 &data->palette)); |
365 } | 364 } |
366 | 365 |
367 } | 366 } |
368 return 0; | 367 return 0; |
369 | 368 |
406 entries[i].r = colors[i].r; | 405 entries[i].r = colors[i].r; |
407 entries[i].g = colors[i].g; | 406 entries[i].g = colors[i].g; |
408 entries[i].b = colors[i].b; | 407 entries[i].b = colors[i].b; |
409 entries[i].a = 0xFF; | 408 entries[i].a = 0xFF; |
410 } | 409 } |
411 SDL_DFB_CHECKERR(data->palette-> | 410 SDL_DFB_CHECKERR(data-> |
412 SetEntries(data->palette, entries, ncolors, | 411 palette->SetEntries(data->palette, entries, ncolors, |
413 firstcolor)); | 412 firstcolor)); |
414 return 0; | 413 return 0; |
415 } else { | 414 } else { |
416 SDL_SetError("YUV textures don't have a palette"); | 415 SDL_SetError("YUV textures don't have a palette"); |
417 return -1; | 416 return -1; |
418 } | 417 } |
430 if (SDL_ISPIXELFORMAT_INDEXED(data->format) | 429 if (SDL_ISPIXELFORMAT_INDEXED(data->format) |
431 && !SDL_ISPIXELFORMAT_FOURCC(data->format)) { | 430 && !SDL_ISPIXELFORMAT_FOURCC(data->format)) { |
432 DFBColor entries[256]; | 431 DFBColor entries[256]; |
433 int i; | 432 int i; |
434 | 433 |
435 SDL_DFB_CHECKERR(data->palette-> | 434 SDL_DFB_CHECKERR(data-> |
436 GetEntries(data->palette, entries, ncolors, | 435 palette->GetEntries(data->palette, entries, ncolors, |
437 firstcolor)); | 436 firstcolor)); |
438 | 437 |
439 for (i = 0; i < ncolors; ++i) { | 438 for (i = 0; i < ncolors; ++i) { |
440 colors[i].r = entries[i].r; | 439 colors[i].r = entries[i].r; |
441 colors[i].g = entries[i].g; | 440 colors[i].g = entries[i].g; |
442 colors[i].b = entries[i].b; | 441 colors[i].b = entries[i].b; |
594 { | 593 { |
595 DirectFB_RenderData *data = (DirectFB_RenderData *) renderer->driverdata; | 594 DirectFB_RenderData *data = (DirectFB_RenderData *) renderer->driverdata; |
596 DFBResult ret; | 595 DFBResult ret; |
597 | 596 |
598 SDL_DFB_CHECKERR(data->surface->SetColor(data->surface, r, g, b, a)); | 597 SDL_DFB_CHECKERR(data->surface->SetColor(data->surface, r, g, b, a)); |
599 SDL_DFB_CHECKERR(data->surface-> | 598 SDL_DFB_CHECKERR(data-> |
600 FillRectangle(data->surface, rect->x, rect->y, rect->w, | 599 surface->FillRectangle(data->surface, rect->x, rect->y, |
601 rect->h)); | 600 rect->w, rect->h)); |
602 | 601 |
603 return 0; | 602 return 0; |
604 error: | 603 error: |
605 return -1; | 604 return -1; |
606 } | 605 } |
620 SDL_VideoDisplay *display = SDL_GetDisplayFromWindow(window); | 619 SDL_VideoDisplay *display = SDL_GetDisplayFromWindow(window); |
621 SDL_DFB_DEVICEDATA(display->device); | 620 SDL_DFB_DEVICEDATA(display->device); |
622 DFB_DisplayData *dispdata = (DFB_DisplayData *) display->driverdata; | 621 DFB_DisplayData *dispdata = (DFB_DisplayData *) display->driverdata; |
623 SDL_DFB_WINDOWDATA(window); | 622 SDL_DFB_WINDOWDATA(window); |
624 | 623 |
625 SDL_DFB_CHECKERR(texturedata->vidlayer-> | 624 SDL_DFB_CHECKERR(texturedata-> |
626 SetSourceRectangle(texturedata->vidlayer, srcrect->x, | 625 vidlayer->SetSourceRectangle(texturedata->vidlayer, |
627 srcrect->y, srcrect->w, | 626 srcrect->x, srcrect->y, |
628 srcrect->h)); | 627 srcrect->w, |
628 srcrect->h)); | |
629 windata->window->GetPosition(windata->window, &px, &py); | 629 windata->window->GetPosition(windata->window, &px, &py); |
630 SDL_DFB_CHECKERR(texturedata->vidlayer-> | 630 SDL_DFB_CHECKERR(texturedata-> |
631 SetScreenRectangle(texturedata->vidlayer, | 631 vidlayer->SetScreenRectangle(texturedata->vidlayer, |
632 px + dstrect->x, py + dstrect->y, | 632 px + dstrect->x, |
633 dstrect->w, dstrect->h)); | 633 py + dstrect->y, |
634 dstrect->w, | |
635 dstrect->h)); | |
634 } else { | 636 } else { |
635 DFBRectangle sr, dr; | 637 DFBRectangle sr, dr; |
636 DFBSurfaceBlittingFlags flags = 0; | 638 DFBSurfaceBlittingFlags flags = 0; |
637 | 639 |
638 sr.x = srcrect->x; | 640 sr.x = srcrect->x; |
643 dr.x = dstrect->x; | 645 dr.x = dstrect->x; |
644 dr.y = dstrect->y; | 646 dr.y = dstrect->y; |
645 dr.w = dstrect->w; | 647 dr.w = dstrect->w; |
646 dr.h = dstrect->h; | 648 dr.h = dstrect->h; |
647 | 649 |
648 if (texture-> | 650 if (texture->modMode & |
649 modMode & (SDL_TEXTUREMODULATE_COLOR | SDL_TEXTUREMODULATE_ALPHA)) | 651 (SDL_TEXTUREMODULATE_COLOR | SDL_TEXTUREMODULATE_ALPHA)) { |
650 { | |
651 u8 alpha = 0xFF; | 652 u8 alpha = 0xFF; |
652 if (texture->modMode & SDL_TEXTUREMODULATE_ALPHA) | 653 if (texture->modMode & SDL_TEXTUREMODULATE_ALPHA) |
653 alpha = texture->a; | 654 alpha = texture->a; |
654 if (texture->modMode & SDL_TEXTUREMODULATE_COLOR) | 655 if (texture->modMode & SDL_TEXTUREMODULATE_COLOR) |
655 SDL_DFB_CHECKERR(data->surface-> | 656 SDL_DFB_CHECKERR(data-> |
656 SetColor(data->surface, texture->r, | 657 surface->SetColor(data->surface, texture->r, |
657 texture->g, texture->b, alpha)); | 658 texture->g, texture->b, |
659 alpha)); | |
658 else | 660 else |
659 SDL_DFB_CHECKERR(data->surface->SetColor(data->surface, 0xFF, | 661 SDL_DFB_CHECKERR(data->surface->SetColor(data->surface, 0xFF, |
660 0xFF, 0xFF, alpha)); | 662 0xFF, 0xFF, alpha)); |
661 // Only works together .... | 663 // Only works together .... |
662 flags |= DSBLIT_COLORIZE | DSBLIT_SRC_PREMULTCOLOR; | 664 flags |= DSBLIT_COLORIZE | DSBLIT_SRC_PREMULTCOLOR; |
663 } | 665 } |
664 | 666 |
665 if (texture-> | 667 if (texture->blendMode & (SDL_TEXTUREBLENDMODE_MASK | |
666 blendMode & (SDL_TEXTUREBLENDMODE_MASK | | 668 SDL_TEXTUREBLENDMODE_BLEND)) { |
667 SDL_TEXTUREBLENDMODE_BLEND)) { | |
668 flags |= DSBLIT_BLEND_ALPHACHANNEL; | 669 flags |= DSBLIT_BLEND_ALPHACHANNEL; |
669 } else { | 670 } else { |
670 flags |= DSBLIT_NOFX; | 671 flags |= DSBLIT_NOFX; |
671 } | 672 } |
672 SDL_DFB_CHECKERR(data->surface-> | 673 SDL_DFB_CHECKERR(data-> |
673 SetBlittingFlags(data->surface, flags)); | 674 surface->SetBlittingFlags(data->surface, flags)); |
674 if (srcrect->w == dstrect->w && srcrect->h == dstrect->h) { | 675 if (srcrect->w == dstrect->w && srcrect->h == dstrect->h) { |
675 SDL_DFB_CHECKERR(data->surface-> | 676 SDL_DFB_CHECKERR(data->surface->Blit(data->surface, |
676 Blit(data->surface, texturedata->surface, &sr, | 677 texturedata->surface, &sr, |
677 dr.x, dr.y)); | 678 dr.x, dr.y)); |
678 } else { | 679 } else { |
679 SDL_DFB_CHECKERR(data->surface-> | 680 SDL_DFB_CHECKERR(data->surface->StretchBlit(data->surface, |
680 StretchBlit(data->surface, texturedata->surface, | 681 texturedata->surface, |
681 &sr, &dr)); | 682 &sr, &dr)); |
682 } | 683 } |
683 } | 684 } |
684 return 0; | 685 return 0; |
685 error: | 686 error: |
686 return -1; | 687 return -1; |
700 sr.y = 0; | 701 sr.y = 0; |
701 sr.w = window->w; | 702 sr.w = window->w; |
702 sr.h = window->h; | 703 sr.h = window->h; |
703 | 704 |
704 /* Send the data to the display */ | 705 /* Send the data to the display */ |
705 SDL_DFB_CHECKERR(data->surface-> | 706 SDL_DFB_CHECKERR(data-> |
706 Flip(data->surface, NULL, data->flipflags)); | 707 surface->Flip(data->surface, NULL, data->flipflags)); |
707 | 708 |
708 return; | 709 return; |
709 error: | 710 error: |
710 return; | 711 return; |
711 } | 712 } |