реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> ep9307 & Graphic accelerator, Глюки при использовании block copy
Andrei....
сообщение Dec 19 2006, 09:42
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 104
Регистрация: 20-03-06
Пользователь №: 15 402



Разрешение экрана 640х480, 256-ти цветный режим. При использовании операции "block copy" на экранную область, иногда (при некоторых ширинах копируемого прямоугольника) наблюдаются глюки в виде небольших горизонтальных полосок толщиной в пиксел и шириной до 4-х пикселов с правого края копируемай области. Никто не сталкивался с таким эффектом?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 19 2006, 14:55
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Напишите, что Вы хотите получить, и что конкретно записываете в регистры акселератора, когда возникает глюк.
Go to the top of the page
 
+Quote Post
Andrei....
сообщение Dec 20 2006, 10:19
Сообщение #3


Частый гость
**

Группа: Новичок
Сообщений: 104
Регистрация: 20-03-06
Пользователь №: 15 402



Цитата(aaarrr @ Dec 19 2006, 14:55) *
Напишите, что Вы хотите получить, и что конкретно записываете в регистры акселератора, когда возникает глюк.


Собственно ф-ия коприравиния выглядит так:
void BltFast(LPSURFACE destSurf,unsigned short dsX,unsigned short dsY,LPSURFACE srcSurf,unsigned long srcleft,unsigned long srctop,unsigned long srcright,unsigned long srcbottom,unsigned char dcTrans)
{
if((srcright>srcleft)&&(srcbottom>srctop))
{
while(BLOCKCTRL & 1);

if(dcTrans & BLTFAST_SRCCOLORKEY)TRANSPATTRN=srcSurf->Trans;
SRCPIXELSTRT=((srcleft%4)*8/*PEL*/);
BLKSRCSTRT=srcSurf->StartAddress+4*srcSurf->Lenght*srctop+srcleft;
BLKSRCWIDTH=(srcright-1)/4-srcleft/4;
SRCLINELENGTH=srcSurf->Lenght;

DESTPIXELSTRT=((dsX%4)*8/*SPEL*/)|((((dsX+(srcright-1-srcleft))%4)*8)<<16/*EPEL*/);
BLKDESTSTRT=destSurf->StartAddress+dsY*destSurf->Lenght*4+dsX;
DESTLINELENGTH=destSurf->Lenght;
BLKDESTWIDTH=(dsX+(srcright-1-srcleft))/4-dsX/4;
BLKDESTHEIGHT=srcbottom-srctop-1;
BLOCKCTRL=0;
BLOCKCTRL=(2<<17/*P*/)|(0<<14/*BG*/)|((dcTrans & BLTFAST_SRCCOLORKEY?1:0)<<2/*TRANS*/)|(1/*ENABLE*/);
}
}
где, typedef struct{
unsigned long StartAddress;/*start address align word*/
unsigned short Width;/*width in pixel*/
unsigned short Height;/*height in pixel*/
unsigned short Lenght;/*lenght in words*/
unsigned long Trans;/*tranparency*/
} SURFACE, *LPSURFACE;

глюк возникает при следующих входных параметрах:
srcSurf - поверхность 1376х279 пикселов
srcleft=0,srctop=0,srcright=344(!!!именно такой параметр вызывает глюки),srcbottom=279
dsX, dsY любое значение
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 22 2006, 00:48
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Чему равны destSurf->Lenght и srcSurf->Lenght?
Лучше напишите непосредственно значения, которые записываются в регистры.
Go to the top of the page
 
+Quote Post
Andrei....
сообщение Dec 22 2006, 10:17
Сообщение #5


Частый гость
**

Группа: Новичок
Сообщений: 104
Регистрация: 20-03-06
Пользователь №: 15 402



Цитата(aaarrr @ Dec 22 2006, 00:48) *
Чему равны destSurf->Lenght и srcSurf->Lenght?
Лучше напишите непосредственно значения, которые записываются в регистры.


TRANSPATTRN=0
SRCPIXELSTRT=0
BLKSRCSTRT=0xc19a2a5c
BLKSRCWIDTH=85
SRCLINELENGTH=344 //ширина исходной поверхности 1376 пикселей

DESTPIXELSTRT=8
BLKDESTSTRT=0xc0001d89
DESTLINELENGTH=160 //экранная область 640x480
BLKDESTWIDTH=86
BLKDESTHEIGHT=278 //высота катринки 279 пикселей

BLOCKCTRL=0
BLOCKCTRL=(2<<17/*P*/)|(0<<14/*BG*/)|(1<<2/*TRANS*/)|(1/*ENABLE*/);
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 22 2006, 13:45
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Здесь что-то не так:

Код
SRCPIXELSTRT=0
BLKSRCWIDTH=85

DESTPIXELSTRT=8
BLKDESTWIDTH=86


По-моему, DESTPIXELSTRT должен быть 0x00180008.
Go to the top of the page
 
+Quote Post
Andrei....
сообщение Dec 22 2006, 18:03
Сообщение #7


Частый гость
**

Группа: Новичок
Сообщений: 104
Регистрация: 20-03-06
Пользователь №: 15 402



Цитата(aaarrr @ Dec 22 2006, 13:45) *
Здесь что-то не так:

Код
SRCPIXELSTRT=0
BLKSRCWIDTH=85

DESTPIXELSTRT=8
BLKDESTWIDTH=86


По-моему, DESTPIXELSTRT должен быть 0x00180008.


похоже всё правильно: т.к. трансфер представляет собой целое число word'ов (86 word'ов, BLKSRCWIDTH=85), а начитаяется на DESTINATION он со второго пикела в word'е, то заканчиваться должен на первом пикселе, это соответствует DESTPIXELSTRT=0x00000008
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 22 2006, 18:29
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Andrei.... @ Dec 22 2006, 18:03) *
похоже всё правильно: т.к. трансфер представляет собой целое число word'ов (86 word'ов, BLKSRCWIDTH=85), а начитаяется на DESTINATION он со второго пикела в word'е, то заканчиваться должен на первом пикселе, это соответствует DESTPIXELSTRT=0x00000008

Хорошо, тогда как быть с SRCPIXELSTRT? Следуя такой логике, ему должно быть присвоено значение 0x00180000 (начало на 0-м пикселе, конец на 3-м), но что-то подсказывает мне, что это неправильно.

А что получается при DESTPIXELSTRT=0x00180008?
Go to the top of the page
 
+Quote Post
Andrei....
сообщение Dec 25 2006, 10:05
Сообщение #9


Частый гость
**

Группа: Новичок
Сообщений: 104
Регистрация: 20-03-06
Пользователь №: 15 402



[/quote]
Хорошо, тогда как быть с SRCPIXELSTRT? Следуя такой логике, ему должно быть присвоено значение 0x00180000 (начало на 0-м пикселе, конец на 3-м), но что-то подсказывает мне, что это неправильно.
[/quote]

Но регистр SRCPIXELSTRT содержит ТОЛЬКО адрес первого пиксела в word'е (нижние биты PEL[4:0]), соответственно начало на 0-ом пикселе.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 25 2006, 10:10
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Andrei.... @ Dec 25 2006, 10:05) *
Но регистр SRCPIXELSTRT содержит ТОЛЬКО адрес первого пиксела в word'е (нижние биты PEL[4:0]), соответственно начало на 0-ом пикселе.

Да, запутался малость wacko.gif
Так все же: что получается при DESTPIXELSTRT=0x00180008?
Go to the top of the page
 
+Quote Post
Andrei....
сообщение Dec 26 2006, 10:22
Сообщение #11


Частый гость
**

Группа: Новичок
Сообщений: 104
Регистрация: 20-03-06
Пользователь №: 15 402



[/quote]
Да, запутался малость wacko.gif
Так все же: что получается при DESTPIXELSTRT=0x00180008?
[/quote]

при DESTPIXELSTRT=0x00180008, к тем глюкам которые есть добавляются ещё 4 глючных пиксела в конце каждой строки.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 04:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01433 секунд с 7
ELECTRONIX ©2004-2016