|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
20.04.2009, 16:16 | #1 |
Регистрация: 20.04.2009
Сообщений: 7
|
Рисование объектов в ddraw
Здравствуйте!! У меня тут проблема со знанием библиотеки ddraw
Инициализаци прошла успешно, полноэкранный режим работает. Теперь самое главное. У меня есть объекты Код:
Последний раз редактировалось MaTBeu; 20.04.2009 в 19:45. |
21.04.2009, 23:03 | #2 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
http://www.cracklab.ru/pro/faq.php?pg=1650&ln=50
Здесь есть пример использования TCanvas с DirectDraw. |
22.04.2009, 15:00 | #3 | |
Регистрация: 20.04.2009
Сообщений: 7
|
Цитата:
Сделал как было описанно. Вставил код: Код:
Последний раз редактировалось MaTBeu; 22.04.2009 в 22:03. |
|
22.04.2009, 16:29 | #4 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
Наверное, текст успешно выводится на DDSPrimary, то есть вывод на DDSBack не производится (в примере не было else). Но его и не должно быть видно, так как здесь используется lpDDSPrimary->Flip(NULL, 0). Попробуй убрать else, тогда "Back buffer" должно быть видно.
|
23.04.2009, 12:32 | #5 |
Регистрация: 20.04.2009
Сообщений: 7
|
Убрал else, результат точно такой же. Поверхности меняются, но текст не на одной не видно, весь монитор глазами обшарил. Может быть другой касяк?
|
23.04.2009, 14:17 | #6 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
Не знаю, что именно. В общем-то, вроде нормально всё должно быть.
На primary лучше вообще не выводить, насколько помню, на каких-то видеокартах оно и не хотело туда выводиться у меня. Если разрешение 640x480, то координаты (600,10) для надписи "Back buffer" слишком большие, она и не выведется. Что возвращают GetDC, ReleaseDC, Flip? |
23.04.2009, 17:03 | #7 |
Регистрация: 20.04.2009
Сообщений: 7
|
Менял координаты, не помогает.
GetDC очевидно отдает устройство(не уверен) ReleaseDC - Обновляет буфер, а Flip - Меняет местами буферы. Может повлиять то, что в BackBuffer изначально залит фон(при инициализации)? |
23.04.2009, 18:07 | #8 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
В общем, смотри возвращаемые значения всего, что что-то возвращает
|
23.04.2009, 18:45 | #9 |
Регистрация: 20.04.2009
Сообщений: 7
|
Все просмотрел уже, потихоньку начали руки опускаться. уже думаю книги начать большие-позновательные читать. Ни каких результатов. Попробывал вместо прошлого кода в таймере поставить этот:
LPDIRECTDRAWSURFACE *pSurface; Graphics::TBitmap *Bitmap; Bitmap = new Graphics::TBitmap; Bitmap->LoadFromFile("E://Projects//Ginetic//Object//H1.bmp"); // Этот компонент будет указывать на новую поверхность. TCanvas *SurfaceCanvas; // Здесь будет содержаться описание новой поверхности. DDSURFACEDESC SurfaceDescription; HRESULT DDError; HDC hDeviceContext; // Обнуляем память, содержащую описание поверхности. ZeroMemory(&SurfaceDescription, sizeof( DDSURFACEDESC )); // Устанавливаем член, "отвечающий" за размер описания. SurfaceDescription.dwSize = sizeof( DDSURFACEDESC ); // Устанавливаем флаги для индикации того, что поля // характеристик, ширины и высоты действительны SurfaceDescription.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; // Устанавливаем свойство dwCaps для создания плоской // поверхности. SurfaceDescription.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; // Устанавливаем размеры поверхности в соответствии с шириной // и высотой компонента Bitmap. SurfaceDescription.dwWidth = Bitmap->Width; SurfaceDescription.dwHeight = Bitmap->Height; // Делаем попытку создать поверхность. DDError = lpDD->CreateSurface( &SurfaceDescription, (LPDIRECTDRAWSURFACE *) lpDDSBack, NULL ); // В случае неудачи... if(FAILED( DDError )) { MessageBox(Handle, "Ну удается создать поверхность!!!", "ERROR", MB_OK); } // В противном случае копируем растровое изображение Bitmap // на поверхность. // Для этого получаем контекст устройства для поверхности. DDError = (lpDDSBack)->GetDC( &hDeviceContext ); // В случае неудачи... if(FAILED( DDError )) { MessageBox(Handle, "Не удалось скопировать растровое изображение", "ERROR", MB_OK); } // Создаем новую канву для доступа к поверхности. SurfaceCanvas = new TCanvas(); // Связываем новую канву с контекстом устройства поверхности. SurfaceCanvas->Handle = hDeviceContext; // Накладываем растровое изображение на канву поверхности. SurfaceCanvas->Draw( 0, 0, Bitmap ); // Освобождаем контекст устройства поверхности. (lpDDSBack)->ReleaseDC( hDeviceContext ); // Освобождаем компонент TCanvas. delete SurfaceCanvas; //lpDDSBack->ReleaseDC(hDeviceContext); // Возвращаем признак успешного выполнения. return( true ); - результатом стало остановка ОС. пока BCB не отрубил, ОС не отпустило. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Рисование | Granus | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 32 | 30.06.2009 23:23 |
Рисование | Granus | Общие вопросы Delphi | 2 | 24.12.2008 07:44 |
Рисование | TriCERATOP | Помощь студентам | 5 | 28.11.2008 15:09 |
Рисование... | HunterMan | Win Api | 10 | 30.04.2008 23:46 |
Рисование вTImage | Rusl92 | Компоненты Delphi | 27 | 02.04.2008 14:18 |