Průhledná SDL_Surface – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Průhledná SDL_Surface – C / C++ – Fórum – Programujte.comPrůhledná SDL_Surface – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
yaqwsx+9
Posthunter
16. 1. 2010   #1
-
0
-

Mám problém s vytvořením průhledné surface. Vytvořím novou surace, vyplním ji průhlednou černou:

SDL_FillRect(ret, NULL, SDL_MapRGBA(ret->format, 0, 0, 0, 0));

a poté když do ní vykresluji a tuto surface vykreslím do okna, tak v ní nic není.
Vytvářím si totiž textové pole pro SDL_TTF; vyrenderuji jednotlivé řádky a ty potom pomocí SDL_BlitSurface vyblituji do jedné. Potřebuji ale průhledné pozadí...
Našel jsem něco, co by mělo řešit můj problém, ale pokud se držím postupu, dostanu stejný výsledek - http://lists.libsdl.org/pipermail/sdl-libsdl.org/2009-July/071386.html

Zkouším všechno možné již celé odpoledne a ničeho se nemůžu dopracovat.

Děkuji za každou odpověď

Nahlásit jako SPAM
IP: 85.160.118.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Reklama
Reklama
jjub
~ Anonymní uživatel
4 příspěvky
17. 1. 2010   #2
-
0
-

Myslíš, že by jsi mohl poslat zdrojový kód? Jako napadá mě, jestli někde voláš SDL_SetColorKey() na nastavení transparentní barvy, ale to jenom hádám, co všechno máš v kódu napsané...

Nahlásit jako SPAM
IP: 80.188.66.–
yaqwsx+9
Posthunter
17. 1. 2010   #3
-
0
-

SDL_SetColorKey nevolám - používám alpha kanál. Jednak v celém programu používám částečnou průhlednost a taky renderuji vyhlazený text - při použití klíčové barvy vznikají okraje.
Můj kód:



//vytvoření surface pro návrat.
//vector<string> radky obsahuje jednotlivé řádky textu pro vyrenderování,
//w je zadaná max. šířka textu
ret = SDL_CreateRGBSurface(SDL_SWSURFACE, w, radky.size()*radkovani, 32,
#if SDL_BYTEORDER == SDL_LIL_ENDIAN
0x000000FF,
0x0000FF00,
0x00FF0000,
0xFF000000
#else

0xFF000000,
0x00FF0000,
0x0000FF00,
0x000000FF
#endif
);
SDL_FillRect(ret, NULL, SDL_MapRGBA(ret->format, 0, 0, 0, 0));//Vyplnění surface průhlednou barvou
//SDL_SetAlpha(ret, 0, SDL_ALPHA_OPAQUE);podle výše zmíněného odkazu jsme zkusil přidat, ale nepomohlo

SDL_Surface* temp = NULL;//dočasný ukazatel na SDL_Surface
for(unsigned int kl = 0; kl != radky.size(); kl++)//vykreslení
{
SDL_FreeSurface(temp);
temp = TextRender(i, radky[kl], barva);//Zde je moje funkce pro rendering textu
//, který je v jednom řádku, obstarává
// globální používání fontů apod
SDL_Rect r;
r.y = radkovani*kl;
r.x = 0;
SDL_BlitSurface(temp, NULL, ret, &r);//vykreslení dočasné surface do surface pro vrácení
}

//SDL_SetAlpha(ret, SDL_SRCALPHA, SDL_ALPHA_OPAQUE); také podle výše zmíněného odkazu

Nahlásit jako SPAM
IP: 85.160.92.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
yaqwsx+9
Posthunter
17. 1. 2010   #4
-
0
-

Tak, už vím v čem je zakopaný pes.
Problém je v tom, že když blenduji do surface, která má alpha kanál, tak ten alpha kanál se nezmění - když je v cílové surface průhledný pixel a na něj se vyblenduje neprůhledný, tak zůstane průhledný, jen s jinou barvou.
Toto ale nevím jak vyřešit. Neví někdo? Neřešil už někdo takový problém?

EDIT: už jsme to našel i v dokumentaci -

The source is alpha-blended with the destination using the source alpha channel. The alpha channel in the destination surface is left untouched. Colorkey is ignored.



EDIT2: Vyřešeno. Bylo potřeba vypnout alpha kanál i u surface s textem, vyblitovat a poté zapnout.

Nahlásit jako SPAM
IP: 85.160.102.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 88 hostů

Podobná vlákna

SDL_Surface* a vektory — založil Doomista

SDL_Surface jen na jedno pouziti? — založil CommanderZ

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý