सॉफ्टवेयर रेंडरिंग पर ओएनजीएल, एसएफएमएल और एसडीएल को क्या फायदा है?


24

मैंने हस्तनिर्मित हीरो स्ट्रीम देखना शुरू कर दिया , जहां केसी मुराटोरी फ्रेमवर्क या इस तरह के उपयोग के बिना एक गेम इंजन बनाते हैं। कल मैं उस हिस्से में पहुँच गया जहाँ उसने दिखाया कि कैसे एक चित्र स्क्रीन पर खींचा जाता है। जहाँ तक मैं समझता था कि उसने स्क्रीन के आकार के अनुसार कुछ मेमोरी आवंटित की है, जिसे वह खींचना चाहता है। और फिर उन्होंने एक बिटमैप बनाया, जिसे उन्होंने आवंटित बफर मेमोरी में पास किया और इसे एक ओएस विशिष्ट फ़ंक्शन का उपयोग करके स्क्रीन पर आकर्षित किया।

यह काफी सीधा लगता है। मैंने गेममेकर का उपयोग किया, जिसे लव 2 डी में बदल दिया गया, स्प्राइट किट के साथ थोड़ा काम किया लेकिन मैं हमेशा सोच रहा था कि वास्तव में कभी-कभी भ्रमित करने वाली परतों के नीचे क्या हो रहा था।

यह देखते हुए कि ग्राफिक्स लाइब्रेरी (ओपनजीएल, एसएफएमएल, एसडीएल, ...) का उपयोग करने पर भी क्यों परेशान होना पड़ता है जब आपको बस इतना करना है कि कुछ बफर आवंटित करें, एक बिटमैप पास करें और इसे स्क्रीन पर ड्रा करें?

यदि आप तब अलग-अलग चीजों को अपनी ओर खींचना चाहते हैं, तो आप उन्हें सिर्फ अपने बिटमैप पर लिखते हैं, जो बाद में बफर में चला जाता है। मैं प्रोग्रामिंग में काफी नया हूं, लेकिन यह मुझे काफी सरल लगता है। कृपया मुझे सुधारें अगर मैं गलत हूं।


11
बाद में अपनी श्रृंखला में (एपिसोड 220 के आसपास) वह opengl का उपयोग करेगा। कारण वह है गति।
शाफ़्ट

5
चाल यह निर्धारित कर रही है कि स्क्रीन पर क्या आकर्षित करना है। सभी GPU बनावट / छायांकन सामग्री, त्रिकोण, कैमरा अनुमान, आदि को पहले यह तय करने की आवश्यकता है कि प्रत्येक पिक्सेल किस रंग का होना चाहिए। पिक्सेल रंगों को स्क्रीन पर पुश करना आसान हिस्सा है।
user14146

2
रिकॉर्ड के लिए, SDL और OpenGL परस्पर अनन्य नहीं हैं। SDL एक "हार्डवेयर एब्स्ट्रेक्शन लेयर" है, जो केवल एक ग्राफिक्स लाइब्रेरी होने के विपरीत विंडोज़, घटनाओं और इनपुट को संभालती है। SDL को भी OpenGL के साथ संयोजन के रूप में उपयोग करने का समर्थन है, इसलिए SDL सभी गैर-ग्राफिक्स सामान कर सकता है जबकि OpenGL ग्राफिक्स को संभालता है। यह भी ध्यान दें कि OpenGL अक्सर GPU के साथ काम करता है जबकि SDL उस संस्करण और सिस्टम के लिए संकलित हो सकता है या नहीं हो सकता है।
फ्राॅप

SFML रेंडरिंग के लिए OpenGL का उपयोग करता है, इसलिए वास्तव में सभी SFML OpenGL का उपयोग करने के लिए एक सरल इंटरफ़ेस प्रदान करता है।
कॉर्न्स्टल

2
Techcnailyl क्या Casey कर रहा है अभी भी एक ग्राफिक्स लाइब्रेरी का उपयोग कर रहा है। लाइब्रेरी को GDI कहा जाता है , और यद्यपि यह OS के मुख्य एपीआई का हिस्सा है, यह अभी भी तकनीकी रूप से एक ग्राफिक्स लाइब्रेरी है।
फरि

जवाबों:


41

यह केवल निष्पादन की गति के बारे में नहीं है, बल्कि सादगी के बारे में भी है। हालाँकि इस उदाहरण में उपयोग किया गया सॉफ़्टवेयर रेंडर हार्डवेयर एक्सेलेरेशन (यानी GPU) का उपयोग करने की तुलना में बहुत धीमा होगा, स्क्रीन पर कुछ बिटमैप्स खींचना एक ऐसा तुच्छ कार्य है जिसे आप प्रदर्शन ड्रॉप पर ध्यान नहीं देंगे।

हालाँकि, त्रि-स्तरीय रिस्टराइजेशन, डेप्थ सॉर्ट और इस तरह की निम्न-स्तरीय गतिविधि अच्छी तरह से समझी जाने वाली अवधारणाएं हैं, जो कि GPU कुछ आदेशों के साथ निहित कर सकता है। सॉफ्टवेयर मोड में उन लोगों को फिर से लागू करना अनिवार्य रूप से पहिया को मजबूत करना है। यह ठीक है यदि आप एक निम्न-स्तरीय समझ प्राप्त करना चाहते हैं कि प्रतिपादन कैसे किया जाता है, मैंने खुद एक 3D सॉफ़्टवेयर रेंडरर को लिखा है ताकि इसे थोड़ा सा खोजा जा सके, लेकिन अधिकांश परिस्थितियों के लिए यह समय की बर्बादी है जब OpenGL इसे तेजी से कर सकता है डिब्बा।

आपने जो उदाहरण दिया है वह बहुत ही मूल है, स्क्रीन पर केवल एक छवि खींचना, इसलिए कार्यान्वयन आसान है। एक बार जब आप जटिलता पर लेटना शुरू कर देते हैं, तो आप पाएंगे कि हर चीज को सही ढंग से प्रस्तुत करना तेजी से जटिल हो जाता है। सामान लोगों को 3 डी सॉफ्टवेयर रेंडरिंग के क्वेक दिनों में वापस करना पड़ा, हालांकि मैं सराहना करता हूं कि आप अभी तक (अभी तक) नहीं जा रहे हैं।


12
ओपनजीएल बिंदुओं, रेखाओं और त्रिकोण जैसे शब्दों को जानता है। अधिकांश समय आप त्रिकोण के साथ काम करेंगे। OpenGL के साथ काम करने का तरीका जानने के लिए मैं opengl-tutorial.org की सिफारिश कर सकता हूंओपनगेल हुड के तहत क्या करता है यह जानने के लिए आधिकारिक विकी पर एक नज़र डालें: opengl.org/wiki/Rendering_Pipeline_Overview
tkausl

1
मैं +1 पर जा रहा था, लेकिन मुझे "पहिया को फिर से स्थापित करने" के बारे में कुछ पसंद नहीं है क्योंकि मुझे लगता है कि यह कंप्यूटिंग के इतिहास के संदर्भ में गलत प्रभाव देता है। बिटमैप रेंडरिंग पहले आया था, इसलिए ओपनगेल एक "पहिया को फिर से संगठित करना" था। हालाँकि, ऐसा करने के दो अच्छे कारण थे: 1) मानकीकरण और 2) GPU त्वरण। यदि नया संस्करण एक सुधार है (यानी टायर बनाम लकड़ी के वैगन पहियों के साथ) तो पहिया को फिर से चालू करना हमेशा एक बुरी बात नहीं है। यहां मुख्य बिंदु यह नहीं होना चाहिए कि सॉफ्टवेयर रेंडरिंग व्हील को फिर से मजबूत कर रहा है, ऐसा होना चाहिए कि यह जीपीयू रेंडरिंग से नीच हो।
फराफ

4
@Pharap को छोड़कर, अब एक सॉफ्टवेयर रेंडर पूरी तरह से पहिया को फिर से लिखना है, भले ही यह ऐतिहासिक रूप से हो या नहीं।
porglezomp

1
यह केवल आधा उत्तर है। अगला उत्तर अन्य आधा है, लेकिन एक पूर्ण उत्तर (ओपनजीएल और उनके द्वारा उल्लेखित अन्य चीजों के बीच अंतर की एक व्याख्या सहित) इस प्रश्न का उचित उत्तर होगा।
जैस्पर

1
@ user148013 "क्या opengl बिंदु, रेखा, त्रिकोण जैसे शब्दों को जानता है?" आधुनिक OpenGL इन आदिमों के साथ विशेष रूप से संबंधित है । आप उन्हें लेकिन कुछ भी rasterize नहीं कर सकते।
Nax 'vi-vim-nvim'

25

मेरा सवाल यह है: खुली gl, sfml, sdl जैसी किसी चीज़ का उपयोग करने पर भी परेशान क्यों होना चाहिए, जब आपको बस कुछ बफर आवंटित करना है, एक बिटमैप को पास करें और इसे स्क्रीन पर ड्रा करें?

लघु: क्योंकि इसका तेज (ओपनजीएल, डायरेक्टएक्स)।

लंबा:

आप सोच सकते हैं कि आप यह सब खुद कर सकते हैं। पिक्सेल को स्क्रीन पर ड्रा करें। आप आकृतियों को आकर्षित करने के लिए एक छोटा पुस्तकालय लिख सकते हैं, जैसे क्वाड या त्रिकोण। यह निश्चित रूप से काम करेगा। वास्तव में ऐसा करने के लिए बहुत सारे पुस्तकालय हैं। उनमें से कुछ भी ओपन-स्पेक लागू करते हैं (इसलिए वे opengl के लिए एक सॉफ़्टवेयर-साइड की तरह हैं) जो वास्तव में केसी मुराटोरी करता है। वे सॉफ़्टवेयर-साइड पर सब कुछ गणना करते हैं, सॉफ़्टवेयर-साइड पर पिक्सेल सेट करते हैं और स्क्रीन पर परिणाम लिखते हैं।

हालाँकि यह धीमा है । सीपीयू जो अंततः इन सभी चीजों को निष्पादित करेगा, इस परिदृश्य के लिए नहीं बनाया गया था। GPUs के लिए क्या कर रहे हैं Thats OpenGL क्या करता है (जब तक कि यह पाठ्यक्रम का एक सॉफ्टवेयर-कार्यान्वयन नहीं है) सब कुछ आप इसे करने के लिए कहें और सभी डेटा, सभी ड्रॉ-कॉल, लगभग सभी चीज़ों को ग्राफ़िक्स-कार्ड पर धकेलें और GPU को कार्य करने के लिए कहें । इस तरह की नौकरी के लिए जीपीयू विशेष रूप से बनाया गया है। फ्लोटिंग पॉइंट नंबरों को गुणा करना (थ्री -सीन को ड्रॉ करते समय आप बहुत कुछ करते हैं) और शेड्स निष्पादित करते हैं। और यह समानांतर में। बस आपको यह जानने के लिए कि GPU कितना तेज़ है, 1920x1080 पिक्सल के साथ फुलस्क्रीन में एक साधारण दृश्य के बारे में सोचें। ये, गुणा करने के लिए 2,073,600 पिक्सेल हैं। के लिए हर एक पिक्सेल करते हैं, GPU कम से कम एक बार , अधिकतर बार एक से अधिक बार टुकड़ा-शेडर चलाएगा । अब, हम कहते हैं कि हम प्रति सेकंड 60 फ़्रेमों पर चलते हैं। इसका अर्थ है, GPU टुकड़े-टुकड़े को चलाता है 2,073,600 * 60 = 124,416,000 बार प्रति सेकंड । क्या आपको लगता है कि आप अपने सीपीयू पर ऐसा कुछ कर सकते हैं? (यह एक बहुत ही सरल स्पष्टीकरण है, इस बात पर विचार करने के लिए और भी बहुत सारी चीज़ें हैं जैसे कि आप कितनी पिक्स करते हैं, कितनी नज़दीकी वस्तुओं से ओवरड्राइव करते हैं, आप कितने MSAA और इतने पर उपयोग करते हैं, हालाँकि प्रति सेकंड 124,416,000 बार शायद आप सबसे कम मिल सकते हैं, और आप 'एक सरल दृश्य के साथ आसानी से 60fps से अधिक हो जाएगा)

Thats क्या OpenGL और Direct3D करते हैं, किस इंजन के लिए @Uri Popovs उत्तर देखते हैं।


8
वह एक 2 डी गेम बना रहा है, दूसरा विषय 3 डी है। और जब मैं धीमी गति से कहता हूं तो इसका मतलब यह नहीं है कि इसमें 60 से कम एफपीएस है, लेकिन इसका मतलब है कि सीपीयू की जरूरत के समय के कुछ हिस्सों में ग्राफिक्स-कार्ड वही काम करेगा, जो कम से कम 3 डी स्पेस में आता है।
tkausl

4
अच्छी तरह से कारण GPUs इस पर बेहतर है क्योंकि वे shader invocations समानांतर करने के लिए स्थापित कर रहे हैं।
शाफ़्ट

4
@ user148013 इस आदमी से मैंने जो देखा है, मैं कहूंगा कि वह "बहुत समझदार" के बिल्कुल विपरीत है।
बार्टेक बानचेविच

4
यह सिर्फ इतना नहीं है कि यह प्रस्तुत करना धीमा है (केसी के सॉफ्टवेयर रेंडरर आश्चर्यजनक रूप से त्वरित थे)। यह है कि यह सामान्य रैम से वीडियो रैम तक पुश करने के लिए बहुत सारे डेटा है। वीडियो कार्ड में एक विशाल बिटमैप को धक्का देना, बस के प्रकार के आधार पर, फ्रेम समय का एक महत्वपूर्ण हिस्सा ले सकता है। GPU का उपयोग करके, आप कभी-कभी बनावट को धक्का देते हैं, और फ्रेम के बाद फ्रेम के लिए उनका उपयोग करते हैं।
एड्रियन मैकार्थी

2
@ user148013 आकर्षक और अच्छी प्रोग्रामिंग के बीच अंतर है। वे ओवरलैप कर सकते हैं, लेकिन अक्सर वे संघर्ष में होते हैं। मैं "मैं सॉफ्टवेयर में प्रस्तुत कर सकता हूँ [जैसे मेसा कर सकते हैं ...]" आकर्षक और निश्चित रूप से अच्छा नहीं है

11

वह जो करता है उसे सॉफ्टवेयर रेंडरिंग कहा जाता है , ओपेनग्ल क्या करता है GPU प्रतिपादन है

उनमें क्या अंतर है? गति और स्मृति।

रेखांकन (स्क्रीन पर त्रिकोणों को भरना) में कुछ समय लगता है। यदि आप इसे सीपीयू पर करते हैं, तो आप अनिवार्य रूप से उस समय को गेम लॉजिक से दूर ले जाते हैं, खासकर यदि यह अच्छी तरह से अनुकूलित नहीं है।

और कोई फर्क नहीं पड़ता कि छवि कितनी छोटी है, उसे इसके लिए निश्चित मात्रा में मेमोरी आवंटित करने की आवश्यकता है। GPU में इसके लिए एक वीडियो मेमोरी है।


क्या OS X पर भी सॉफ्टवेयर प्रतिपादन संभव है? क्योंकि ऐसा लगता है कि ग्राफिक्स के साथ जो करना है वह सब कुछ OpenGl द्वारा किया गया था अब धातु।
user148013

2
@ user148013 आपके पास कुछ गलतफहमियां हैं। ओपनजीएल एक मल्टीप्लेयर एपीआई है, इसलिए यह ओएस एक्स पर चल सकता है , वास्तव में यह "आधुनिक" (पोस्ट 2000) जीपीयू के साथ सब कुछ पर चल सकता है। धातु केवल Apple उपकरणों के लिए एक अलग API है। सॉफ्टवेयर रेंडरिंग भी इन दोनों से अलग चीज है, और हां, यह ओएस एक्स पर भी किया जा सकता है। यह मूल रूप से सीपीयू के साथ स्क्रीन पर मैन्युअल रूप से पिक्सेल सेट कर रहा है।
बैलिंट

ठीक यही कारण है कि मैंने इसलिए पूछा क्योंकि जहां तक ​​मुझे पता है कि सॉफ्टवेयर का प्रतिपादन OS X पर नहीं किया जा सकता है। कोको OpenGl तक पहुंचता है, क्वार्ज़ OpenGl का उपयोग करता है, कोर फ्रेमवर्क OpenGl का उपयोग करता है। वे सभी अब धातु का उपयोग तेजी से कर रहे हैं। लेकिन मुझे एक भी फ़ंक्शन नहीं मिला है जो GPU (OpenGl, Metal) के उपयोग के बिना स्क्रीन पर एक बफर खींचता है।
user148013

1
@ user148013 क्योंकि यह ओएस के लिए विशिष्ट नहीं है, और न ही कार्यान्वयन। मान लीजिए कि आप इसे जावा में लागू करना चाहते हैं, क्योंकि यह मल्टी-प्लेटफॉर्म के विकास के लिए एक प्रसिद्ध विकल्प है। जावा के साथ, आप इसे पहले एक विंडो (JFrame) बनाकर कर सकते हैं, फिर उस पर सीधे ड्राइंग के बजाय, आप एक छवि बनाते हैं, फिर आप इस छवि को फ्रेम पर रख देते हैं। हालाँकि यह "त्रिकोण" या "लाइन" शब्दों को नहीं जानता होगा। केवल रंग। आपको अपने आप को एक रेखांकन एल्गोरिथ्म के साथ लागू करने की आवश्यकता है। यही कारण है कि हम OpenGL पसंद करते हैं, यह तेज़ है, और उपयोग करने में थोड़ा आसान है। यह मूल रूप से एक रेखांकन एपीआई है।
बैलिंट

2
@ user148013 वे क्यों नहीं कर सके? यदि वे एक खिड़की खोल सकते हैं, और वे बिना एपीआई के उस पर 1 छवि बना सकते हैं, तो वे कर सकते हैं।
बैलिंट

8

हालांकि दूसरों के उत्तर मेरे द्वारा दिए गए किसी भी उत्तर की तुलना में अधिक सही हैं, मैं इस बारे में मूलभूत गलतफहमी को इंगित करना चाहता हूं कि सॉफ्टवेयर विकास कैसे काम करता है जो मुझे लगता है कि आपके प्रश्न को रेखांकित करता है। हालांकि बिना किसी ढांचे के "अपने आप से" चीजें करना हमेशा संभव होता है, और ऐसा करने से अक्सर शैक्षिक लाभ होता है, वास्तविकता यह है कि आधुनिक सॉफ्टवेयर कैसे नहीं बनाया जाता है।

किसी ने हार्डवेयर और उस पर चलने वाली मशीन भाषाओं का निर्माण किया। कोई और व्यक्ति उच्च स्तरीय भाषाएं और संकलक, ड्राइवर और ऑपरेटिंग सिस्टम, ग्राफिक्स लाइब्रेरी और चालू बनाता है। हम प्रत्येक अपने पूर्ववर्तियों के काम का निर्माण करते हैं। यह न केवल "ठीक है", यह एक आवश्यकता है।

आप टूलकिन में मनमाने बिंदु पर "स्वीकार्य" है या नहीं की रेखा खींच रहे हैं। आप बस के रूप में आसानी से कह सकते हैं "सी + + का उपयोग क्यों करें जब आप विधानसभा में एक ही काम कर सकते थे?", या "कीबोर्ड चालकों पर भरोसा क्यों करें जब आप बस इसके तारों से आने वाले वोल्टेज को आसानी से पढ़ सकते हैं और इसे स्वयं गणना कर सकते हैं?" दिन भर में, या सालों में हर किसी को खुद सब कुछ करने के लिए पर्याप्त समय नहीं होता है।

यह केवल सॉफ्टवेयर विकास पर लागू नहीं होता है, लेकिन सामान्य रूप से आधुनिक जीवन के लिए। क्या आपने कभी उस आदमी के बारे में सुना है जिसने खरोंच से खुद को टोस्टर बनाया है? http://www.thomasthwaites.com/the-toaster-project/ । यह वास्तव में लंबा समय और पूरे प्रयास में लगा। एक टोस्टर के लिए। सब कुछ अपने आप में ईथर से एक वीडियो गेम को वास्तविक बनाने के लिए आवश्यक सब कुछ बनाने की कोशिश करें !


2
मुझे लगता है कि यह एक अच्छा जवाब है क्योंकि यह बताता है कि शैक्षिक उद्देश्यों के लिए पहिया को फिर से मजबूत करने के विचार के बिना रूपरेखा का उपयोग करना क्यों अच्छा है।
फ्राॅप

3

इंजन बहुत अधिक करते हैं जो स्क्रीन पर चित्र बनाते हैं। वे प्रकाश व्यवस्था, छाया, इनपुट, टकराव का पता लगाते हैं। यहां तक ​​कि सिर्फ प्रतिपादन भाग स्क्रीन पर एक बफर को धक्का देने की तुलना में अधिक जटिल है। 3 डी दृश्यों के लिए विशेष रूप से आपको बिटमैप की तुलना में कहीं अधिक जटिल डेटा पर बहुत सारी गणना करने की आवश्यकता है। मैं आपको एक कार के साथ एक सादृश्य देता हूं: जिसे आप सरल बता रहे हैं वह कार का निकास है। आप बस सही आकार के साथ एक पाइप बनाते हैं और फिर आप एक छोर से दूसरे छोर तक गैस को धक्का देते हैं। हालांकि यह कार के तंत्र में होने वाली एकमात्र चीज से दूर है।


3

उपरोक्त उत्तर उत्कृष्ट हैं, लेकिन कोई भी वास्तव में सबसे महत्वपूर्ण कारण के रूप में नहीं जाता है कि ओपनगेल और ऐसे क्यों पसंद किए जाते हैं। मुख्य कारण एक स्क्रीन पर लाखों पिक्सल रेंडर करने जैसी चीजों के साथ काम करने के लिए विशेष रूप से डिजाइन किए गए हार्डवेयर का उपयोग करना है , जीपीयू

सॉफ्टवेयर रेंडरिंग के साथ, सीपीयू का उपयोग करते हुए, रेंडरर एक-एक करके, एक बिटमैप पर सभी पिक्सल पर लूपिंग करेगा और स्क्रीन पर प्रत्येक को दिखाने के आदेश जारी करेगा। इसलिए यदि आप 1000x1000 आकार की छवि प्रदान कर रहे हैं, तो आपके सीपीयू के लिए 1,000,000 लूप खत्म हो जाएंगे। वे सब के बाद मन में नियंत्रण के साथ डिजाइन किए गए हैं; यदि बहुत सी स्थितियाँ, निर्देशों के एक सेट से दूसरे में कूदना और नियंत्रण के प्रवाह की सख्त दिशा। हालाँकि, एक GPU को ज्ञान के साथ बनाया गया है जो वह कर रहा होगा स्क्रीन पर पिक्सल पर समान लूपिंग है।एक GPU एक 1000000 पुनरावृत्तियों के साथ लूप के लिए ले जाएगा और प्रत्येक के लिए काम करने के लिए कोर की अपनी विशाल संख्या में काम को विभाजित करेगा, समानांतर में, और एक दूसरे से स्वतंत्र **। इसलिए सीपीयू के विपरीत, हर बार एक GPU अगर एक-इतर स्थिति में आता है, तो यह दोनों कोड शाखाओं को स्वयं और THEN के दो कोरों को सँभालेगा, बहुत अंत में, यह देखेगा कि क्या स्थिति का मूल्यांकन करता है और क्या करता है अनियोजित शाखा का परिणाम (यही कारण है कि GPU shaders में बहुत सारी इफ़ेक्ट-अन्य स्थितियाँ समाप्त हो जाती हैं; वे हमेशा बर्बादी के लिए ज़िम्मेदार होती हैं)।

तो हाँ, GPUs समानता के आसपास बनाया गया है । सीपीयू की तुलना में यह उनके लिए बहुत तेजी से पिक्सेल पर काम कर रहा है।


0

देखें क्या मैं वास्तव में एक ग्राफिक्स एपीआई का उपयोग करने की आवश्यकता है?

ज़रूर, आप एक बफर के लिए पूछ सकते हैं, इसमें कुछ बिट्स सेट कर सकते हैं और इसे स्क्रीन पर लिख सकते हैं। यह मूल रूप से पीसी पर ग्राफिक्स प्रोग्रामिंग करने का एकमात्र तरीका था जब तक कि 3DFX से मध्य 90 के दशक में ग्राफिक्स त्वरक की उपलब्धता नहीं थी। यहां तक ​​कि विंडोज में, डायरेक्टएक्स को वीडियो मेमोरी तक सीधे पहुंच देने के लिए विकसित किया गया था।

लेकिन नॉन-पीसी हार्डवेयर, डेडिकेटेड गेम मशीनों में, प्रोसेसर से काम बंद करके ग्राफिक्स को तेज करने की तकनीकें हमेशा से रही हैं। यहां तक ​​कि अटारी 2600 में "हार्डवेयर स्प्राइट्स" था, आंशिक रूप से क्योंकि इसमें फ्रेमबफ़र के लिए पर्याप्त रैम नहीं था।

बाद में (80 के दशक के मध्य) गेम कंसोल को प्लेटफॉर्म गेम्स के लिए अनुकूलित किया गया था। फिर, कोई फ्रेमबफ़र नहीं; इसके बजाय प्रोग्रामर टाइल्स की ग्रिड को निर्दिष्ट कर सकता है :

जेनेसिस ग्राफिक्स हार्डवेयर में 2 स्क्रॉल करने योग्य विमान होते हैं। प्रत्येक विमान टाइल्स से बना है। प्रत्येक टाइल एक 8x8 पिक्सेल वर्ग है जिसमें 4 बिट प्रति पिक्सेल है। प्रत्येक पिक्सेल में 16 रंग हो सकते हैं। प्रत्येक टाइल 1 से 4 रंग तालिकाओं का उपयोग कर सकती है, इसलिए स्क्रीन पर आप एक बार में 64 रंग प्राप्त कर सकते हैं, लेकिन किसी भी विशिष्ट टाइल में केवल 16। टाइल्स को 32 बाइट की आवश्यकता होती है। ग्राफिक्स मेमोरी की 64K है। यह 2048 अद्वितीय टाइलों के लिए अनुमति देता है यदि स्मृति का उपयोग कुछ और के लिए नहीं किया गया था।


-2

आधुनिक CPU सॉफ्टवेयर में किसी भी 2d गेम को करने के लिए काफी तेज हैं, इसलिए 2d ग्राफिक्स के लिए OpenGL / DirectX कोई लाभ नहीं प्रदान करेगा, इसके अलावा अपनी परियोजना के लिए एक और निर्भरता और जटिलता की एक परत को जोड़ना, जैसे कि एक गुच्छा आकर्षित करने के लिए 3 डी प्रोजेक्शन मैट्रिक्स सेट करना। स्प्राइट्स और GPU में डेटा अपलोड करना।

OpenGL आपको अपने सभी स्प्राइट्स को 512x512 टेक्सचर (पुराने कंसोल की एक कलाकृति, जैसे PSX, वीडियो मेमोरी पेजों में ग्राफिक्स पैक करना) के अंदर पैक करने के लिए मजबूर करेगा, आपको जटिल स्प्राइट पैकिंग कोड लिखने की आवश्यकता होगी।

On the other hand, if you're doing 3d, rendering millions of triangles with complex shading, then GPU is unavoidable. Long ago there was simpler 2d only version of Direct3d, called DirectDraw, which GPU accelerated sprite drawing, but now Microsoft no longer supports it, possibly because CPUs are fast enough to do 2d without any acceleration, if you don't care about energy saving.

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.