??xml version="1.0" encoding="utf-8" standalone="yes"?>人人狠狠综合久久亚洲88,国内精品久久久久久久影视麻豆,久久这里只有精品视频99http://m.shnenglu.com/richardhe/category/8497.html学无止境!永远学下?zh-cnThu, 11 Dec 2008 11:18:23 GMTThu, 11 Dec 2008 11:18:23 GMT60D3D资源理http://m.shnenglu.com/richardhe/articles/69204.htmlRichardHeRichardHeThu, 11 Dec 2008 10:58:00 GMThttp://m.shnenglu.com/richardhe/articles/69204.htmlhttp://m.shnenglu.com/richardhe/comments/69204.htmlhttp://m.shnenglu.com/richardhe/articles/69204.html#Feedback0http://m.shnenglu.com/richardhe/comments/commentRss/69204.htmlhttp://m.shnenglu.com/richardhe/services/trackbacks/69204.html

摘要

受管贴图Q?/span>Managed texturesQ也是我们通常所谓的“自动理贴图”Q,?/span>DX6中首ơ被引入Q经q一pd的改q和增强Q在DX9中自动管理的资源cd增加到脓(chung)图,点~冲Q顶点烦引缓Ԍ所有这些资源用统一的公共接口。通过使用D3D资源理器,应用E序可以L的处理设备丢失、处理稍微过量的昑֭使用?/span>

有时开发者在使用受管资源会遇C些困难,q部分归咎与pȝ的抽象特性。在大多数情况下使用?span class="GramE">对?/span>是不错的选择Q但有时Z性能考虑也会使用非托资源。这文章将讨论一般情况下如何处理资源Q受与非受资源的行ؓ差别?/span>

 

内容

l         昄内存

l         受管资源

l         驱动制资源

l         默认资源

l         pȝ内存资源

l         一般性的

 

昄内存

Z使得资源可以利用昑֭Q?/span>GPU需要通过内存讉K定位他?/span>GPU讉KQ?/span>Local video memoryQ显存是非常高效的,q且某些资源Q例?/span>RenderTargetQ深度、模板缓Ԍ必须在本地显存(Local video memoryQ定位。由?/span>AGP的出玎ͼGPU可以直接讉K部分pȝ内存Q而这部分pȝ内存区域是所谓的非本地显存(non-local video memoryQ,当然q部分内存(昑֭Q也是不能挪做它用的。非本地昑֭仅能?/span>GPU讉KQ与讉K本地昑֭相比Q其效率低一些。需要明的是,所?/span>AGP内存在设备丢失时都会失效Q都需要在恢复他们?/span>

一些集成显卡用统一内存l构Q?/span>Unified Memory ArchitectureQ,q样d存可以被pȝM一个设备寻址?/span>D3D支持UMA而不需要修改Q何代码,q样我们把系l内存配|ؓ本地昑֭Q硬件确保资源的定位像传统的结构一栯行工作?/span>

受管资源

大部分资源应该?/span>POOL_MANAGED方式创徏Q即受管资源。所有受资源将被创建在pȝ内存Q在需要的时候复制到昑֭。当发生讑֤丢失时会自动copypȝ内存到显存。既然不是所有受资源都需要一ơ送入昑֭Q这样你可以提交过渲染每所必须使用的最内存容量,但是q样会?span class="GramE">大量昑֭内容因ؓ?span class="GramE">|?/span>而写到磁盘上Q这是非常耗时的。这也是Z么恢复设备如此耗时Q因为需要将大量盘数据复制到显存?/span>

DX会ؓ每䆾资源在最后一ơ用时加上旉戻Iq样当显存分?/span>p|Ӟ它会释放那些最q最用的资源Q?/span>LRU法Q。?/span>SetPriority函数可以标记资源的重要程度,重要的资源优于时间戳的判断,所以那些比较常用的资源应该讄高优先Q而不用担心因为时间戳q期而导致资源被释放。在DX9中,驱动E序提供的显存管理信息是非常有限的,q行时可能不得不清除大量资源用于分配_的内存。设|适合的优先是非常有用的Q这?/span>D3D不会清除那些马上又需要用的资源。应用程序可以强制调?/span>EvictManagedResources清除所有受资源,但是如果下一帧又需要重新加载这些资源,q将是非常耗时的,不过q个函数在那些场景明N要改变(比如q入下一个关卡)的情况下Q还是非常有用的?/span>

如果“当前?#8221;内需要非常多资源用于渲染Q这是仉烦的事情Q用前面?/span>LRU方式调度资源效率׃太理想了Q这个时候?/span>MRU资源调度方式取代Q即优先清理那些比较z跃的资源。注意,q里“当前?#8221;的概忉|?/span>BeginScene?/span>EndScene之间的需要渲染的帧?/span>

开发h员如果想得到关于受管资源的更多信息,可以通过IDirect3DQuery9接口查询Q但是这个接口仅能用于调试模式(debug runtimesQ,在发布版本中Q应用程序不能依靠改接口的信息做M假定?/span>

了解资源理如何工作可以帮助我们调试、调整程序,重要的是应用E序不要太过依赖当前的运行库Q或者驱动程序)的资源管理方式,驱动更新有可能导致其行ؓ发生变化Q将来的D3D会有套久经考验的资源管理方式?/span>

驱动E序理的资?/span>

D3D驱动可以自由的实?#8220;由驱动管理脓(chung)?#8221;的特性,通过D3DCAPS2_CANMANAGERESOURCED可?/span>查询g驱动是否支持q个Ҏ(gu),q样驱动代?/span>D3Dq行库管理资源?span class="GramE">对于U少?/span>的硬件是支持q个Ҏ(gu)的Q对于大多数g则不相同,你可以咨询你的品提供商获得q方面信息。一般情况下Q你可是使用D3DCREATE_DISABLE_DRIVER_MANAGEMENT方式创徏讑֤Q这样将?/span>D3Dq行库来理资源?/span>

~省资源理Q非受管资源Q?/span>

虽然受管资源非常单,Ҏ(gu)使用Q高效,但是有时我们希望直接往昑֭?/span>写东西,q种情况下我们需要?/span>POOL_DEFAULT方式创徏资源。用这U方式会增加E序的复杂性,代码需要应付所有设备丢q情况Qƈ需要}慎考虑何时复制数据到显存。错误的指定USAGE_WRITEONLY标记或者锁定渲染目标(Render TargetQ将严重影响性能?/span>

锁定POOL_DEFAULTcd的资源很可能DGPU停止q{Q这?/span>POOL_MANAGEDcd的资源是不同的,除非使用一些特性的指示标记。根据资源当前的位置不同Q锁定后得到的指针也不相同,可能是一块时的pȝ内存Q也可能直接指向AGP内存。如果是临时的系l内存,Unlock后将把这D|据送入昑֭Q这是因为如果显卡资?/span>不是只写的(write-onlyQ,Lock的时候数据将不得不被送入一D时的内存Q如果指向的AGP内存区域Q时的拯是可以避免的Q但?/span>cache的行为将会降低性能?/span>

Z避免在写入一整行数据Q?/span>a full cache line of dataQ进?/span>AGP内存区导?/span>write-combing性能下降Q一般是׃发生了一ơ读写周期)Q顺序的讉KAGP内存是推荐的做法Q如果你的程序需要随机的讉KAGP内存Q而你又不希望使用受管资源Q那么你可以使用pȝ内存作ؓ替代Ҏ(gu)Q这样当你生成了数据之后Q可?/span>lock后拷贝,q样不会带来太大的性能损失Q这里的性能损失一般是q冲的“写搜?#8221;操作引v?/span>(注,q里关于词汇cache write-combing译者也不知道对应的中文含义Q只能按照字面意思翻译,见谅)

对于某些cd的资源,使用LOCK_NOOVERWRITE标记会d数据比较有效率,但是多次?/span>LockQ?/span>Unlock同一资源q是需要尽量避免的Q适当的利用多U不同的锁定标记对于效率优化佉K帔R要的Q就像填充锁定内存区域最好?/span>cache友好的(cache-friendlyQ数据访问方式一栗?/span>

受管资源和缺省资源؜合?/span>

受管资源与非受管资源的؜合分配用可能导致显存碎块,q且Cؕ受管资源使用的内存区域。最好在使用受管资源前用非受管资源Q或者用受资源后使用EvictManagedResources函数清除那些受管资源再用非受管资源。记住,所有非受管资源都会帔R昑֭Q这样其他内存需求就不能使用了?/span>

注意Q与以往?/span>DX版本不同Q在?span class="GramE">存缺?/span>Ӟ如果分配非受资源失败,DX9会自?span class="GramE">清除?/span>资源,q有可能D潜在的显存碎块,甚至把资源放入不适当的地方(比如非本地内存的静态脓(chung)囑֌Q。所以,最好在使用受管资源之前分配全部的非受管资源?/span>

动态缺省资?/span>

如果数据需要很高频率更斎ͼ那最好用非受管资源Qƈ使用USAGE_DYNAMIC标记Q这样驱动会军_最适合的地Ҏ(gu)|这些需要经常更新的数据。这通常意味着攄在非本地昑֭中,q样对于GPU来说Q访问速度可能相对要慢一些。而对?/span>UMA架构Q驱动将会选择CPU讉K效率较高的特D地Ҏ(gu)|这些数据?/span>

q种用法Q动态缺省资源类型)一般用于Y蒙皮和基?/span>CPU计算的粒子系l的点/点索引?/span>Buffer填充Q?/span>LOCK_DISCARD标记可以保证资源仍被使用的时候,锁定操作不会Dpȝ停止暂停工作。在q种情况下,使用受管资源会更新系l内存,然后拯到显存。对于系l的非本地内存,多余拯是不需要的?/span>

标准的脓(chung)图是不允讔R定的Q仅仅可以通过UpdateSurface?/span>UpdateTexture函数更新。一些系l支持动态脓(chung)图,它可以通过配合使用LOCK_DISCARD标记q行锁定Q但q需要检?/span>D3DCAPS2_DYNAMICTEXTURESg能力。对于高动态脓(chung)图(如视频、程序生成脓(chung)图)Q最好用非受管资源和系l内存资源,q且通过UpdateTexture函数更新贴图。对于高频度的粒子更斎ͼUpdateTexture函数可能是最好的选择?/span>

在有限的ȝQ内存带宽下Q静态脓(chung)图资源应该?/span>POOL_MANAGED方式Q这样可以确保它最好的利用本地昑֭Qƈ有较好的效率。对?#8220;半静?#8221;资源Q用动态类型资源有时会获得更好的效率?/span>

pȝ内存资源

资源可以使用POOL_SYSTEMMEM方式创徏。但他们不能用于囑Ş线Q他们仅?span class="GramE">做ؓ源数?/span>用于更新POOL_DEFAULTcd的资源,q是通过UpdateSurface?/span>UpdateTexture函数完成的。他们的锁定操作也非常简单,管他们同样可能因ؓ前面提到的原因导致系l停止运转?/span>

虽然是在pȝ内存中创源,?/span>POOL_SYSTEMMEM所支持的资源格式和能力Q比如最大尺寸)是受g、驱动限制的。同h在系l内存中创徏资源?/span>POOL_SCRATCH则没有这斚w限制Q它支持所有格式和能力Q但讑֤却不能直接访问它?/span>SCRATCHcd资源一般用于内容创建工兗?/span>

一般性的

了解资源理的技术实现细节对达成你的E序的性能目标是有非常大的帮助的,规划你的资源如何交给D3Dq设计好的结构以便能及时加蝲必要的数据是一仉常复杂的工作Qؓ此我们给Z些好的实늻?span class="GramE">做ؓ一般性的原则Q?/span>

l         预处理你的资源。不要将耗时的加载资源、资源{换、资源优化丢l用户去做,虽然q样便于开发,但确让用h法忍受。预处理q些资源可以加快加蝲Q更快用,你的用户也会发现你的E序跑的更快了?/span>

l         避免在每帧创多的资源。对于过多的资源加蝲Q可以把他们分到多里完?/span>或者不要急于释放那些暂时不用的资源?/span>

l         保在一帧结束时已经断开了所有资源通道。(比如Q顶Ҏ(gu)Q?/span>texture stagesQ顶点烦引)?/span>

l         对于贴图Q徏议用压~脓(chung)图(DXTnQ格式,使用mip-map或者将脓(chung)图拼接ؓ大脓(chung)图用?/span>

l         使用点索引Q这减数据传输量?/span>

l         对于q渡的优化资源管理是需要}慎的。如果你的程序过分依赖驱动、硬件和操作pȝ的某些特征,那么q些E序、硬件的修改会D潜在的性能问题?/span>



RichardHe 2008-12-11 18:58 发表评论
]]>
D3D中的渲染到纹?/title><link>http://m.shnenglu.com/richardhe/articles/63853.html</link><dc:creator>RichardHe</dc:creator><author>RichardHe</author><pubDate>Mon, 13 Oct 2008 01:15:00 GMT</pubDate><guid>http://m.shnenglu.com/richardhe/articles/63853.html</guid><wfw:comment>http://m.shnenglu.com/richardhe/comments/63853.html</wfw:comment><comments>http://m.shnenglu.com/richardhe/articles/63853.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/richardhe/comments/commentRss/63853.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/richardhe/services/trackbacks/63853.html</trackback:ping><description><![CDATA[渲染到纹理是D3D中的一wU技术。一斚wQ它很简单,另一斚w它很强大q能产生很多Ҏ(gu)效果? 比如说发光效果,环境映射Q阴影映,都可以通过它来实现。渲染到U理只是渲染到表面的一个g伸。我们只需再加些东西就可以了。首先,我们要创造一个纹 理,q且做好一些防范措施。第二步我们可以把适当的场景渲染到我们创徏的纹理上了。然后,我们把这个纹理用在最后的渲染上?br>  ?main.cpp<br>  首先我们得声明所需要的对象。当然我们需要一张用来渲染的U理。此外,我们q需要两个Surface对象。一个是用来存储后台~冲区,一个用来当U理的渲染对象。后面我再详l介l它们。另外我们还需要两个矩阵,一个是用来当纹理的投媄矩阵Q另一个是存储原来的矩c?br>  LPDIRECT3DTEXTURE9 pRenderTexture = NULL;<br>  LPDIRECT3DSURFACE9 pRenderSurface = NULL,pBackBuffer = NULL;<br>  D3DXMATRIX matProjection,matOldProjection;<br> 现在我们来创建纹理。前两个参数是纹理的宽度和高度,W三个参数是U理的多U渐q纹理序列参敎ͼ在这里是设ؓ1Q第四个参数非常重要而且必须设ؓ D3DUSAGE_RENDERTARGETQ表明我们所创徏的纹理是用来渲染的。剩下的参数是指纹理格式,点~冲区的内存位置Q和一个指向纹理的? 针。当U理是用来当渲染对象Ӟ点~冲区的内存位置必须设ؓD3D_DEFAILT?br>  g_App.GetDevice()->CreateTexture(256,256,1,D3DUSAGE_RENDERTARGET,D3DFMT_R5G6B5,D3DPOOL_DEFAULT,&pRenderTexture,NULL);<br> Z讉KU理内存对象Q我们需要一个Surface对象Q因为D3D中的U理是用q样的一个Surface来存储纹理数据的。ؓ了得到纹理表面的 Surface,我们需要调用方法GetSurfaceLevel() 。第一个参数我们设?Q第二个参数Z个指向surface对象的指针?br>  pRenderTexture->GetSurfaceLevel(0,&pRenderSurface);<br>  下一步就是创Z个适合U理l数的投q阵,因ؓU理的横U|和后台缓冲区的不一栗?br>  D3DXMatrixPerspectiveFovLH(&matProjection,D3DX_PI / 4.0f,1,1,100);<br>  在我们的循环渲染之前Q我们必M存后台缓冲区和它的投qc?br>  g_App.GetDevice()->GetTransform(D3DTS_PROJECTION,&matOldProjection);<br>  g_App.GetDevice()->GetRenderTarget(0,&pBackBuffer);<br> 渲染循环函数可以分ؓ两个部分。第一部分是渲染到U理的过E。因此,渲染对象必须设ؓU理表面。然后我们就可以把东西渲染到q个对象上了。渲染到另一? 表面上和正常地渲染到后台~冲区差不多。只有一点不同,那就是先不调用PrensentQ)函数Q因为纹理上的内容ƈ不需要显C在屏幕上。象qx一P? 们先要重|表面颜色缓冲区Qƈ且调用BeginSence()和EndSence()Ҏ(gu)。ؓ了能够适当的渲染,我们必须讄和纹理表面相W的投媄矩阵? 否则最后的图象可能被扭?br>  //render-to-texture<br>  g_App.GetDevice()->SetRenderTarget(0,pRenderSurface); //set new render target<br>  g_App.GetDevice()->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,D3DCOLOR_X#646464,1.0f,0); //clear texture<br>  g_App.GetDevice()->BeginScene();<br>  g_App.GetDevice()->SetTexture(0,pPyramideTexture);<br>  D3DXMatrixRotationY(&matRotationY,fRotation);<br>  D3DXMatrixTranslation(&matTranslation,0.0f,0.0f,5.0f);<br>  g_App.GetDevice()->SetTransform(D3DTS_WORLD,&(matRotationY * matTranslation));<br>  g_App.GetDevice()->SetTransform(D3DTS_PROJECTION,&matProjection); //set projection matrix<br>  g_App.GetDevice()->SetStreamSource(0,pTriangleVB,0,sizeof(D3DVERTEX));<br>  g_App.GetDevice()->DrawPrimitive(D3DPT_TRIANGLELIST,0,4);<br>  g_App.GetDevice()->EndScene();<br>  渲染循环的第二部分就是渲染最后场景的q程Q也是昄到屏q上的过E)。渲染对象重新设为后台缓冲区Q投q阵重新设为原来的投媄矩阵。由于纹理已l准备好了,所以它和纹理层0相关联?br>  //render scene with texture<br>  g_App.GetDevice()->SetRenderTarget(0,pBackBuffer); //set back buffer<br>  g_App.GetDevice()->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,D3DCOLOR_X#000000,1.0f,0);<br>  g_App.GetDevice()->BeginScene();<br>  g_App.GetDevice()->SetTexture(0,pRenderTexture); //set rendered texture<br>  g_App.GetDevice()->SetTransform(D3DTS_WORLD,&matTranslation);<br>  g_App.GetDevice()->SetTransform(D3DTS_PROJECTION,&matOldProjection); //restore projection matrix<br>  g_App.GetDevice()->SetStreamSource(0,pQuadVB,0,sizeof(D3DVERTEX));<br>  g_App.GetDevice()->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);<br>  g_App.GetDevice()->EndScene();<br>  g_App.GetDevice()->Present(NULL,NULL,NULL,NULL);<br>  最后我们通过调用Release()Ҏ(gu)释放Surface对象?br>  pRenderSurface->Release();<br>  pRenderSurface = NULL;<br>  pBackBuffer->Release();<br>  pBackBuffer = NULL;<br>  渲染到纹理能让你做很多事情,但是你必L意一些限制。首先深度缓冲区必须L大于或等于渲染对象的大小。此外,渲染对象和深度缓冲区的格式必M致?img src ="http://m.shnenglu.com/richardhe/aggbug/63853.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/richardhe/" target="_blank">RichardHe</a> 2008-10-13 09:15 <a href="http://m.shnenglu.com/richardhe/articles/63853.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>游戏中汉字显C的实现与技?/title><link>http://m.shnenglu.com/richardhe/articles/63851.html</link><dc:creator>RichardHe</dc:creator><author>RichardHe</author><pubDate>Mon, 13 Oct 2008 01:12:00 GMT</pubDate><guid>http://m.shnenglu.com/richardhe/articles/63851.html</guid><wfw:comment>http://m.shnenglu.com/richardhe/comments/63851.html</wfw:comment><comments>http://m.shnenglu.com/richardhe/articles/63851.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/richardhe/comments/commentRss/63851.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/richardhe/services/trackbacks/63851.html</trackback:ping><description><![CDATA[     摘要: 游戏中汉字显C的实现与技巧[ZZ] 作者:炎龙工作?千里马肝 版本Qv1.0 最后更新日期:2002-3-30 l言 在游戏中Q因为我们是中国人麻Q通常都需要显C汉字,比方说交待剧情。而对于文字的昄Q英文的昄要较其简单得多,因ؓ只有26个字母,q再加一些标炏V符号什么的Q用一张位图,可以以显C所有的单词了,而相兛_现技巧,也比较轻松?而中文的昄Ҏ(gu)Q要复杂?..  <a href='http://m.shnenglu.com/richardhe/articles/63851.html'>阅读全文</a><img src ="http://m.shnenglu.com/richardhe/aggbug/63851.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/richardhe/" target="_blank">RichardHe</a> 2008-10-13 09:12 <a href="http://m.shnenglu.com/richardhe/articles/63851.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://m.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.aoaya.cn" target="_blank">޷?Vþò</a>| <a href="http://www.beauty-queen.cn" target="_blank">պƷþþվ</a>| <a href="http://www.wxpk10.cn" target="_blank">˶ݺɫۺϾþ</a>| <a href="http://www.xspree.cn" target="_blank">99þþƷһ</a>| <a href="http://www.ode.net.cn" target="_blank">ƷþþþþþþþĻ</a>| <a href="http://www.xnrb.net.cn" target="_blank">ݺ޾þþþþۺ</a>| <a href="http://www.xxupng.cn" target="_blank">ھƷþ鶹Ħ</a>| <a href="http://www.lntyzx.com.cn" target="_blank">޹Ʒþþϼ2</a>| <a href="http://www.dqep.cn" target="_blank">1000Ʒþþþþþþ</a>| <a href="http://www.czphjs.cn" target="_blank">þɫۺһ</a>| <a href="http://www.spiralstar.com.cn" target="_blank">þþƷAV</a>| <a href="http://www.gaguni.cn" target="_blank">91ƷùۺϾþ</a>| <a href="http://www.wangzhuanzhe.cn" target="_blank">Ļþ</a>| <a href="http://www.zsputian.com.cn" target="_blank">97þþþƷۺ88þ</a>| <a href="http://www.ccguofeng.cn" target="_blank">ҹƷþþþ9999</a>| <a href="http://www.xajh2.cn" target="_blank">þþƷ鶹ҹҹ</a>| <a href="http://www.www5303.cn" target="_blank">þ</a>| <a href="http://www.yweishang.cn" target="_blank">Ʒþ㽶߿ۿ </a>| <a href="http://www.viples.cn" target="_blank">ۺ˾þôý</a>| <a href="http://www.jbeq.cn" target="_blank">ɫþþþþۺ</a>| <a href="http://www.ciidc.org.cn" target="_blank">99þþƷѿһ</a>| <a href="http://www.uzxin.cn" target="_blank">㽶þҹɫƷ</a>| <a href="http://www.zhaodongjie.cn" target="_blank">þþþseɫ͵͵޾Ʒav</a>| <a href="http://www.o6uo86.cn" target="_blank">Ļþи</a>| <a href="http://www.giep.cn" target="_blank">þҹ³˿Ƭ</a>| <a href="http://www.site5d.cn" target="_blank">߳þѹۿ</a>| <a href="http://www.mail-lists.cn" target="_blank">ɫ99þþþø߳ۺӰԺ</a>| <a href="http://www.oulihong.cn" target="_blank">þɫۺһ</a>| <a href="http://www.s9459.cn" target="_blank">þ99ۺϾƷ</a>| <a href="http://www.werro.cn" target="_blank">ƷۺרƬþþ </a>| <a href="http://www.daidai360.cn" target="_blank">þۺɫɫ</a>| <a href="http://www.413qq.cn" target="_blank">þþž޾Ʒ</a>| <a href="http://www.jnxlt.cn" target="_blank">һɫۺϾþ</a>| <a href="http://www.wlrmall.cn" target="_blank">91ƷۺϾþþƷ</a>| <a href="http://www.air-walk.com.cn" target="_blank">þ91ᆱƷ2020</a>| <a href="http://www.ytcp.com.cn" target="_blank">vavavaþ</a>| <a href="http://www.jvqo.cn" target="_blank">Ʒþþþþҹҹ</a>| <a href="http://www.s5273.cn" target="_blank">ŷҹƷþþþ </a>| <a href="http://www.jkzgjkzl.org.cn" target="_blank">޾ƷŮþþþ99С˵</a>| <a href="http://www.up598.cn" target="_blank">þþƷɧ</a>| <a href="http://www.zyydh.cn" target="_blank">ҹþþ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>