PDA

Visualizza la versione completa : [c++ opengl e move semantic]liste di disegno


giuseppe500
04-09-2013, 21:53
ciao.
Nella mia applicazione ho degli oggetti con relativa geometria(vba:vertex buffer array) e degli effetti (shader) che prendono la geometria e la rappresentano in modo grafico, il tutto in opengl.

ora:
io nel mio progetto ho due tipi di effetti principali selezionato wireframe e non selezionato solido.
pero' ho tantissime entità geometriche(possono andare dai 2000 ai 30000).

quello a cui pensavo era di creare delle liste separate ,ognuna con una sola proprietà: lo shader che rappresenta o solido o wireframe ,e rappresentare tutte le geometrie della lista con quello shader specifico.
le liste ogni ciclo vengono rappresentate con il loro shader che renderizza tutte le geometrie agganciate.

per cambiare rappresentazione quindi basterebbe spostare un entità geometrica(vba) da una lista ad un altra.
Ora e questo è il problema:
ho letto che quando si inserisce un oggetto in un container stl si scatena il costruttore di copia e se devo spostare diciamo 10000 oggetti (a seguito di una selezione box)da uno stato grafico solido a uno stato selezionato wireframe scatenerei 10000 costruttori di copia, sbaglio?

forse qui la move semantic puo dare una mano, ma non so bene come fare a spostare un oggetto da una lista ad un altra.
chiaramente ho scelto una lista perchè si "autodimensiona" nell' inserimento e nella cancellazione e non un vector.

esistono degli esempi per spostare degli oggetti da una lista ad un altra con la move semantic?
perchè per dirla tutta gli oggetti di cui si parla sono molto piccoli, non so se ne trarrei guadagno, ma vorrei provare, anche perchè le liste selezionato/non selezionato mi servono comunque per altre operazioni.


grazie.

MegaAlchimista
05-09-2013, 01:39
Secondo me se nelle liste metti dei puntatori ai tuoi oggetti risolvi il problema.
Semplicemente devi assicurarti che tutti gli oggetti siano persistenti in memoria durante tutta l'esecuzione dell'applicazione, dopodichè quando ti serve sposti solo dei puntatori (es: da una lista a un'altra)

giuseppe500
05-09-2013, 10:52
grazie MegaAlchimista, ho capito , anche io pensavo cosi, ma quello che non capisco è perchè in tutti gli esempi che ho letto e visto in programmi opensource usano dove possono Oggetti e non puntatori.
lo fanno per qualche ragione?
è solo un caso?

grazie comunque MegaAlchimista.

ciao.

MegaAlchimista
05-09-2013, 12:31
gli oggetti da qualche parte devi metterli! Probabilmente negli esempi che hai visto però loro non devono spostarli da una struttura all'altra.

Nel tuo caso io metterei tutti gli oggetti in un array quando parte l'applicazione.
Dopodichè nelle liste che usi per i motivi di cui sopra metti dei puntatori a questi oggetti, che potranno essere spostati, eliminati, eccetera.
Quando l'applicazione si chiude , prima elimini le liste (che contengono solo puntatori) e poi deallochi tutti gli oggetti cancellando l'array

giuseppe500
11-09-2013, 15:13
mi sono scordato di ringraziarti , hai ragione sui puntatori e ho capito.
Mi resta da vedere se è performante e questo lo posso fare solo io.
intanto grazie :ciauz: .

Loading