يمكن تطوير لعبة ثلاثية الأبعاد باستخدام WebAssembly مع WebGL ، إذا تمكنا من تمرير مجموعة C ++ إلى واجهة برمجة تطبيقات WebGL دون نسخ المصفوفة.
نحتاج إلى تمرير بيانات المصفوفة إلى WebGLRenderingContext.bufferData () ، لكنها تقبل فقط JavaScript ArrayBuffer أو ArrayBufferView. إذا كان يقبل مصفوفة C ++ ، أو إذا كان بإمكاننا إنشاء ArrayBufferView بدون نسخ بيانات المصفوفة ، فسيتم حلها.
أعتقد أن مقترحات ربط المضيف و / أو المرجع و / أو GC ستسمح لمثيلات WebAssembly بإنشاء ArrayBufferViews مباشرةً (يمكن بعد ذلك تمريرها إلى WebGL).
هذا بالفعل يعمل اليوم. تقبل وظائف WebGL ArrayBufferView ، ومن الممكن إنشاء مثل هذا العرض على ذاكرة WebAssembly. تقوم بشكل أساسي بإنشاء عرض مصفوفة مكتوبة على ArrayBuffer of the Memory ، ثم تقوم بعمل .subarray
(على سبيل المثال ، تقوم ارتباطات Emscripten GL بهذا).
يعمل هذا إذا كانت البيانات مسطحة في الذاكرة. بالنسبة إلى مصفوفة C أو C ++ std::vector
هذا هو الحال. لذا فإن إرسال مصفوفات C ++ إلى WebGL هو بالفعل طريقة عمل الأشياء اليوم ، في معظم الحالات.
هذا لا يعتمد على المرور عبر JS atm ، كما هو الحال في هذا الرابط من وقت سابق. لكن لم يتم إنشاء نسخة هناك! (سيكون تخطي JS أمرًا رائعًا أيضًا ، كمسألة منفصلة ، ونعم ، ستسمح المواصفات الجديدة ، مثل أنواع الواجهة ، كما ذكر Macil .)
يبدو أنه تم الرد على هذا القلق ، لذا أغلق. يرجى إعادة فتح إذا كان خلاف ذلك.
التعليق الأكثر فائدة
هذا بالفعل يعمل اليوم. تقبل وظائف WebGL ArrayBufferView ، ومن الممكن إنشاء مثل هذا العرض على ذاكرة WebAssembly. تقوم بشكل أساسي بإنشاء عرض مصفوفة مكتوبة على ArrayBuffer of the Memory ، ثم تقوم بعمل
.subarray
(على سبيل المثال ، تقوم ارتباطات Emscripten GL بهذا).يعمل هذا إذا كانت البيانات مسطحة في الذاكرة. بالنسبة إلى مصفوفة C أو C ++
std::vector
هذا هو الحال. لذا فإن إرسال مصفوفات C ++ إلى WebGL هو بالفعل طريقة عمل الأشياء اليوم ، في معظم الحالات.هذا لا يعتمد على المرور عبر JS atm ، كما هو الحال في هذا الرابط من وقت سابق. لكن لم يتم إنشاء نسخة هناك! (سيكون تخطي JS أمرًا رائعًا أيضًا ، كمسألة منفصلة ، ونعم ، ستسمح المواصفات الجديدة ، مثل أنواع الواجهة ، كما ذكر Macil .)