2011-06-12 16 views
5

मैं काफी क्यों इस कोड आईओएस पर GPU के लिए धीमी है समझ नहीं कर सकते हैं, इस कोड को बिना किसी समस्या के विंडोज पर महान काम करता है।आईओएस पर glBufferSubData प्रदर्शन abysmal?

असल में मैं जो कर रहा हूं वह यह है कि मेरे पास एक बड़ा गतिशील वर्टेक्स बफर (GL_STREAM_DRAW) है और मैं इसे केवल भागों के हिस्सों को अपडेट करने का प्रयास करता हूं, जो कि एक फ्रेम में ओवरलैप नहीं होना चाहिए, इसलिए उन्हें फ्लश नहीं करना चाहिए और सीपीयू खत्म करने के लिए GPU के लिए इंतजार नहीं करना चाहिए, लेकिन यह स्पष्ट रूप से मामला मैं जब कम से कम हो सकता है 10 से 20 त्रिकोण ड्राइंग भी एक iPhone 4 पर 10 एफपीएस approximatly प्राप्त नहीं है ... जबकि मैं 400 से अधिक एफपीएस पर मिलता है मेरे पीसी को एक ही कोड के साथ ...

जैसा कि आप ट्रेस में देख सकते हैं, मैं उसी बफर का पुन: उपयोग कर रहा हूं, लेकिन मैं यह सुनिश्चित कर रहा हूं कि अपडेट किए गए भाग ओवरलैप न हों ... मैं क्या कर सकता हूं प्रदर्शन में सुधार?

 
Index Trace 
695 glBindBuffer(GL_ARRAY_BUFFER, 1u) 
696 glBufferSubData(GL_ARRAY_BUFFER, 144l, 144l, 0x0453d090) 
697 glBlendFunc(GL_SRC_ALPHA, GL_ZERO) 
698 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 
699 glActiveTexture(GL_TEXTURE0) 
700 glBindTexture(GL_TEXTURE_2D, 12u) 
701 glUseProgram(12ul) 
702 glUniform4fv(uniform_000000001cd24950_12_0, 1, {0.0500000f, 0.0000000f, 0.0000000f, 0.0000000f}) 
703 glUniform4fv(uniform_000000001cd24950_12_1, 1, {0.0000000f, 0.0333333f, 0.0000000f, 0.0000000f}) 
704 glUniform4fv(uniform_000000001cd24950_12_2, 1, {0.0000000f, 0.0000000f, -0.0010010f, 0.0000000f}) 
705 glUniform4fv(uniform_000000001cd24950_12_3, 1, {-0.0000000f, 0.6333333f, -0.0010010f, 1.0000000f}) 
706 glDrawArrays(GL_TRIANGLES, 6, 6) 
707 glBindBuffer(GL_ARRAY_BUFFER, 1u) 
708 glBufferSubData(GL_ARRAY_BUFFER, 288l, 144l, 0x0453d120) 
+0

तो आप यहां नए हैं, accpet के बारे में और अप वोट सुविधाओं खुद इनफोर्मा को भूल नहीं है। –

उत्तर

5

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

एक समाधान ARB_map_buffer_range विस्तार है, जो चालक को स्पष्ट संकेत दे सकता है हो सकता है। लेकिन मुझे यकीन नहीं है कि यह ईएस में समर्थित है या नहीं। अन्यथा आप अपने बफर को कई छोटे में विभाजित नहीं करेंगे।

+1

हाँ यह है कि क्या मैं अंत में लगा है ... यह दुख की बात है कि कैसे ओपन चीजों के उन प्रकार के लिए डायरेक्ट के साथ ही काम नहीं करता है यह हमेशा ओपन में शीर्ष बफ़र्स से निपटने के लिए एक दर्द हो गया। समाधान मैंने पाया कि iPhone पर काम किया मेरी गतिशील शिखर बफर की जरूरत के लिए सादे शिखर सरणियों (कोई VBOs) पर वापस लौटने के लिए था। –