Hi, it's me again. I don't know why but my DX7-version won't run. I think the ZBuffer check fails, but that's just a guess.
Beside of changing Initialization and CLS to handle Depthbuffer, I changed the following GL-commands to DX:
Based on my DX7-docs I converted this to:
but this won't do anything, so I must miss something.
Here is the sample from above altered for DX use:
Beside of changing Initialization and CLS to handle Depthbuffer, I changed the following GL-commands to DX:
glEnable GL_DEPTH_TEST glEnable GL_ALPHA_TEST glAlphaFunc GL_GREATER, 0.25
Based on my DX7-docs I converted this to:
primarydevice.device.SetRenderState D3DRS_ZENABLE,true primarydevice.device.SetRenderState D3DRS_ZFUNC, D3DCMP_LESS primarydevice.device.setrenderstate D3DRS_ALPHATESTENABLE, true primarydevice.device.setrenderstate D3DRS_ALPHAFUNC, D3DCMP_GREATER primarydevice.device.setrenderstate D3DRS_ALPHAREF,$40
but this won't do anything, so I must miss something.
Here is the sample from above altered for DX use:
SuperStrict Type TBall Global i:Int = 0 Field _r:Int, _g:Int, _b:Int Field _x:Float, _y:Float Method Update() _y :+ (10 * Sin(i + _x)) i:+1 EndMethod Function Create:TBall(x:Float, y:Float, r:Int, g:Int, b:Int) Local ball:TBall = New TBall ball._x = x ball._y = y ball._r = r ball._g = g ball._b = b Return ball EndFunction EndType 'SetGraphicsDriver GLMax2DDriver() SetGraphicsDriver D3D7Max2DDriver() Graphics 800,600,0,0,GRAPHICS_BACKBUFFER | GRAPHICS_DEPTHBUFFER ' Make image to draw with Global image:TImage = CreateImage( 100,100 ) Cls SetColor 255,255,255 DrawOval 50,50,50,50 GrabImage image,0,0 Global ballList:TList = New TList Global shadowMode:Int = 0 ' Make some objects to render ballList.AddLast( TBall.Create( 30,150, 255,0,0 ) ) ballList.AddLast( TBall.Create( 50,150, 0,255,0 ) ) ballList.AddLast( TBall.Create( 70,150, 0,0,255 ) ) ballList.AddLast( TBall.Create( 90,150, 255,0,255 ) ) ballList.AddLast( TBall.Create( 110,150, 255,255,0 ) ) Function RenderBackground() For Local i:Int = 0 To GraphicsHeight() Step 10 SetColor Rand(100,155), Rand(100,155), Rand(100,155) DrawRect 0, i, GraphicsWidth(), i + (GraphicsHeight()/10) Next EndFunction Function RenderObjectDepthTestShadows() ' Draw shadows 'glEnable GL_DEPTH_TEST primarydevice.device.SetRenderState D3DRS_ZENABLE,true primarydevice.device.SetRenderState D3DRS_ZFUNC, D3DCMP_LESS SetColor 0,0,0 SetAlpha 0.3 'glEnable GL_ALPHA_TEST primarydevice.device.setrenderstate D3DRS_ALPHATESTENABLE, true 'glAlphaFunc GL_GREATER, 0.25 primarydevice.device.setrenderstate D3DRS_ALPHAFUNC, D3DCMP_GREATER primarydevice.device.setrenderstate D3DRS_ALPHAREF,$40 For Local ball:TBall = EachIn ballList DrawImage image, ball._x + 20, ball._y + 20 Next primarydevice.device.SetRenderState D3DRS_ZENABLE,false primarydevice.device.setrenderstate D3DRS_ALPHATESTENABLE, false 'glDisable GL_ALPHA_TEST 'glDisable GL_DEPTH_TEST EndFunction Function RenderObjectShadowsNoDepthTest() ' Draw shadows SetColor 0,0,0 SetAlpha 0.3 For Local ball:TBall = EachIn ballList DrawImage image, ball._x + 20, ball._y + 20 Next EndFunction Function RenderObjects() SetAlpha 1.0 For Local ball:TBall = EachIn ballList SetColor ball._r, ball._g, ball._b DrawImage image, ball._x, ball._y If Not KeyDown( KEY_SPACE ) ball.Update() EndIf Next EndFunction SetBlend ALPHABLEND 'glClearColor 255, 255,255,255 While Not KeyHit( KEY_ESCAPE ) 'glClear GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT Primarydevice.device.clear (0,null,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0,0,0) RenderBackground() If shadowMode RenderObjectDepthTestShadows() Else RenderObjectShadowsNoDepthTest() EndIf 'RenderObjects() SetColor 255,255,255 DrawText "DepthTest/AlphaTest shadow rendering - hold SPACE to pause", 100, 10 DrawText "Press M to toggle Depth/Alpha shadow mode on/off", 100, 30 Flip If KeyHit( KEY_M ) shadowMode = 1-shadowMode EndIf Wend