Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Houp
Založen: 28. 07. 2007 Příspěvky: 672
|
Zaslal: 16. prosinec 2010, 11:31:02 Předmět: glColor3ubv a přetížení přetypování v C++ |
|
|
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 |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 16. prosinec 2010, 11:42:57 Předmět: |
|
|
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 |
|
|
Houp
Založen: 28. 07. 2007 Příspěvky: 672
|
Zaslal: 16. prosinec 2010, 12:40:14 Předmět: |
|
|
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 |
|
|
pcmaster
Založen: 28. 07. 2007 Příspěvky: 1824
|
Zaslal: 16. prosinec 2010, 16:49:40 Předmět: |
|
|
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 |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 16. prosinec 2010, 19:31:26 Předmět: |
|
|
Souhlas, zbytečné heap alokace smrdí. Taky zlozvyk z Javy (kde to ale asi jinak nejde). _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
|
|