C++ OpenGL ES Viewer i C#
OK så för denna tutorial jag kommer att förklara i detalj hur man kan ställa en Xamarin C#-program som körs på WP 8.1, Windows 8.1 (store), Android och iOS * och mycket huvudsakligen använder OpenGL ES 2.0 visningar drivs av C++-återgivningstilläggen. Detta är något som jag nyligen för att genomföra ett projekt av mitt eget och jag är säker några andra kanske tycker det är praktiskt. I själva verket hittat jag redan redan någon på Xamarin forum som behöver detta.
Anledningen till man skulle vilja göra detta är ganska uppenbart. Jag menar en hel del OpenGL ES koden är skriven i C++ och alla större plattformar stöder nu det genom C++. Detta inkluderar Windows Store och Windows Phone med de senaste framstegen inom projektet vinkel. I många fall skulle prestanda fördel för C++ över C# också vara mycket fördelaktigt i detta område. OpenTK på alla plattformar utom Fönstren och kära (som använder vinkel och inte har OpenTK stöd ännu) verkar vara det viktigaste sättet att utnyttja OpenGL från C# men tyvärr som jag redan har nämnt, den är inte tillgänglig på icke-desktop Windows plattformar. Dessutom som jag förstår det, OpenTK använder P/Invoke vilket är bra men med omordning involverad kunde se en allvarlig prestanda minskar när du kör en renderare i C# vs C++ när det finns en hel del OGL samtal och en hel del data skiftande (och därför konvertering) inblandade.
Nu den uppenbara frågan kan vara, varför inte bara använda C++ i hela? Svaret på detta, som många av er läser detta förmodligen redan vet är eftersom det inte är riktigt så rakt fram. En av de största fördelarna med att använda C# jämfört med C++ för plattformsoberoende projekt är naturligtvis Xamarin och Xamarin.Forms** som tillåter oss att skapa inhemska UIs på alla plattformar utan att egentligen behöva göra mycket plattformar specifika arbete, särskilt när din endast arbetar med standardkontroller. Tyvärr måste du skriva implementationer för GLES Visa kontrollerna separat för varje plattform, men när du har dem vi kan återanvända dem så mycket som vi gillar. Att komma tillbaka till min historia, det enda sättet jag känner till skall kunna få något som detta i C++ är genom Qt och som egentligen bara skapar plattformsagnostiska program som är utformade stil för att antingen se ut som operativsystem som vid tiden för utveckling eller bara med ett generiskt konstverk som slags tittade på de olika plattformarna på skapandet. Inte något som du vill... För övrigt vet jag inte om något som också stöder Windows (butik och telefon). Också, Qt inte ger någon form av native Windows Phone-ish styling på i skrivande stund... Slutligen är använder C++ för allmänna plattformsoberoende utveckling inte heller riktigt lika bekväm att använda heller så att underhålla som C# med Xamarin som ger en mycket stor mängd kod dela. Dessutom tror jag de flesta av er håller att använda C# är bara helt enkelt trevligare med C++ på flera sätt. Vi vill därför egentligen bara C++ att göra 3D-rendering och förmodligen scen konstruktion och manipulation men vi vill inte det nära andra delar av programmet för att undvika vissa allvarliga frustration för de flesta.
* För närvarande jag inte kan genomföra den iOS delen på grund av Mac-hårdvara men du kan se sidan dedikerad steg för mer detaljer om vad du kan fortfarande försöka göra.
** För närvarande Xamarin.Forms fungerar inte för Android på VS 2015 gemenskapen RC och jag kunde därför inte genomföra Xamarin.Forms men du kan se sidan dedikerad steg för mer detaljer på vad du kan fortfarande försöka göra.