.[ ČeskéHry.cz ].
OpenGL shared_ptr

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



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

PříspěvekZaslal: 23. únor 2023, 19:30:48    Předmět: OpenGL shared_ptr Odpovědět s citátem

Ahoj, otázka na C++20 guru: Dá se nějak (rozumně) ohnout std::shared_ptr, aby pracoval např. s GLuint místo pointeru, glGenTextures místo new a glDeleteTextures místo delete?
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
mar



Založen: 16. 06. 2012
Příspěvky: 608

PříspěvekZaslal: 23. únor 2023, 21:52:33    Předmět: Re: OpenGL shared_ptr Odpovědět s citátem

no já sice nejsem C++20 guru, možná tak C++98 guru...

vůbec mi není jasné proč chceš na něco takového používat shared_ptr?
nebylo by jednodušší si to wrapnout do nějakého classu a tam to jednoduše udělat v ctoru/dtoru?

případně můžeš vracet nějaký proxy objekt co bude mít GLuint konverzní operátor, ale to je na můj vkus už velká divočina - pak by to mohlo jít používat jako GLuint z toho shared_ptr při dereferenci, viz link níž


něco takového třeba na godboltu, snad bude link fungovat:
https://godbolt.org/z/McoMbYzYW
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



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

PříspěvekZaslal: 23. únor 2023, 22:08:53    Předmět: Odpovědět s citátem

Něco jsem splácal, hodím to na github.

https://github.com/Franticware/OpenMRac/blob/fb82f40990eb04e67ce145f9c152cd5e19f21f7e/src/gl_shared.h
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
mar



Založen: 16. 06. 2012
Příspěvky: 608

PříspěvekZaslal: 23. únor 2023, 23:18:38    Předmět: Odpovědět s citátem

tak já si taky odpovím sám, když už byl dotaz na shared_ptr Smile
https://godbolt.org/z/qEse74zsG
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



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

PříspěvekZaslal: 23. únor 2023, 23:46:54    Předmět: Odpovědět s citátem

To je taky dobrý Very Happy Jak to, že mě to nenapadlo? Přiznám se, že z toho prvního examplu jsem to nepochopil. Každopádně díky za tvůj pohled na věc.
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 27. únor 2023, 14:19:31    Předmět: Odpovědět s citátem

Takhle podobně, jako poslal odkaz mar, to používá kolega v práci. Přes ten přetypovávací operator. Používáme už vulkán a tam je tolik šílených struktur, že bylo vhodné na ně udělat pár wrapperů.

Rozhodně bych ale nedoporučil dávat glDeleteTextures (a podobné) přímo do destruktoru toho referencovaného objektu. Samozřejmě záleží na použití, ale je to nebezpečné a nepružné. Zvlášť v OpenGL, který je těma svýma GL kontextama uplně naprd (slušně řečeno). Radši bych vytvořil wrapovací řídu, která bude mít interně referenci na nějaký texture manager. Pak stačí v destruktoru manageru říct, že tato textura je již na vyhození. Manager je pak může smazat v nějaký vhodný okamžik, třeba za pár framů a ve správném threadu. Přitom se snáz ohlídá, jestli je aktivní GL kontext, a tak podobně.

No a tak wrapovací třída může mít opět ten operator GLuint() const, takže bude fungovat i s ostatníma GL funkcema.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Č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