Используя directdraw я создаю поверхность,затем используя метод lock ,получаю адрес поверхности и заоодно реальную ширину поверхности,величину LPITCH и все это прекрасно получается,когда я создаю прикрепленую поверхность функцией GetAttachedSurface.Но если пытаюсь создать заэкранную с ключом DDSCAPS_OFFSCREENPLAIN с произвольно выбраной шириной LPITCH получить не могу.Вместо него приходится вводить эмпирически найденое число,тогда все работает.Проблема в том что на разных видеокартах это число различается и мое приложение будет работать только на определеном типе видеоадаптеров.В чем может быть причина?
Только что попробовал: Код (Text): ; Создание буферной поверхности mov [ddsd.dwSize], sizeof ddsd mov [ddsd.dwFlags], DDSD_CAPS or DDSD_WIDTH or DDSD_HEIGHT mov [ddsd.ddsCaps.dwCaps], DDSCAPS_OFFSCREENPLAIN mov [ddsd.dwWidth], 1024; <- подставлял разную ширину ;) mov [ddsd.dwHeight], 768; COM_invoke DirectDraw, CreateSurface, [lpDD7], addr ddsd, addr lpBackSurf, NULL дальше в WM_PAINT (оконное приложение) mov [ddsd.dwFlags], DDSD_LPSURFACE COM_invoke IDirectDrawSurface7, Lock, [lpBackSurf], NULL, addr ddsd, DDLOCK_WAIT, NULL mov eax, [ddsd.lPitch] mov [lpitch_SCR], eax ; запомнить lPitch для вывода на экран COM_invoke IDirectDrawSurface7, Unlock, [lpBackSurf], NULL Затем выводил на экран сохранённый [lpitch_SCR] - всегда соответствовал ширине ddsd.dwWidth * размер пиксела с учётом выравнивания - никаких проблем не заметил DirectX 9.0 интерфейс 7.0