TextureContainer Singleton -ként

TextureContainer Singleton -ként
2013-07-18T04:50:35+02:00
2013-07-18T10:01:01+02:00
2022-10-23T14:25:38+02:00
  • Na, ennek örülök hogy én is jó irányba kezdtem el gondolkodni. De ha másnak van valami jó ötlete ezzel kapcsolatban szívesen fogadom.
    Mutasd a teljes hozzászólást!
  • sztem TextureManager és igen általában getInstance()-el szokták megvalósítani
    Mutasd a teljes hozzászólást!
  • Akkor nem sikerült átadni amire gondoltam.
    A modellek betöltése már megvan, már csak a hozzájuk tartozó textura a kérdés. Mint már az elébb is kiakartam fejezni magam, amikor betöltöm a modelt, akkor ugye abba benne van hogy milyen texturát használ, és azt adom hozzá a singletonként elképzelt textura konténerhez. ott egy hash_map használnák, aminek az kulcsa egy int lenne, az értéke egy ShaderResourceView pointer lenne,amibe "beletöltöm" a képet, és ha ezzel a névvel mártöltöttem be, akkor nem fog mégeygszser lefoglalódni az erő forrás, és vissza térne az ehez apointerhez tartozó id-vel, vagy akár magával a pointerrel, és a model osztályban, csak egy 4 byte-os érték mutatná a texturát. Remélem most jobban sikerült kifejeznem magam. A kérdés továbra is az hogy értelmes dolog ezt singletonnal megvalósitani, vagy van rá jobb megodás e?
    Mutasd a teljes hozzászólást!
  • Ha a load-ban egyszer már lekérted az id-t, akkor a draw-ban mindig lekérdezgetni szerintem már felesleges. A másik, hogy a main-nek, ahol a játék ogika van semmi köze ahhoz, hogy van e a modelleknek listája, ott kb csak ennyit kéne csinálni már:

    Scene *mainScene = Engine::Instance()->CreateScene("Main"); mainScene->AddModel("model.obj", "model.material", Vector3()); Engine::Instance()->Run();
    Mutasd a teljes hozzászólást!
  • Sziasztok

    Dolgozok egy game engine -en, nem kell valami nagy számra gondolni, és jelenleg ott tartok, hogy van egy obj és egy md5 model osztályom, és a modellekhez tartozó texturák kezelésén gondolkodok. Úgy képzeltem el hogy lenne egy singleton osztályom amiben add -olnám a modelek betöltése közbe igényelt texturákat, és ha valamelyik textura már be lenne töltve akkor így nem jönne léte duplán. Továbbá nem kellene a model osztályok inicializálásakor átadni egy kölső textureContainert hanem ez a load függvényen belül is el lenne. De hogy picit jobban szemléltessem az elképzelésemet írok egy rövid kódot.

    class objModel {
    load( nev ) {
    .....
    opentexturefile(nev)
    .....
    id = TextureContainer::GetInstance()->add(texturename);
    // id eltárolása itt
    }
    draw() {
    .....
    drawteture(TextureContainer::GetInstace()->get(id));
    }
    }

    main() {
    ....
    vector<objModel*> pModels;
    pModels.push_back( new objModel()->load(textura1.obj));
    ....
    }

    Ez egy elég "gagyi" vázlatos kód, de remélem jól szemléltetni amire gondolok.

    A kérdésem az lenne hogy ez egy használható ötlet, vagy felejtsem el, mert később gondba ütköznék miatt, vagy mert van ennél jobb, elegánsabb megoldás?

    Vagy más dolgot kérdezve, hogy a legjobb sok modellhez tartozó texturák kezelése. Más engine -ekben hogy oldják meg?

    Legyetek szívesek csak a témával kapcsolatban írni, és kíméljetek attól hogy milyen nyelvtani vagy helyesírási hibát követtem el.

    Válaszotokat előre is köszönöm.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd