Краткое описание по работе с Direct Draw

             

Программирование DirectDraw - часть 2


/p>

Таким образом мы проинициализировали DirectDraw и изменили видео моду (в отладчике Developer Studio режим 640х480 устанавливать не рекомендую, эффект потрясающий - практически становятся видны только меню и туулбары)

3. Создание первичной и вторичной поверхностей и установки для обеспечения смены страниц (flipping)

В следующем участке кода мы рассмотрим создание первичной и вторичной поверхностей (видеобуферов) . Их объединение часто называют комплексной поверхностью

Пример инициализации поверхностей (первичной и вторичной) DirectDraw

 

 

 

LPDIRECTDRAWSURFACE

lpDDSPrimary; // указатель на первичную поверхность DirectDraw

LPDIRECTDRAWSURFACE

lpDDSBack;    // указатель на вторичную поверхность DirectDraw

BOOL CreatePrimarySurface()

{

    DDSURFACEDESC ddsd;

    DDSCAPS ddscaps;

    HRESULT

ddrval;

    // создадим первичную поверхность с одной вторичной

    memset( &ddsd, 0, sizeof(ddsd) );

    ddsd.dwSize = sizeof( ddsd );

    ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;    // поле  ddsCaps

принимается в рассмотрение и в

                                                        // нем имеет значение только количество вторичных

                                                        //буферов(поверхностей)

    ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX;

    ddsd.dwBackBufferCount = 1;

    ddrval = lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL );

    if( ddrval != DD_OK )

    {

        lpDD->Release();

        return FALSE;

    }

    // Теперь получим вторичный буфер (поверхность)

    ddscaps.dwCaps = DDSCAPS_BACKBUFFER;

    ddrval = lpDDSPrimary->GetAttachedSurface(&ddscaps, &lpDDSBack);

    if( ddrval != DD_OK )

    {

        lpDDSPrimary->Release();

        lpDD->Release();

        return FALSE;

    }

    return TRUE;

}

<


Содержание  Назад  Вперед