Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Archive.
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Message par Thyphoon »

Je viens de découvrir je pense un bug, a moins que ça soit moi qui n'utilise pas correctement cette commande

Voici un code
A la ligne 8 :
mettre Prefs\FullScreen=#True pour passer en plein ecran
mettre Prefs\FullScreen=#False pour passer en mode fenêtré

Ligen 94 :
pour activer et désactiver le Sprite3DBlendingMode(5, 7)

Vous remarquerez que ça marche tres bien en mode fenêtre mais pas en plein écran !et qu'apparment c'est le Sprite3DBlendingMode(5, 7) qui pose problème !

voici le code
vous pouvez me confirmer ou pas ?
Merci d'avance

Code : Tout sélectionner

UsePNGImageDecoder()
Structure Prefs
  FullScreen.b
  ScreenWidth.l
  ScreenHeight.l
EndStructure
Global Prefs.prefs
Prefs\FullScreen=#True ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Ici
Prefs\ScreenWidth=800
Prefs\ScreenHeight=600

InitSprite()
InitSprite3D()
InitKeyboard()
    
Select Prefs\FullScreen
	Case #True ; Ouverture en plein ecran
	  ExamineDesktops()
		If OpenScreen(Prefs\ScreenWidth,Prefs\ScreenHeight,32,"Test",#PB_Screen_WaitSynchronization, DesktopFrequency(0))
			Debug("Screen is open "+Str(Prefs\ScreenWidth)+"x"+Str(Prefs\ScreenHeight)+" 32bits")
			
		Else
			Debug("Error:Can't open Screen with "+Str(Prefs\ScreenWidth)+"x"+Str(Prefs\ScreenHeight)+" 32bits")
			End
		EndIf
	Case #False ; Ouverture dans une Fenêtre
		#W_Screen=0
		If OpenWindow(#W_Screen,0,0,Prefs\ScreenWidth,Prefs\ScreenHeight,"Test",#PB_Window_ScreenCentered) And OpenWindowedScreen(WindowID(#W_Screen),0,0,Prefs\ScreenWidth,Prefs\ScreenHeight,1,0,0)
			Debug("Window is open "+Str(Prefs\ScreenWidth)+"x"+Str(Prefs\ScreenHeight))
		Else
			Debug("Error:Can't open Window with "+Str(Prefs\ScreenWidth)+"x"+Str(Prefs\ScreenHeight))
			End
		EndIf
EndSelect
     

#Spr_HoleHand=0
    ;LoadSprite(#Spr_HoleHand,"fullhand.png",#PB_Sprite_Texture|#PB_Sprite_AlphaBlending)
    CreateSprite(#Spr_HoleHand,128,128,#PB_Sprite_Texture|#PB_Sprite_AlphaBlending)
    StartDrawing(SpriteOutput(#Spr_HoleHand))
    
      Circle(64,64,64,#Green)

    For z=1 To 10
      Circle(Random(128),Random(128),Random(10),#Green)
    Next
    StopDrawing()
    CreateSprite3D(#Spr_HoleHand,#Spr_HoleHand)


Structure MyHole
  Rayon.l
  StarAngle.l
  Size.l
  Angle.l
  Alpha.l
EndStructure

Global NewList MyHole.MyHole()

NbStar=38 ;Normalement 40
For z=NbStar To 1 Step -1
  AddElement(MyHole())
  MyHole()\Rayon=Pow(z,1.3)*(Prefs\ScreenWidth/4)/(NbStar*2)
  MyHole()\StarAngle.l=Random(360)
  MyHole()\Size=(NbStar-ListIndex(MyHole()))*128/NbStar
  MyHole()\Angle=(NbStar-ListIndex(MyHole()))*360/NbStar
  MyHole()\Alpha=255-((NbStar-ListIndex(MyHole()))*255/NbStar)
Next

Structure MyHolePrefs
  CordX.l
  CordY.l
  AngleNova.f
  CosAngleNova.f
  SinAngleNova.f
  Coef.l
EndStructure
Global MyHolePrefs.MyHolePrefs

MyHolePrefs\Coef=7
MyHolePrefs\CordX=Prefs\ScreenWidth/2
MyHolePrefs\CordY=Prefs\ScreenHeight/2
;Quelques Précalcule
MyHolePrefs\AngleNova=-15*#PI/180 ;POur un Angle de 15°
MyHolePrefs\CosAngleNova=Cos (MyHolePrefs\AngleNova)
MyHolePrefs\SinAngleNova=Sin (MyHolePrefs\AngleNova)
#BA=#PI
#BB=#PI/2
#BC=#PI+#PI/2

Procedure Spiral()
  t.f=ElapsedMilliseconds()/10000
  Sprite3DBlendingMode(5, 7)  ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Et là
  ForEach MyHole()
    AngleStar.f=t+ListIndex(MyHole())/MyHolePrefs\Coef
    Halfrayon=MyHole()\Rayon/2
    x=MyHole()\Rayon*Cos(AngleStar)
    y=Halfrayon*Sin(AngleStar)
    x2=MyHole()\Rayon*Cos(#BA+AngleStar)
    y2=Halfrayon*Sin(#BA+AngleStar)
    x3=MyHole()\Rayon*Cos(#BB+AngleStar)
    y3=Halfrayon*Sin(#BB+AngleStar)
    x4=MyHole()\Rayon*Cos(#BC+AngleStar)
    y4=Halfrayon*Sin(#BC+AngleStar)

  ; ********* voici la formule de la rotation d'image *********
    ;<------------ en degres !!! :o)
   
     x= x * MyHolePrefs\CosAngleNova +( Y)* MyHolePrefs\SinAngleNova
     y=x * MyHolePrefs\SinAngleNova + (Y)* MyHolePrefs\CosAngleNova
               
     x2= x2 * MyHolePrefs\CosAngleNova +( y2)* MyHolePrefs\SinAngleNova
     y2= x2 * MyHolePrefs\SinAngleNova + (y2)* MyHolePrefs\CosAngleNova
                 
     x3= x3 * MyHolePrefs\CosAngleNova +( y3)* MyHolePrefs\SinAngleNova
     y3= x3 * MyHolePrefs\SinAngleNova + (y3)* MyHolePrefs\CosAngleNova
                 
     x4= x4 * MyHolePrefs\CosAngleNova +( Y4)* MyHolePrefs\SinAngleNova
     Y4= x4 * MyHolePrefs\SinAngleNova + (Y4)* MyHolePrefs\CosAngleNova
                 
     ;*****************************************************
    ZoomSprite3D(#Spr_HoleHand,MyHole()\Size,MyHole()\Size)
    RotateSprite3D(#Spr_HoleHand,MyHole()\StarAngle,#PB_Absolute)

    NewSize=MyHole()\Size/2
      NewCordX=MyHolePrefs\CordX+x:NewCordY=MyHolePrefs\CordY+y
    DisplaySprite3D(#Spr_HoleHand,NewCordX-NewSize,NewCordY-NewSize,MyHole()\Alpha)
      NewCordX=MyHolePrefs\CordX+x2:NewCordY=MyHolePrefs\CordY+y2
    DisplaySprite3D(#Spr_HoleHand,NewCordX-NewSize,NewCordY-NewSize,MyHole()\Alpha)

        NewCordX=MyHolePrefs\CordX+x2:NewCordY=MyHolePrefs\CordY+y2
    DisplaySprite3D(#Spr_HoleHand,NewCordX-NewSize,NewCordY-NewSize,MyHole()\Alpha)

        NewCordX=MyHolePrefs\CordX+x3:NewCordY=MyHolePrefs\CordY+y3
    DisplaySprite3D(#Spr_HoleHand,NewCordX-NewSize,NewCordY-NewSize,MyHole()\Alpha)

        NewCordX=MyHolePrefs\CordX+x4:NewCordY=MyHolePrefs\CordY+y4
    DisplaySprite3D(#Spr_HoleHand,NewCordX-NewSize,NewCordY-NewSize,MyHole()\Alpha)

  Next
EndProcedure
    Repeat
        ExamineKeyboard()
        If Prefs\FullScreen=#False
          Event=WindowEvent()
          Delay(1)
        EndIf
        ClearScreen(RGB(0,0,0)) ;  *****<------- si tu Rem ceci le sprite laisse une trace :D
        Start3D()
        Spiral()
        Stop3D()
       
       
     ;#####
    ;-FPS
    ;#####
    If Second<ElapsedMilliseconds()
      Second = ElapsedMilliseconds() + 1000
      fps = Frame_Counter
      Frame_Counter = 0
    Else
      Frame_Counter + 1
    EndIf
   StartDrawing(ScreenOutput())   

    DrawText(5, 5, "FPS : " + Str(fps),$ffffff)
    ;
  StopDrawing()
       
       
        FlipBuffers():; affiche l'ecran
     

        ;Event=WindowEvent()
         If KeyboardPushed(#PB_Key_Escape)
            End
        EndIf
       
               
    Until Event=#PB_Event_CloseWindow
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Message par Thyphoon »

Ok je met un code plus simple ! Mais j'aimerais avoir un réponse pour savoir si ça me fait ça que chez moi ou chez tout le monde !

Code : Tout sélectionner

Structure Prefs
  FullScreen.b
  ScreenWidth.l
  ScreenHeight.l
EndStructure
Global Prefs.prefs
Prefs\FullScreen=#True ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Put #False to test in WindowScreen and #True to test in FullScreen
Prefs\ScreenWidth=800
Prefs\ScreenHeight=600

InitSprite()
InitSprite3D()
InitKeyboard()
   
Select Prefs\FullScreen
   Case #True ; Ouverture en plein ecran
     ExamineDesktops()
      If OpenScreen(Prefs\ScreenWidth,Prefs\ScreenHeight,32,"Test",#PB_Screen_WaitSynchronization, DesktopFrequency(0))
         Debug("Screen is open "+Str(Prefs\ScreenWidth)+"x"+Str(Prefs\ScreenHeight)+" 32bits")
         
      Else
         Debug("Error:Can't open Screen with "+Str(Prefs\ScreenWidth)+"x"+Str(Prefs\ScreenHeight)+" 32bits")
         End
      EndIf
   Case #False ; Ouverture dans une Fenêtre
      #W_Screen=0
      If OpenWindow(#W_Screen,0,0,Prefs\ScreenWidth,Prefs\ScreenHeight,"Test",#PB_Window_ScreenCentered) And OpenWindowedScreen(WindowID(#W_Screen),0,0,Prefs\ScreenWidth,Prefs\ScreenHeight,1,0,0)
         Debug("Window is open "+Str(Prefs\ScreenWidth)+"x"+Str(Prefs\ScreenHeight))
      Else
         Debug("Error:Can't open Window with "+Str(Prefs\ScreenWidth)+"x"+Str(Prefs\ScreenHeight))
         End
      EndIf
EndSelect
     
#Spr_HoleHand=0
CreateSprite(#Spr_HoleHand,128,128,#PB_Sprite_Texture|#PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(#Spr_HoleHand))
  Circle(64,64,64,#Green)
StopDrawing()
CreateSprite3D(#Spr_HoleHand,#Spr_HoleHand)

Procedure Spiral()
  Sprite3DBlendingMode(5, 7)
  For z=0 To 100
    DisplaySprite3D(#Spr_HoleHand,z,z,128)
 Next
EndProcedure
    
Repeat

  ExamineKeyboard()
  If Prefs\FullScreen=#False
    Event=WindowEvent()
    Delay(1)
  EndIf
  
  ClearScreen(RGB(0,0,0)) ;  *****<------- si tu Rem ceci le sprite laisse une trace :D
  Start3D()
  Spiral()
  Stop3D()
       
  FlipBuffers():; affiche l'ecran
     
  If KeyboardPushed(#PB_Key_Escape)
    End
  EndIf
  
Until Event=#PB_Event_CloseWindow
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Message par djes »

Aucun problème ici. J'ai essayé de mettre plus de sprites : pareil, pas de souci.
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Message par Thyphoon »

djes a écrit :Aucun problème ici. J'ai essayé de mettre plus de sprites : pareil, pas de souci.
Merci d'avoir essayé
Peut être un problème de carte Graphique alors ....
Sur mon portable la partie des sprites qui se chevauche clignote lorsque j'utilise l'alphablending et une transparence de sprite inférrieur a 255 .. je vais finir part faire une video lolllllllllll :P
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Message par Thyphoon »

Pour ceux qui veulent voir le problème en video , 2 petite video a télécharger
http://9giga.sfr.fr/index.php?m=c9ae77e ... 1047ea20b2
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Message par Geo Trouvpatou »

Salut.

Pour ma part en fenêtré ou plein écran j'obtiens la même chose que ta vidéo : 0839

Bye.
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Message par Thyphoon »

Geo Trouvpatou a écrit :Salut.

Pour ma part en fenêtré ou plein écran j'obtiens la même chose que ta vidéo : 0839

Bye.
merci d'avoir essayé en tout cas ! apparement c'est un problème propre a certaine machine, mais sur tout les ordinateurs que je test ça le fait :o( pourquoi chez moi et pas chez les autres ...
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Message par Le Soldat Inconnu »

j'ai le même souci que toi :)

Mais m'a carte graphique est vieillotte et n'est surement pas Direct9 compatible (j'ai direct 9 mais la carte n'en supporte surement pas toutes les fonctions)
Est ce la le point clé ?

J'ai essayé en utilisant DirectX 7 en sous-librairie mais je n'ai plus rien qui s'affiche

correction : en supprimant le #PB_Sprite_AlphaBlending dans CreateSprite(#Spr_HoleHand,128,128,#PB_Sprite_Texture|#PB_Sprite_AlphaBlending)
ça fonctionne en directx 7 (comme sur la vidéo 2)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Message par venom »

Chez moi en compilant ton code j'ai le meme resultat que ta video 0839

windows xp sp2
nvidia GeForce 8500Gt
directx 9

voilou







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Sprite3DBlendingMode(5, 7) ne marche pas bien en FullScreen

Message par Ar-S »

Je n'ai pas testé tes vidéos, 30 mo c'est trop pour moi (à 64ko/s) (mets les en xvid éventuellement...)
Sinon j'ai testé le 1er code, en plein ecran et fenetré je n'ai pas de clipping des sprites, donc LSI a probablement vu juste avec l'age des Carte Graphique.
La mienne est récente.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre