Eto: دعم عنصر التحكم في عرض OpenGL.

تم إنشاؤها على ١٧ يوليو ٢٠١٢  ·  23تعليقات  ·  مصدر: picoe/Eto

باختصار: هل هناك أي نوع من التحكم في عرض OpenGL مخطط يتم استخدامه مع OpenTK؟

enhancement help wanted

التعليق الأكثر فائدة

أي تحديث عن عنصر تحكم OpenGL لـ eto؟

ال 23 كومينتر

لم يكن مخططًا له على وجه التحديد ، ولكن من السهل القيام به. يبدو أن OpenTK حاصل على ترخيص من معهد ماساتشوستس للتكنولوجيا ، لذا فهو مناسب تمامًا لنماذج Eto.Forms.

قد تكون هناك بعض التعقيدات ، حيث سيتعين عليك تجميع تطبيقك بمراجع مختلفة بناءً على النظام الأساسي المستهدف ، ما لم يكن لدى Eto.Forms غلاف من أنواع حول OpenTK ، وهو ما لا أرغب في القيام به بالضرورة.

لقد لاحظت أن لديك مكتبات DLL منفصلة لنظام التشغيل Windows و Gtk و Mac ، ولا يمكن أن يكون هذا هو المكان الذي يتم فيه وضع التعليمات البرمجية الخاصة بالمنصة.
لاستخدام OpenTK ، ستحتاج إلى الإشارة إلى OpenTK.dll بنظام أساسي مشترك واحد مستقل ومنصة واحدة محددة يمكن إضافة رمزها إلى Eto.Platform. *. dll الحالي نظرًا لأن هؤلاء على الأرجح يحتويون بالفعل على المراجع الضرورية.

لقد كنت أعمل على تعديل وتجريد شوكة OpenTK الموجودة على https://github.com/hultqvist/opentk
لكن كن حذرًا من أن fork يحتوي على بعض التعديلات الرئيسية التي تجعله غير متوافق مع مشروع Opentk الأصلي (باستخدام متجهات العمود بشكل أساسي).

لا يزال الجزء الذي أتحدث عنه لم يتغير في هذا الصدد ، وتحديداً مشروعي OpenTK.GLControl و OpenTK.GLWidget لنظامي التشغيل Windows و Gtk على التوالي ، أعتقد أنه يمكن إنشاء جزء مشابه لنظام التشغيل Mac ولكن التنفيذ الوحيد حاليًا هو من الإصدار الأصلي فئة OpenTK gamewindow.

في الواقع ، ستكون هذه طريقة للقيام بذلك.

نظرت إلى هذا قليلاً - من المؤسف أن MonoMac يستخدم OpenTK مخصصًا مدمجًا في MonoMac.dll .. قد نضطر إلى إنشاء غلاف حول واجهة برمجة التطبيقات بالكامل ، وهو أمر مؤسف

تم إحراز تقدم في عنصر تحكم OpenGL لـ eto هنا:

https://github.com/bchavez/SharpFlame/tree/eto/source

هل عنصر تحكم OpenGL هذا في حالة قابلة للاستخدام؟

لم أجربها ، لذا لست متأكدًا ، على الرغم من أنني رأيت لقطات شاشة لها تعمل في SharpFlame

  • Eto.Gl - عنصر التحكم Eto ، لكنني لم أقم بإضفاء الطابع الرسمي على واجهة برمجة التطبيقات بعد.
  • Eto.Gl.Windows - يجب أن يعمل GL الخاص بالنظام الأساسي كما هو على windows باستخدام Eto.Gl .
  • Eto.Gl.Linux - يحتاج GL الخاص بالنظام الأساسي على Linux إلى التحديث بسبب بعض التغييرات الجديدة في eto . لا ينبغي أن يكون من الصعب التحديث ، لم يكن لديك الوقت الكافي.
  • Eto.Gl.Mac - مشكلة _gotcha_ صعبة نوعًا ما ما زلت بحاجة إلى حلها.

المشكلة الرئيسية الوحيدة على نظام التشغيل Mac / OSX هي ، افتراضيًا ، سياقات GL الجديدة التي تم إنشاؤها داخل نفس التطبيق لا تتم مشاركتها في الموارد. هذا يعني أنك تحصل على سياق موارد GL معزول لكل سطح. IE: إذا كان لديك تطبيق يستخدم أسطح GL متعددة ، فستحتاج إلى تحميل الزخارف n مرة لكل سطح ، مما يستهلك n ضعف مقدار ذاكرة الزخرفة.

يختلف هذا السلوك في نظامي Linux و Windows ، افتراضيًا ، تتم مشاركة سياقات OpenGL الجديدة (داخل نفس التطبيق). لذلك ، إذا كان لديك العديد من أسطح GL (على Linux أو Windows) داخل نفس التطبيق وتحميل الزخارف ، فأنت تقوم فقط بتحميل موارد النسيج مرة واحدة وليس n مرات لكل سطح.

بعض محاولات القرصنة التي قمت بها لجعلها تعمل على نظام Mac هي MacGLView1-7.cs :
https://github.com/bchavez/SharpFlame/tree/eto/source/Eto.Gl.Mac

في النهاية ، سأقوم (أو أي شخص آخر) بحل المشكلة بحيث يكون السلوك متسقًا عبر الأنظمة الأساسية. فقط لم يكن لدي ما يكفي من الوقت أجهزة الصراف الآلي.

مستند OSX الخاص بالمشكلة موجود هنا:

https://developer.apple.com/library/mac/documentation/GraphicsImaging/Conceptual/OpenGL-MacProgGuide/opengl_contexts/opengl_contexts.html

للتوضيح ، من خلال "سياق دفتر الأستاذ العام" أعني ، على وجه التحديد ، سياقات موارد دفتر الأستاذ العام . (حالة الكائن المشترك كما هو موضح في الرابط أعلاه).

شكرا للتوضيح. لقد حاولت بالفعل تشغيله على نظامي التشغيل Windows و Linux.
يعمل Windows بشكل جيد مع Wpf ، لكن على Linux مع Gtk # 2 لا يريد أن يعمل: http://hastebin.com/okewirerem
إليك الكود إذا كنت تريد إلقاء نظرة عليه: https://github.com/PowerOfCode/Eto/tree/opengl-control/Source/Eto.Gl.Gtk

اكتشفت أن له علاقة بعرض النص. إذا كان لديك عنصر تحكم آخر في التخطيط ، والذي يعرض النص ، فإنه يتعطل على الفور. إذا كان نص عنصر التحكم فارغًا بدلاً من ذلك ، فلن يتعطل.

واو ، هذا غريب.

تضمين التغريدة

وقعت في نفس المشكلة. إذا لم تصادف الإصلاح بعد ، فعليك أن تضع هذا على أنه السطر الأول من برنامج gtk الخاص بك:

C# [STAThread] public static void Main(string[] args) { //this MUST be the first line in the program or any text + the opengl window will cause it to segfault OpenTK.Toolkit.Init (); ....

هذا بسبب شيء غريب مع x_multithreading أو شيء من هذا القبيل ، لذلك يجب على OpenTK الوصول إلى هناك قبل تهيئة gtk. ليس بالضبط أول شيء عليك القيام به ، ولكن في وقت مبكر جدًا.

شكرًا جزيلاً لك على مساعدتك ، وسأحاول إذا نجح ذلك عندما أصل إلى المنزل.

أي تحديث عن عنصر تحكم OpenGL لـ eto؟

إعادة. etoViewport ، يمكن أن يتم ذلك بدعم WPF و GTK3 ، لكن GTK3 يحيرني بشأن كيفية المتابعة - ليس من الواضح كيفية إعداد سياق القاهرة المطلوب (بالنسبة لي).

دونو كيف تقوم etoViewport بذلك ، لكن Gtk 3 لديها عنصر واجهة مستخدم GLArea لعرض OpenGL: https://developer.gnome.org/gtk3/unstable/GtkGLArea.html

أي تحديثات على هذه؟

يعمل feliwir etoViewport حتى الآن مع WPF و WinForms و macOS على الأقل. لست متأكدًا من حالة GTK.

يعمل GTK في اختباراتي ضمن VirtualBox / CentOS 7.x وأيضًا في VMWare / Linux Mint. يمكن أن يكون هناك بعض الغرابة في برنامج التشغيل ، خاصةً تحت VirtualBox ، حيث يبدو أن عنصر تحكم OpenGL يطفو فوق جميع النوافذ الأخرى. أعتقد أن هذا قد يكون خطأ في VirtualBox ، على الرغم من أنه لا يظهر في برنامج VMWare.

ومع ذلك ، لم يتم تنفيذ GTK3 مع etoViewport.

philstopford لا أحب التبعية لـ OpenTK أي خطط لإزالته / السماح باستدعاء مخصص لإنشاء السياق؟

أنا آسف لأنك لم تعجبك ، لكنني لا أرى السبب. التصحيحات مرحب بها ، إذا كان النهج الحالي لا يناسبك. ليس لدي بالفعل خطة لتغييرها بنفسي: لقد كان OpenTK عاملاً موثوقًا به. في وقت سابق من جهود OpenGL ، استخدمت SharpGL ثم تم التخلي عن هذا المشروع. على النقيض من ذلك ، يتم الحفاظ على OpenTK بشكل نشط ومتعدد المنصات.

انتقل إلى: https://github.com/picoe/Eto.Toolkit/issues/7

cwensley يمكن إغلاق هذا.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات