Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2004-03-09

Re[4]: [DirectX8] Как хранить спрайты?

Доброго времени суток, Denis.

Tuesday, March 9, 2004, 9:21:14 PM:

DK> А кто заставляет исп-ть ДХ8?
Необходимость.
DK> Что мешает использованию IDirectDrawSurface7 или хоть в отдельности IDirectDrawSurface7?
DK> Не вижу смысла завязываться с 3Д объектами и текстурами, если всё это
DK> реализовано в 2Д на аппаратном уровне
Данная весчь будет использываться вместе с полноценным Direct3D8

DK> Т.к. если все спрайты влезут в память на борту видяхи, копирование
DK> будет идти на внутренней частоте видеопамяти, да и порциями не меньше
DK> 8 байт.
Все кадры врядли влезут на борт видяхи даже с 256 Метрами памяти.

DK> Хранить всё в отдельных структурах данных не самое лучшее решение.
DK> Представь себе: какой-нибудь простенький анимированный gif (30 кадров)
DK> лежал бы в 30 файлах gif. Куда проще объединить все кадры, скажем,
DK> положив их друг за другом или составить из них матрицу, а к ней ещё
DK> просчитать таблицу RECT-ов (а если все кадры одинаковой ширины/высоты,
DK> то и на ходу можно не страшась считать).

Непонял какая разница: что я буду хранить все кадры на одной текстуре,
но при этом считать для каждого кадра RECT(1) и что буду хранить
несколько Surface'ов.(2)
Я бы даже сказал, что способ(2) лучше и универсальнее:
Динамически можно подключать новые кадры к цепочке в случае
необходимости, в (1) если вылезти за рамки отведенной текстуры, то
предется заново создавать большую размером и копирывать на нее старую.

DK> Ну, классически все юзают спрайты с размерами степени двойки уже не
DK> один десяток лет. Про Lock же ниже.
Т.е. на этот самый перерасход памяти можно со спокойной совестью
забить???

DK> Как только начнёшь "лочить", данные пойдут качатся из видеопамяти в
DK> основную
А это еще зачем????
Сказать, чтоб лочил DISCARD и WRITEONLY и ничего из видеопамяти
считываться не будет.

ЗЫ. А какие комментарии к способу номер 2?

--
С бестами и регардами
Havoc
mailto:hav***@i*****.ru
Номер выпуска : 2502
Возраст листа : 169 (дней)
Количество подписчиков : 380
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/99896
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   Havoc 2004-03-09 22:57:45 (#99896)

Re: Делфи - память

==-==-=-Привета!8 марта 2004 г. (понедельник 19:54:35) monah (E-Mail: <janal***@n*****.ru>) в мессаге
<<Делфи - память>> накрапал

monah> Здравствуйте!
monah> Помогите разобраться:
monah> При запуске этого кода каждые 5-6 сек размер программы увеличивается на
4kB,
monah> timer.interval:=1000;

Это, друг мой, называется утечка памяти :-)
Такая лажа иногда бывает... когда забываешь после себя "убрать".
Могу привести еще море таких-же примеров

   -=BorMaN=- 2004-03-09 22:29:29 (#99882)

Re[2]: FoxPro: команда append

Hi, Бурляев Вячеслав
По логике этот кусок должен все данные из таблиц qq10 и sw_z1 добавить к данным
> в таблице q110_sort. Но не получается добавлять.
> Имеется один моментик: структура всех трёх таблиц разная. Может в этом проблема?

Проблема как раз в этом. Поля должны иметь одинаковые имена и типы. Во
всяком случае в Clipper имено так.

   Саша 2004-03-09 21:52:20 (#99856)

Re: Делфи - память

Здравствуйте !

> // ===> by Feniks
> ReleaseDC(dc)
> // ===> by Feniks
>
> m> cn.TextOut(sx-100,10,FormatDateTime('d MMMM', Date));
> m> cn.TextOut(sx-100,25,FormatDateTime('dddd', Date));
> m> cn.TextOut(sx-100,40,TimeToStr(time));
> m> cn.Free;
> m> end;
>
> Ты пропустил ReleaseDC(dc) после использования dc GetDC.
> Читай HELP на ReleaseDC и GetDC...

Добавлю также (может кому интересно) :-)
"Увеличение размера программы" происходит в этом случае из-за
неосвобождающихся блоков данных структур описания контекстов
устройств в области памяти пользовательского режима.
По-русски : контекст устройства в винде представлен в
двух ипостасях (как вобщем то и все объекты GDI) - структурой
в области памяти режима ядра и в области памяти пользовательского
режима. В области памяти пользовательского режима находится
урезанная копия структуры, содержащая данные контекста
(они по мере надобности синхронизируются).
Полная структура лежит в области памяти режима ядра (добраться
до нее можно написав свой драйвер). До локальной (урезанной)
структуры можно добраться используя недокументированную WinAPI
функцию GetQueryTable. Эта функция возвращает указатель на таблицу
объектов GDI. Кстати, часть содержимого любого дескриптора,
возвращаемого функциями GDI API (типа GetDC, CreatePen,
CreateSolidBrush и есть индекс ячейки этой таблицы).
Экспериментально выяснено, что размер таблицы объектов GDI - всего
16384. Из них - несколько десятков - это "предопределенные"
объекты GDI, дескрипторы которых возвращаются например при вызове
функций : GetSysColorBrush, GetStockObject, часть - объекты,
используемые "родными" процессами виндов.
Короче, попробуйте сделать вот так :

for(int i = 0; i < 16384; i++)
{
if(::CreateSolidBrush(RGB(0x33, 0x66, 0x99)) == NULL)
break;
}

TRACE("Откушано объектов : %d\n", i);

и увидите сколько в вашей системе было доступно объектов GDI :-)
Только предупреждение - систему после этого скорее всего
придется перегрузить (если это винда 95/98) т.к. работать станет
невозможно (все будет глючить). В вин 2000 взглючит скорее всего
перерислвка только в пределах процесса, проделавшего такое
(и объектов удасться выделить только около 10000). Но запустипе
сразу пару - тройку таких приложений, и будет весело :-)

--
С уважением, Вахтуров Виктор.
Информационный сайт для программистов http://SoftMaker.com.ru

З.Ы. Да, что то разговорился я сегодня :-)
Короче, читайте классиков :-)
Номер выпуска : 2499
Возраст листа : 169 (дней)
Количество подписчиков : 380
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/99847
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   2004-03-09 21:30:50 (#99847)

Re[3]: [DirectX8] Как хранить спрайты?

Рад приветствовать, Havoc!

Довелось мне Friday, March 05, 2004 читать, следующее:

H> Задача в следующем: Есть 3Д(2Д) модель (т.к. в ДиректХ8 нету
H> ДиректДрав) На нее надо вывести последовательность кадров(спрайтов)

А кто заставляет исп-ть ДХ8? Что мешает использованию
IDirectDrawSurface7 или хоть в отдельности IDirectDrawSurface7?
Не вижу смысла завязываться с 3Д объектами и текстурами, если всё это
реализовано в 2Д на аппаратном уровне (а если нет, так и 3Д тем более
ты от HW не получишь).

H> 1) Хранить каждый кадр в отдельной текстуре, ну и накладывать
H> последовательно текстуры.
H> Плюсы - похоже, что это самая быстрая смена кадров(или нет???).

Не берусь утверждать со 100% уверенностью, но при грамотной
реализации на глаз ты разницы точно не увидишь. Т.к. если все спрайты
влезут в память на борту видяхи, копирование будет идти на внутренней
частоте видеопамяти, да и порциями не меньше 8 байт. Короче, я
получал фпс порядка 1500 на GF2MX400, тебе оно надо ;) ? Тут уже
больше ограничений по CPU/RAM. Другой вопрос хочешь ли ты
дополнительных извратов со спрайтами, которые хард не позволяет.

Хранить всё в отдельных структурах данных не самое лучшее решение.
Представь себе: какой-нибудь простенький анимированный gif (30 кадров)
лежал бы в 30 файлах gif. Куда проще объединить все кадры, скажем,
положив их друг за другом или составить из них матрицу, а к ней ещё
просчитать таблицу RECT-ов (а если все кадры одинаковой ширины/высоты,
то и на ходу можно не страшась считать).

H> Минусы: писать в текстуру ручками(Lock) довольно долго и текстура
H> может быть размером только 2 в степени n - отсюда перерасход памяти(а
H> если еще кадров эдак под 1000:(... )

Ну, классически все юзают спрайты с размерами степени двойки уже не
один десяток лет. Про Lock же ниже.

H> 3) Создать одну текстуру, а кадры хранить как
H> DWORD frame[Width][Height]и при выводе нужный кадр копирывать
H> Lock'ом на текстуру и вывешивать ее.

Как только начнёшь "лочить", данные пойдут качатся из видеопамяти в
основную (это синхра шин, нагрузка CPU и работа на частоте RAM), тут
резко упадёт фпс (заметно независимо от ХхAGP или PCI). Конечно, в
большинстве спрайтовых игр даже современного уровня таким образом
можно спокойно получить не менее 60 кадров/сек (тем более, что почти
у всех сейчас есть MMX).

ЗЫ Я переводя игрулю с ДОСа был вынужден применять Lock-и (по общей
структуре программы и необходимости динамического изменения
спрайтов). При том ФПС при однопроходной прорисовке тайлов (вывод
в RAM порциями по DWORD) не менее 300 (Cel1000/256(PC100)/GF2MX400).
Использовал DirectDraw7...

Alles Gutes!

CU @ http://smuta.boom.ru
...In Code We Trust...
При желании, mailto:deniskravtso***@m*****.ru
Номер выпуска : 2498
Возраст листа : 169 (дней)
Количество подписчиков : 380
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/99842
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   2004-03-09 21:24:36 (#99842)

Re: Как присвоить событию onClick процедуру имя которой хранится в переменной?

> > Непонятно, какого типа у тебя эта переменная S. Если строковая, то
> > таким макаром не катит. Попробуй применить переменную процедурного
> > типа.
>
> Может, все зделать гораздо проще ?
> Сделать обычный onClick, а в этом самом onClick прописать вызов
> функции по указателю (переменная S) ?
>
Если в переменной S находится указатель, то можно поизвращатся и сделать
так:
Var
S:Pointer { или procedure (sender:Tobject)};
pr:TNotifyEvent;
. . .
@pr:=s {или @s, зависит от типа S - указатель или процедурный тип};
Button1.onclick:=pr;
. . .
--
А елси S - это не указатель и не процедурный тип, тогда вызвать процедуру
невозможно! ( по моемому :-) )
Номер выпуска : 2497
Возраст листа : 169 (дней)
Количество подписчиков : 380
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/99803
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   2004-03-09 20:45:45 (#99803)

Re: Как присвоить событию onClick процедуру имя которой хранится в переменной?

Здравствуйте !

> fr> Имеется кнопка Button1;
> fr> Считываю имя процедуры из переменной S;
> fr> Мне надо написать что нибудь типа
> fr> button1.onClick= имя процедуры из s
> fr> пробовал @s , но не понимает типа TNotifyEvent....... Что делать?
>
> Непонятно, какого типа у тебя эта переменная S. Если строковая, то
> таким макаром не катит. Попробуй применить переменную процедурного
> типа.

Может, все зделать гораздо проще ?
Сделать обычный onClick, а в этом самом onClick прописать вызов
функции по указателю (переменная S) ?

--
С уважением, Вахтуров Виктор.
Информационный сайт для программистов http://SoftMaker.com.ru
Номер выпуска : 2496
Возраст листа : 169 (дней)
Количество подписчиков : 380
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/99706
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   2004-03-09 19:01:31 (#99706)

Re: Как присвоить событию onClick процедуру имя которой хранится в переменной?

Hello front.ru,

fr> Здравствуйте, comp.

fr> Имеется кнопка Button1;
fr> Считываю имя процедуры из переменной S;
fr> Мне надо написать что нибудь типа
fr> button1.onClick= имя процедуры из s
fr> пробовал @s , но не понимает типа TNotifyEvent....... Что делать?

Непонятно, какого типа у тебя эта переменная S. Если строковая, то
таким макаром не катит. Попробуй применить переменную процедурного
типа.

   Вадим Шешунов 2004-03-09 16:25:06 (#99617)

Re: [PHP] Как сделать редирект?

H> Есть две страницы page1.php и page2.php.
H> Из первой страницы есть ссылка на вторую:
H> <a href="page2.php"></a>
H> Вопрос: что написать во второй странице, чтобы поле нажатия на
H> ссылку в первой, вотрая выводила какую либо надпись, и через заданное
H> время вызывала первую(причем не возвращалась назад, а вызывала
H> новую) автоматически?

Тут дружище html голый практически...

<META HTTP-EQUIV=Refresh CONTENT="секунды; URL=page2.php>

   2004-03-09 13:32:31 (#99521)

Re: Делфи - память

Здравствуйте, monah.

Вы писали 8 марта 2004 г., 19:54:35:

m> procedure TForm1.Timer1Timer(Sender: TObject);
m> var
m> dc:HDC;
m> cn:TCanvas;
m> sx:integer;
m> begin
m> cn:=TCanvas.Create;
m> sx:=Screen.Width;
m> cn.Font.Color:=clWhite;
m> cn.Font.Style:=[fsBold];
m> cn.Brush.Color:=clBackground;
m> dc:=GetDC(0);
m> cn.Handle:=dc;

// ===> by Feniks
ReleaseDC(dc)
// ===> by Feniks

m> cn.TextOut(sx-100,10,FormatDateTime('d MMMM', Date));
m> cn.TextOut(sx-100,25,FormatDateTime('dddd', Date));
m> cn.TextOut(sx-100,40,TimeToStr(time));
m> cn.Free;
m> end;

Ты пропустил ReleaseDC(dc) после использования dc GetDC.
Читай HELP на ReleaseDC и GetDC...

Remarks
The application must call the ReleaseDC function for each call to the
GetWindowDC function and for each call to the GetDC function that
retrieves a common device context.

--
С уважением,
Feniks mailto: feni***@b*****.ua
Номер выпуска : 2493
Возраст листа : 169 (дней)
Количество подписчиков : 380
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/99519
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   Feniks 2004-03-09 13:31:53 (#99519)

Re: o'reilly perl books

Тема: o'reilly perl books
> где бы можно скачать книги издательства о'рейли переведенные на русский язык
посвященные перлу?
> если у когонибудь имеются вышеуказанные вышлите пожалуста на личку
У меня есть, но когда послал на личку, то ко мне все вернулось ..

   2004-03-09 11:23:23 (#99453)

Как присвоить событию onClick процедуру имя которой хранится в переменной?

Здравствуйте, comp.

Имеется кнопка Button1;
Считываю имя процедуры из переменной S;
Мне надо написать что нибудь типа
button1.onClick= имя процедуры из s
пробовал @s , но не понимает типа TNotifyEvent....... Что делать?

   2004-03-09 06:23:02 (#99341)

Делфи - память

Здравствуйте!
Помогите разобраться:
При запуске этого кода каждые 5-6 сек размер программы увеличивается на 4kB,
timer.interval:=1000;

procedure TForm1.Timer1Timer(Sender: TObject);
var
dc:HDC;
cn:TCanvas;
sx:integer;
begin
cn:=TCanvas.Create;
sx:=Screen.Width;
cn.Font.Color:=clWhite;
cn.Font.Style:=[fsBold];
cn.Brush.Color:=clBackground;
dc:=GetDC(0);
cn.Handle:=dc;
cn.TextOut(sx-100,10,FormatDateTime('d MMMM', Date));
cn.TextOut(sx-100,25,FormatDateTime('dddd', Date));
cn.TextOut(sx-100,40,TimeToStr(time));
cn.Free;
end;
Номер выпуска : 2490
Возраст листа : 169 (дней)
Количество подписчиков : 380
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/99330
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   2004-03-09 03:54:06 (#99330)

Re[5]: [PHP] Как сделать редирект?

Hello Victor,

Monday, March 8, 2004, 8:51:01 AM, you wrote:

VVV> Ну, так Вы посмотрите - там js не только для отсчета времени.
VVV> Там индикатор прогресса ползет все это время, и циферки бегут
VVV> сколько осталось до перехода.
а это дельно ;) аля прелоадер во flash.. странно что сам не
догадался..

   Ivan Mikheikin 2004-03-09 02:01:25 (#99319)