Planifier votre projet de portage d’OpenGL ES 2.0 vers Direct3DPlan your port from OpenGL ES 2.0 to Direct3D

API importantesImportant APIs

Si vous portez un jeu à partir des plateformes iOS ou Android, vous avez probablement effectué un investissement considérable dans OpenGL ES 2.0.If you are porting a game from the iOS or Android platforms, you have probably made a significant investment in OpenGL ES 2.0. Avant de déplacer le code base de votre pipeline graphique vers Direct3D 11 et le Windows Runtime, certains points sont à prendre en compte.When preparing to move your graphics pipeline codebase to Direct3D 11 and the Windows Runtime, there are a few things you should consider before you start.

La plupart des efforts de portage concernent généralement le passage du code base et le mappage des API et modèles courants entre les deux modèles.Most porting efforts usually involving initially walking the codebase and mapping common APIs and patterns between the two models. Vous trouverez ce processus un peu plus simple après avoir lu cette rubrique.You'll find this process a bit easier if you take some time to read and review this topic.

Voici certains points à prendre en considération dans le portage des graphiques d’OpenGL ES 2.0 vers Direct3D 11.Here are some things to be aware of when porting graphics from OpenGL ES 2.0 to Direct3D 11.

Remarques sur les fournisseurs OpenGL ES 2.0 spécifiquesNotes on specific OpenGL ES 2.0 providers

Les rubriques qui abordent le portage dans cette section font référence à l’implémentation Windows des spécifications OpenGL ES 2.0 créées par Khronos Group.The porting topics in this section reference the Windows implementation of the OpenGL ES 2.0 specification created by the Khronos Group. Tous les exemples de code OpenGL ES 2.0 ont été développés à l’aide de Visual Studio 2012 et de la syntaxe C Windows de base.All OpenGL ES 2.0 code samples were developed using Visual Studio 2012 and basic Windows C syntax. Si vous effectuez un portage à partir d’un code base Objective-C (iOS) ou Java (Android), les exemples de code OpenGL ES 2.0 peuvent ne pas utiliser la même syntaxe ou les mêmes paramètres d’appel des API.If you are coming from an Objective-C (iOS) or Java (Android) codebase, be aware that the provided OpenGL ES 2.0 code samples may not use similar API calling syntax or parameters. Ces recommandations tentent d’adopter un point de vue aussi indépendant que possible du type de plateforme utilisé.This guidance tries to stay as platform agnostic as possible.

Cette documentation n’utilise que les API de spécification 2.0 pour le code et les références OpenGL ES.This documentation only uses the 2.0 specification APIs for the OpenGL ES code and reference. Si vous effectuez un portage à partir d’OpenGL ES 1.1 ou 3.0, ce contenu peut vous être utile, mais certains des exemples de code ou de contexte OpenGL ES 2.0 ne vous seront peut-être pas familiers.If you are porting from OpenGL ES 1.1 or 3.0, this content can still prove useful, although some of the OpenGL ES 2.0 code examples and context may be unfamiliar.

Les exemples Direct3D 11 de ces rubriques utilisent Microsoft Windows C++ avec extensions de composant (CX).The Direct3D 11 samples in these topics use Microsoft Windows C++ with Component Extensions (CX). Pour plus d’informations sur cette version de la syntaxe C++, consultez Visual C++, extensions de composant pour les plateformes Runtimeet aide-mémoire (C++ \ CX).For more info on this version of the C++ syntax, read Visual C++, Component Extensions for Runtime Platforms, and Quick Reference (C++\CX).

Explorer la configuration requise et vos ressources matériellesUnderstand your hardware requirements and resources

L’ensemble des fonctionnalités de traitement graphique prises en charge par OpenGL ES 2.0 correspondent à peu près aux fonctionnalités fournies dans Direct3D 9.1.The set of graphics processing features supported by OpenGL ES 2.0 roughly maps to the features provided in Direct3D 9.1. Si vous voulez tirer parti des fonctionnalités plus avancées proposées dans Direct3D 11, consultez la documentation Direct3D 11 au moment de planifier votre portage ou les rubriques Portage de DirectX 9 vers le Windows Store une fois la mise en place terminée.If you want to take advantage of the more advanced features provided in Direct3D 11, review the Direct3D 11 documentation when planning your port, or review the Port from DirectX 9 to Universal Windows Platform (UWP) topics when you're done with the initial effort.

Pour simplifier la mise en place de votre portage, commencez avec un modèle Visual Studio Direct3D.To make your initial porting effort simple, start with a Visual Studio Direct3D template. Il fournit un rendu basique pré-configuré et prend en charge des fonctionnalités d’application Windows Store comme la recréation de ressources suite à des modifications de fenêtre et les niveaux de fonctionnalité Direct3D.It provides a basic renderer already configured for you, and supports UWP app features like recreating resources on window changes and Direct3D feature levels.

Explorer les niveaux de fonctionnalité Direct3DUnderstand Direct3D feature levels

Direct3D 11 prend en charge le matériel « niveaux de fonctionnalité » de 9 _ 1 (Direct3D 9,1) pour 11 _ 1.Direct3D 11 provides support for hardware "feature levels" from 9_1 (Direct3D 9.1) for 11_1. Ces niveaux de fonctionnalité indiquent la disponibilité de certaines fonctionnalités et ressources graphiques.These feature levels indicate the availability of certain graphics features and resources. En règle générale, la plupart des plateformes OpenGL ES 2,0 prennent en charge un ensemble de fonctionnalités Direct3D 9,1 (Feature Level 9 _ 1).Typically, most OpenGL ES 2.0 platforms support a Direct3D 9.1 (feature level 9_1) set of features.

Parcourir les fonctionnalités graphiques et les API DirectXReview DirectX graphics features and APIs

Famille d’APIAPI Family DescriptionDescription
DXGIDXGI L’infrastructure DXGI (DirectX Graphics Infrastructure) constitue une interface entre le matériel vidéo et Direct3D.The DirectX Graphics Infrastructure (DXGI) provides an interface between the graphics hardware and Direct3D. Il définit l’adaptateur pour appareil mobile et la configuration matérielle à l’aide des interfaces COM IDXGIAdapter et IDXGIDevice1 .It sets the device adapter and hardware configuration using the IDXGIAdapter and IDXGIDevice1 COM interfaces. Utilisez-la pour créer et configurer vos tampons et autres ressources Windows.Use it to create and configure your buffers and other window resources. De toute évidence, le modèle de fabrique IDXGIFactory2 est utilisé pour acquérir des ressources graphiques, y compris la chaîne de permutation (ensemble de tampons de trame).Notably, the IDXGIFactory2 factory pattern iis used to acquire the graphics resources, including the swap chain (a set of frame buffers). Dans la mesure où DXGI détient la chaîne de permutation, l’interface IDXGISwapChain1 sert à présenter les trames à l’écran.Since DXGI owns the swap chain, the IDXGISwapChain1 interface is used to present frames to the screen.
Direct3DDirect3D Direct3D est l’ensemble d’API qui fournit une représentation virtuelle de l’interface graphique et vous permet de dessiner des graphiques.Direct3D is the set of APIs that provide a virtual representation of the graphics interface and allow you to draw graphics using it. Version 11 est à peu près comparable à OpenGL 4.3 du point de vue des fonctionnalités.Version 11, is roughly comparable, feature-wise, to OpenGL 4.3. (OpenGL ES 2.0, pour sa part, est similaire à DirectX9, du point de vue des fonctionnalités, et à OpenGL 2.0, mais accompagné du pipeline nuanceur unifié d’OpenGL 3.0). Une grande partie du travail est effectuée dans les interfaces ID3D11Device1 et ID3D11DeviceContext1 qui fournissent respectivement un accès aux ressources et sous-ressources individuelles, et au contexte de rendu.(OpenGL ES 2.0, on the other hand, is similar to DirectX9, feature-wise, and OpenGL 2.0, but with OpenGL 3.0's unified shader pipeline.) Most of the heavy lifting is done with the ID3D11Device1 and ID3D11DeviceContext1 interfaces which provide access to individual resources and subresources, and the rendering context, respectively.
Direct2DDirect2D Direct2D fournit un ensemble d’API pour le rendu 2D à accélération graphique.Direct2D provides a set of APIs for GPU-accelerated 2D rendering. Sa fonction est comparable à celle d’OpenVG.It can be considered similar in purpose to OpenVG.
DirectWriteDirectWrite DirectWrite fournit un ensemble d’API pour le rendu de polices haute qualité, à accélération graphique.DirectWrite provides a set of APIs for GPU-accelerated, high-quality font rendering.
DirectXMathDirectXMath DirectXMath fournit un ensemble d’API et de macros pour la gestion des types, valeurs et fonctions courants d’algèbre linéaire et de trigonométrie.DirectXMath provides a set of APIs and macros for handling common linear algebra and trigonometric types, values, and functions. Ces types et fonctions sont conçus pour fonctionner correctement avec Direct3D et ses opérations de nuanceur.These types and functions are designed to work well with Direct3D and its shader operations.
DirectX HLSLDirectX HLSL Syntaxe HLSL actuelle utilisée par les nuanceurs Direct3D.The current HLSL syntax used by Direct3D shaders. Elle implémente le modèle de nuanceur 5.0 de Direct3D.It implements Direct3D Shader Model 5.0.

 

Parcourir les API et la bibliothèque de modèles de Windows RuntimeReview the Windows Runtime APIs and template library

Les API Windows Runtime fournissent l’infrastructure générale des applications UWP.The Windows Runtime APIs provide the overall infrastructure for UWP apps. Parcourez-les ici.Review them here.

Les API Windows Runtime essentielles utilisées dans le portage de votre pipeline graphique sont notamment les suivantes :Key Windows Runtime APIs used in porting your graphics pipeline include:

Par ailleurs, la bibliothèque de modèles C++ Windows Runtime (WRL) est une bibliothèque de modèles qui fournit un moyen de bas niveau pour créer et utiliser des composants Windows Runtime.Additionally, the Windows Runtime C++ Template Library (WRL) is a template library that provides a low-level way to author and use Windows Runtime components. Les API Direct3D 11 pour les applications Windows Store doivent être utilisées de préférence avec les interfaces et types de cette bibliothèque, comme les pointeurs intelligents (ComPtr).The Direct3D 11 APIs for UWP apps are best used in conjunctions with the interfaces and types in this library, such as smart pointers (ComPtr). Pour plus d’informations sur WRL, voir Bibliothèque de modèles C++ Windows Runtime (WRL).For more info on the WRL, read Windows Runtime C++ Template Library (WRL).

Changer votre système de coordonnéesChange your coordinate system

La différence qui perturbe parfois les premiers efforts de portage est le passage d’un système de coordonnées droitier traditionnel d’OpenGL au système de coordonnées gaucher par défaut de Direct3D.One difference that sometimes confuses early port efforts is the change from OpenGL's traditional right-handed coordinate system to Direct3D's default left-handed coordinate system. Ce changement de modélisation des coordonnées affecte plusieurs parties de votre jeu, depuis l’installation et la configuration de vos tampons de vertex jusqu’à de nombreuses fonctions mathématiques de votre matrice.This change in coordinate modeling affects many parts of your game, from the setup and configuration of your vertex buffers to many of your matrix math functions. Les deux changements les plus importants à effectuer sont les suivants :The two most important changes to make are:

  • Inversez l’ordre des vertex des triangles de sorte que Direct3D les parcoure dans le sens des aiguilles d’une montre depuis l’avant.Flip the order of triangle vertices so that Direct3D traverses them clockwise from the front. Par exemple, si vos vertex sont indexés en tant que 0, 1 et 2 dans votre pipeline OpenGL, passez-les à Direct3D en tant que 0, 2, 1.For example, if your vertices are indexed as 0, 1, and 2 in your OpenGL pipeline, pass them to Direct3D as 0, 2, 1 instead.
  • Utilisez la matrice globale pour la mise à l’échelle de l’espace du monde à -1.0f dans la direction de l’axe z, en inversant les coordonnées de l’axe z.Use the view matrix to scale world space by -1.0f in the z direction, effectively reversing the z-axis coordinates. Pour ce faire, inversez le signe des valeurs des positions M31, M32 et M33 dans votre matrice globale (lors de son portage vers le type Matrix).To do this, flip the sign of the values at positions M31, M32, and M33 in your view matrix (when porting it to the Matrix type). Si M34 n’est pas égal à zéro, inversez aussi son signe.If M34 is not 0, flip its sign as well.

Toutefois, Direct3D peut prendre en charge un système de coordonnées droitier.However, Direct3D can support a right-handed coordinate system. DirectXMath fournit un nombre de fonctions compatibles avec les systèmes de coordonnées droitier et gaucher.DirectXMath provides a number of functions that operate on and across both left-handed and right-handed coordinate systems. Elles peuvent être utilisées pour préserver certaines de vos données de maillage d’origine et le traitement des matrices.They can be used to preserve some of your original mesh data and matrix processing. Elles comprennent :They include:

Fonction de matrice DirectXMathDirectXMath matrix function DescriptionDescription
XMMatrixLookAtLHXMMatrixLookAtLH Crée une matrice globale pour un système de coordonnées gaucher à l’aide d’une position de caméra, une direction vers le haut et un point focal.Builds a view matrix for a left-handed coordinate system using a camera position, an up direction, and a focal point.
XMMatrixLookAtRHXMMatrixLookAtRH Crée une matrice globale pour un système de coordonnées droitier à l’aide d’une position de caméra, une direction vers le haut et un point focal.Builds a view matrix for a right-handed coordinate system using a camera position, an up direction, and a focal point.
XMMatrixLookToLHXMMatrixLookToLH Crée une matrice globale pour un système de coordonnées gaucher à l’aide d’une position de caméra, une direction vers le haut et une direction de caméra.Builds a view matrix for a left-handed coordinate system using a camera position, an up direction, and a camera direction.
XMMatrixLookToRHXMMatrixLookToRH Crée une matrice globale pour un système de coordonnées droitier à l’aide d’une position de caméra, une direction vers le haut et une direction de caméra.Builds a view matrix for a right-handed coordinate system using a camera position, an up direction, and a camera direction.
XMMatrixOrthographicLHXMMatrixOrthographicLH Crée une matrice de projection orthogonale pour un système de coordonnées gaucher.Builds an orthogonal projection matrix for a left-handed coordinate system.
XMMatrixOrthographicOffCenterLHXMMatrixOrthographicOffCenterLH Crée une matrice de projection orthogonale personnalisée pour un système de coordonnées gaucher.Builds a custom orthogonal projection matrix for a left-handed coordinate system.
XMMatrixOrthographicOffCenterRHXMMatrixOrthographicOffCenterRH Crée une matrice de projection orthogonale personnalisée pour un système de coordonnées droitier.Builds a custom orthogonal projection matrix for a right-handed coordinate system.
XMMatrixOrthographicRHXMMatrixOrthographicRH Crée une matrice de projection orthogonale pour un système de coordonnées droitier.Builds an orthogonal projection matrix for a right-handed coordinate system.
XMMatrixPerspectiveFovLHXMMatrixPerspectiveFovLH Crée une matrice de projection de perspective pour un système gaucher en fonction d’un champ de vue.Builds a left-handed perspective projection matrix based on a field of view.
XMMatrixPerspectiveFovRHXMMatrixPerspectiveFovRH Crée une matrice de projection de perspective pour un système droitier en fonction d’un champ de vue.Builds a right-handed perspective projection matrix based on a field of view.
XMMatrixPerspectiveLHXMMatrixPerspectiveLH Crée une matrice de projection de perspective pour un système gaucher.Builds a left-handed perspective projection matrix.
XMMatrixPerspectiveOffCenterLHXMMatrixPerspectiveOffCenterLH Crée une version personnalisée d’une matrice de projection de perspective pour un système gaucher.Builds a custom version of a left-handed perspective projection matrix.
XMMatrixPerspectiveOffCenterRHXMMatrixPerspectiveOffCenterRH Crée une version personnalisée d’une matrice de projection de perspective pour un système droitier.Builds a custom version of a right-handed perspective projection matrix.
XMMatrixPerspectiveRHXMMatrixPerspectiveRH Crée une matrice de projection de perspective pour un système droitier.Builds a right-handed perspective projection matrix.

 

Portage OpenGL ES 2.0 vers Direct3D 11 : Forum Aux QuestionsOpenGL ES2.0-to-Direct3D 11 porting Frequently Asked Questions

  • Question : « En général, puis-je rechercher des chaînes ou modèles dans mon code OpenGL et les remplacer par les équivalents Direct3D ? »Question: "In general, can I search for certain strings or patterns in my OpenGL code and replace them with the Direct3D equivalents?"
  • Réponse : non.Answer: No. OpenGL ES 2.0 et Direct3D 11 sont issus de différentes générations de modélisation de pipeline graphique.OpenGL ES 2.0 and Direct3D 11 come from different generations of graphics pipeline modeling. Bien qu’il existe certaines similarités superficielles entre les concepts et les API, telles que le contexte de rendu et l’instanciation des nuanceurs, vous pouvez consulter ces recommandations ainsi que les informations de référence sur Direct3D 11 pour vous aider à faire les meilleurs choix lors de la recréation de votre pipeline au lieu de tenter un mappage 1 à 1.While there are some surface similarities between concepts and APIs, such as the rendering context and the instancing of shaders, you should review this guidance as well as the Direct3D 11 reference so you can make the best choices when recreating your pipeline instead of attempting a 1-to-1 mapping. Toutefois, si vous effectuez un portage de GLSL à HLSL, la création d’un ensemble d’alias communs pour les variables, les intrinsèques et les fonctions GLSL peut non seulement simplifier le portage, mais aussi vous permettre de maintenir un seul ensemble de fichiers de code de nuanceur.However, if you are porting from GLSL to HLSL, creating a set of common aliases for GLSL variables, intrinsincs, and functions can not only make porting easier, it allows you to maintain only one set of shader code files.