פערים ידועים ומה הלאה#

מדריך זה כיסה שני ממדים ביסודיות ועצר שם בכוונה. הפרק החותם הזה משרטט את הגבול במפורש: מה גרסה שנייה הייתה מוסיפה, מה שייך למדריכים נפרדים, והיכן חזית ה־FFI מסתיימת כרגע. הזכרתם מונעת מכם לצוד כיסוי שאינו כאן, ומתווה את הדרך שלפנים.

הממד השלישי (v2 מתוכננת)#

כל דבר תלת־ממדי נדחה להמשך, לא הושמט בטעות. פרק היסודות נקב במושג האחד הנישא לרוחב (ה־Z-buffer, המכריע מה הקרוב ביותר לצופה), ופרק האלגוריתמים ציין שריצוף למשולשים הוא הגשר לתלת־ממד, אך אף אחד לא הלך רחוק יותר. גרסה שנייה הייתה מכסה:

  • OpenGL, דרך כריכה מתוחזקת, לרינדור מואץ־חומרה: צינור ה־shader המודרני, חוצצי vertex ו־index, והמתמטיקה (היטל, טרנספורם ה־model-view) ההופכת סצנת תלת־ממד לתמונת דו־ממד.

  • חוצץ העומק באמת, לא רק המושג: כיצד סדר הציור מפסיק לחשוב והעומק מכריע נראוּת.

  • פרויקט גולה של משחק תלת־ממדי, הפרויקט השלישי שהתוכנית המקורית נקבה בו, בנוי על כל נתיב תלת־ממד שיתברר כהכן ביותר להרצה באותה עת.

תלת־ממד הוא נושא גדול ולעשות איתו צדק דורש קשת משלו; קיפול גרסה דלילה לתוך מדריך זה היה מקצר את שני הממדים.

מחוץ לתחום בכוונה#

שלושה תחומים מוצאים בכוונה וכל אחד היה מדריך נפרד, לא פרק כאן:

  • תכנות GPU. כתיבת shaders של חישוב או גרפיקה והרצת עבודה כללית על ה־GPU היא דיסציפלינה נבדלת עם שרשרת־כלים משלה. היא נוגעת בגרפיקה אך אינה ציור, והיא זוכה לטיפול משלה.

  • ראייה ממוחשבת וניתוח תמונה. מדריך זה השתמש בקונבולוציה ככלי ציור (טשטוש, חידוד) ועצר בדיוק בקו שבו אותה מתמטיקה הופכת לגילוי וזיהוי. גילוי מאפיינים, פילוח וזיהוי הם ניתוח, לא ציור, ושייכים במקום אחר.

  • שירותי יצירת־תמונות מתארחים. מחברים ל־APIs חיצוניים של יצירת־תמונות הם עבודת רשת ואינטגרציית־שירותים, לא תכנות גרפיקה, והם מחוץ לתחום ללא תלות בממד.

חזית ה־FFI#

קשת ההגעה־רחוק־יותר הייתה גלויה בכל צעד לגבי היכן ה־FFI המובנה של pperl מגיע כרגע. מקובצת כאן, החזית היא:

  • שכבת תיאור־הנתונים של רמה 2. קריאות Peta::FFI גולמיות מטפלות בסקלרים, מחרוזות, חוצצים וידיות אטומות, המכסים חלק גדול מ־APIs גרפיים רבים של C ואת כל ספרייה כמו Cairo. מה שהם עדיין אינם מתארים הוא struct המועבר או מוחזר לפי ערך, או union כגון רשומת אירוע חלונות. שכבת תיאור־הנתונים ההצהרתית נבנית כדי לסגור בדיוק את הפער הזה, והיא החלק החסר בין הקריאות הגולמיות של היום לכריכה נוחה לספריות עתירות־struct.

  • Callbacks. ספרייה שקוראת בחזרה אל הקוד שלכם (לולאת אירועים המפעילה מטפל, אות ציור) זקוקה למצביע פונקציה של C שנכנס מחדש אל Perl. זה מעבר לשכבה הגולמית היום.

  • כריכת SDL2 שלמה. פרויקט הגולה של המשחק הראה ש־SDL2 נגישה חלקית כעת (יצירת חלון ומרַנדֵר, הקריאות הסקלריות) וחסומה על שני הפריטים לעיל עבור השאר (unions של אירועים, ובאופן אידיאלי callbacks). היא כריכת הגרפיקה האצורה הגדולה הראשונה הטבעית ברגע ששכבת תיאור־הנתונים תנחת, בעקבות תבנית תצוגת Cairo.

אף אחד מאלה אינו קיר. הם הסדר שבו ה־FFI גדל, ותפקיד המדריך הזה היה לומר לכם באיזה צד של הקו הנוכחי יושבת כל משימה.

מה אתם יכולים לעשות עכשיו#

אל מול החזית, הקרקע שכבר כוסתה רחבה. עם מדריך זה אתם יכולים, היום, על pperl:

  • לצייר תמונות רסטר עם פרימיטיבים ומסננים, ולקרוא, לשנות קנה־מידה ולשמור אותן (Imager, GD ו־ImageMagick).

  • להפיק פלט ווקטור בלתי־תלוי־רזולוציה, כפיקסלים דרך Cairo או כתגיות דרך SVG (Cairo ו־SVG).

  • לקרוא ולכתוב מטא־נתוני תמונה, ולצייר תרשימים (מטא־נתונים ותרשימים).

  • לפתוח חלון, להגיב לעכבר ולמקלדת, ולהנפיש (ערכות כלים ל־GUI).

  • להגיע לספריית גרפיקה של C מסוג סקלר־וידית דרך כריכה מובנית אצורה, בלי מהדר C ובלי צעד בנייה (תצוגת Cairo).

  • לבנות ולהריץ תוכניות אמיתיות: יישום ציור ומשחק דו־ממדי.

זו יכולת גרפיקת דו־ממד שלמה ב־Perl, מן הפיקסל ועד לתוכנית רצה. הממד השלישי, ה־GPU, וצד הראייה הם הדרכים החוצה מכאן, והם על המפה.