سؤال

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

The NVIDIA OpenGL Driver encountered an unrecoverable error
and must close this application.

Error 12

هل هناك أي إعداد للحزام الذي أحتاج إلى إعادة تعيين قبل الاتصال Gldrawelements ()؟ أعلم أنه ليس بعضا يتدلى GlenableClientState ()، فقد راجعته (اعتدت أن يكون لديك أحد هؤلاء، ولكن ثم تحطمت Gldrawelements () بدلا من ذلك).

تعال للتفكير في الأمر، فإنه يبدو تقريبا مثل خطأ المخزن المؤقت مرة أخرى ... أي أفكار حول ما يجب تجربته؟

هل كانت مفيدة؟

المحلول

من الواضح أنك تخليط وضع VBO ووضع VA. هذا ممكن تماما ولكن يجب استخدامه بعناية.

عندما تتصل:

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

هذا يعني أنه في المرة القادمة التي تقوم فيها بتقديم شيء glDrawElements(..., ..., ..., x), ، سيستخدم X كمؤشر في بيانات المؤشرات، والمكالمات الأخيرة إلى نقاط GlvertExPoiner على بيانات القمم.

اذا أنت لا قم بضبط VBO و IBO الحالي (مع مكالمات GlbindBuffer المذكورة أعلاه)، وهذا يعني أنه عند تقديم نفس GLDrawelements، سيتم استخدام X كإزاحة في بيانات المؤشرات في ibo., والمكالمات الأخيرة إلى GlvertExPoiner كإزاحة على بيانات القمم في vbo..

اعتمادا على قيم x و glvertexpointer، يمكنك تحطم الطائرة لأن الإزاحة تخرج من الحدود و / أو البيانات الأساسية من النوع الخطأ (NAN).

لذلك لإجابة سؤالك، بعد الرسم مع وضع VBO ثم رسم مع وضع VA:

  1. unbind the vbo الحالي
  2. unbind isbo الحالي
  3. حدد عنوان الرأس الأيمن مع glVertexPointer
  4. حدد عنوان المؤشرات المناسبة مع glDrawElements

ثم سيكون على ما يرام.

نصائح أخرى

باه! وجدت ذلك. عندما فعلت

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

قبل أن تقدم الخفقان + توقف توقف. هل هذا التصرف المتوقع؟ آسف لإهدار الوقت والفضاء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top