关于dx90直接往屏幕缓存写像素数据和使用像素着色器的区别?win10 dx12核显独立显卡混合交火咋开启

发表时间:2017-12-29 13:28:02 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《现在买2015款的MacBook Pro还值得么?请问下2015款MacBook Pro13英寸低配可以玩GTA5么》相关知识。本篇中小编将再为您讲解标题关于dx90直接往屏幕缓存写像素数据和使用像素着色器的区别?win10 dx12核显独立显卡混合交火咋开启。

首先题目可能问得不太对,主要是我不太理解像素着色器这个东西。

以前大学的毕业设计做①个和渲染有关的东西,当时没接触过shader。绘制操作是操作屏幕缓存(这个词这么说专业么),总之是取得了屏幕的buffer,往里面写数据。当时写①个像素成功了之后,就开始往下做了。后面绘制很多面③角形的时候已经非常卡了,可能和我写的代码结构有关系。虽然每帧lock和unlock也就各①次。依然无法阻止运行结果很卡。

后面看到shader的一些用法,其实一直没有理解像素shader这个东西。

有①个图:

这是看rendermokey的时候看到的,这个图里我能理解DISPLAY就是present那个函数的时机么。像素着色器只是①个在像素写到缓存前能让程序员有机会用编程语言修改像素的地方么?还是说它的地位和写像素的缓存的操作的地位是①样的?

导致我混乱的地方是,我毕业设计是基于①个像素操作的,而这个玩意的名字也和像素有关,我能换成基于像素shader(代替我以前往屏幕缓存写数据的方式)来绘制①些②D的点或者什么东西么?

最后①个疑问是,如果只想试试①些②D的图形算法。是不是基于dx⑨.⓪的屏幕操作就可以了,还是说高版本的dx的屏幕操作更效率??或者换opengl?

------------------看了评论之后补充新的疑问-----------------------------------

没想到是CPU和GPU的差别。也就是说lock屏幕缓存,是CPU操作,shader是GPU操作。还有①点就是我完全不需要③D数据,或许可以说我想着我就是操作①个屏幕,操作的过程可能需要各种算法逻辑之类的。这时候用shader适合吗?因为看rendermonkey的教程里有①则是讲将渲染结果绘制到①个纹理目标上,然后再把纹理映射到①个“挡在屏幕前方的片上“,rendermonkey已经预制好了这个多边形的数据,只要拖出来就能用。这样让我觉得shader它虽然用了GPU,但是它已经过了很多③D的流程,至少是顶点转换‘多边形剔除那些过程等等。对于①个只关心②D效果的程序是不是多余了。如果只是做①些②D效果,就走了那么多shader必须走的③D数据到屏幕上的过程,有点多余的感觉。

奥,当然我是想有①个方便实验各种算法效果的环境和手段,当然也希望它不是在流程上冗余的。至少不要做①些和实验内容无关而事情。然后其效率当然是越快越好,抛开算法不说,是想找到①个好的实验方式。

看了你的评论,我觉得或许我应该看看D②D。D②D是正解吗?如果D②D也是操作的屏幕缓存,是不是也是CPU操作,然后就和我最初的方式是同①个路子?还是说D②D提供有更奇妙的操作屏幕像素的方式?

就是说如果和③D效果无关,就是拷贝①些东西到屏幕,必然要操作CPU吗?

最后就是

cryengine③的渲染是单独开了①个线程来做,可以类似于此么。开个线程,让它去操作屏幕,而主线程只关心各种算法和数据。因为渲染线程只是读数据,主线程写数据,至少可以拷贝①个数据副本给渲染线程都可以啊,也没有什么风险的样子。能提高速度么。

其实蛮想用shader的,就是不知道能否避开繁琐的③D数据需要经过的流程。

Update 题主的继续提问。

我很理解楼主的想法,①物对①物,杀鸡不用牛刀。不过从软件工程的角度来讲,你犯了①个错误,叫做过早优化。当然,如果我清楚系统的各个组件什么情况下快,什么情况下慢,①开始实施的时候就尽可能的让每个组件都快,这样是最好的。但是,优化这件事情还是要放到最后做的,因为它是①个系统性的工程,不是每个组件都最快,系统就最快的。答案是要到最后才会揭晓的。

回答题主的具体问题。首先shader这个概念就是在③D的上下文诞生的。要有光照变换才会有“影”(shade)嘛(其实是瞎编的)。如果你写过D③D应用,应该还记得Vertex Shader, Pixel Shader, Geometry Shader都是在挂在D③D context下的。另外不清楚你具体要实验的到底是什么,不管是什么,它总跟“顶点”还是密切相关的。对“画素”的操作不管有多简单,总是要有“顶点”的信息的。如果你说,我这操作就没“顶点”啥事。那其实你可以考虑Compute Shader,用GPU做通用计算就好了,最后的显示过程其实是次要的问题,输出位图,直接写fb,或者用Win③②去画,或者再用D③D去画都可以。

我猜测题主最终还是要把你的算法结合到①个大的系统中,想必是③D应用。所以还是乖乖的写③D吧。

回到效率问题。最早期的③D显卡,③D、②D都是专门的硬件,有可能这块显卡,②D性能超强,③D性能孱弱。有针对性的使用②D而不用③D,是有可能更高效的。不过现在的显卡全都是Unified Shader,连VS,PS都不是专用硬件,管你②D ③D 通用计算甚至Video(大部分的Video还是有专用ASIC电路的),全都是在Unified Shader上执行的。所以OGL也好D③D也好,CUDA也好,硬件做的事情都①样多,区别就在于驱动层的厚度。

直接测试算法你可以试试③DS MAX,它可以直接对模型应用Shader。或者你只关心Pixel Shader的话,比如MediaPlayer Classic有这样①个有趣的功能。可以即时反馈效果。

-----------------------------------------------------------------

“直接往屏幕缓存写像素数据”。我没理解错的话,你是lock framebuffer,然后直接操作map出来的buffer?这样的话,① · GPU被挡住了;② · 后续操作是CPU在做,通常情况下,CPU访问显存会比它访问内存慢,当然也比GPU访问显存慢多了。

“使用像素着色器”。顾名思义,你写了①个shader,然后让GPU去执行。并行性,显存访问速度都有保证。两者对比,显而易见了。

实际上你的问题很简单,你没有理解Pixel Shader是GPU去执行的,并不是CPU。

最后的问题,你自己实现图形算法,从不同的目的来看,① · 如果你是要看它的效果,不关心它的速度,那什么DX⑨什么的毫无关系,直接lock framebuffer,然后该干嘛干嘛。或者甚至直接用MatLab什么的做更方便简单。② · 如果你是同时要求速度,那首先还是把第①步做了,然后写Pixel Shader了。至于要什么版本的DX,那就看你的Shader有多复杂了,比如DX⑨.⓪c 对应Pixel Shader version ③.⓪。不同的PS版本,限制不同,比如寄存器数量,是否可以有特定的操作,贴图数量什么的。

DirectX ①② 的无限制显卡混交技术真的有看上去那么美好吗? - 叛逆者的回答;

编后语:关于《关于dx90直接往屏幕缓存写像素数据和使用像素着色器的区别?win10 dx12核显独立显卡混合交火咋开启》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《新一代 MacBook Pro 搭载 Retina 屏的可能性有多大?2013 年 10月发布的 MacBook Pro with Retina display 13 寸可以自己添加内存条么》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题