אנדרואיד 8.1 ומעלה כולל תמיכה בניהול צבע שניתן להשתמש בה כדי לספק חוויה עקבית בטכנולוגיות תצוגה. אפליקציות הפועלות על אנדרואיד יכולות לגשת לכל היכולות של צג רחב כדי להפיק את המרב ממכשיר תצוגה.
מהדורות קודמות של אנדרואיד לא כללו תמיכה בניהול צבעים ובמקום זאת הסתמכו על התאמה של תוכן ותצוגות (מטרה שנעזרה לעתים קרובות על ידי תעשיית הטלוויזיה). עם זאת, טכנולוגיות תצוגה עדכניות מאפשרות תצוגות גדולות בהרבה שאינן מציגות תוכן קיים כצפוי. עם אנדרואיד 8.1 ומעלה, מכשירים שמשתמשים בתצוגה רחבת טווח (לדוגמה, דיודה פולטת אור אורגנית עם מטריקס אקטיבית או AMOLED, חלק ממכשירי LCD) יכולים לראות תוכן רחב מאפליקציות.
קבע את תמיכת המכשיר
מכשירים עם צגים בצבע רחב עם אנדרואיד 8.1 ומעלה צריכים לתמוך בניהול צבעים (צבע רחב). לפני הפעלת תכונה זו, ודא שהמכשיר עומד בדרישות הבאות:
- תצוגת המכשיר עומדת בדרישות החומרה, הכוללות צג מאופיין היטב התומך במרחב הצבעים Display-P3. אם התצוגה אינה עומדת בדרישה זו, אל תפעיל ניהול צבעים. כדי להפחית את השפעת המעבד וה-GPU, רצוי תמיכה ב-sRGB ו-HDR10 מורחבים בצנרת התצוגה.
- ההתקן תומך בתהליך כיול במפעל שיוצר נתוני כיול (שמאוחסנים במכשיר) כדי להתאים לשונות ייצור בהתנהגות התצוגה. לכל הפחות, נתוני כיול צריכים לאפשר לתצוגה להציג במדויק תוכן sRGB ונקודות לבנות D65 ו-D73.
אם דרישות אלה מתקיימות, תוכל להפעיל את תכונת ניהול הצבע עבור המכשיר.
יישום ניהול צבעים
כדי ליישם ניהול צבע, תחילה עדכן את מנהל ההתקן של Hardware Composer 2 (HWC2) כדי להבין מצבי צבע ולהחיל מצבים אלה על החומרה. באופן ספציפי, על המלחין HWC2 לדווח על מצבי הצבע Display-P3 ו-sRGB באמצעות HWCDisplay::GetColorModes
.
לאחר מכן, הפעל את הרחבות OpenGL ותמיכה בספרייה הדרושים כדי לתרגם מרחבי צבע של OpenGL למרחבי נתונים HAL. תוספי OpenGL נדרשים כוללים:
-
EGL_EXT_pixel_format_float
. מאפשר לאפליקציות ליצור משטחי EGLS יציבים עם רכיבי צבע צפים של 16 סיביות. עדיפות: גבוהה (צפי שזהו פורמט הפיקסלים המוגדר כברירת מחדל עבור אפליקציות עם מודעות לצבע רחב). דורש תמיכה בנהגים. -
EGL_KHR_gl_colorspace
. עבור אפליקציות שרוצות להשתמש במאגרי מסגרת ברירת מחדל בפורמט sRGB כדי להשיג בקלות רבה יותר רינדור sRGB למכשירי תצוגה, הרחבה זו מאפשרת ליצור EGLSurfaces שיעובדו ב-sRGB על ידי הקשרים של OpenGL התומכים ביכולת זו. דורש תמיכה במנהל ההתקן עבור התנהגות sRGB.
אנדרואיד מספקת גם את ההרחבות האופציונליות הבאות:
-
EGL_EXT_colorspace_scrgb_linear
. הרחבה זו מספקת אפשרות מרחב צבע חדשה, scRGB, שיישומים יכולים לבחור בעת יצירת EGLSurface. מרחב הצבע scRGB מגדיר מרחב תצוגה ליניארי עם אותה נקודה לבנה וצבע ראשוני כמו sRGB (ולכן הוא תואם לאחור עם sRGB). זה לא אמור לדרוש תמיכת מנהלי התקנים וניתן ליישם אותו במעטפת EGL של אנדרואיד. כדי להיות שימושי, הרחבה זו דורשת תמיכה בנקודה צפה של 16 סיביות (FP16). -
EGL_EXT_gl_colorspace_display_p3
ו-EGL_EXT_gl_colorspace_display_p3_linear
. עבור אפליקציות שרוצות להשתמש בפורמט Display-P3 ברירת מחדל ל-framebuffers כדי להשיג בקלות רבה יותר רינדור sRGB למכשירי תצוגה, הרחבה זו מאפשרת יצירת EGLSurfaces שיעובדו ב-Display-P3 על ידי הקשרים של OpenGL התומכים ביכולת זו. ניתן ליישם זאת בעטיפת מנהל ההתקן של EGL. -
VK_EXT_swapchain_colorspace
(וולקן). מאפשר לאפליקציות לתייג להחליף שרשראות עם מרחב הצבעים שבו הם משתמשים. כולל מספר מרחבי צבע נפוצים כגון DCI-P3, Display-P3, AdobeRGB ו-BT2020.
התאמה אישית
אתה יכול להתאים אישית את תכונת ניהול הצבע על ידי הכללת תמיכה במגוון תקני צבע כגון DCI-P3, AdobeRGB, Rec709 ו-Rec2020. התאמות אישיות אחרות כוללות:
- תמיכה בחומרה להמרת צבע בצנרת התצוגה. מאפשר תמיכה בהמרות צבע מרובות בחומרה.
- תמיכה בהמרת צבע עצמאית במספר שכבות (לדוגמה, שכבות מסוימות יכולות להיות sRGB ואחרות sRGB מורחבות, כל אחת עם צינור צבע משלה). כאשר יש יותר ממרחב צבע אחד גלוי, יש להמיר חלק ממרחבי הצבע למרחב הצבע של התצוגה. באופן אידיאלי, ההמרה הזו מסופקת בצורה הטובה ביותר על ידי מנוע התצוגה (אחרת אנדרואיד חייבת לבצע הרכב GPU).
בדיקה
כדי לבדוק את ניהול הצבע, השתמש במשאבים הבאים ב- opengl/tests
:
-
gl2_basic
הוא הדגמה פשוטה של OpenGL המבקשת מרחב צבעוני Display-P3. -
EGL_test
בודק לתמיכה בהרחבה ובהגדרות הנדרשות (10:10:10:2 ו-FP16). -
test_wide_color
יוצר משטח באותו אופן כמו SurfaceFlinger (לדוגמה, config, מרחב צבע ופורמט פיקסלים).
יישום התייחסות
ליישום הפניה, עיין frameworks/native
. לכותרות, עיין ב:
-
system/core/include/system/graphics.h
-
system/core/include/system/graphics-base.h
-
HAL_DATASPACE_*
-
HAL_COLOR_MODE_*
-