Page 3 sur 4

Publié : ven. 02/mai/2008 15:07
par SPH
Oui, et il n'y a pas que ca de bizzare.

Pourquoi je dois faire un tableau en (hauteur, largeur) et non dans l'ordre des declarations pour un ScreenOpen : largeur, hauteur ?

Code : Tout sélectionner

Dim p(dh-1,dw-1) ; >>>regardez ca, pkoi je dois inverser dw avec dh ici ? 
Ici, du bleu qui apparait rouge mais...

Code : Tout sélectionner

For i=0 To 100 
p(i,i) = RGB(0,0,255) ; >>>ligne bleue qui est rouge chez moi ! 
Next 
...mais c'est parce qu'en interrogeant le DrawingBufferPixelFormat(),

Code : Tout sélectionner

Debug DrawingBufferPixelFormat() ; >>>ce truc m'affiche le mode 7 (du BVR) 
on est curieusement dans un mode non RVB alors que j'aurais juré que c'était ce mode est était mis par défaut !

La notice dit ceci des differents modes :
  • #PB_PixelFormat_8Bits ; 1 octet par pixel, palettisé
    #PB_PixelFormat_15Bits ; 2 octets par pixel
    #PB_PixelFormat_16Bits ; 2 octets par pixel
    #PB_PixelFormat_24Bits_RGB ; 3 octets par pixel (RRGGBB)
    #PB_PixelFormat_24Bits_BGR ; 3 octets par pixel (BBGGRR)
    #PB_PixelFormat_32Bits_RGB ; 4 octets par pixel (RRGGBB)
    #PB_PixelFormat_32Bits_BGR ; 4 octets par pixel (BBGGRR)
Le mode 7, c'est le dernier; soit du 4 octets par pixels (ca ok), mais en BVR 8O

Publié : ven. 02/mai/2008 17:52
par Backup
c'est ta carte qui est bizarre a mon avis ... :?

Publié : ven. 02/mai/2008 22:24
par SPH
Dobro a écrit :c'est ta carte qui est bizarre a mon avis ... :?
Celle de Progi aussi alors car il voit du rouge a la place du bleue. Et toi ? R ou B ?

Publié : sam. 03/mai/2008 1:45
par poshu
Oui, il y a quelques mois, j'ai beaucoup bidouillé la ram vidéo, aidé par deux membres du forum anglais; pourquoi je ne poste pas ici alors que ça pourrait peut être aider toute la communauté? (précisons que je ne suis pas certain d'y arriver non plus) A cause de SPH. Par ailleurs, je tiens à présenter mes excuse quand à la transformation de ce topic en règlement de compte:
je pense etre relativement intelligent, plutot logique et imaginatif.
C'est bien d'avoir une haute estime de sois même, c'est moins malin de l'étaler partout.
Ollivier wrote:
ça, c'est plus cool en ressources CPU:
Code:
.........


Ca me conforte dans l'idée que personne ne sait utiliser la copie en memoire video...

Ton code me fait un decallage monstrueux. Je ne sais meme pas ce que c'est mais il y a une platrée de points blancs qui dancent en bandes diagonales...
Quel beau comportement, pas un merci, juste un message dédaigneux sur les capacités de la communauté. Précisons que c'est celle là qui m'a fait tiqué alors que je lisais ce topic.
Tu n'es qu'un pauvre con !!!! Ca laisse entendre que tu as la reponse mais que finalement tu preferes ne pas la donner devant tant de débiles.
Tomber dans l'insulte est VRAIMENT constructif aussi, quel bel exemple que tu montres! Maintenant, je vais réviser mes idées et vous aider...
C'est précisément ce genre de remarques récurrentes qui font que j'ai décidé de m'abstenir. Qui plus est, après un post où je précisais que la critique de la communauté n'était pas de moi mais le ressenti que j'avais lu de ton post.

Enfin bon, l'impolitesse et la démagogie semblant faire partie de ta définition de l'intelligence, je suis bien trop idiot et con pour vous aider, bonne chance à vous.

Publié : sam. 03/mai/2008 8:13
par case
SPH a écrit :
Progi1984 a écrit :Ca me donne des points rouges :)
Etrange hein ! Car j'ai bien dit du bleu avec mon RGB(0,0,255)
ta carte utilise un format en BGR et pas en RGB, ecrire la valeur donnée par RGB() inverse donc le rouge et le bleu il faut que tu prenne en compte le format des pixels dans ton code.

ce n'est pas compliqué un select/case sur le pixelformat ferais l'affaire

Code : Tout sélectionner

global pixelformat=DrawingBufferPixelFormat()
declare realrgb(r,g,b)
...
...
...
...

procedure realrgb(r,g,b)
select pixelformat
case 4,6
Z = RGB(r,g,b)
case 5,7
Z = RGB(b,g,r)
endselect
procedurereturn Z
endprocedure
par exemple

j'ai pas testé mais ca devrais etre ok



@poshu

je trouve aussi que SPH n'y met pas vraiment les formes et qu'en plus les problemes qu'il rencontrent aujourd'hui sont les même qu'il avais déjà rencontre précédemment avec la mémoire vidéo a savoir ne pas utiliser les fonctions comme bufferpitch etc... mais il tombe encore dans le panneau.


ceci dit ton premier post m'a aussi choqué sans quoi je n'aurais pas reagis sur ce post , bref je ne dirais qu'une chose, si tu n'aime pas la manière que sph a de demander les choses (ce que je comprend aisément)
ne lui repond pas, ignore le. ces flammeswars ne profitent a personne sur le forum et ne font que petit a petit réduire notre communauté d'utilisateurs francophones de pure basic.

Publié : sam. 03/mai/2008 10:30
par SPH
poshu a écrit :après avoir lu comme SPH est doué et que toute le reste de la communauté est débile, je m'en vais.
Oui, on t'en plie, fait ca... va t'en... :wink:

@case:
Tu me reexplique ce que je venais d'expliquer :
Ici, du bleu qui apparait rouge mais...

Code : Tout sélectionner

For i=0 To 100 
p(i,i) = RGB(0,0,255) ; >>>ligne bleue qui est rouge chez moi ! 
Next 
...mais c'est parce qu'en interrogeant le DrawingBufferPixelFormat(),

Code : Tout sélectionner

Debug DrawingBufferPixelFormat() ; >>>ce truc m'affiche le mode 7 (du BVR) 
Moi, perso, j'attend plutot de savoir pourquoi on est dans ce mode par default...

Publié : sam. 03/mai/2008 11:13
par Anonyme
Pour la gestion des couleurs SPH , fait comme ceci :

$00FF00 <- du vert
$FF0000 <- du bleu

plus simple que rgb...

ou tu te fait une petite macro :

Code : Tout sélectionner

macro BRG(b,g,r)
rgb(b,g,r)
endmacro
quand tu touches a la mémoire vidéo , c'est du bgr.

Publié : sam. 03/mai/2008 11:48
par SPH
Traiter chaque pixel pour qu'il redevienne RVB, c'est perdre de vue ce qui nous amenait ici : passer un tableau en memoire video.
Et, puisque le mode que tout le monde connait de DrawingBufferPixelFormat() est le mode 6 :
  • #PB_PixelFormat_32Bits_RGB ; 4 octets par pixel (RRGGBB)
, nous devrions avoir le choix de choisir entre autre CE mode;
Mais cela ne reglerait que la question de l'inversion des teintes R et B.

Sinon, en reessayant de repasser un tableau complet, j'ai des coordonnées difficiles à calculer et un resultat (sans decallage cette fois) qui n'affiche pas toute la page...

Code : Tout sélectionner

InitSprite() 
InitKeyboard() 
InitMouse() 

dw=1280
dh=1024 
dc=32 

If OpenScreen(dw,dh,dc,"")=0 :End :EndIf 

; ici, on interroge la valeur de DrawingBufferPitch()
StartDrawing(ScreenOutput()) 
MemVideo = DrawingBuffer() 
D_B_pitch = DrawingBufferPitch() / 4
StopDrawing() 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Dim p(dh * D_B_pitch)

For i=0 To dh-1
p(i+i*D_B_pitch) = RGB(0,0,255) ; ligne haut gauche
p(dw-i+i*D_B_pitch) = RGB(255,0,255) ; ligne haut droite
Next 
p(dh* D_B_pitch-1)= RGB(255,255,255) ; point bas droite que je n'arrive pas a regler...

;;;;;;;;;;;;;;;;;;;;; 
;;;;;;;;;;;;;;;;;;;;; 
;;;;;;;;;;;;;;;;;;;;; 

Repeat 

StartDrawing(ScreenOutput()) 
MemVideo = DrawingBuffer() 
CopyMemory(@p(), MemVideo,dw * dh * 4)
StopDrawing() 
FlipBuffers() 
ExamineKeyboard() 
Until KeyboardPushed(#PB_Key_Escape) 

Publié : sam. 03/mai/2008 18:56
par djes
SPH a écrit :Traiter chaque pixel pour qu'il redevienne RVB, c'est perdre de vue ce qui nous amenait ici : passer un tableau en memoire video.
Et, puisque le mode que tout le monde connait de DrawingBufferPixelFormat() est le mode 6 :
  • #PB_PixelFormat_32Bits_RGB ; 4 octets par pixel (RRGGBB)
, nous devrions avoir le choix de choisir entre autre CE mode;
Mais cela ne reglerait que la question de l'inversion des teintes R et B.

Sinon, en reessayant de repasser un tableau complet, j'ai des coordonnées difficiles à calculer et un resultat (sans decallage cette fois) qui n'affiche pas toute la page...

Code : Tout sélectionner

InitSprite() 
InitKeyboard() 
InitMouse() 

dw=1280
dh=1024 
dc=32 

If OpenScreen(dw,dh,dc,"")=0 :End :EndIf 

; ici, on interroge la valeur de DrawingBufferPitch()
StartDrawing(ScreenOutput()) 
MemVideo = DrawingBuffer() 
D_B_pitch = DrawingBufferPitch() / 4
StopDrawing() 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Dim p(dh * D_B_pitch)

For i=0 To dh-1
p(i+i*D_B_pitch) = RGB(0,0,255) ; ligne haut gauche
p(dw-i+i*D_B_pitch) = RGB(255,0,255) ; ligne haut droite
Next 
p(dh* D_B_pitch-1)= RGB(255,255,255) ; point bas droite que je n'arrive pas a regler...

;;;;;;;;;;;;;;;;;;;;; 
;;;;;;;;;;;;;;;;;;;;; 
;;;;;;;;;;;;;;;;;;;;; 

Repeat 

StartDrawing(ScreenOutput()) 
MemVideo = DrawingBuffer() 
CopyMemory(@p(), MemVideo,dw * dh * 4)
StopDrawing() 
FlipBuffers() 
ExamineKeyboard() 
Until KeyboardPushed(#PB_Key_Escape) 
Ce n'est pas le programmeur qui choisit le mode, c'est la carte qui l'impose. Tu crois que ça nous amuse de bidouiller avec 36 modes différents? C'est pour ça qu'il y des instructions sur le pitch. Qu'est-ce que tu aurais dit en voyant les consoles nintendo où on était obligé de faire des caractères pour afficher quelque chose à l'écran!

Publié : sam. 03/mai/2008 20:06
par Ollivier
@SPH

Comment ça 0 ??? Hm?

Publié : sam. 03/mai/2008 20:45
par Ollivier
Ah, oui! Mea Culpa!

Ce code-ci devrait t'être plus parlant.

Code : Tout sélectionner

InitSprite()

OpenScreen(1024,768,32,"") 

For i = 0 To 1
  FlipBuffers()
  StartDrawing(ScreenOutput() ) 

    Debug "BUFFER N°" + Str(i)
    Debug "Adresse : 0x" + Hex(DrawingBuffer() ) + "h"
    Debug "Mode : " + Str(DrawingBufferPixelFormat() )
    Debug "Taille d'une ligne : " + Str(DrawingBufferPitch() ) + " octets"
    Debug " "
    
  StopDrawing()
Next 

CloseScreen()
Moi aussi c'est BGR() et ça ne me fait pas un 2ème terrier : je ne sais pas qu'est-ce que tu veux au final. Alors je ne vais pas pouvoir t'aider plus.

Et ne braille pas, ça fait des vagues!

Publié : sam. 03/mai/2008 21:01
par case
SPH a écrit :Traiter chaque pixel pour qu'il redevienne RVB, c'est perdre de vue ce qui nous amenait ici : passer un tableau en memoire video.
Et, puisque le mode que tout le monde connait de DrawingBufferPixelFormat() est le mode 6 :
  • #PB_PixelFormat_32Bits_RGB ; 4 octets par pixel (RRGGBB)
, nous devrions avoir le choix de choisir entre autre CE mode;
Mais cela ne reglerait que la question de l'inversion des teintes R et B.
c'est le hardware (la carte graphique) qui est comme ca, ce n'est pas pure basic qui choisis un mode au hasard.

les commandes de pure basic sont la pour informer le programmeur de la manière dont l'affichage est géré par le hardware. et non pas l'inverse :)

Publié : sam. 03/mai/2008 22:45
par SPH
@Ollivier:
  • BUFFER N°0
    Adresse : 0x1440000h
    Mode : 7
    Taille d'une ligne : 4096 octets

    BUFFER N°1
    Adresse : 0x1740000h
    Mode : 7
    Taille d'une ligne : 4096 octets


Ce que je veux : envoyer une photo dans la mem video et la voir avec les bonnes couleurs (cet exemple resume tout les 'problemes' que l'on doit contourner)

@case:

Il y a 7 modes differents. C'est bien que dans certaines condition, on soit dans un autre mode que le mode 7

Publié : dim. 04/mai/2008 14:43
par case
SPH a écrit :
@case:

Il y a 7 modes differents. C'est bien que dans certaines condition, on soit dans un autre mode que le mode 7
ca vas dependre de la carte graphique utilisée certaines sont en mode 7 d'autres en mode 6 etc... suivant leur conception
ce que je veux dire c'est qu'une carte utilisant le mode 6 pour afficher du 32bit n'utilisera jamais le mode 7 puisque c'est sa façon d'afficher les couleurs.
les commandes de pure basic sont la pour nous indiquer quel est le format utilisé par la carte graphique.

Publié : dim. 04/mai/2008 17:00
par Anonyme
c'est qu'une carte utilisant le mode 6 pour afficher du 32bit n'utilisera jamais le mode 7 puisque c'est sa façon d'afficher les couleurs.
je crois que tu as le choix , toute les cartes supporte tout les formats , mais il faut descendre en niveau il me semble avec directx , j'en sais pas plus...