IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Collection comprenant plusieurs types d'items différents


Sujet :

Delphi

  1. #1
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 353
    Points
    4 353
    Billets dans le blog
    2
    Par défaut Collection comprenant plusieurs types d'items différents
    Bonjour à tous,

    je suis actuellement entrain de mettre à jour le moteur 3D de la librairie GLScene pour pouvoir utiliser pleinement le potentiel de OpenGL version 3.3 et supérieur.
    Je souhaiterai créer une Librairie de "Shaders" basé sur TOwnerCollection ou directement TCollection.
    A l'heure actuelle pour utiliser mes Shaders qui sont des composants non visuel je doit les poser sur ma form. Je souhaiterai éviter de polluer ma form (et la palette de composants) avec 100 shaders différents par exemples.
    Actuellement je dispose d'une collection que je peux utiliser avec un Shader générique et une sous collection d'objets qui définissent mes Scripts (vertex, fragment etc...) que je peux choisir dans mon shader générique. Ce qui m’évite d'avoir des ressources identiques dupliquées donc un gain de mémoire.

    Seulement voila, comment faire pour avoir des items (utilisants les différents composants shader) avec leurs propriétés publiées (Ex : TUserShader, TBumpShader, TWaterShader etc...) et les ajouter à ma collection afin de pouvoir éditer les propriétés de chacun indépendamment dans l'ide via l'inspecteur d'objet ? J'ai posé la question sur http://stackoverflow.com/questions/3...tom-components mais j'avoue être dans la confusion et ne sait vraiment pas comment m'y prendre

    D'avance merci de vos réponses

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 705
    Points : 25 575
    Points
    25 575
    Par défaut
    Je ne me suis pas fatigué à lire l'anglais
    Mais c'est le principe même de polymorphisme


    Tu peux faire un objet TShaderCollection qui hérité de TCollection
    Rédéfinie le Constructeur pour qu'il soit implicitement créé par la méthode Add un TShaderCollectionItem
    le TShaderCollectionItem est un objet wrapper qui contient une proprité Shader, ensuite par jeux de transtypage, tu peux lui fournir ou utiliser un TUserShader, TBumpShader, TWaterShader ...


    L'intérêt d'une TCollection c'est surtout de pouvoir la sérialiser dans une DFM comme dans ce code qui mémorise un Diagramme dans une DFM
    C'est utile si l'on crée un composant !

    Si ce n'est utile qu'en RunTime utilise une TObjectList ou TObjectList<>

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    si j'ai tout compris à ta question, c'est un peu sioux à faire, avec une recherche sur Subcomponent, HasParent et GetParentComponent tu devrais trouver

    comme ça par exemple
    http://stackoverflow.com/questions/1...amed-component

  4. #4
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 353
    Points
    4 353
    Billets dans le blog
    2
    Par défaut
    Bonjour, merci de vos réponses


    > ensuite par jeux de transtypage, tu peux lui fournir ou utiliser un TUserShader, TBumpShader, TWaterShader
    C'est la solution que j'utilisai mais dans l'inspecteur d'objet les différents paramètres des différents shaders ne sont pas visiblent

    > c'est un peu sioux à faire. comme ça par exemple
    http://stackoverflow.com/questions/1...amed-component

    Oui, c'est ce que je recherche à faire du coup en regardant l'exemple je me demande si c'est vraiment une bonne idée. Ça alourdi énormément le code. Je serai obligé d'écrire un CollectionItem par Shader en plus (Comme je l'ai déja fais dans la librairie de "Matériaux" pour gérer les sous-composants comme Textures, les Textures pour le FBO et les Samplers) et du code pour pouvoir paramétrer et assigner les Shaders dynamiquement du coup cela risque de faire baisser les performances. Dur de faire un compromis pour alléger le nombre d'objet en mémoire. Je vais garder la librairie juste avec le TUserShader cela permettra à l'utilisateur d'écrire ces propres Shader sans à devoir poser XX Composants sur la Form et pour les autres Shaders spécifiques je vais les laisser tel quel. Ou sinon j’intégrerai les différents templates de scripts dans l'éditeur de code GLSL de ma librairie qui utilise une sous-collection pour gérer ceux-ci. Ça m’évitera déjà d'avoir des scripts GLSL identiques dupliqués en mémoire. Je sais pas si je suis très clair. Faudrait que vous puissiez voir le code complet pour vous faire une idée.


    Bref Merci de votre aide. Je vais réfléchir à la meilleur solution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA] comment modifier les items des collections
    Par tangjuncn dans le forum Général VBA
    Réponses: 2
    Dernier message: 18/02/2014, 17h37
  2. [Struts-Layout] Différence entre collection et datagrid
    Par nabil148911 dans le forum Struts 1
    Réponses: 4
    Dernier message: 30/07/2007, 10h52
  3. type variable item collection
    Par samtheh dans le forum VBA Access
    Réponses: 10
    Dernier message: 31/05/2007, 14h31
  4. [Collections]Compter les mots différents d'une ArrayList
    Par alanpix dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 21/11/2005, 23h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo