рисование с различными значениями альфа в SDL - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь нарисовать алгоритм линии Xiaolin Wu в SDL2, из-за проблемы с альфа-каналом я ничего не получаю, я рисую его на поверхности, затем создаю текстуру с поверхности

Я пытался int SDL_SetTextureBlendMode(SDL_Texture* texture, SDL_BlendMode blendMode) с помощьювсе возможные режимы смешивания

получение цвета: (здесь нет ошибки, я думаю)

void LINE_PlotPoint(SDL_Surface * surface,int x,int y, double alpha)
{
    Uint32 *pixels = (Uint32 *)surface->pixels;
    Uint32 pixel=SYS_GetForegroundColor();

    Uint8 a= alpha*255;

    pixel&=~amask;
    pixel |= a;

    pixels[ ( y * surface->w ) + x ] =pixel;
}

основной цикл для этой задачи:

if(event.type==SDL_MOUSEMOTION)
{
    SDL_GetMouseState(&i,&j);
    i-=grect.x;
    j-=grect.y;
    TOOL_DrawLine(tempSurface,x,y,i,j,1);//Xiaolin Wu's line algorithm

    if(tempTexture)
    {
        SDL_DestroyTexture(tempTexture);
    }

    tempTexture=TOOL_CreateLineTexture(tempSurface,&srect,&drect);//create texture from surface and calculating rect(src & dest)
    if(tempTexture==NULL)
    {
        puts("error");
    }
    SDL_SetTextureBlendMode(tempTexture,SDL_BLENDMODE_BLEND);


    SDL_FillRect(tempSurface,NULL,NULL);//delete pixel from surface (no need for it)

    }

я пробовалэто раньше с альфа-каналом = 255, и он работает нормально, но с различными значениями альфа ничего не происходит

1 Ответ

0 голосов
/ 25 июня 2019

теперь я нашел проблему

просто я забыл сместить альфа-значение в нужное место

pixel&=~amask;
pixel |= a << ashift;
...