|
请教一下。。。 用Getbackbuffer()可以很方便的获得后备缓冲区的surface。。但是我想把这个获得的surface再画在屏幕上。。或者对他进行一些纹理操作。。那该怎么办呢?如果另外创建一个texture,然后lock,在memcpy。。这样会比较慢。。如果获取这个texture的surface,然后用GetRendertargerdata()将后备缓冲的surface拷到这个surface中则会失败。。。 另外顺便问下。。我在绘制2D游戏地图的时候。。因为地图是很多个texture组成的(有地表,花草,树木),每个都要调用一次DrawPrimitive(),这样效率非常之低下。。帧数很少。。我后来创建了一张类别是rendertarget的texture,获取他的surface,然后将surface替代后备缓冲作为渲染目标。将地表之类的东西花到上面,然后再一次调用DrawPrimitive(),虽然这样效率很高,但是由于创建一张类别是rendertarget的texture是必须在D3DPOOL_DEFAULT中。。而D3DPOOL_DEFAULT是显存。。如果创建过多将会提高游戏的显存门槛。。。 再后来,又有人告诉我创建一个大的顶点缓冲区,将所有使用相同纹理的地表的顶点缓冲区集中放在里面,这样SetTexture()一次,然后再DrawPrimitive()一次,就可以一次画出所有使用相同texture的地表,不过我使用这种方法测试的时候。。一调用DrawPrimitive()的时候。。系统蓝屏了。。。 |