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,