DirectDraw, вывод изображения в оконном режиме
От: Darina2204  
Дата: 29.08.07 12:24
Оценка:
Необходимо вывести картинку 720х576 в формате .tga с помощью DirectDraw в оконном режиме. Я создаю отдельную поверхность для заднего буфера, привязываю к первичной поверхности (возможно, неверно указываю DDSCAPS_NORMAL), читаю побитово файл в буфер, затем делаю флип, в результате отображается только серый фон, в полноэкранном режиме с разрешением 1024х768 все работает отлично. Подскажите, что не так, кто знает, пожалуйста =)
Re: DirectDraw, вывод изображения в оконном режиме
От: Сергей  
Дата: 29.08.07 13:22
Оценка:
Здравствуйте, Darina2204, Вы писали:

D>Необходимо вывести картинку 720х576 в формате .tga с помощью DirectDraw в оконном режиме. Я создаю отдельную поверхность для заднего буфера, привязываю к первичной поверхности (возможно, неверно указываю DDSCAPS_NORMAL), читаю побитово файл в буфер, затем делаю флип, в результате отображается только серый фон, в полноэкранном режиме с разрешением 1024х768 все работает отлично. Подскажите, что не так, кто знает, пожалуйста =)


Flip() в оконном режиме не работает. Используй BltFast().
Re[2]: DirectDraw, вывод изображения в оконном режиме
От: Darina2204  
Дата: 29.08.07 13:46
Оценка:
Здравствуйте, Сергей, Вы писали:

С>Flip() в оконном режиме не работает. Используй BltFast().


пару минут назад как раз сделала BltFast )) только толку никакого — опять в полноэкранном пашет, а в оконном нет
Re: DirectDraw, вывод изображения в оконном режиме
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 30.08.07 12:08
Оценка:
1) Клиппер создан?

2)
RECT crect;
GetClientRect(hWnd, &crect);

HRESULT ddrval;

DDSURFACEDESC2 desc;
ZeroMemory(&desc, sizeof(desc));
desc.dwSize = sizeof(desc);
ddrval = back_buffer->Lock(0, &desc, DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR, 0);
if (ddrval != DD_OK) return;
//Здесь можно скопировать на back_buffer
//...
back_buffer->Unlock(0);

//Копирование back_buffer'а на primary_buffer
RECT wrect;
GetWindowRect(hWnd, &wrect);
for (;;)
{
    ddrval = primary_buffer->Blt(&wrect, back_buffer, &crect, DDBLT_WAIT, NULL);
    if (ddrval == DD_OK) break;
    if (ddrval == DDERR_SURFACELOST)
    {
        back_buffer->Restore();
        ddrval = primary_buffer->Restore();
        if (ddrval != DD_OK) break;
    }
            if (ddrval != DDERR_WASSTILLDRAWING) break;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.