سؤال

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

على سبيل المثال، قد يكون لديك حاليًا رمز رسم مثل هذا:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_DEPTH_TEST);
//Draw operations
glEnable(GL_DEPTH_TEST);
glDisable(GL_BLEND); 

ولكن مع مكدس البيئة سيبدو الأمر كما يلي:

glPushEnv();
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_DEPTH_TEST);
//Draw operations
glPopEnv(); 

كما أرى أن هناك طريقتين فقط للقيام بذلك:

  1. قم بإنشاء "النكهة" الخاصة بي لكل وظيفة إعداد بيئة واستدعاء ذلك.سيقوم بدوره بتحديث بنية بيانات EnvStack الحالية واستدعاء وظيفة بيئة OpenGL.
  2. قم بتغيير وظائف بيئة OpenGL للإشارة إليها لي وظائف البيئة، والتي ستقوم مرة أخرى بتحديث بنية بيانات EnvStack الحالية واستدعاء وظائف بيئة OpenGL الأصلية.

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

لذا سؤالي هو، في هذا السياق، كيف يمكنني تغيير الوظائف التي تشير إليها وظائف بيئة OpenGL؟

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

المحلول

يحتوي OpenGL بالفعل على هذه الوظيفة.انت تريد glPushAttrib(GL_ALL_ATTRIB_BITS); و glPopAttrib();.يرى http://opengl.org/documentation/specs/man_pages/hardcopy/GL/html/gl/pushattrib.html للمزيد من.

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