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!
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.
Comments