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

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

这是看rendermokey的时候看到的,这个图里我能理解DISPLAY就是present那个函数的时机么。像素着色器只是一个在像素写到缓存前能让程序员有机会用编程语言修改像素的地方么?还是说它的地位和写像素的缓存的操作的地位是一样的?
导致我混乱的地方是,我毕业设计是基于一个像素操作的,而这个玩意的名字也和像素有关,我能换成基于像素shader(代替我以前往屏幕缓存写数据的方式)来绘制一些2D的点或者什么东西么?
最后一个疑问是,如果只想试试一些2D的图形算法。是不是基于dx9.0的屏幕操作就可以了,还是说高版本的dx的屏幕操作更效率??或者换opengl?
------------------看了评论之后补充新的疑问-----------------------------------
谷俊 ,Isaac Tang的评论
没想到是CPU和GPU的差别。也就是说lock屏幕缓存,是CPU操作,shader是GPU操作。还有一点就是我完全不需要3D数据,或许可以说我想着我就是操作一个屏幕,操作的过程可能需要各种算法逻辑之类的。这时候用shader适合吗?因为看rendermonkey的教程里有一则是讲将渲染结果绘制到一个纹理目标上,然后再把纹理映射到一个“挡在屏幕前方的片上“,rendermonkey已经预制好了这个多边形的数据,只要拖出来就能用。这样让我觉得shader它虽然用了GPU,但是它已经过了很多3D的流程,至少是顶点转换‘多边形剔除那些过程等等。对于一个只关心2D效果的程序是不是多余了。如果只是做一些2D效果,就走了那么多shader必须走的3D数据到屏幕上的过程,有点多余的感觉。
奥,当然我是想有一个方便实验各种算法效果的环境和手段,当然也希望它不是在流程上冗余的。至少不要做一些和实验内容无关而事情。然后其效率当然是越快越好,抛开算法不说,是想找到一个好的实验方式。
vczh的评论
看了你的评论,我觉得或许我应该看看D2D。D2D是正解吗?如果D2D也是操作的屏幕缓存,是不是也是CPU操作,然后就和我最初的方式是同一个路子?还是说D2D提供有更奇妙的操作屏幕像素的方式?
jsn bin的评论
就是说如果和3D效果无关,就是拷贝一些东西到屏幕,必然要操作CPU吗?
最后就是
cryengine3的渲染是单独开了一个线程来做,可以类似于此么。开个线程,让它去操作屏幕,而主线程只关心各种算法和数据。因为渲染线程只是读数据,主线程写数据,至少可以拷贝一个数据副本给渲染线程都可以啊,也没有什么风险的样子。能提高速度么。
其实蛮想用shader的,就是不知道能否避开繁琐的3D数据需要经过的流程。 |
|