Mercurial > sdl-ios-xcode
comparison src/video/SDL_renderer_gles.c @ 3393:fe2f10481878
Fixed SDL_BLENDMODE_MASK for GL and GLES renderers, now blending works like in software renderer.
author | Mike Gorchak <lestat@i.com.ua> |
---|---|
date | Tue, 13 Oct 2009 06:51:20 +0000 |
parents | 3fe2248fde37 |
children | 83518f8fcd61 |
comparison
equal
deleted
inserted
replaced
3392:efc22582afc5 | 3393:fe2f10481878 |
---|---|
609 SDL_AddDirtyRect(&data->dirty, &rects[i]); | 609 SDL_AddDirtyRect(&data->dirty, &rects[i]); |
610 } | 610 } |
611 } | 611 } |
612 | 612 |
613 static void | 613 static void |
614 GLES_SetBlendMode(GLES_RenderData * data, int blendMode) | 614 GLES_SetBlendMode(GLES_RenderData * data, int blendMode, int isprimitive) |
615 { | 615 { |
616 if (blendMode != data->blendMode) { | 616 if (blendMode != data->blendMode) { |
617 switch (blendMode) { | 617 switch (blendMode) { |
618 case SDL_BLENDMODE_NONE: | 618 case SDL_BLENDMODE_NONE: |
619 data->glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); | 619 data->glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); |
620 data->glDisable(GL_BLEND); | 620 data->glDisable(GL_BLEND); |
621 break; | 621 break; |
622 case SDL_BLENDMODE_MASK: | 622 case SDL_BLENDMODE_MASK: |
623 if (isprimitive) { | |
624 data->glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); | |
625 data->glDisable(GL_BLEND); | |
626 /* The same as SDL_BLENDMODE_NONE */ | |
627 blendMode = SDL_BLENDMODE_NONE; | |
628 break; | |
629 } | |
630 /* fall through */ | |
623 case SDL_BLENDMODE_BLEND: | 631 case SDL_BLENDMODE_BLEND: |
624 data->glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); | 632 data->glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); |
625 data->glEnable(GL_BLEND); | 633 data->glEnable(GL_BLEND); |
626 data->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | 634 data->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); |
627 break; | 635 break; |
643 static int | 651 static int |
644 GLES_RenderPoint(SDL_Renderer * renderer, int x, int y) | 652 GLES_RenderPoint(SDL_Renderer * renderer, int x, int y) |
645 { | 653 { |
646 GLES_RenderData *data = (GLES_RenderData *) renderer->driverdata; | 654 GLES_RenderData *data = (GLES_RenderData *) renderer->driverdata; |
647 | 655 |
648 GLES_SetBlendMode(data, renderer->blendMode); | 656 GLES_SetBlendMode(data, renderer->blendMode, 1); |
649 | 657 |
650 data->glColor4f((GLfloat) renderer->r * inv255f, | 658 data->glColor4f((GLfloat) renderer->r * inv255f, |
651 (GLfloat) renderer->g * inv255f, | 659 (GLfloat) renderer->g * inv255f, |
652 (GLfloat) renderer->b * inv255f, | 660 (GLfloat) renderer->b * inv255f, |
653 (GLfloat) renderer->a * inv255f); | 661 (GLfloat) renderer->a * inv255f); |
667 static int | 675 static int |
668 GLES_RenderLine(SDL_Renderer * renderer, int x1, int y1, int x2, int y2) | 676 GLES_RenderLine(SDL_Renderer * renderer, int x1, int y1, int x2, int y2) |
669 { | 677 { |
670 GLES_RenderData *data = (GLES_RenderData *) renderer->driverdata; | 678 GLES_RenderData *data = (GLES_RenderData *) renderer->driverdata; |
671 | 679 |
672 GLES_SetBlendMode(data, renderer->blendMode); | 680 GLES_SetBlendMode(data, renderer->blendMode, 1); |
673 | 681 |
674 data->glColor4f((GLfloat) renderer->r * inv255f, | 682 data->glColor4f((GLfloat) renderer->r * inv255f, |
675 (GLfloat) renderer->g * inv255f, | 683 (GLfloat) renderer->g * inv255f, |
676 (GLfloat) renderer->b * inv255f, | 684 (GLfloat) renderer->b * inv255f, |
677 (GLfloat) renderer->a * inv255f); | 685 (GLfloat) renderer->a * inv255f); |
693 static int | 701 static int |
694 GLES_RenderFill(SDL_Renderer * renderer, const SDL_Rect * rect) | 702 GLES_RenderFill(SDL_Renderer * renderer, const SDL_Rect * rect) |
695 { | 703 { |
696 GLES_RenderData *data = (GLES_RenderData *) renderer->driverdata; | 704 GLES_RenderData *data = (GLES_RenderData *) renderer->driverdata; |
697 | 705 |
698 GLES_SetBlendMode(data, renderer->blendMode); | 706 GLES_SetBlendMode(data, renderer->blendMode, 1); |
699 | 707 |
700 data->glColor4f((GLfloat) renderer->r * inv255f, | 708 data->glColor4f((GLfloat) renderer->r * inv255f, |
701 (GLfloat) renderer->g * inv255f, | 709 (GLfloat) renderer->g * inv255f, |
702 (GLfloat) renderer->b * inv255f, | 710 (GLfloat) renderer->b * inv255f, |
703 (GLfloat) renderer->a * inv255f); | 711 (GLfloat) renderer->a * inv255f); |
787 (GLfloat) texture->a * inv255f); | 795 (GLfloat) texture->a * inv255f); |
788 } else { | 796 } else { |
789 data->glColor4f(1.0f, 1.0f, 1.0f, 1.0f); | 797 data->glColor4f(1.0f, 1.0f, 1.0f, 1.0f); |
790 } | 798 } |
791 | 799 |
792 GLES_SetBlendMode(data, texture->blendMode); | 800 GLES_SetBlendMode(data, texture->blendMode, 0); |
793 | 801 |
794 switch (texture->scaleMode) { | 802 switch (texture->scaleMode) { |
795 case SDL_TEXTURESCALEMODE_NONE: | 803 case SDL_TEXTURESCALEMODE_NONE: |
796 case SDL_TEXTURESCALEMODE_FAST: | 804 case SDL_TEXTURESCALEMODE_FAST: |
797 data->glTexParameteri(texturedata->type, GL_TEXTURE_MIN_FILTER, | 805 data->glTexParameteri(texturedata->type, GL_TEXTURE_MIN_FILTER, |