Прямой контроль над буфером в DirectDraw

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Прямой контроль над буфером в DirectDraw

Сообщение SGO » 29.04.2007 (Вс) 13:40

Прослышал я где-то что можно вернуть адрес в видеопамяти буфера и напрямую кидать в него байты, никто не подскажет как это сделать на VB? (на с++ где-то есть пример, но я его не могу понять)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.04.2007 (Вс) 13:48

SGO, буфер DirectDraw и вообще видеопамять - две большие разницы. Определись, что тебе надо.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 29.04.2007 (Вс) 13:51

я не знаю.. а как лучше? :)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.04.2007 (Вс) 14:01

Подпись tyomitch писал(а):'Would you tell me, please, which way I ought to go from here?'
'That depends a good deal on where you want to get to,' said the Cat.
'I don't much care where--' said Alice.
'Then it doesn't matter which way you go,' said the Cat.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 29.04.2007 (Вс) 14:31

а всё же?

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 29.04.2007 (Вс) 14:34

GSerg писал(а):SGO, буфер DirectDraw и вообще видеопамять - две большие разницы.

Ну ведь сам буфер в видеопамяти.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.04.2007 (Вс) 14:50

SGO, если смысл последнего ответа от тебя почему-то ускользнул, я скажу по-другому: не может быть как лучше, если не уточнено, лучше для чего. Если ты не понимаешь этого, не занимайся программированием.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 29.04.2007 (Вс) 15:04

ок.. поставлю вопрос так: как напрямую обращаться к месту памяти где расположен буфер ИЛИ как это можно сделать по другому?
Суть моей задачи рисовать в буфере генерируемый программой растр, который находится в массиве.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.04.2007 (Вс) 15:15

SGO писал(а):Суть моей задачи рисовать в буфере генерируемый программой растр, который находится в массиве.

Наконец-то.
Это случилось.
Ура.

Поиском надо пользоваться, по процитированным словам, чтобы находить ответы на простые и банальные вопросы, а не говорить вместо них ненужные здесь "буфер" и "видеопамять".

http://bbs.vbstreets.ru/viewtopic.php?t=30324

Кстати, SGO, у тебя нет случаем каких-то хитрых отклонений личностного плана? Потому что этот найденный поиском топик принадлежит тебе. И тебе там ответили. В январе сего года.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 29.04.2007 (Вс) 15:25

Там где SetDIBis.. не устраивает скорость, да и масштаб менять нельзя. Хочу через директ попробывать, должно быстрей работать.
Или тут используется такой же составно тип для содержания рисунка? если так, то как его переместить в буфер?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.04.2007 (Вс) 15:29

SGO писал(а):Там где SetDIBis.. не устраивает скорость

Значит дело в руках. Функция работает очень быстро.

SGO писал(а):да и масштаб менять нельзя

Как это связано с этой функцией?

SGO писал(а):Хочу через директ попробывать

Для этого и был задан первый вопрос в этой топике.
Что знать, перемещать тему в раздел DirectX или нет. Но ты, получается, сам не знаешь, чего хочешь.

SGO писал(а):должно быстрей работать

Выражу всё же сомнение в этом. Потому что если ты не смог сделать быстро через SetDIBits, то и тут не сможешь.

SGO писал(а):Или тут используется такой же составно тип для содержания рисунка? если так, то как его переместить в буфер?

Вопрос не ясен, если честно.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 29.04.2007 (Вс) 15:40

Функция работает очень быстро.

функция-то может и быстро, а заполнение ооочень медленно.
да и масштаб менять нельзя
Как это связано с этой функцией?

С функцией никак, но в директе удобно то что как окно растянешь, так растянется и рисунок в нём + сглаживание пикселей...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.04.2007 (Вс) 15:43

А ты думаешь, с переходом на DirectX формирование твоего массива ускорится? Ты оригинален. Но ты неправ.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 29.04.2007 (Вс) 15:46

однако вопрос открытый... как нарисовать матрицу в буфере?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 29.04.2007 (Вс) 16:08

DirectDraw ушёл, вместе с 7-мыми иксами. Ты уверен что хочешь его юзать?

Вон, люди говорят, в висте даже с восьмым проблемы, при попытке заюзать из под VB. А ты 7 хочешь...

Подумай...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 01.05.2007 (Вт) 10:59

Мне кто-нибудь ответит или нет? неужели такой сложный вопрос?
Мне надо всего лишь рисовать в слое попиксельно.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 01.05.2007 (Вт) 11:45

А теюе сказали про DIBits
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 01.05.2007 (Вт) 11:59

а можно поподробней, как с помощью DIBits рисовать в слое дд?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 01.05.2007 (Вт) 12:00

Нда уж... :?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 01.05.2007 (Вт) 12:48

меня впринципи DIBits устраивает кроме одного момента... рисунок постояного размера, а в директе я мог его растягивать и при этом пиксели сглаживаются.

и всё-таки никто мне не дал ответа на то что я спросил :(

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 01.05.2007 (Вт) 12:50

Так тебя интересует антиалиасинг при растягивании? Зацени тогда алгоритм Ву.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 01.05.2007 (Вт) 13:36

нет! меня интересует как рисовать в слое диреакта,
сколько уже можно повторять...

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 01.05.2007 (Вт) 13:50

StretchDIBits. Умеет стретчить изображение, используется легче, чем SetDIBitsToDevice. Работает быстро(на Win32. На WinCE я его юзал - так там тормоза дикие, GAPI прикручивать пришлось)
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 01.05.2007 (Вт) 14:01

SGO
Иди в мануалы. Мне не довелось достаточно долгое время работать с DDRAW, но насколько я помню, там нужно LockRect, затем скопировать данные в буфер, затем UnlockRect. Как то так.

keks-n
Его интересует ddraw.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 01.05.2007 (Вт) 14:08

keks-n
Я - ламер, можно узнать что такое "стречить"? Но у меня чувство что это м не и надо. Буду благодарен за мануал или пример.
Хакер
LockRect, именно с этого я и начал эту тему, просто не знал что и как называется. Есть мануал или простой пример?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 01.05.2007 (Вт) 14:14

SGO
www.translate.ru ... слово to stretch
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 01.05.2007 (Вт) 14:49

to stretch - протягиваться/простираться... да.. это подходит, щас попробую

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 01.05.2007 (Вт) 15:38

У меня ещё вопросик...
Вот эта функция работает нормально:
SetDIBitsToDevice Form1.hdc, 0, 0, 256, 192, 0, 0, 0, 192, bBytes(1, 1), bi24BitInfo, 0

А следующая просто рисует чёрный прямоугольник:
StretchDIBits Form1.hdc, 200, 200, 500, 300, 0, 0, 256, 192, bBytes(1, 1), bi24BitInfo, 1, 0

Что не так делаю?

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 01.05.2007 (Вт) 20:12

StretchDIBits hdc, 0, 0, Me.Width, Me.Height, 0, 0, head.biWidth, head.biHeight, Data(0), nfo, 0, vbSrcCopy
Изображение

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 02.05.2007 (Ср) 16:58

keks-n, спасибо за совет, помогло, работает!
К сожалению не устраивает быстродействие :( когда форма развёрнута.. фпс очень мал :(
Может всё таки подскажет кто-нибудь как в директе пиксели рисовать? Пошарив по инету почти час я опять натолкнулся на статью как посылать байты напрямую в буфер, используя функцию lock (о чём я и писал в самом первом сообщение в этой теме), к сожалению статья с примером на c++, в которой я ничего не понимаю. Помогите :cry:

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 80

    TopList