maison
Top.Mail.Ru Yandeks.Metrika
Forum: "Autre";
Archive actuelle: 2018.08.12;
Télécharger: [xml.tar.bz2];

vers le bas

dessin dans paintbox sur un pc faible Trouver des branches similaires


aka ©   (2016-09-12 18:05) [0]

J'ai récemment ajouté un programme dans lequel l'un des modules dessine des graphiques dans PaintBox. Sur les PC "normaux", tout fonctionne bien. Mais j'ai une ancienne unité système:

0,8 Celeron 256 RAM 32mb Vidéo

Où tout est terriblement lent lors du redessinage.
Je me suis précipité pour analyser OnPaint à la recherche de "code lourd", mais il s'est avéré que ce n'était pas le problème. Parce que les freins vont seulement en mode plein écran.

Il s’avère que vous ne pouvez rien obtenir de cela? Et la raison de tout est une petite mémoire vidéo. Mais je veux quand même que ce soit beau partout.



NoUser ©   (2016-09-12 20:29) [1]

Il y a un vieux truc: écraser (dessiner avec l'arrière-plan) uniquement ce que j'ai peint auparavant et ne pas remplir l'arrière-plan. Eh bien, faites une conclusion à travers le contour intermédiaire.

Et il y a assez de mémoire vidéo là-bas.



aka ©   (2016-09-12 21:50) [2]

Bien, dessiner dans Bitmap, puis copier BitBlt est compréhensible. Mais à propos du premier je n'ai rien compris, est-ce possible plus en détail?



Игорь Шевченко ©   (2016-09-12 22:28) [3]


>
> 0,8 Celeron
> RAM 256
> Vidéo 32mb
>
> Où tout est terriblement lent lors du redessinage.


Je jouais auparavant à des jouets graphiques en mode plein écran sur 286 avec une mémoire 1 Mo et une mémoire vidéo VGA standard (je ne me souviens plus de combien). Et rien, curieusement, n’a pas ralenti, bien que la scène ait été redessinée.
Peut-être, en plus des caractéristiques du fer, il y a aussi un code à apporter, donc il y a quelque chose à diagnostiquer?



kilkennycat ©   (2016-09-12 22:34) [4]


> Igor Shevchenko © (12.09.16 22: 28) [3]

bon exemple;)



NoUser ©   (2016-09-12 22:37) [5]

Amendement
> * Bien ou tirer une conclusion à travers la toile intermédiaire

Par exemple
si fFirstFrame commence alors Brush.Color: = clNlack; FillRect (rcMaxArea); fin du reste Pen.Color: = clNlack; MoveTo (xOldWhite0, yOldWhite0); LineTo (xOldWhite1, yOldWhite1); // Pen.Color: = clBlack; MoveTo (xOldRed0, yOldRed0); LineTo (xOldRed1, yOldRed1); // Pen.Color: = clBlack; MoveTo (xOldBlue0, yOldBlue0); LineTo (xOldBlue1, yOldBlue1); fin Pen.Color: = clWhite; MoveTo (xNewWhite0, yNewWhite0); LineTo (xNewWhite1, yNewWhite1); Pen.Color: = clRed; MoveTo (xNewRed0, yNewRed0); LineTo (xNewRed1, yNewRed1); Pen.Color: = clBlue; MoveTo (xNewBlue0, yNewBlue0); LineTo (xNewBlue1, yNewBlue1); // xOldWhite0: = xNewWhite0; xOldWhite1: = xNewWhite1; yOldWhite0: = yNewWhite0; yOldWhite1: = yNewWhite1; xOldRed0: = xNewRed0; xOldRed1: = xNewRed1; yOldRed0: = yNewRed0; yOldRed1: = yNewRed1; xOldBlue0: = xNewBlue0; xOldBlue1: = xNewBlue1; yOldBlue0: = yNewBlue0; yOldBlue1: = yNewBlue1;
Eh bien, vous pouvez utiliser Winapi et non Canvas.



NoUser ©   (2016-09-12 22:58) [6]

> Igor Shevchenko © (12.09.16 22: 28) [3]
;))

xV => 320x200 x 4bit = VRAM octet 32000
yV => 1024x768 x 32bit = octet VRAM 3145728

xC => 286 x 8 MHz
yC => 686 x 800 MHz

yC / xC = 100
yV / xV ~ 100

Tout converge - tous les progrès sont dans la photo!



Игорь Шевченко ©   (2016-09-12 23:18) [7]

NoUser © (12.09.16 22: 58) [6]


> xV => 320x200 x 4bit = VRAM octet 32000


Ceci est EGA, VGA était au moins 320x200x8bit et la mémoire vidéo était au moins 64к



kilkennycat ©   (2016-09-13 02:56) [8]


> NoUser © (12.09.16 22: 58) [6]

Je pensais que c'était à peu près la même chose, mais j'ai aussi ajouté toutes sortes de processus de gauche dans le processus moderne, et j'ai compris que 286 est plus rapide.



Pavia ©   (2016-09-13 07:50) [9]

> kilkennycat © (13.09.16 02: 56) [8]
>> NoUser © (12.09.16 22: 58) [6]
Ce celeron a un bus vidéo 40 plus rapide. I.e. si sur 286, la sortie en octets 1 a pris des cycles d'horloge 75-100
pci / agp pompe les octets 40 sur les mêmes cycles de processeur 100-150.
Où pouvons-nous obtenir que la mise à jour de la totalité de l'écran sur 286 était fps 1-1,5.
Sur celeron 40-60 fps. (Si la carte graphique AGP1.0, alors 8 fois plus petit)

Sur les PC modernes, la vitesse est encore plus élevée que celle de 160 - 240 fps
Sur 286, l’accélération a été obtenue en redessinant seulement une partie de l’écran. Mais sur celeron dans les jeux, la résolution de 1024x768 était une rareté, généralement 800x600. Sur une carte vidéo avec un accélérateur 2d, les images-objets étaient mises en cache dans la mémoire vidéo.



NoUser ©   (2016-09-13 15:10) [10]

> kilkennycat © (13.09.16 02: 56) [8]
In-in, telle est la perspicacité))

> Pavie © (13.09.16 07: 50) [9]
> La sortie 286 d'octets 1 a pris des cycles d'horloge 75-100
Eh bien, je ne sais pas, je me souviens que la pelle sur EC7978 (~ 2MHz) a tracé un nouveau niveau exactement plus rapidement qu’une seconde.

De sorte que
> analyser OnPaint pour "code lourd"
encore à



Игорь Шевченко ©   (2016-09-13 16:52) [11]

Pavie © (13.09.16 07: 50) [9]


> Où obtenons-nous que la mise à jour de tout l'écran sur 286 était 1-1,
> 5 fps.


Mais rien que la carte vidéo a été engagée dans la mise à jour de l'écran? :)


> I.e. si sur 286, la sortie en octets 1 a pris des cycles d'horloge 75-100


Vous dites des bêtises, monsieur. La sortie d'octet n'est en aucun cas associée à l'enregistrement dans la mémoire vidéo.


> Sur 286, l’accélération a été obtenue en redessinant uniquement
> partie de l'écran


Vous arrêtez de dire des bêtises, monsieur. Fatigué de ça.



Pavia ©   (2016-09-13 18:18) [12]


> Mais rien n'indique que la carte vidéo était en train de mettre à jour l'écran
>? :)

Oh, et vous avez une question avec une note subtile.
Je veux dire ce terme qui n'a pas de nom commun. Je pense que ceux qui voulaient comprendre comprenaient que nous parlions d'un dispositif de délai limité par le cadre de l'écran situé dans la mémoire vidéo - un cadre d'écran ou une trame d'écran.


> Vous, monsieur, dites des sottises. La sortie d'octet n'est connectée d'aucune façon
> avec enregistrement en mémoire vidéo.

Considérons l'art. Je pensais que les mots «conclusion» et «enregistrement» étaient synonymes et que personne ne se plaindrait.



aka ©   (2016-09-17 18:16) [13]


> Alors que
>> analyser OnPaint pour "code lourd"
> encore

Donc, ce n’est pas notre destin de peindre dans un paintbox sur un matériel aussi fin, de ne redessiner qu’une partie de l’écran - je ne veux pas souffrir.
Mais si vous redessinez complètement BITMAP, c’est-à-dire tout d’abord effacez PatBlt, puis dessinez et copiez tout ce qui est en BitBlt.

sur n'importe quel PC "normal", le temps moyen est de 2 secondes. Sur le "faible" 1 min 10 sec. Donc, au moins, faites quelque chose normalement, rien ne fonctionnera là-bas, mais il y avait une excellente copie à tester.
unité Unit1; interface utilise Windows, Messages, SysUtils, Variants, Classes, Graphiques, Contrôles, Formulaires, Dialogues, ExtCtrls, StdCtrls, Buttons; type TForm1 = classe (TForm) Panel1: TPanel; PaintBox1: TPaintBox; SpeedButton1: TSpeedButton; procedure PaintBox1Paint (Sender: TObject); procedure FormCreate (Sender: TObject); procedure SpeedButton1Click (Sender: TObject); f privé {Déclarations privées} public {Déclarations publiques} fin var Form1: TForm1; mise en oeuvre {$ R * .dfm} procédure TForm1.PaintBox1Paint (Sender: TObject); commencer PaintBox1.Canvas.MoveTo (0,0); PaintBox1.Canvas.LineTo (1000,1000); fin procedure TForm1.FormCreate (Sender: TObject); commencer DoubleBuffered: = True; fin procédure TForm1.SpeedButton1Click (Sender: TObject); var i: entier; commencer pour i: = 0 à 1000 do PaintBox1.Repaint; ShowMessage ("ok"); fin fin.



Pavia ©   (2016-09-17 19:41) [14]


> Sur le "faible" 1 min 10 sec.

J'ai eu un cas similaire au travail cette année-là. Le nouvel ordinateur s’est révélé être une carte vidéo sans l’accélérateur 2D, mais uniquement un CAN et une mémoire. Le test a montré 10 FPS, mais le traitement a réduit de moitié les performances du processeur. Selon l’idée, tout aurait dû fonctionner, mais le programme ou le système restait en retard. Par conséquent, ils n'ont laissé que le traitement sans affichage.

Votre test est faux. Vous n'avez pas spécifié les dimensions du PaintBox et le résultat dépend de cela.



Pavia ©   (2016-09-17 19:43) [15]

Eh bien, encore une fois, Igor viendra jurer contre mon alphabétisation. Je veux éditer des messages!



NoUser ©   (2016-09-17 19:51) [16]

Je ne savais pas que les programmeurs aka abandonnent si facilement))

Écoutez, vous vous êtes peut-être trompé - PaintBox1Paint (Sender); avec PaintBox1.Repaint;
47ms VS 2047ms est une augmentation normale du nombre de FPS, n'est-ce pas?



Inovet ©   (2016-09-17 20:39) [17]

> [14] Pavia © (17.09.16 19: 41)
> carte vidéo sans accélérateur 2D uniquement ADC et mémoire

De quoi parlez-vous maintenant?



kilkennycat ©   (2016-09-18 21:49) [18]


> Inovet © (17.09.16 20: 39) [17]

entrée vidéo, probablement :)



NoUser ©   (2016-09-18 22:46) [19]

peut-être ceci (ACS)
http://www.ngpedia.ru/id424302p1.html ))



kilkennycat ©   (2016-09-18 22:50) [20]


> NoUser © (18.09.16 22: 46) [19]

c’est drôle pour vous, mais j’ai dû écrire des jouets, où seul l’ASC était :)



NoUser ©   (2016-09-19 00:36) [21]

non, amusant, je me souviens comment j'ai «dessiné» mes polices et «appris» aux imprimantes ESC / P2 à les imprimer,
pour ainsi dire, "l'histoire des aiguilles 9-ty" 8-)



Pages: 1 branche entière

Forum: "Autre";
Archive actuelle: 2018.08.12;
Télécharger: [xml.tar.bz2];

à l'étage









Mémoire: 0.65 MB
Heure: 0.022 c
4-1289571945
Vidog
2010-11-12 17:25
2018.08.12
Dessin sur le bureau


2-1468763108
Alex79
2016-07-17 16:45
2018.08.12
liste déroulante sans chrome


15-1473692722
aka
2016-09-12 18:05
2018.08.12
dessin dans paintbox sur un pc faible


6-1286219600
olevacho_
2010-10-04 23:13
2018.08.12
TIDHTTPclient et les flux


15-1474119240
renard
2016-09-17 16:34
2018.08.12
Pinocchio





afrikaans albanais Arabic arménien azerbaïdjanais basque Biélorusse Bulgare catalan Chinois simplifié) Chinois (traditionnel) croate Tchèque Danois Néerlandais English estonien Filipino Finlandais Français
galicien géorgien Allemand Grecque Créole haïtien hébreu Hindi Hongrois Islandais Indonesian irlandais Italien japonais Coréen letton lituanien macédonien Malay maltais Norvégien
persan Polonais Portugais roumain Russe serbe Slovaque Slovène Espagnol Swahili Suédois Thai turc ukrainien Urdu vietnamien gallois yiddish bengali bosniaque
Cebuano espéranto gujarati Hause hmong Igbo Javanais Kannada Khmer lao latin maori Marathi mongol népalais punjabi somali tamil telugu yoruba
zoulou
Английский Français Allemand Italien Португальский Русский Espagnol