Názory ke článku Práce s grafikou 640x480@16bit v Pascalu. (1/4)
31. 1. 2006
Cus,
Konecne je tady nekdo, kdo tomu rozumi a vi co pise. To ber jako pochvalu, jsi dobrej!
Ted ale k veci: Grafika musi svistet, zde jsem ti to zoptimalizoval a prosim uprav pote
podle toho i clanek. Dik, ostatni budou radi a ty taky budes rad, pokud to sam pouzivas.
Init grafiky:
asm
mov ax, 4f02h
mov bx, 111h
int 10h
mov PodporaAVystup, ax
end;
if Hi(PodporaAVystup)<>$4f
Then
Begin
writeln('funkce nastaveni grafickeho modu neni podporovana..');
exit;
End;
If Lo(PodporaAVystup)<>$00
Then
Begin
writeln('nepovedlo se inicializovat grafiku..');
exit;
End;
Návrat do textového režimu:
Asm
Mov Ax, 03h
Int 10h
End;
VykresleniPixelu:
Toto je nejlinejsi cast celeho programu, ja jsem liny ji optimalizovat
protoze by se musela kompletne prepsat, pokud nekdo ma zajem o rychlejsi
grafiku, necht navstivi www.freez.wz.cz
Hlavni problem je ze se primo pri vykreslovani deli a zjistuji se veci,
ktere by meli byt dopredu zjistene v inicializaci a jejich hodnoty by se
jen meli nacitat z promennych a pouzit memW je k nicemu, protoze je to strasne
pomaly, lepsi je ukladat primo v Assembleru pomoci Mov, nebo StosW
To same zjisteni pixelu z obrazovky, GetPixel
Cara by se mela vykreslovat blokovym zapisem pixelu, nikoliv po pixelu
Kruh je pekny, jen neni v asm
--------------------------------------------------
Pro autora: V ZADNEM pripade toto neber jako kritiku, spis jako takove postouchnuti
k tomu, abys cerpal z lepsich zdroju, protoze pokud s temito funkcemi pro grafiku,
ktere tu jsou uverejneny nekdo bude chtit pracovat,
tak to bude strasne pomale, to si myslim ze je spatne a proto bych rad VYLEPSIL to,
co tu vidim.
31. 1. 2006
Sry, ale ted musim chte nechte napsat i kritiku, ale konstruktivni!
Nezjistujes velikost banku, cili granularitu.
Pokud bude granularita karty odlisna nez 65535 tak to nebude fungovat
tak, jak by melo. Cili zaklad pri nastaveni je pouzit VESA funkci
ktera vytahne z graficky karty informace a podle tech informaci
se bude pocitat v GetPixelu a PutPixelu,
ovsem doporucuji kvuli rychlosti primo ve funkci, ktera nastavi rozliseni
vypocitat dopredu vsechny hodnoty zavisle na bancich a s temito predem spocitanymi
hodnotami pracovat v GetPixel, PutPixel a OutTextXY.
Byla to moc velka skoda, kdyz by tady byl jen dalsi nepovedeny koutek s Pascalem.
PS: Nevis prosim jak nastavit v DOSu obnovovaci frekvenci u karet splnujici nektery standard?
Napr u vsech karet, ktere splnuji VESA3 by nemel byt zadny problem necim spolehlivym nastavit
RefreshRate.
Dale v posledni vete upozornuji, ze karty nemuseji mit mod 640x480xHigh Color
oznaceny jako 111h proto by se hodila funkce ktera by zjistovala na ktere
adrese je umisteno jake rozliseni.
Mohl bys tedy napsat jeden dil, se kterym jsi doposud nepocital? V tom dile
by byl tvuj stavajici unit upraven tak, aby byl rychly (narust cca o 50% kdyz udelas to, co jsem vyse vypsal)
a hlavne chci aby to bylo plne funkcni (tzn. zjistit velikost banku a adresy rozliseni)
1. 2. 2006
S temi pripominkami souhlasim. Zrychlovat init grafiky mi ale prijde zbytecne, kdyz se provadi pouze jednou na zacatku programu...
PutPixel a getPixel by si zrychleni zaslouzili. Pockej si na dalsi dil o virtualni obrazovce, s ni se pote tyto procedury temer nepouzivaji. (Zato tam mam spoustu jineho kodu, ktery by potreboval zoptimalizovat.)
...
Jeste jsem se s grafikou s jinou granularitou nez 64k a s jinym rozlisenim na 111h nesetkal, mas ale pravdu ze pokud chci unitu trochu vice pouzivat mely by se tyto skutecnosti zjistovat...
Nedavno jsem nasel chybu pri praci unity s mysi (v poslednim dile), proto zrejme jeste napisu dalsi dil, (s kterym jsem puvodne nepocital) kde budou vylepseni a opravy. Bohuzel ted pred maturitou nemam moc casu.
Nastavovani ob. frekvence jsem nikde nevidel. Mam stareho Sysmana, kde o tom neni ani slovo. (To by chtelo hledat na internetu.)
1. 2. 2006
ok, granularita jina nez 64K se vyskytuje velice casto na notebooku nebo na grafickych
kartach firem Cirrus Logic, S3, Sis, ... je tech karet opravdu dost.
Hlavne ty starsi karty mivaji odlisnou granularitu treba 4K no a v dnesni dobe
se pascal provozuje zejmena na starsich kompech, cili urcite by to dodelani
granularity smysl melo, ale delej, jak myslis je to tvuj clanek.
Rozliseni maji jine mody naopak u tech novejsich karet, tusim ze mnoho karet
standardu VESA 3 a vyssiho to maji obcas predefinovane, takze program se vubec
nespusti.
Na internetu jsem hledal hodne dlouho a nikde jsem nenasel jak nastavit refresh rate,
a pokud jsem to nekde videl, tak to bylo jen pro 1 konkretni kartu, cili nepouzitelne.
Jsem zvedav na dalsi dil, budes se take zabyvat Protected Mode (chranenym rezimem) ?
8. 2. 2006
V protected modu jsem jeste nic nenaprogramoval a uz asi nenaprogramuju, protoze jsem posledni dobou totalne propadl programovani mikroprocesoru PIC od Microchipu... Jeden ale nikdy nevi, k Pascalu se stale nekdy vracim, kdyz si chci hrat.
12. 3. 2006
Já bych ještě poprosil o jednu opravu. Ta věta je Pythagorova, Pythagoras ze Samu a tak.