J'ai chaque jour deux heures de train à faire, ce qui me fait deux heures de programmation grâce à mon ordinateur portable (Qui est en ce moment-même en train de régénérer ses secteurs défectueux).
Puis il faut dire que je ne consacre pas beaucoup de temps à l'étude de toute façon
Côté Ungine je suis en train de remanier la gestion des contextes OpenGL, le but étant de rendre ça thread-safe
Bon courage pour l'Ungine ^^.
Par contre, ça m'étonnerait que ton DD soit en train de 'régénérer' ses secteurs défectueux. Désolé, mais au mieux il les condamne :/. J'espère que ça touchera pas les fichiers sources...
Les fichiers sources sont stockés en trois endroits différents et indépendants, dont internet, je ne crains pas de les perdre
Sinon, il est bien possible de régénérer un secteur défectueux, à la seule condition que le problème de ce secteur soit d'ordre magnétique (Ce qui est le cas de 60% des défectuosités).
Pour plus d'informations, va donc chercher "HDD Regenerator"
Généralement les 'restaurations' ne s'emmerdent pas avec les récupérations. Elles condamnent les secteurs, d'où ma remarque. Enfin, te connaissant, je pense que tu sais déjà tout ça ^^.
De petites nouvelles sur la 0.14, pour commencer elle introduit un système d'extensions pour les modules.
Il s'agit de fonctionnalités qui n'appartiennent pas à l'interface et qui par conséquent n'ont pas d'obligation d'être présentes, mais vous pouvez vous en servir quand elles sont là.
Le système est un peu inspiré de celui d'OpenGL
La première extension est UNGINE_OPENGL_CORE.
Son rôle est de donner un accès direct à OpenGL et ses contextes, sans passer par le module graphique.
Exemple :
#include <Ungine/CoreInit.h>
#include <Ungine/Graphics.h>
#include <Ungine/Extensions/OpenGLCore.h>
int main()
{
Ungine::CoreInit core;
core->MountModule(Ungine::Module_Graphics, "UngineGraphics.dll");
if (UngineGraphics->IsExtensionSupported("UNGINE_OPENGL_CORE"))
{
Ungine::OpenGL::Core* opengl = static_cast<Ungine::OpenGLCore*>(UngineGraphics->GetExtension("UNGINE_OPENGL_CORE"));
// Diverses opérations :
// Création de contexte OpenGL
Ungine::OpenGL::Context* context = opengl->NewContext(); // Les arguments permettent de partager le contexte, ou de spécifier la version
// Récupération de la version d'OpenGL
unsigned int version = opengl->GetVersion(); // Exemple : 330 pour OpenGL 3.3
// Récupération d'une fonction OpenGL (le header GL3.h est inclut dans OpenGLCore.h)
PFNGLGENERATEMIPMAPPROC glGenerateMipmap = reinterpret_cast<PFNGLGENERATEMIPMAPPROC>(opengl->GetEntry("glGenerateMipmap"));
// Vérification de la présence d'une extension (Selon glGetString pour OpenGL 2 et glGetStringi pour OpenGL 3)
if (opengl->IsExtensionSupported("GL_EXT_texture_filter_anisotropic"))
// Récupération du niveau d'une extension (Seulement possible avec certaines extensions énumérées)
unsigned int level = opengl->GetExtensionLevel(Ungine::OpenGL::Extension_FrameBufferObject); // 0 = Pas supporté, 1 = Core, 2 = ARB, 3 = EXT, 4 = Fabricant
}
}
C'est pour l'instant un concept, je n'ai pas encore implémenté l'extension mais je pense qu'elle ressemblerait à ceci.
J'aimerais votre avis avant la sortie de la version 0.14 sur ce système
Je compte aussi refaire entièrement la partie mathématique du moteur, qui a un gros problème (Je vais en profiter pour en faire une classe inline).
Et régler ce foutu problème de caméra.
La 0.14 marque l'entrée en beta de l'Ungine, l'architecture n'est pas stable, mais les changements cassants seront de plus en plus rare j'espère.
Le moteur commence à être utilisable, même si pour le moment il manque cruellement de fonctionnalités avancées.
Enfin voila, je compte sortir cette version ce mois-ci, ça dépend aussi de mes études, et de mes parties à Dungeon & Dragons
Après plus de deux semaines sans nouvelle, un petit bulletin d'info
Je viens tout juste de remanier les Buffers (Nouvelle classe Buffer), et ça m'a fait réaliser que je maintenait une fonctionnalité qui ne marcherait jamais correctement et qui était impossible à maintenir en réalité, c'est le fait de pouvoir monter/démonter un module n'importe quand.
Il était possible de démonter et de remonter le module graphique au beau milieu d'un rendu par exemple, et donc de passer d'OpenGL à DirectX et vice-versa, mais ça faisait trop de travail pour pas grand chose.
Alors à partir de la beta, cette fonctionnalité ne sera plus implémentée, si vous déclarez un objet nécessitant le module graphique alors que celui-ci n'est pas monté, une exception sera lancée, de même si vous démontez le module graphique alors qu'il y a encore au moins un objet en ayant besoin.
Ce qui signifie qu'il sera toujours possible de changer de Renderer, mais uniquement quand aucune classe graphique (Fenêtre, buffers, textures, ..) ne sera instanciée.
Les meshs/submeshs et materials sont également en pleine refonte, la classe SubMaterial a disparue et est remplacée par Material, qui est beaucoup plus paramétrable.
Le moteur écrira un shader adapté pour chaque material.
Quant aux meshs et submesh, tout a été déplacé (Vertices, indices, animations, ..) dans la classe SubMesh, la classe Mesh ne servant plus que de container.
Le moteur supportera bientôt les animations "haut-niveau" (Par exemple, savoir que de la frame 0 à la frame 14, le personnage court).
Bref, je profite de ce passage en bêta pour refaire une bonne partie du moteur, avec une meilleure architecture qui devrait très bientôt permettre le deferred shading
C'est toujours possible à partir du moment où aucune classe graphique n'est instanciée (Exception faite des singleton comme le Renderer).
Mais je me suis bien rendu compte que ça ne servait pas vraiment à grand chose, cependant on garde l'avantage majeur de la technologie, c'est de pouvoir "utiliser" des classes dans le noyau, en fournissant leur implémentation dans un module.
Par exemple une classe Entity, utilisant la classe Model et la classe PhysObject, qui aurait besoin du module graphique et du module physique, peut exister dans le noyau et même être "utilisée" (Du point de vue du compilateur) sans implémentation, un peu comme les classes virtuelles pures
Un petit bulletin news, j'ai pris la décision récemment d'écrire l'Ungine en C++11, étant donné que la norme est finalisée et sortie, ce n'est qu'une question de temps avant que les compilateurs ne la supportent intégralement, en sachant que GCC 4.6.1 (Disponible depuis quelques jours avec MinGW sous Windows, voir ici) supporte assez bien cette nouvelle norme.
Je me suis dis que plus tôt je m'y mettais, mieux c'était.
Pour l'instant, tout le moteur utilise cette norme, ce qui signifie que l'interface n'est utilisable qu'avec un compilateur récent.
J'hésite encore à convertir l'interface en C++03, de sorte que l'Ungine (Même écrit en C++11) soit utilisable sur un compilateur pas encore à jour, avec des binaires pré-compilés.
Je remanie l'architecture des ressources, il y a maintenant un système de persistance, une ressource non-persistante est automatiquement libérée lorsque son compteur de référence atteint zéro, ce système existait déjà en beaucoup plus limité, et dépendait du ResourceManager, maintenant c'est directement dans la ressource
Exemple :
C++03:
unsigned int Mesh::GetVertexCount() const
{
unsigned int vertexCount = 0;
for (std::vector<SubMesh*>::const_iterator it = m_subMeshes.begin(); it != m_subMeshes.end(); ++it)
vertexCount += (*it)->GetVertexCount();
return vertexCount;
}
C++11:
unsigned int Mesh::GetVertexCount() const
{
unsigned int vertexCount = 0;
for (SubMesh* subMesh : m_subMeshes)
vertexCount += subMesh->GetVertexCount();
return vertexCount;
}
J'ai eu des problèmes de santé récemment, ça fait une semaine que je n'ai pas touché à mon moteur à cause de ça.
J'essaye de reprendre peu à peu.
Le nouveau système de meshs est en place, le moteur compile, le noyau est stable, il me reste encore à terminer le module graphique et j'espère pouvoir récupérer un rendu assez rapidemment.
Cependant, mes soucis ne me permettent pas de travailler comme je le voudrais, mais je fais de mon mieux
Me revoila rétabli, je progresse vis à vis de l'Ungine, mais j'ai fait une connerie avec le système de rendu (J'ai voulu remplacer les déclarations), je suis en train de réparer tout ça, au pire je remettrais quelques fichiers sur la r13.
Une fois que le rendu fonctionne à nouveau, je pense directement commencer le petit projet lié à Utopia
(Une fois la beta sortie, les commits seront beaucoup plus proches niveau temps de sortie)
J'aimerais votre avis néanmoins sur une chose, je pensais sortir la base du noyau dans une bibliothèque tierce qui serait capable alors :
De gérer les fichiers et dossiers (Noms unicodes, tailles > 4 go, gestion presque transparente du boutisme, recherche dans les dossiers, etc..)
De gérer les chaines de caractères (Classe complète, performante et gérant l'UTF-8)
De gérer les fonctions de hachages (Pour l'instant CRC32, MD5 et Whirlpool)
Gestion des bibliothèques dynamiques
Tout en étant portable, open-source et sous licence MIT (Autorisant tout)
Oh que oui, énormément de choses ont changés depuis le mois de décembre, et ça va me demander une annonce que j'envisage de faire d'ici quelques semaines, ou avant, mais juste le temps que tout soit prêt
Je vais probablement annoncer tout ça dans la semaine qui vient, depuis que mon ordinateur portable est en réparation je ne peux travailler qu'à domicile
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)