Drawing primitives to an off screen surface

Started by
1 comment, last by Sil 21 years, 8 months ago
I''m attempting to generate large (256x256 pixels) random textures offscreen to be used in rendering terrain. This is done once before the terrain is rendered and the terrain itself is very small. Using D3DXRenderToSurface, is it possible to draw textured trianglestrips to an off screen surface? If not, can I instead draw several textures to this surface and still have them blend together as if they were rendered to trianglestrips? Basically that''s just asking if I can generate a large texture on any surface, but I''m not sure how that''s done either because I''m only used to blending textures directly onto the mesh.
Advertisement
Yes, by setting the render target to your surface you render your geometry as normal, being scene - render - end scene. Also you can create and write to textures on a pixel basis quite easily. Use CreatTexture of the size you want. Lock it, which gives you a pointer to the bits and the stride amount (width of a row in bytes- may not equal texture width) and you can party on the bits to your hearts content. Remember to unlock the texture aftward and dont do too much of htis each frame
------------------------See my games programming site at: www.toymaker.info
It looks like I''m on the right track, then. Thanks for your response.

The only problem now is that I am getting a flicker apparently where the viewport would be whenever I call setrendertarget, but everything else draws fine in spite of that. I''m assuming I am not sending the right parameters, so here''s my code (it''s in vb):

Dim tRenderTarget As Direct3DTexture8Set tRenderTarget = d3dx.CreateTexture(d3dDevice, 256, 256, _                    1&, D3DUSAGE_RENDERTARGET, DispMode.Format, D3DPOOL_DEFAULT)                    Dim sRenderTarget As Direct3DSurface8Set sRenderTarget = tRenderTarget.GetSurfaceLevel(0&)    d3dDevice.SetRenderTarget sRenderTarget, Nothing, 0                    Dim sRTS As D3DXRenderToSurfaceSet sRTS = d3dx.CreateRenderToSurface(d3dDevice, 256, 256, DispMode.Format, 0&, D3DFMT_UNKNOWN)Dim ViewPort As D3DVIEWPORT8With ViewPort    .height = 256    .Width = 256    .MaxZ = 1!End With 


Any help would be appreciated.

This topic is closed to new replies.

Advertisement