सतह और बनावट के बीच अंतर (एसडीएल / सामान्य)


84

क्या कोई मुझे सरल शब्दों में समझा सकता है कि बनावट और सतह में क्या अंतर है? मैंने देखा कि यह और के SDL2रूप में इस्तेमाल किया । बनाई गई है से है जो बदले में छवि / बिटमैप से बनाया जाता है। दोनों पिक्सेल का संग्रह हैं। लेकिन मुझे उनके बीच मुख्य अंतर नहीं दिखता है (GPU के साथ कुछ करना है?)SDL_SurfaceSDL_TextureSDL_TextureSDL_Surface

मैंने इसे Google करने की कोशिश की, लेकिन मुझे जो भी स्पष्टीकरण मिले, वे बहुत जटिल थे, उन्हें बिना समझे कंप्यूटर ग्राफिक्स के सामान में खोद कर निकाल दिया।


7
मेरे जवाब पर एक नज़र डालें: stackoverflow.com/questions/21007329/what-is-a-sdl-renderer/… यह SDL_Textureऔर SDL_Surfaceसाथ ही समझाएगा SDL_Renderer। सामान्य तौर पर, SDL_Textureरेंडरिंग के लिए क्या उपयोग किया जाता है, लेकिन जब आप बनावट की जानकारी का उपयोग करते हुए लोड करते हैं SDL_Imageया SDL_ttf, आपको डेटा मिल जाएगाSDL_Surface
olevegard

@olevegard यह उत्तर बहुत कॉपी पेस्ट है, मैं वास्तव में कुछ ज्ञान के साथ एक उत्तर चाहूंगा।
यह

3
जैसा कि आप मानते हैं, SDL_Surfaceकेवल पिक्सेल का एक संग्रह SDL_Textureहै, an efficient, driver-specific representation of pixel dataजिसका अर्थ है कि इसका उपयोग GPU wiki.libsdl.org/SDL_Texture द्वारा किया जा सकता है । क्या यह आपके प्रश्न का उत्तर है? आपको वास्तव में अधिक समझने के लिए कंप्यूटर ग्राफिक्स में गहराई से खुदाई करनी चाहिए
ओलेवेगार्ड

2
@olevegard बहुत बुरा है कि आप जवाब में नहीं लिखा था। यहाँ आपका मौका है
यह

जवाबों:


86

मूल रूप से आपकी धारणा "GPU के साथ कुछ करना है?" सही है।

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

SDL_Textureदूसरी ओर, एक हार्डवेयर रेंडरिंग में उपयोग किया जाता है , बनावट वीआरएएम में संग्रहीत होती है और आपके पास सीधे इसके साथ पहुंच नहीं होती है SDL_Surface। रेंडरिंग ऑपरेशन्स को GPU द्वारा उपयोग किया जाता है, आंतरिक रूप से, या तो OpenGL या DirectX (केवल विंडोज पर उपलब्ध) एपीआई, जो बदले में आपके वीडियो हार्डवेयर का उपयोग कर रहे हैं, इसलिए हार्डवेयर रेंडरिंग नाम।

यह कहने की आवश्यकता नहीं है कि हार्डवेयर रेंडरिंग सॉफ्टवेयर रेंडरिंग की तुलना में तेज़ी के आदेशों द्वारा होता है और इसे हमेशा प्राथमिक विकल्प माना जाना चाहिए।


4
यदि हार्डवेयर त्वरण उपलब्ध है, तो क्या SDL_Surface का उपयोग करने का कोई फायदा है? उदाहरण के लिए छोटे रेंडरिंग ऑपरेशन, हार्डवेयर में जाने के लिए ओवरहेड बहुत बड़ा है?
टिममोस

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

1
@ टिटमोस आपका उस तरह से पूर्ण नियंत्रण है जिस तरह से सतहों पर काम किया जाता है, उत्पन्न होता है, पूर्ण रीड राइट कंट्रोल, मेरा मतलब वास्तव में है ... नियंत्रण वह है जो एक सतह आपको देता है। OpenGL और ऐसे API को GPU के साथ काम करना आवश्यक है क्योंकि GPU निर्माता GPU के लिए सीधी पहुंच की अनुमति नहीं देते हैं, यही कारण है कि आप अक्सर सुनेंगे कि लोग OpenGL या DX के साथ अक्षमताओं के बारे में शिकायत करते हैं या केवल उन चीजों को गूंगा करते हैं जो API करते हैं, क्योंकि वे तेजी से या अधिक कुशल कुछ लिख सकता है, लेकिन वे नहीं कर सकते, क्योंकि उनके पास GPU तक कोई पहुंच नहीं है।
ट्रेवर हार्ट

सलाह है कि क्यों SDL_FillRectतेज है SDL_RenderFillRect? क्यू: stackoverflow.com/q/65450100/4632019
यूगन कोनकोव

10

SDL_Texture नियमित RAM के बजाय आपके वीडियो कार्ड के VRAM में लोड किया गया है।


2

इस बारे में अधिक जानकारी है:

https://thenumbat.github.io/cpp-course/sdl2/05/05.html

जैसा कि पिछले पाठ में बताया गया है, बनावट सतहों के बराबर रेंडरिंग GPU है। इसलिए, फ़ंक्शन SDL_CreateTextureFromSurface () फ़ंक्शन का उपयोग करके, लगभग हमेशा सतहों से बनाया जाता है। यह कार्य कमोबेश वही करता है जिसकी आप अपेक्षा करते हैं- पैरामीटर रेंडरिंग संदर्भ और बनावट बनाने के लिए एक सतह है। अन्य निर्माण कार्यों की तरह, यह विफलता पर NULL लौटेगा।

मुझे उम्मीद है इससे आपको मदद मिली होगी!


2

सतहों आपके रैम का उपयोग करते हैं और बनावट आपके वीडियो कार्ड का उपयोग करते हैं जो सतहों की तुलना में अधिक तेज है।

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