Fichier texte en cours : Programmation - Concepts.txt
- PODT : Plain Old Data Type
- un objet de classe sans constructeur, destructeurs, etc... - exemples : int, short, etc...
- Exception : une fois lancés, remontent la pile d'appels jusqu'à ce qu'ils rencontrent un système de réception (un bloc try) suivi d'un système de traitement (un ou plusieurs bloc catch)
- RAII : "Ressource Acquisition Is Initialisation"
- Pools de mémoire : se présente comme un objet auquel on peut demander de la mémoire (en précisant un nombre de bytes ou un type) et plus tard la libération de manière correcte de cette mémoire
- Fog Shader :
- il faut que la couleur du d3dDevice->Clear(...) soit la même que la couleur du fog
- Une primitive de synchronisation est un terme informatique qui désigne une instruction simple qui permet la synchronisation de processus
- Goulots d'étranglement : bottleneck [occurs when the capacity of an application or a computer system is severely limited by a single component]
- L'interblocage (de l'anglais deadlock) :
- se produit lorsque deux processus concurrents s'attendent mutuellement
- Etat zombie : désigne un processus qui s'est achevé, mais qui dispose toujours d'un identifiant de processus (PID) et reste donc encore visible dans la table des processus
- Granularité des données :
- définit la taille du plus petit élément, de la plus grande finesse d'un système
- Etats d'un processus :
- éxécuté
- prêt
- bloqué
- Normal map :
- on doit remapper les coordonnées de la texture vers les valeurs de la normal map
- Utilisation du langage Lua : pour les quêtes et les effets spéciaux (effet de particles notamment !)
- https://user.xmission.com/~legalize/book/preview/poster/index.html | la pipeline de DirectX 9.0c
- l-value : the location of a variable (storage adress)
- r-value : the content of a variable
- En C++11, on peut appeller un constructeur dans un même constructeur (Délégation du constructeur)
- En C++11, on peut initialiser les variables directement dans la déclaration de classe (Initialiseurs d'attributs)
- En C++11, on peut faire un sizeof sur une donnée membre / une méthode de classe
- En C++11, on peut définir un tableau à la volée avec std::initializer_list
- Obtenir la position de la caméra avec une View matrix :
- if you invert the view matrix, the last column of the resulting matrix (or row, depending on convention) should then contain the camera position
- Licence BSD : l'utilisateur peut faire ce qu'il veut du logiciel. Il juste faut mentionner le nom du propriétaire
- GNU is Not UNIX
- Solaris : un UNIX du marché des serveurs
- DAEMON : Disk And Execution MONitor
- PXE : Environnement de Pré-eXécution (pour booter un OS depuis le réseau !)
- Il existe dans le BIOS, une option qui permet d'accélération l'exécution d'une VM pour les CPUs 64 bits
- Pour faire booter une image sur une clé USB, on peut utiliser Win32 Disk Imager ou alors sous linux :
dd if=FichierImage.img of=/dev/da0 bs=64k
- UFS : Unix File System
- Une partition étendue peut être subdivisée en plusieurs partitions logiques
- Le programme easy BCD permet de restaurer la configuration de boot pour Windows *
- /boot/grub/menu.lst : permet de configurer le mode de fonctionnement de GRUB
- whereis : recherche le chemin d'accès vers un exécutable, une page de manuel ou un port
- cat -n fichier : affiche le contenu du fichier en numérotant les lignes
- client léger : un ordinateur qui, dans une architecture client-serveur, n'a presque pas de logique d'application.
Il dépend donc surtout du serveur central pour le traitement
- /usr/local/etc/dhcpd.conf : permet de configurer le Daemon DHCP
- To log in signifie "se faufiler à l'intérieur"
- std::thread_local : permet de faire déclarer une variable singulière dans une procédure thread
- C++11 : "using" alias de template !
- C++11 : on peut désormais utiliser les templates à paramètres variables !
- Pour obtenir un vecteur colinéaire avec le vecteur LookAt de la caméra, on peut faire CameraPosition - LePointDesiré
- getter : accesseurs ; setters : mutateurs
- getElementsByTagName() : retourne un tableau de tous les éléments du type spécifié !
- hlsl max intrisic function : selects the greater of x and y
- shininess : brillance
- on peut accéder aux éléments d'une matrice HLSL par : ._m
- To define a vector, you take the end point and subtract the starting point
- Phong shading <=> per pixel lighting <=> per-fragment lighting
- Shaders (Cg) : mot clé "uniform" => la variable déclarée est constante dans le tout le programme (toutes variables déclarées sont considérées comme uniform)
- Shaders (HLSL) : shared => la variable est partagée entre plusieurs fichiers .fx shaders
- Shaders input modifiers des paramètres de fonctions : in, inout, out, uniform
- Shaders : on peut utiliser le type "half" qui porte 16 bits
- Cluster (grappe de calcul) : une grappe de serveurs est un groupe de serveurs indépendants fonctionnant comme un seul et même système (constituées de nuds de calcul) - comme un seul ordinateur ayant plus de performances !
- Multitâche préemptif : l'ordonnanceur peut interrompre à tout moment une tâche en cours d'exécution
- Multitâche coopératif : les tâches doivent être écrites de manière à coopérer les unes avec les autres et ainsi accepter leur suspension
- Deux types de noyaux : monolithiques et micro-noyaux (différentes en termes de conception)
- IPC : Communication inter-processus
- Filtrage bilinéaire : un algorithme utilisé en infographie permettant de calculer des pixels intermédiaires entre les pixels d'une image ou d'une texture que l'on change de taille
- Spline : une fonction définie par morceaux par des polynômes
- Interpolation polynomiale : technique d'interpolation d'un ensemble de données ou d'une fonction par un polynôme ; on cherche un polynôme qui passe par tout un ensemble de points
- Vulkan : nouvelle API graphique sortie au début 2016. Elle permet d'utiliser de manière optimisée les différents coeurs de processeurs. Elle utilise moins de ressource CPU que les autres API.
- La « scalabilité » est la capacité d'un dispositif informatique à s'adapter au rythme de la demande
- C++11 : std::to_string(1234.56);
- std::boolalpha : permet de spécifier la forme d'affichage d'un booléen
- std::numeric_limits::max() : permet d'afficher le nombre maximale de valeurs que peut atteindre un certain type
- HLSL mix() : effectue une interpolation linéaire
- Remember that DirectX utilizes a left-handed coordinate system
- DWORD* indices = new DWORD[numTriangles*3];
- Point par pouce (DPI) : Dot Per Inch ; le pouce est une unité de mesure britannique qui vaut à peu près 2,54 cm ; plus la résolution est élevée, plus les points sont nombreux
- On peut comparer la norme de deux vecteurs avec leur longueur (distance depuis l'origine) au carré !
- swscanf (version wide) : utile pour analyser des types non-chaîne de caractères rapidement dans un autre type !
- Euler angle :
- x = cos(yaw) * cos(pitch) - y = sin(pitch) - z = sin(yaw) * cos(pitch)
- changer le projet en mode fenêtre uniquement ou avec console :
- options du projet --> Linker --> System --> changer "Console (/SUBSYSTEM:CONSOLE)" en "Windows (/SUBSYSTEM:WINDOWS)"
- la fonction D3DX D3DXMatrixDecompose sert à décomposer une matrice en ses composants de rotation, de translation et de scaling
- DOM : Document Object Model. Définit une méthode standard pour accéder à des données et pour les manipuler
- 8 render targets can be bound simultaneously on DirectX
- WPF : Windows Presentation Foundation (WPF) (nom de code Avalon) est la spécification graphique de Microsoft .NET 3.0. Il intègre le langage descriptif XAML qui permet de l'utiliser d'une manière proche d'une page HTML pour les développeurs
- Programmation impérative : décrit les opérations en séquences d'instructions exécutées par l'ordinateur pour modifier l'état du programme (se différencie de la programmation déclarative)
- Tangente d'un angle est le rapport de la longueur du côté opposé à la longueur du côté adjacent (= op / adj ; = sin / cos)
- discard HLSL keyword : do not output the current value of the pixel
- Le BOM c'est un caractère unicode placé tout au début de ton fichier (invisible bien entendu), qui indique que ton fichier est encodé en UTF-X (8, 16 ou 32)
- ancienne pipeline de rendu 3D : FFP
- GL_QUADS et autres ne sont que des émulations via des constructions de plusieurs triangles, d'où leur coût de traitement plus élevé
- Le vertex shader est exécuté pour chaque sommet Le fragment shader est exécuté sur chaque pixel dessiné
- Pixelisation des triangles : c'est le moment où une forme géométrique est convertie en pixels.
- Normal mapping :
- la conversion d'un texel en normal donne : normal = (2*color)-1 // on each component
- dans l'espace tangent, on a besoin de 3 vecteurs
- la méthode standard est dorienter la tangente dans la même direction que les coordonnées de textures
- il nous faut une matrice qui nous permet de passer de lespace tangent à lespace modèle (appelée matrice TBN)
- une matrice orthogonale (où chaque vecteur est perpendiculaire aux autres) ; son inverse est aussi sa transposée !!
- ID3D10StateBlock : an interface that encapsulates render states.
- FPU : floating point unit -- unité capable du traitement des opérations numériques à virgule flottante
- stoi : string to int
- C++ :
- std::function f = std::bind(add, 1, std::placeholders::_1); ---- lie une fonction
- #pragma message("A message!") ---- affiche un message lors de la compilation
- [maxvertexcount(NumVerts)] : déclaration du nombre maximum d'élements de vertice à créer
- PrimitiveType : point, line, triangle, lineadj, triangleadj
- NumElements : taille du tableau d'entrée, exemple : 1 vertice pour un point, 2 vertice pour une ligne, etc...
- std::queue : l'insertion d'élément s'effectue toujours à l'arrière de la queue, et la suppression au devant de la queue
- std::stack : l'insertion et la suppression d'élément s'effectue toujours dans le haut de la stack (ie : top())
- std::list : liste chaînée dans laquelle les éléments ne sont pas inséré de manière contigüe dans la liste !
- Une instruction en langage machine est égale à la taille d'un mot mémoire
- un mot est une unité de base manipulée par un microprocesseur
- HLSL :
- distance(x, y) : retourne la distance scalaire entre les deux vecteurs
- length(x) : retourne la norme du vecteur (longueur scalaire)
- D3D10_TEXTURE_ADDRESS_MODE :
- D3D11_TEXTURE_ADDRESS_WRAP : tile the texture at every (u,v) integer junction - D3D11_TEXTURE_ADDRESS_MIRROR : flip the texture at every (u,v) integer junction - D3D11_TEXTURE_ADDRESS_CLAMP : texture coordinates outside the range [0.0, 1.0] are set to the texture color at 0.0 or 1.0, respectively - D3D11_TEXTURE_ADDRESS_BORDER : texture coordinates outside the range [0.0, 1.0] are set to the border color - D3D11_TEXTURE_ADDRESS_MIRROR_ONCE : takes the absolute value of the texture coordinate (thus, mirroring around 0), and then clamps to the maximum value
- Alignement en mémoire :
- concerne les multiples d'adresse mémoire - permet l'optimisation - nécessite parfois l'ajout d'une donnée membre de "padding" afin de considérer la structure (par exemple) comme facilement accessible par le processeur - sur ma machine la structure doit faire un multiple de 16 en bytes
- D3D10_USAGE :
- D3D10_USAGE_DEFAULT : read and write access by the GPU - D3D10_USAGE_IMMUTABLE : can only be read by the GPU - D3D10_USAGE_DYNAMIC : CPU Write & GPU Read - D3D10_USAGE_STAGING : CPU & GPU read and write
- on peut créer un buffer directx avec D3D10_USAGE_STAGING mais il faut mettre le MiscFlags à 0.
- on ne peut pas changer directement la taille d'un buffer directx avec buffer->Map(), il faut le recréer.
- on peut effectuer un clip plane avec la donnée SV_ClipDistance dans le pixel shader.
- seamless texture : il s'agit d'une texture qui n'a pas de bords adjoints sans raccords ; c'est une texture répétable
- dans l'espace de vue (ViewMatrix), la caméra est positionnée à l'origine