ClearScreen() in StartSpecialFX() mit DirectX7/DirectX9

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Rebon
Beiträge: 263
Registriert: 20.05.2009 19:13

ClearScreen() in StartSpecialFX() mit DirectX7/DirectX9

Beitrag von Rebon »

Hallo,
vor längerer Zeit habe ich bemerkt, dass wohl ClearScreen() nur eingebunden in StartSpecialFX()/StopSpecialFX beschleunigt ist.
Allerdings wird anscheinend die Beschleunigung in PB 4.51 nur mit DirectX7 als Subsystem genutzt. Ein anderer PB-User hat mir zumindest die Verzögerung in DirectX9 im Vergleich zu DirectX7 bestätigt, danke nochmal dafür.

Dies ist der Code(getestet mit PB 4.51 Demo/Windows XP 32-bit) mit dem ich es festgestellt hatte. Die unterschiedliche Geschwindigkeit des Mauscursor zwischen DirectX7/DirectX9 als Subsystem macht sich zumindest bei mir deutlich bemerkbar.

Code: Alles auswählen

EnableExplicit

InitKeyboard()
InitMouse()
InitSprite()
InitSprite3D()

#Width = 1280
#Height = 1024
#Depth = 32
#Hz = 60

If OpenScreen(#Width, #Height, #Depth,"MouseThread", #PB_Screen_WaitSynchronization, #Hz) = #False
  End
EndIf

Define.i

Structure MousePos
  *xPos.Integer
  *yPos.Integer
EndStructure

Global x = 1, y = 1, *Position.MousePos = AllocateMemory(SizeOf(MousePos)), *Position\xPos = @x, *Position\yPos = @y, Spritenr, quit = #False, Color = 100

For Spritenr = 0 To 30
  CreateSprite(Spritenr, 128, 128, #PB_Sprite_Texture)
  
  StartDrawing(SpriteOutput(Spritenr))
    Box(0, 0, 128, 128, RGB(Color-70,Color-50,Color-10))
  StopDrawing()
  
  CreateSprite3D(Spritenr, Spritenr)
  Color + 1   
Next Spritenr

Sprite3DQuality(1)

Procedure mousethread(flag.i)
   If flag
      Repeat
        ExamineKeyboard()
        If KeyboardPushed(#PB_Key_Escape)
             quit = #True
           Break
        EndIf
        Delay(1)
        ExamineMouse()
        *Position\xPos\i = MouseX()
        *Position\yPos\i = MouseY()
      Until quit
   EndIf
EndProcedure

CreateThread(@mousethread(),#True)

Repeat
  StartSpecialFX()
    ClearScreen(0)
  StopSpecialFX()

  Start3D()
    Delay(1)
    DisplaySprite3D(0, x, y, 155)
    DisplaySprite3D(1, x-1, y+1, 155)
    DisplaySprite3D(2, x-2, y+2, 155)
    DisplaySprite3D(3, x-3, y+3, 155)
    DisplaySprite3D(4, x-4, y+4, 155)
    DisplaySprite3D(5, x-5, y+5, 155)
    DisplaySprite3D(6, x-6, y+6, 155)
    DisplaySprite3D(7, x-7, y+7, 155)
    DisplaySprite3D(8, x-8, y+8, 155)
    DisplaySprite3D(9, x-9, y+9, 155)
    DisplaySprite3D(10, x-10, y+10, 155)
    DisplaySprite3D(11, x-11, y+11, 155)
    DisplaySprite3D(12, x-12, y+12, 155)
    DisplaySprite3D(13, x-13, y+13, 155)
    DisplaySprite3D(14, x-14, y+14, 155)
    DisplaySprite3D(15, x-15, y+15, 155)
    DisplaySprite3D(16, x-16, y+16, 155)
    DisplaySprite3D(17, x-17, y+17, 155)
    DisplaySprite3D(18, x-18, y+18, 155)
    DisplaySprite3D(19, x-19, y+19, 155)
    DisplaySprite3D(20, x-20, y+20, 155)
    DisplaySprite3D(21, x-21, y+21, 155)
    DisplaySprite3D(22, x-22, y+22, 155)
    DisplaySprite3D(23, x-23, y+23, 155)
    DisplaySprite3D(24, x-24, y+24, 155)
    DisplaySprite3D(25, x-25, y+25, 155)
    DisplaySprite3D(26, x-26, y+26, 155)
    DisplaySprite3D(27, x-27, y+27, 155)
    DisplaySprite3D(28, x-28, y+28, 155)
    DisplaySprite3D(29, x-29, y+29, 155)
    DisplaySprite3D(30, x-30, y+30, 155)
    Stop3D()
    FlipBuffers()
Until quit

CloseScreen()
End
PB 4.00 | Windows XP Home SP3