Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
3 / 3 / 1
Регистрация: 20.03.2019
Сообщений: 150

Ускорение двойной буферизации

23.12.2019, 20:28. Показов 2160. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Недавно вычитал что при создании 2 буфера лучше использовать CreateDIBSection вместо CreateCompatibleBitmap. Как можно его заменить в этом коде?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void BeginScene()
{
    hdc = GetDC(gAppWnd);
    memDC = CreateCompatibleDC(hdc);
    bmp = CreateCompatibleBitmap(hdc, rcClientRect.right - rcClientRect.left, rcClientRect.bottom - rcClientRect.top);
    oldBmp = (HBITMAP)SelectObject(memDC, bmp);
}
 
void EndScene()
{
    SelectObject(memDC, oldBmp);
    DeleteObject(bmp);
    DeleteDC(memDC);
    ReleaseDC(gAppWnd, hdc);
}
 
void DrawScene()
{
    BitBlt(hdc, 0, 0, rcClientRect.right - rcClientRect.left, rcClientRect.bottom - rcClientRect.top, memDC, 0, 0, SRCCOPY);
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.12.2019, 20:28
Ответы с готовыми решениями:

Рисование графика с использованием двойной буферизации
Добрый день. Делаю программу, которая будет в себе содержать динамический график. Не знаю, как применить двойную буферизацию. Каждый...

Не выводится растр из Бо после добавления двойной буферизации!
Почему программа не выводит изображение из БО в окно? Но зато 4 предупреждения что hBmp не может использоваться без инициализации, не...

Реализация двойной буферизации для рисования графических примитивов
Решил я значит порисовать всяких кружков-квадратиков, а они мерцают. Убрал эффект наполовину, перестав обрабатывать WM_ERASEBKGND. Однако...

6
фрилансер
 Аватар для Алексей1153
6455 / 5657 / 1129
Регистрация: 11.10.2019
Сообщений: 15,070
23.12.2019, 21:18
Zumhad, а чем лучше то?

CDC в памяти + CreateCompatibleBitmap отлично справляются с мерцанием
0
3 / 3 / 1
Регистрация: 20.03.2019
Сообщений: 150
24.12.2019, 07:53  [ТС]
Это самый быстрый способ? Просто мне нужна максимальная скорость
0
фрилансер
 Аватар для Алексей1153
6455 / 5657 / 1129
Регистрация: 11.10.2019
Сообщений: 15,070
24.12.2019, 08:03
Zumhad, сие действие не влияет на скорость отрисовки. Время жрётся на отрисовке самой картинки, а вот как ты её рисуешь - тут уже нужно разбираться. Сам контекст в памяти и битмап можно не пересоздавать при каждой отрисовке (разве что при изменении размеров окна), а просто заливать фоном .

Проверить же не сложно - измерь FPS в случае, когда ничего не рисуется, а только фон заливается
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
24.12.2019, 09:13
Лучший ответ Сообщение было отмечено Zumhad как решение

Решение

Цитата Сообщение от Zumhad Посмотреть сообщение
Недавно вычитал что при создании 2 буфера лучше использовать CreateDIBSection вместо CreateCompatibleBitmap. Как можно его заменить в этом коде?
Где ты это вычитал? CreateDIBSection нужен, если ты, например, сохраняешь/загружаешь картинку в файл или типа того. Для двойной буферизации лучше использовать CreateCompatibleBitmap.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,921
24.12.2019, 09:46
Цитата Сообщение от Zumhad Посмотреть сообщение
Это самый быстрый способ? Просто мне нужна максимальная скорость
Так может стоит использовать видеокарту с аппаратным ускорением графики вместо того чтобы мучать процессор?
0
2735 / 890 / 331
Регистрация: 10.02.2018
Сообщений: 2,110
24.12.2019, 13:03
Цитата Сообщение от Zumhad Посмотреть сообщение
Это самый быстрый способ? Просто мне нужна максимальная скорость
Функции работающие с HDC не могут обеспечить высокую скорость, даже 60 fps не потянут при приличных размерах окна. Если вы хотите делать быструю графику, то нужно искать другие способы. Можно посмотреть в сторону Direct2D. У microsoft довольно подробно всё расписано.Так же у них ещё есть небольшие примеры работы с D2D на github. Вам нужны проекты начинающиеся на "D2D", можно посмотреть и на "DWrite", последние для работы с текстом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.12.2019, 13:03
Помогаю со студенческими работами здесь

Как поменять цвет фона при двойной буферизации?
Ребята помоги пожалуйста) У меня есть программа "Графический редактор" Там присутствует Двойная буферизация! ПОдскажите как мне...

Реализация двойной буферизации
Есть pictureBox создаваемый в коде. Я реализовал возможность его передвижения мышкой, но проблема в том, что он двигается с рывками. ...

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

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

Скорость, касательное ускорение, полное ускорение, нормальное ускорение и радиус кривизны траектории
Движение точки задано координатным способом. Найти траекторию и начертить ее. Кроме того определить скорость, касательное ускорение, полное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru