Я пытаюсь сделать сбрасывание окна X11 с содержимым буфера, используя xcb . Код должен заполнить окно белым фоном и заполненным кругом. Подобный код работает с XLIB - поэтому я уверен в базовом рисунке. Моя проблема заключается в том, что с Blitting to Screen. < /P>
В основном: < /p>
Я создаю буфер h*w (который я рисую белый). < /Li>
Я называю xcb_image_create_native () < /code> с этим буфером. К нему - а затем нарисуйте Pixmap в окне.#include
#include
#include
#include
#include
constexpr auto size_width = 640;
constexpr auto size_height = 480;
int32_t buf[size_height*size_height];
auto put_pixel(int x, int y, uint32_t color) -> void {
buf[(y * size_width) + x] = color;
}
auto fill_circle(int x, int y, int r, uint32_t c) -> void {
for (int dy = -r; dy < r; dy++) {
for (int dx = -r; dx < r; dx++) {
if (dx * dx + dy * dy root_depth;
values[0] = screen->black_pixel;
values[1] = XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_BUTTON_PRESS;
window_xcb = xcb_generate_id(connection);
xcb_create_window(connection, XCB_COPY_FROM_PARENT, window_xcb, screen->root, 0, 0, size_width,
size_height, 10, XCB_WINDOW_CLASS_INPUT_OUTPUT, screen->root_visual, mask, values);
xcb_map_window(connection, window_xcb);
graphics_context = xcb_generate_id(connection);
xcb_create_gc(connection, graphics_context, window_xcb, mask, values);
xcb_image =
xcb_image_create_native(connection, size_width, size_height,
format, depth, (uint8_t *)buf,
size_width * size_height * 4,
(uint8_t *)buf);
xcb_flush(connection);
memset(buf, size_width*size_height*4, 0xff);
fill_circle(100, 100, 20, 0xff0000);
{
xcb_generic_event_t *event;
while (true) {
event = xcb_wait_for_event(connection);
if (event == nullptr) {
continue;
}
switch (event->response_type) {
case XCB_EXPOSE: {
xcb_expose_event_t *ev = (xcb_expose_event_t *)event;
auto depth = screen->root_depth;
xcb_pixmap_t pixmap = xcb_generate_id(connection);
xcb_create_pixmap(connection, depth, pixmap, ev->window,
size_width, size_height);
xcb_image_put(connection, pixmap, graphics_context, xcb_image, 0, 0, 0);
xcb_copy_area(connection, pixmap, window_xcb, graphics_context, 0, 0, 0, 0,
size_width, size_height);
xcb_flush(connection);
} break;
case XCB_DESTROY_NOTIFY:
break;
default:
// xcb_free_event(event);
break;
}
}
}
return 0;
}
Подробнее здесь: https://stackoverflow.com/questions/761 ... -using-xcb
Рисование изображения с использованием xcb ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1744451048
Anonymous
Я пытаюсь сделать сбрасывание окна X11 с содержимым буфера, используя xcb . Код должен заполнить окно белым фоном и заполненным кругом. Подобный код работает с XLIB - поэтому я уверен в базовом рисунке. Моя проблема заключается в том, что с Blitting to Screen. < /P>
В основном: < /p>
Я создаю буфер h*w (который я рисую белый). < /Li>
Я называю xcb_image_create_native () < /code> с этим буфером. К нему - а затем нарисуйте Pixmap в окне.#include
#include
#include
#include
#include
constexpr auto size_width = 640;
constexpr auto size_height = 480;
int32_t buf[size_height*size_height];
auto put_pixel(int x, int y, uint32_t color) -> void {
buf[(y * size_width) + x] = color;
}
auto fill_circle(int x, int y, int r, uint32_t c) -> void {
for (int dy = -r; dy < r; dy++) {
for (int dx = -r; dx < r; dx++) {
if (dx * dx + dy * dy root_depth;
values[0] = screen->black_pixel;
values[1] = XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_BUTTON_PRESS;
window_xcb = xcb_generate_id(connection);
xcb_create_window(connection, XCB_COPY_FROM_PARENT, window_xcb, screen->root, 0, 0, size_width,
size_height, 10, XCB_WINDOW_CLASS_INPUT_OUTPUT, screen->root_visual, mask, values);
xcb_map_window(connection, window_xcb);
graphics_context = xcb_generate_id(connection);
xcb_create_gc(connection, graphics_context, window_xcb, mask, values);
xcb_image =
xcb_image_create_native(connection, size_width, size_height,
format, depth, (uint8_t *)buf,
size_width * size_height * 4,
(uint8_t *)buf);
xcb_flush(connection);
memset(buf, size_width*size_height*4, 0xff);
fill_circle(100, 100, 20, 0xff0000);
{
xcb_generic_event_t *event;
while (true) {
event = xcb_wait_for_event(connection);
if (event == nullptr) {
continue;
}
switch (event->response_type) {
case XCB_EXPOSE: {
xcb_expose_event_t *ev = (xcb_expose_event_t *)event;
auto depth = screen->root_depth;
xcb_pixmap_t pixmap = xcb_generate_id(connection);
xcb_create_pixmap(connection, depth, pixmap, ev->window,
size_width, size_height);
xcb_image_put(connection, pixmap, graphics_context, xcb_image, 0, 0, 0);
xcb_copy_area(connection, pixmap, window_xcb, graphics_context, 0, 0, 0, 0,
size_width, size_height);
xcb_flush(connection);
} break;
case XCB_DESTROY_NOTIFY:
break;
default:
// xcb_free_event(event);
break;
}
}
}
return 0;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/76184139/drawing-an-image-using-xcb[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия