Reducerea SharpDX (ansamblul principal, nu proiectul) · Problema # 398 · sharpdxSharpDX · GitHub

Comentarii

Copiați linkul Citat răspuns

sharpdx

Patogen David comentat 26 mai 2014

În primul rând, îmi cer scuze dacă s-a mai discutat despre acest lucru sau dacă există deja un efort continuu pentru a face ceea ce descriu. Nu am putut găsi nimic legat de asta.

În al doilea rând, postez mai ales acest lucru, deoarece oricum fac aceste modificări la o versiune personală a SharpDX. Am crezut că ar trebui să încep o discuție pentru a determina dacă ar trebui să fac modificările mele într-un mod care să le permită să fie integrate la depozitul principal SharpDX la un moment dat. Îmi dau seama că ceea ce propun este o schimbare într-o oarecare măsură, dar m-am gândit că ar trebui să spun ceva în cazul în care Alexandre lucrează deja la ceva similar la Silicon Studio sau există un interes general în acest sens.

SharpDX se face publicitate ca „un proiect open-source care furnizează API-ul DirectX complet sub platforma .Net”. În timp ce SharpDX îndeplinește cu siguranță acest obiectiv, acesta vine, de asemenea, cu o tonă de cod utilitar pentru a facilita dezvoltarea mai ușoară a aplicațiilor grafice. Cele mai multe dintre acestea sunt SharpDX Toolkit, dar există încă o mare parte din ansamblurile principale SharpDX.

Acest cod inutil pare să provină din trei locații principale:

  1. Lucruri suplimentare de matematică care au fost aduse la adăugarea bibliotecii de matematică SlimDX. Acestea sunt tipuri care pot fi utile pentru matematica 3D, dar care nu sunt niciodată utilizate de niciunul dintre ansamblurile de legare. (Exemplu: unghi)
  2. Cod utilitar care servește utilizări interne restrânse pentru Toolkit. (Exemplu: TaskUtil)
  3. Cod general de utilitate pentru a ușura anumite lucruri (Exemplu: RandomUtil)

De exemplu, următoarele fișiere nu sunt necesare pentru construirea și utilizarea legărilor SharpDX:

S-ar putea să fie mai multe, dar acestea sunt ceea ce am găsit în timp ce slăbeam SharpDX pentru propriul meu proiect. Am stabilit mai mult sau mai puțin acest lucru printr-o combinație a instrumentului „Găsiți toate referințele” din Visual Studio și eliminând + re-adăugând lucruri în timp ce construiți pentru fiecare platformă țintă. Am eliminat, de asemenea, o mare parte din interdependențele dintre biții bibliotecii matematice și orice folosind serializarea pur și simplu pentru a face lucrurile oase goale.

Propunerea mea ar fi:

  • Mutați toate structurile/clasele legate de matematică într-un ansamblu SharpDX.Math. (Continuarea utilizării potențiale a namespce-ului SharpDX pentru a preveni ruperea aplicațiilor tatălui decât o referință bibliotecă lipsă.)
  • Mutați serializarea într-un ansamblu separat. (Acest lucru s-ar putea să nu fie foarte realist, dar ar fi bine să includeți o bibliotecă de legare DirectX fără a obține, de asemenea, o bibliotecă de serializare.)
  • Mutați utilitățile Direct3D într-un ansamblu separat. (Păstrați lucrurile grafice separate.)
  • Mutați clasele multimedia într-un ansamblu separat. (Păstrați lucrurile audio separate.)
  • Mutați toate lucrurile generale de utilitate în SharpDX.Toolkit.Utilities
  • Mutați lucrurile mai potrivite pentru toolkit (SharpDX.Windows) în noua bibliotecă Toolkit.
  • Separați setul de instrumente într-un depozit complet separat (similar cu modul în care mostrele sunt complet separate.)

Motivațiile personale principale pentru acest lucru sunt:

  • Pentru a îmbunătăți consistența diviziei SharpDX/Toolkit
  • Scoateți bagajele inutile din ansamblul de bază. (Deci, de exemplu, puteți utiliza DirectX11 fără un ansamblu care include, de asemenea, o grămadă de lucruri audio.)
  • Îmbunătățiți separarea intereselor în baza de cod.
  • Faceți-o astfel încât un proiect să poată integra SharpDX mai ușor fără a utiliza biblioteca matematică SharpDX. (Aceasta este cea mai mare motivație a mea, principalul beneficiu al acestui lucru este pentru motoarele de jocuri pe mai multe platforme care nu doresc să se bazeze pe o altă implementare matematică. Din păcate, C # nu vă lasă să fudgeți acest lucru folosind proiecte hacky precum SharpDX: Culoare * c = (SharpDX: Culoare _) (void _) & myColorThatHasSameMemoryLayout; deci nu există proiecte „gratuite”.)

Cred că obiectivul general este de a face SharpDX mai mult dintr-o legare gestionată direct de DirectX, mai degrabă decât „legarea gestionată DirectX (Și mai mult!)” Că este chiar acum.

Încă o dată, nu postez acest număr, deoarece încerc să vă spun cum să vă întrețineți biblioteca. Îl postez pentru că, dacă este ceva ce doresc întreținătorii principali, sunt dispus să depun mai mult efort în „a face bine”, mai degrabă decât să-mi fac propriul furcul personalizat al SharpDX.