Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

DirectDraw и размер строки в видеокарте

2.7K
24 января 2007 года
barracuda
76 / / 29.03.2004
Помогите разобратся
Видео карта S3 Graphics ProSavage DDR 8D04
разрешение 1280х1024х32
Хочу, к примеру, стереть две верхних строки пишу:

lpPrimarySurface->Lock(NULL, &ddsd, DDLOCK_WAIT, NULL);
memset(ddsd.lpSurface, 0, ddsd.lPitch * 2); //2 строки
lpPrimarySurface->Unlock(ddsd.lpSurface);

Результат стирается первая, половина 15-й и половина 2-й
ddsd.lPitch равен 1280 * 4 = 5120 (проверял)
Короче что это за режим такой:

0-я строка
пол 16-й строки
1-я строка
пол 17-й строки
....
16-я строка
пол 32-й строки
17-я строка
пол 33-й строки

Тоесть первые пол 16-й строки повторяется ниже но уже полностью.
Где об этом (в каких структурах) можно узнать?
505
24 января 2007 года
vAC
343 / / 28.02.2006
Да, ерунда какая-то...не помню,чтобы подобные глюки выходили...У тебя случайно не двойная буфферизация? попробуй сделать тоже самое для заднего буффера...
Вообщето, насколько я помню такие манипуляции для оффскринов делаются....
Можно просто создать оффскрин из двух черных строк и просто наложить его на прайм
2.7K
24 января 2007 года
barracuda
76 / / 29.03.2004
Цитата: vAC
Да, ерунда какая-то...не помню,чтобы подобные глюки выходили...У тебя случайно не двойная буфферизация? попробуй сделать тоже самое для заднего буффера...



Да не, вообще то DirectDraw тут не причем.
Я проверил по физическим адресам видюхи (драйвер спецом написал) - то же самое, каждая новая строка выравнивается по 0x2000 байт а сама строка 0x1400 байт.
Странно что DirectDraw в структуре DDSURFACEDESC.lPitch возвращает 0x1400
SDK пишет:

Цитата:

lPitch
Specifies the number of bytes between the beginnings of two adjacent scan lines; that is, the number of bytes to add to the beginning address of one scan line to reach the beginning address of the next scan line below it. The driver's DdCreateSurface callback must return this value.


то есть растояние до следующей строки...
Буфер у меня один, дисплеймод я не устанавливаю, беру то что в винде настроено, CooperativeLevel без разницы какой, результат тот же.
Фигня какая то...

Цитата:

Вообщето, насколько я помню такие манипуляции для оффскринов делаются....
Можно просто создать оффскрин из двух черных строк и просто наложить его на прайм


Ну, задача у меня более сложная :) Это только пример я такой привел.
А вообще необходимо именно с памятью работать напрямую...

505
24 января 2007 года
vAC
343 / / 28.02.2006
Цитата: barracuda
Да не, вообще то DirectDraw тут не причем.
Я проверил по физическим адресам видюхи (драйвер спецом написал) - то же самое, каждая новая строка выравнивается по 0x2000 байт а сама строка 0x1400 байт.
Странно что DirectDraw в структуре DDSURFACEDESC.lPitch возвращает 0x1400
SDK пишет:

то есть растояние до следующей строки...
Буфер у меня один, дисплеймод я не устанавливаю, беру то что в винде настроено, CooperativeLevel без разницы какой, результат тот же.
Фигня какая то...


Ну, задача у меня более сложная :) Это только пример я такой привел.
А вообще необходимо именно с памятью работать напрямую...




Ну то,что 0x1400 - DDraw по-вилимому выравнивает по DWORD: 0x1400=1280*4, а чтобы выравнивание было сделано по-другому,еще не сталкивался. Во всяком случае в описании DDraw упоминание о таких ситуаций не встречал. Может скинешь исхоник, проверю у себя, интересно даже стало...:)

2.7K
24 января 2007 года
barracuda
76 / / 29.03.2004
Вот наглядная реализация того о чем я говорил
http://barracuda.narod.ru/src/DirectSrc.zip

На нвидеа и радион работает нормально
на S3 кривизна :(
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог