.[ ČeskéHry.cz ].
glColor3ubv a přetížení přetypování v C++

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Houp



Založen: 28. 07. 2007
Příspěvky: 672

PříspěvekZaslal: 16. prosinec 2010, 11:31:02    Předmět: glColor3ubv a přetížení přetypování v C++ Odpovědět s citátem

vytvořil jsem si třídu C_Color a chtěl bych mít možnost nastavovat barvu tímto způsobem :

kód:

C_Color c = C_Color(255, 255, 255);
glColor3ubv(c);


přetížil jsem operátor přetypování :
kód:

operator const GLubyte*() { const GLubyte color[3] = {red, green, blue}; return color;};


ale místo nastavené bílé barvy se mi poté vykresluje černou.

Takhle to ale funguje (použije se bílá) :
kód:

const GLubyte * byteC;
byteC = colorButton; // color button ma typ C_Color
GLubyte a[3] = {byteC[0], byteC[1], byteC[2]};
glColor3ubv(a); // funguje
glColor3ubv(byteC); // nefunguje


Nevíte někdo, co dělám špatně?
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
frca



Založen: 28. 07. 2007
Příspěvky: 1555

PříspěvekZaslal: 16. prosinec 2010, 11:42:57    Předmět: Odpovědět s citátem

No já ti nevim, ale ty vrátíš ukazatel na objekt na stacku, který to mezitím zruší, takže to ukazuje do... víme, kam. Možná tam dej static, ale to pak nebude thread safe, tudíž bych to nedělal.
Já bych prostě udělal funkci
inline glColor3(const C_Color& c) { /* toto už si dopiš sám, bude to obsahovat volání nějaké té glColor3* fce */ }
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Houp



Založen: 28. 07. 2007
Příspěvky: 672

PříspěvekZaslal: 16. prosinec 2010, 12:40:14    Předmět: Odpovědět s citátem

Díky za probuzení. Člověk "chvilku" v c++ nedělá, ale v jazycích jako Java, C#, a pak to takhle dopadá. Nakonec jsem to vyřešil v duchu mého původního návrhu.

kód:
class C_Color
{
    private :
        GLubyte* color;

    public :
        C_Color(const C_Color &c2);
        C_Color(char n_red, char n_green, char n_blue);
        ~C_Color();
        C_Color() { C_Color(255, 255, 255);};
        operator const GLubyte*() { return color;};
        C_Color & operator=(const C_Color &c2);
        C_Color operator+(int i) const { C_Color c2 = C_Color(color[0] + i, color[1] + i, color[2] + i); return c2; }
};

_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1823

PříspěvekZaslal: 16. prosinec 2010, 16:49:40    Předmět: Odpovědět s citátem

No tak ten private color by som rovno spravil GLubyte color[4] (ci 3). Ona sa potom zaalokuje sam aj s instanciou tej triedy a bude existovat kym bude existovat instancia. Teraz to mas, predpokladam, tak, ze niekde v konstruktore volas color = new GLubyte();
Imho to nie je nutne.
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1555

PříspěvekZaslal: 16. prosinec 2010, 19:31:26    Předmět: Odpovědět s citátem

Souhlas, zbytečné heap alokace smrdí. Taky zlozvyk z Javy (kde to ale asi jinak nejde).
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna