[Résolu] Souci avec le sous system OpenGl
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
[Résolu] Souci avec le sous system OpenGl
J'ai un souci avec une application 3D de quelques milliers de lignes et le sous system OpenGL.
Toutes mes textures sont noires.
J'ai réduit cette application au stricte nécessaire de manière à reproduire cette erreur de comportement.
http://falsam.com/download/purebasic/OSE.zip (Source + Assets)
Au lancement vous devriez avoir un cube avec une texture blanche.
Appliquez lui une autre texture que vous sélectionnerez en cliquant sur le bouton [?]
Le cube sera noir !
Après avoir quitter l'exécution, supprimer le sous system OpenGL et recommencez l'opération.
La texture sera cette fois çi sera correct.
Merci de votre aide.
Toutes mes textures sont noires.
J'ai réduit cette application au stricte nécessaire de manière à reproduire cette erreur de comportement.
http://falsam.com/download/purebasic/OSE.zip (Source + Assets)
Au lancement vous devriez avoir un cube avec une texture blanche.
Appliquez lui une autre texture que vous sélectionnerez en cliquant sur le bouton [?]
Le cube sera noir !
Après avoir quitter l'exécution, supprimer le sous system OpenGL et recommencez l'opération.
La texture sera cette fois çi sera correct.
Merci de votre aide.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Souci avec le sous system OpenGl
A priori ce n'est pas un bug avec OpenGL mais un souci avec mon code.
Si dans la procédure EntityUpdate() qui mettra à jour le cube, je remplacepar le cube aura bien la bonne texture.
Et pourtant GetGadgetText(#mfImageFile) retourne bien la valeur "D:\Purebasic Project\3D\OGRE Scene Editor 0\assets\textures\crate.png"
Etrange ....
Si dans la procédure EntityUpdate() qui mettra à jour le cube, je remplace
Code : Tout sélectionner
\imagefile = GetGadgetText(#mfImageFile)
Code : Tout sélectionner
\imagefile = "D:\Purebasic Project\3D\OGRE Scene Editor 0\assets\textures\crate.png"
Et pourtant GetGadgetText(#mfImageFile) retourne bien la valeur "D:\Purebasic Project\3D\OGRE Scene Editor 0\assets\textures\crate.png"
Etrange ....
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Souci avec le sous system OpenGl
Les espaces ?
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Souci avec le sous system OpenGl
Un autre test que je viens de faire.
Dans la procédure ScreenLoad() si je force le changement de texture à la place du sélecteur de texture, là aussi le rendu est normal.
Juste aprés EntityCreate() de la procédure ScreenLoad() j'ai forcé le changement de cette texture de cette maniére
Dans la procédure ScreenLoad() si je force le changement de texture à la place du sélecteur de texture, là aussi le rendu est normal.
Juste aprés EntityCreate() de la procédure ScreenLoad() j'ai forcé le changement de cette texture de cette maniére
Code : Tout sélectionner
SetGadgetText(#mfImageFile, "D:\Purebasic Project\3D\OGRE Scene Editor 0\assets\textures\crate.png")
EntityOperation = 1 ;Mode Modification
EntityUpdate()
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Souci avec le sous system OpenGl
j’espère que nondjes a écrit :Les espaces ?
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Souci avec le sous system OpenGl
Compare les espaces mémoires des chaînes avec le débogueur pour voir la différence...
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Souci avec le sous system OpenGl
Ok mais je te rappelle que sans sous system OpenGL je n'ai pas de souci.djes a écrit :Compare les espaces mémoires des chaînes avec le débogueur pour voir la différence...
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Souci avec le sous system OpenGl
Oui, mais il vaut mieux d'abord éliminer les causes «évidentes».
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Souci avec le sous system OpenGl
Pas de souci de longueur.
Que je sélectionne le fichier ou que je force avec la valeur de ce fichier, MemorySize() est le même.
Et de toute façon la texture 3D du fichier existe bien.
Que je sélectionne le fichier ou que je force avec la valeur de ce fichier, MemorySize() est le même.
Et de toute façon la texture 3D du fichier existe bien.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Souci avec le sous system OpenGl
En effet, avec opengl j’obtiens un cube noir. Alors qu'avec directx9 j'ai bien un cube texturer. (le chemin est sans espace chez moi)
@++
@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Re: Souci avec le sous system OpenGl
Le plus fort est que ça fonctionne même quand le chemin en dur est faux
En fait, ça fonctionne car il prend la texture qui est chargée au démarrage. Après, ça ne fonctionne pas non plus avec le chemin en dur. Apparemment, le changement dynamique ne fonctionne pas en opengl, même avec des chemins relatifs.
Ligne 273:
En fait, ça fonctionne car il prend la texture qui est chargée au démarrage. Après, ça ne fonctionne pas non plus avec le chemin en dur. Apparemment, le changement dynamique ne fonctionne pas en opengl, même avec des chemins relatifs.
Ligne 273:
Code : Tout sélectionner
; Updating the entity
With Entities()
\typeMesh = 1
Global dd
;\imagefile.s = GetGadgetText(#mfImageFile)
;ShowMemoryViewer(@Entities()\imagefile, 256)
If dd = 0
\imagefile = "grass.png" ;pas besoin de mettre le chemin
Else
\imagefile = "crate.png"
EndIf
dd=1-dd
;ShowMemoryViewer(@Entities()\imagefile, 256)
GadgetToolTip(#mfImageView, \imagefile)
EndWith
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Souci avec le sous system OpenGl
Ha non ca c'est normal et c'est lié au fonctionnement d'OGRE.djes a écrit :Le plus fort est que ça fonctionne même quand le chemin en dur est faux
le ou les chemins d'accés des medias sont définis avec la fonction Add3DArchive()
Exemple : Add3DArchive("assets\textures\", #PB_3DArchive_FileSystem)
A partir de là pour charger une texture on utilisera le nom du fichier sans son chemin
Exemple : LoadTexture(#PB_Any, "crate.png")
Dans ma variable \imagefile je met le chermin complet pour l'affichage 2d de la texture.
\imagefile = "D:\Purebasic Project\3D\OGRE Scene Editor 0\assets\textures\crate.png"
Pour le rendu 3D de la texture je garde que le nom du fichier avec la fonction GetFilePart() puis j'utilise LoadTexture() pour charger la texture.
Code : Tout sélectionner
filePart = GetFilePart(\imagefile)
LoadTexture(#PB_Any, FilePart)
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Souci avec le sous system OpenGl
J'ai crée un code plus court qui permet ou pas de choisir une texture. Cette fois ci, mode Opengl ou pas la texture apparaît correctement.
Le sous system OpenGL n'est donc pas en cause. J'ai un souci avec l'écriture de mon code précédent qui n'affiche pas la texture si compilation OpenGL.
Mais ou ??????
Le sous system OpenGL n'est donc pas en cause. J'ai un souci avec l'écriture de mon code précédent qui n'affiche pas la texture si compilation OpenGL.
Mais ou ??????
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Souci avec le sous system OpenGl
OOops j'ai oublié de poster le code
Code : Tout sélectionner
EnableExplicit
IncludePath "core"
Enumeration window
#mf
EndEnumeration
Declare Start()
Declare Exit()
If InitEngine3D(#PB_Engine3D_DebugLog ) And InitKeyboard() And InitSprite() And InitMouse() And InitSound()
Start()
Else
MessageRequester("Information", "Erreur init 3D")
End
EndIf
Start()
Procedure Start()
Protected header, camera, light, mesh, texture, material, entity, fileName.s, filePath.s
Protected assetsDir.s = #PB_Compiler_Home + "Examples\3D\Data\Textures\"
OpenWindow(#mf, 0, 0, 1024, 768, "test", #PB_Window_SystemMenu | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered | #PB_Window_SizeGadget)
OpenWindowedScreen(WindowID(#mf), 0, 0, 1024 , 768)
BindEvent(#PB_Event_CloseWindow, @exit())
; Add3DArchive & Parse
Add3DArchive(assetsDir, #PB_3DArchive_FileSystem)
Parse3DScripts()
; [2D]
Header = CreateSprite(#PB_Any, 1024, 32, #PB_Sprite_AlphaBlending)
; [3D]
Camera = CreateCamera(#PB_Any, 0, 0, 100, 100)
CameraBackColor(Camera, RGB(169, 169, 169))
MoveCamera(Camera, 2, 4, 8)
CameraLookAt(Camera, 0, 0, 0)
Light = CreateLight(#PB_Any, RGB(255, 255, 255), -2000, 2000, 1000)
; Préparation de l'entité
mesh = CreateCube(#PB_Any, 2)
fileName.s = OpenFileRequester("Select image ...", assetsDir, "Image (png, jpg)|*.png;*.jpg", 0)
If fileName =""
fileName = assetsDir + "caisse.png"
EndIf
filePath = GetFilePart(fileName)
texture = LoadTexture(#PB_Any, filePath)
material = CreateMaterial(#PB_Any, TextureID(texture))
entity = CreateEntity(#PB_Any, MeshID(mesh), MaterialID(material))
;-Loop
Repeat
Repeat : Until WindowEvent() = 0
FlipBuffers()
ExamineKeyboard()
If KeyboardReleased(#PB_Key_Escape)
exit()
EndIf
RenderWorld()
If StartDrawing(SpriteOutput(Header))
Box(0, 0, SpriteWidth(Header), SpriteHeight(Header), RGBA(0, 0, 0, 0))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, SpriteWidth(Header), SpriteHeight(Header), RGBA(0, 0, 0, 110))
DrawingMode(#PB_2DDrawing_Transparent)
; FPS
DrawText(5, 5, "FPS: " + Str(Engine3DStatus(#PB_Engine3D_CurrentFPS)))
StopDrawing()
EndIf
DisplayTransparentSprite(header, 0, 0)
ForEver
EndProcedure
Procedure Exit()
End
EndProcedure
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Souci avec le sous system OpenGl
Les sprites de PB ne font pas bon ménage avec Ogre & Opengl , le mieux est de sauvegardé l'état d'opengl avant le displaysprite et de "popé" ensuite l'état :
je pense que cela devrais fonctionné :
si GL_ALL_ATTRIB_BITS n'est pas déclaré , la constante vaut : $000FFFFF
je pense que cela devrais fonctionné :
Code : Tout sélectionner
glPushAttrib_(#GL_ALL_ATTRIB_BITS)
DisplayTransparentSprite(Header, 0, 0)
glPopAttrib_()