Стэн Трухильо - Графика для Windows средствами DirectDraw

Здесь есть возможность читать онлайн «Стэн Трухильо - Графика для Windows средствами DirectDraw» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Графика для Windows средствами DirectDraw: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Графика для Windows средствами DirectDraw»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Графика для Windows средствами DirectDraw — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Графика для Windows средствами DirectDraw», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

BOOL DirectDrawWin::StorePixelFormatData() {

DDPIXELFORMAT format;

ZeroMemory(&format, sizeof(format));

format.dwSize=sizeof(format);

if (primsurf->GetPixelFormat(&format)!=DD_OK) {

TRACE("StorePixelFormatData() failed\n");

return FALSE;

}

loREDbit = LowBitPos(format.dwRBitMask);

WORD hiREDbit = HighBitPos(format.dwRBitMask);

numREDbits=(WORD)(hiREDbit-loREDbit+1);

loGREENbit = LowBitPos(format.dwGBitMask);

WORD hiGREENbit = HighBitPos(format.dwGBitMask);

numGREENbits=(WORD)(hiGREENbit-loGREENbit+1);

loBLUEbit = LowBitPos(format.dwBBitMask);

WORD hiBLUEbit = HighBitPos(format.dwBBitMask);

numBLUEbits=(WORD)(hiBLUEbit-loBLUEbit+1);

return TRUE;

}

Функция StorePixelFormatData()присваивает значения шести переменным формата с помощью масок, полученных функцией GetPixelFormat()интерфейса DirectDrawSurface. Это следующие переменные:

• loREDbit

• numREDbits

• loGREENbit

• numGREENbits

• loBLUEbit

• numBLUEbits

Как вы убедитесь при изучении кода для работы с беспалитровыми поверхностями, эти переменные оказываются очень удобными.

Блокировка поверхностей

Для прямого доступа к поверхности необходимо предварительно вызвать функцию Lock()интерфейса DirectDrawSurface. Lock()получает экземпляр структуры DDSURFACEDESCи возвращает указатель на левый верхний пиксель поверхности, шаг поверхности, ее размеры и даже формат пикселей (структура DDSURFACEDESCсодержит экземпляр DDPIXELFORMAT, поэтому вызов GetPixelFormat()интерфейса DirectDrawSurfaceоказывается необязательным). Прототип функции Lock()выглядит так:

HRESULT Lock(LPRECT rect, LPDDSURFACEDESC desc, DWORD flags, HANDLE event);

Первый аргумент является указателем на структуру RECT, которая описывает рабочую область поверхности. Если этот аргумент равен нулю, доступ осуществляется ко всей поверхности. Применение этого аргумента для описания рабочих прямоугольников упрощает код, следующий за вызовом Lock(), поскольку вам не нужно вычислять лишние смещения. Тем не менее при задании такого прямоугольника оказывается еще важнее использовать шаг поверхности при доступе к памяти.

Второй аргумент функции Lock() — структура DDSURFACEDESC, которая используется для возвращения указателя на память поверхности (поле lpSurface) и шага поверхности (поле lPitch). Функция Lock()(как и другие функции DirectDraw) требует правильно присвоить значение полю dwSizeструктуры DDSURFACEDESC.

Третий аргумент используется для настройки параметров Lock(). В него могут входить следующие флаги:

• DDLOCK_EVENT

• DDLOCK_READONLY

• DDLOCK_WRITEONLY

• DDLOCK_SURFACEMEMORYPTR

• DDLOCK_WAIT

На момент выхода DirectX 5 флаг DDLOCK_EVENTне поддерживался. Возможно, в будущих версиях DirectDraw он будет использоваться совместно с последним аргументом Lock()для реализации альтернативного метода блокировки поверхностей.

Флаги DDLOCK_READONLYи DDLOCK_WRITEONLYследует использовать в том случае, когда доступ к памяти поверхности осуществляется исключительно для чтения или записи. В большинстве ситуаций эти флаги ни на что не действуют, однако в видеорежимах «Mode X» DirectDraw использует их для оптимизации доступа к поверхности.

Флаг DDLOCK_SURFACEMEMORYPTRнеобязателен, потому что он задает поведение Lock(), которое и так является стандартным. Lock()возвращает указатель на память поверхности как с этим флагом, так и без него, поэтому мы не станем использовать его в своих программах (флаг DDLOCK_SURFACEMEMORYPTRна самом деле определен равным 0, так что я нисколько не преувеличиваю, говоря, что он ни на что не влияет).

Флаг DDLOCK_WAITпоказывает, что функция Lock()должна дождаться завершения блокировки в том случае, если в данный момент поверхность используется для другой цели — например, участвует в операции блиттинга или переключения поверхностей. Если этот флаг задан, Lock()работает в цикле до тех пор, пока поверхность не освободится для блокировки или пока не произойдет ошибка. При отсутствии флага DDLOCK_WAITфункция Lock()для занятой поверхности возвратит код DDERR_SURFACEBUSY, и блокировка не состоится. Для упрощения кода мы будем использовать этот флаг.

BMP-файлы

Теперь мы знаем, как получить прямой доступ к поверхности и что делать с ее памятью, чтобы изменить значения отдельных пикселей. Давайте используем полученные знания на практике. В этой главе мы напишем приложение DirectDraw для просмотра графических файлов формата BMP. Но перед тем как браться за такую программу, необходимо научиться загружать BMP-файлы.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Графика для Windows средствами DirectDraw»

Представляем Вашему вниманию похожие книги на «Графика для Windows средствами DirectDraw» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Графика для Windows средствами DirectDraw»

Обсуждение, отзывы о книге «Графика для Windows средствами DirectDraw» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x