Aangezien ik wil weten wat ik nu eigenlijk aan het doen ben, ben ik eens zelf Render Targets gaan instellen.
Niet nuttig? Eigenlijk best wel, wist namelijk niet eens wat een Render Target was eerst.
Maar de boel werkt niet goed meer (heb dus geen goed idee wat er eigenlijk in die D3DX-functie uit de titel gebeurt).
Eerst de code:
Gaat perfect zolang ShadowTexTopSurface en ShadowDepthTopSurface groter zijn dan of gelijk zijn aan de backbuffer (flipchain).
Jeps, dat staat ook in de docs. Maar ik kan me niet voorstellen dat het niet mogelijk zou zijn om een shadowmap te maken die kleiner is dan het scherm zelf (dan zou de zeer redelijke 1024x1024 niet eens mogelijk zijn als Shadowmap).
Het lamme is dat de Debug niks vermeldt, en dat het renderen (en reageren) gewoon doorgaat. Niks geen real fouten dus. En dat is vaag. Samengevat:
Niet nuttig? Eigenlijk best wel, wist namelijk niet eens wat een Render Target was eerst.
Maar de boel werkt niet goed meer (heb dus geen goed idee wat er eigenlijk in die D3DX-functie uit de titel gebeurt).
Eerst de code:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| /* INIT */ d3ddevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&flipchain); d3ddevice->CreateTexture(shadowmapsize,shadowmapsize,1,D3DUSAGE_RENDERTARGET,D3DFMT_R32F,D3DPOOL_DEFAULT,&ShadowTex,NULL); d3ddevice->CreateDepthStencilSurface(shadowmapsize,shadowmapsize,D3DFMT_D24X8,d3dpp.MultiSampleType,d3dpp.MultiSampleQuality,1,&ShadowDepthTopSurface,NULL); ShadowTex->GetSurfaceLevel(0,&ShadowTexTopSurface); // TODO: hierboven kapt ermee bij kleiner dan d3dpp /* RUNTIME */ d3ddevice->BeginScene(); d3ddevice->SetRenderTarget(0,ShadowTexTopSurface); d3ddevice->SetDepthStencilSurface(ShadowDepthTopSurface); d3ddevice->Clear(0, 0, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, 0, 1.0f, 0); /* Render ernaar met d3ddev */ d3ddevice->SetRenderTarget(0,flipchain); d3ddevice->Clear(0, 0, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, 0, 1.0f, 0); /* Render ernaar met d3ddev */ d3ddevice->EndScene(); |
Gaat perfect zolang ShadowTexTopSurface en ShadowDepthTopSurface groter zijn dan of gelijk zijn aan de backbuffer (flipchain).
Jeps, dat staat ook in de docs. Maar ik kan me niet voorstellen dat het niet mogelijk zou zijn om een shadowmap te maken die kleiner is dan het scherm zelf (dan zou de zeer redelijke 1024x1024 niet eens mogelijk zijn als Shadowmap).
Het lamme is dat de Debug niks vermeldt, en dat het renderen (en reageren) gewoon doorgaat. Niks geen real fouten dus. En dat is vaag. Samengevat:
- Is het mogelijk om een Render Target te maken die kleiner is dan de Back Buffer zonder D3DX?
- Verder, is het mogelijk om wel AA op de BackBuffer, maar niet op bijv. de ShadowMap te hebben?
- Het volledige beeld wordt wisselend zwart of standje disco als de shadows kleiner zijn dan de back buffer. Dit is vreemd, want hoe kan de Shadowmap ooit de gehele back buffer beïnvloeden?
- Ik beheer blijkbaar netjes m'n COM's. Debug meldt dat ik 0 bytes achterlaat.
[ Voor 9% gewijzigd door Orwell op 02-04-2011 20:09 ]