• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            厚積薄發(fā),滴水穿石

            搬家到主站了:http://www.cnblogs.com/cokecoffe/
            隨筆 - 45, 文章 - 8, 評(píng)論 - 12, 引用 - 0
            數(shù)據(jù)加載中……

            OpenGL ES multithreading and EAGLSharegroup

            http://developer.apple.com/library/ios/#qa/qa1612/_index.html
            Technical Q&A QA1612

            OpenGL ES multithreading and EAGLSharegroup

            Q:  In my multithreading OpenGL ES application, I load textures (or vertices) on a secondary thread then draw them onto screen on the main thread. Occasionally I see blank images or application freezes. What could be causing this?

            A: In my multithreading OpenGL ES application, I load textures (or vertices) on a secondary thread then draw them onto screen on the main thread. Occasionally I see blank images or application freezes. What could be causing this?

            It is very likely that the main and background threads are accessing the same OpenGL ES context simultaneously.

            OpenGL ES commands for a specific context are not reentrant. You should never have more than one thread accessing a single context at the same time. It is highly recommended that you use only one thread per context.

            Listing 1 demonstrates how to create and make current a context contextB using the sharegroup property (an EAGLSharegroup object) obtained from another already-allocated context contextA. Such contexts that belong to the same sharegroup can share resources, for example, textures, FBOs, etc. So you may use contextB on the secondary thread to create textures, and contextA on the main thread to draw the textures onto screen.


            Listing 1  Creating a context belonging to the same sharegroup

            contextB = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1      
                                         sharegroup:contextA.sharegroup]; 
            if (!contextB || ![EAGLContext setCurrentContext:contextB]) 
            {       
             // Handle errors here 
            }

             

            When you want to modify a resource on one context, you must first make sure it is not currently in use on another, even if you are accessing them from different threads. Once you modify it, its state is undefined until flushing and binding the object have been completed. You should never use an undefined object, whether you access it from a different context or not.

            Take a texture as an example. Listing 2 shows the correct way to deal with multiple contexts. Any other ordering will not ensure consistent and correct behavior. It may result in data corruption, leaks, or crashes otherwise.

            Listing 2  Modifying a texture on context B prior to using it on context A


            // 1. Ensure context A is not bound to the texture
             [EAGLContext setCurrentContext:contextA];
             glBindTexture(GL_TEXTURE_2D, 0);  

            // 2. Call flush on context A  
            glFlush();   

            // 3. Modify the texture on context B 
            [EAGLContext setCurrentContext:contextB]; 
            glBindTexture(GL_TEXTURE_2D, texId); 

             //
             Modify the texture data here
             //

            // 4. Call flush on context B 
            glFlush();  
             
            // 5. Rebind the texture on context A 
            [EAGLContext setCurrentContext:contextA];
             glBindTexture(GL_TEXTURE_2D, texId); 

            // 6. Use the texture as normal on context A

             

            For more information on the EAGLContext/-initWithAPI:sharegroup: API and the sharegroup property, see the EAGLContext Class Reference.

            posted on 2011-11-15 17:36 Wangkeke 閱讀(1811) 評(píng)論(0)  編輯 收藏 引用 所屬分類: IOS

            久久精品夜色噜噜亚洲A∨| 色欲久久久天天天综合网| 日韩AV无码久久一区二区| 伊人精品久久久久7777| 亚洲欧美精品一区久久中文字幕| 国产69精品久久久久99尤物| 国产精品99久久久久久宅男| 国产午夜精品理论片久久| 一级做a爰片久久毛片人呢| 国产69精品久久久久9999| 777久久精品一区二区三区无码| 精品久久久久久综合日本| 精品熟女少妇a∨免费久久| 久久国产精品-国产精品| 伊人丁香狠狠色综合久久| 久久精品国产精品亜洲毛片| 亚洲国产精品一区二区三区久久| 久久久久亚洲精品天堂久久久久久| 污污内射久久一区二区欧美日韩| 欧美亚洲国产精品久久高清| 亚洲精品无码久久久久| 亚洲午夜久久久精品影院| 久久国产精品无| 日日噜噜夜夜狠狠久久丁香五月| 久久免费小视频| 久久国产亚洲精品| 四虎国产精品免费久久久| 精品久久久久成人码免费动漫 | 中文成人无码精品久久久不卡 | 久久久久九国产精品| 老司机午夜网站国内精品久久久久久久久 | 久久亚洲电影| 97久久超碰国产精品旧版| 日韩久久久久中文字幕人妻| 伊人久久大香线蕉av不变影院| 精品久久久久香蕉网| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 97精品伊人久久久大香线蕉| 香蕉久久一区二区不卡无毒影院| 久久香综合精品久久伊人| 草草久久久无码国产专区|