Projet

Général

Profil

Castor3D en version 0.7.0

Après plus de 3 ans sans faire parler de lui (tout en travaillant dans l'ombre) voici la nouvelle version du Castor!
Ajouté par dragonjoker59 il y a presque 3 ans

Modifications

CMake

  • Ajout de la possibilité de changer le dossier des binaires, au travers des variables PROJECTS_BINARIES_OUTPUT_PATH et PROJECTS_BINTEMP_OUTPUT_PATH.
  • Ajout du support d'AStyle, activé via l'option PROJECTS_USE_PRETTY_PRINTING.
  • Utilisation de CPack pour générer le setup WiX (ou DEB), activé via l'option PROJECTS_PACKAGE_WIX (respectivement PROJECTS_PACKAGE_DEB).
  • Ajout de la possibilité d'activer le profileur de code de Visual Studio, avec l'option PROJECTS_PROFILING.
  • Ajout de la possibilité de choisir quels projets du Castor sont à générer (dans le groupe CASTOR).
  • Réorganisation globale de l'arborescence des fichiers

Général

  • Découpe des fichiers afin de n'avoir plus qu'une classe par fichier.
  • Support de la compilation x64.
  • Compabilité avec wxWidgets 2.8 et Linux améliorée.
  • Ajout de fonctions Destroy pour chaque fonction Create dans les plugins, afin que la création et la destruction de ceux-ci se fasse dans l'espace mémoire des DLL (pour Windows).
  • Ajout du plugin d'import ASSIMP, permettant d'élargir le nombre de formats supportés. La fonction ImporterPlugin::GetExtensions permet maintenant de récupérer un tableau de paires <extension, file type>.

CastorUtils

  • Toutes les variables statiques et globales ont été enlevées.
  • Remplacement de la classe String par une classe str_utils.
  • Suppression des dépendances à boost, à part pour thread, et uniquement pour les compilateurs ne supportant pas std::thread.
  • Les macros cstrnlen, cstrftime, cstrncpy, cfopen, cfopen64, cfseek et cftell ont été remplacées par des fonction dans Castor.
  • Suppression de la macro DECLARE_SHARED_PTR, remplacée par DECLARE_SMART_PTR, et les typedefs XxxPtr ont été remplacés par leurs équivalents XxxSPtr.
  • Suppression de l'encodage Unicode pour les fichiers.
  • Ajout du support de l'indentation de flux.
  • Améliorations de Castor::FileParser :
    • Il peut ignorer des sections de code sans avoir à les commenter (tels que les blocs de shader HLSL alors que le RenderSystem chargé est GlRenderSystem, etc.).
    • Il prend en compte les paramètres des fonctions d'analyse.
    • Les fonctions peuvent maintenant avoir des paramètres, pas uniquement des types de paramètres, et ces paramètres s'analysent eux-mêmes.
  • Réduction de l'occupation mémoire des images.
  • Modification de Point :
    • les fonctions non dépendantes ont été déplacées dans une classe d'aide : Castor::point. Cette classe contient donc les fonctions normalise, get_normalised, dot, cos_theta, negate et toutes les fonctions de calcul de distance.
    • Suppression des méthodes link, copy/clopy/clone.
    • Il contient maintenant un tableau statique au lieu d'un tableau dynamique.
  • La classe Castor::Colour ne dérive plus de Point4f.
  • La fonction DynamicLibrary::GetFunction a été modifiée, ajout d'un paramètre template, le type de fonction, afin de ne plus avoir de conversions lors de l'utilisation de DynamicLibrary::GetFunction.
  • Ajout du support des niveaux de log pour Castor::Logger.
  • Modifications de Castor::Line3D :
    • Implémentation de la méthode de calcul d'intersection
    • Cette classe a maintenant deux constructeurs nommés : FromPointAndSlope et FromPoints, pour éviter les confusions.
  • Création de deux nouvelles classes : Size et Positionau lieu d'un typedef pour chacune.
  • Création de la classe Castor::Coord pour récupérer les fonctionnalités dynamique de l'ancien Point.

Castor3D

  • Ajout des méthodes HasParameter et SetParameter dans la classe ShaderObject, pour appliquer les matrices de la classe Pipeline.
  • Ajout de fonctions Begin et End dans la classe Mesh afin de pouvoir itérer sur les submeshes sans passer par les fonctions GetSubmesh et GetSubmeshCount.
  • Ajout de fonctions Begin et End dans la classe Material functions Begin and End.
  • Ajout de la classe FrameVariableBuffer pour gérer les variables uniformes avec les UBO OpenGL ou les Constant buffer de Direct3D 11.
  • Ajout de la classe DepthStencilState pour gérer ces états à la mode Direct3D 11 (qui fait ça bien).
  • De même, ajout des classes BlendState et RasteriserState.
  • Création des classes TextureBase, StaticTexture et DynamicTexture pour faciliter l'implémentation des cibles de rendu.
  • Ajout de canaux pour les textures (couleur, ambiante, diffusion, speculaire, normale, hauteur, brillance).
  • Création de la classe TechniqueParameters pour passer des paramètres spécifiques aux techniques comme, par exemple, le nombre d'échantillons (pour le MSAA).
  • Introduction de la classe SamplerState pour grouper les appels à SetSamplerState et autres.
  • Implémentation des Frame Buffers.
  • Réduction de l'occupation mémoire des tampons de sommets.
  • Modification de BufferElementGroup afin qu'il ne puisse plus contenir son tampon.
  • La classe Overlay n'étend plus Renderable, il n'y a plus qu'une instance de OverlayRenderer, gérée par la classe OverlayManager. Toutes les incrustations sont maintenant rendues via cette instance.
  • Amélioration de l'occupation mémoire : diminution drastique de la taille d'un Vertex (de 152 à 24 octets) et d'une Face (de 140 à 16 octets).
  • Modification de Subdivision, elle se trouve maintenant uniquement dans Subdivider et plus dans Geometry, Mesh ou Submesh.
  • Les lumières sont maintenant implémentées dans une texture, passant la limite de 8 à 100 sources.
  • Suppression des méthodes ApplyXXXMatrix de la classe IPipelineImpl, maintenant la classe Pipeline applique les matrices elle-même.
  • Implémentation du MSAA.
  • Implémentation de l'Alpha to Coverage lorsque le MSAA est activé.
  • Revue des tailles : Viewport contient la taille interne, RenderTarget et RenderWindow contiennent la taille externe.
  • Découpe de eBUFFER_MODE en eBUFFER_ACCESS_TYPE et eBUFFER_ACCESS_NATURE.
  • L'initialisation des objets GPU se passe maintenant avec l'utilisation de deux évènements : InitialiseEvent et CleanupEvent.
  • Fusion de GpuBuffer::Initialise et GpuBuffer::SetShaderProgram afin d'en simplifier l'utilisation.
  • Suppression de la génération automatique des mipmaps. Maintenant, si l'utilisateur vuet les générer, il utilise la fonction DynamicTexture::GenerateMipmaps.
  • Implémentation de l'instanciation hardware des maillages.
  • Modifications de Castor3D::Submesh :
    • Les classes Submesh et SmoothingGroup ont été fusionnées.
    • Modification de la méthode ComputeTangents pour prendre en compte les normales des sommets.
    • Ajout d'un overload pour la méthode AddPoints afin de pouvoir lui donner un stVERTEX_GROUP en paramètre.
    • Modification de la génération des normales.
    • Déplacement des matériaux, de Submesh à Geometry.
    • Modification du compte des instances, pour le rendre spécifique aux matériaux utilisés par les instances du Submesh.
  • Modifications de Pass :
    • Création d'une fonction Pass::Initialise afin que les shaders ne soient initialisés qu'une fois, et pas à chaque frame.
    • Réorganisation des unités de texture des passes, afin que celles associées à un canal arrivent premières.
  • Ajout d'une instance de BlendState dans la classe Pass et suppression de la gestion du mélange RGB/Alpha de la classe Pass.
  • Modifications de Castor3D::Scene :
    • Ajout de la possibilité d'activer ou désactiver le deferred rendering, option disponible dans les fichier cscn.
    • Ajout de fonctions templates pour ajouter, supprimer ou récupérer un objet quel que soit son type (Light, Geometry, Camera, SceneNode).
    • Les Submesh sont maintenant triés en fonction du matériau appliqué afin de pouvoir, entre autres, rendre les sous-maillages avec transparence après les autres.
  • Modifications de Castor3D::RenderTarget :
    • Modifié RenderTarget : elle contient maintenant son frame buffer et ce qui s'y rattache. C'est maintenant un Renderable et un TargetRenderer a donc été créé.
    • RenderTarget utilise maintenant RenderTechnique pour effectuer son rendu.
  • Modifications de Castor3D::RenderWindow :
    • RenderWindow n'étend plus RenderTarget, mais en a un en membre privé.
    • Création d'une méthode WindowRenderer::EndScene pour préparer le rendu du frame buffer de la RenderTarget dans la fenêtre.
  • Modifications des shaders :
    • Suppression des appels à ShaderObject afin d'en faire une classe interne à Castor3D.
    • Modification des shaders, ils prennent maintenant en compte le modèle de shader, contiennent tous les fichiers et sources définis par modèle. Le choix du modèle est fait à la compilation, en choisissant le modèle le plus haut supporté.
    • Modification des sources par défaut pour les shaders. Elles sont maitenant générées automatiquement et plus aucun fichier externe n'est nécessaire.
    • Modification de FrameVariable afin de prendre en compte eFRAME_VARIABLE_TYPE.
  • Modifications de Castor3D::Context
    • Suppression des méthodes Enable et Disable, suppression de la classe RenderState.
    • Suppression de la méthode SetPolygonMode.

GlRenderSystem

  • Création de la classe GeometryBuffers pour gérer les Vertex Array Objects. Ils contiennent maintenant leur tampons, permettant d'intégrer le choix d'utiliser les VAO ou non.
  • Les Geometry shader fonctionnent dans GlRenderSystem.
  • Suppression de la dépendance à GLEW.
  • Support des extensions de debug d'OpenGL.
  • Ajout du support de GL_MIRRORED_REPEAT.
  • Ajout du support de GL_TEXTURE_MAX_ANISOTROPY.

GuiCommon

  • Maintenant ShaderDialog utilise wxSizers.
  • Utilisation de wxStcEditor pour l'édition de shaders.
  • La fenêtre de matériaux utilis les wxSizers pour placer et redimensionner les éléments.
  • Ajout de la possibilité de changer le matériau utilisé par un sous-maillage, avec la fenêtre wxGeometriesListFrame.
  • Correction de bugs dans le chargement des images.
  • Amélioration de StcTextEditor afin d'avoir une meilleure coloration syntaxique.

CastorViewer

  • Maintenant, MainFrame utilise wxSizers.
  • Ajout d'options de ligne de commande :
    • -f/--file pour charger un fichier de scène au chargement
    • -h/--help pour afficher une aide
    • -l/--level pour définir le niveau de log :
      • 0 pour logger debug, infos, warnings et erreurs
      • 1 pour logger infos, warnings et erreurs
      • 2 pour logger warnings et erreurs
      • 3 pour logger les erreurs uniquement.
  • Maintenant les plugins sont chargés dans un thread
  • Ajout d'un bouton "Export".

Corrections

Général

  • Modification des importeurs afin de ne plus avoir de fuites de mémoires détectées par Visual Studio.

CastorUtils

  • Castor::Image a été modifiée, j'ai retiré la possibilité de charger les images par handle, car cela provoquait des problèmes avec FreeImage sur certains formats.
  • Réparation d'un problème de matrices lors du rendu des incrustations.
  • Correction des transformations récursives.

Castor3D

  • Corrections des sous-maillages ayant un matériau transparent, car ils n'étaient pas affichés.
  • Corrigé la génération de mipmaps.

CastorViewer

  • Déplacement de la destruction de m_pCastor3D dans la méthode OnDestroy.

GlRenderSystem

  • Correction d'un bug dans DoGetDeferredShaderSource.
  • Correction de la génération des mipmaps dans les classes GlStaticTexture et GlDynamicTexture.
  • Correction du traitement des textures de brillance dans les programmes GLSL auto générés.

ObjImporter

  • L'import des matériaux et textures a été corrigé.

Dépendances

  • Pour compiler CastorUtils, vous aurez besoin de FreeImage et freetype2.
  • Pour compiler Castor3D, vous aurez besoin de FreeImage, freetype2.
  • Pour compiler GlRenderSystem vous aurez besoin de OpenGL.
  • Pour compiler GuiCommon, CastorShape et CastorViewer, vous aurez besoin de wxWidgets, version 2.8.12 au minimum (testé avec les versions 2.8.12, 2.9.x et 3.0).
  • Pour compiler ASSIMPImporter, vous aurez besoin de ASSIMP.

Commentaires