Здравствуйте, я полный профан в компьютерной графике, так что прошу не сердиться за возможную глупость вопроса или неточность определений.)
Мне необходимо получить адрес framebuffer для непосредственного отображения графики на экране. Это нужно для написания Screen драйвера для Qt.
Как написано на сайте GF (
http://www.qnx.com/developers/docs/6.4.0/gf/dev_guide/layers.html#surfaces) для этого необходимо создать surface при помощи функции gf_surface_create_layer(). Затем при помощи gf_surface_get_info() получить адрес vaddr из структуры gf_surface_info_t. Тогда, вся информация помещенная в буфер по адресу vaddr будет сразу отображена на экране.
Я проделал все эти шаги:
gf_dev_t gfDev;
gf_display_info_t displayInfo;
gf_display_t gfDisplay;
gf_layer_t gfLayer;
gf_layer_info_t lInfo;
gf_dev_info_t gdevInfo;
gf_surface_t surface;
gf_surface_info_t info;
if (gf_dev_attach(&gfDev, GF_DEVICE_INDEX(0), &gdevInfo) != GF_ERR_OK) {
return false;
}
if (gf_display_attach(&gfDisplay, gfDev, displayId, &displayInfo) != GF_ERR_OK) {
return false;
}
if (gf_layer_attach(&gfLayer, gfDisplay, displayInfo.main_layer_index, 0) != GF_ERR_OK) {
return false;
}
if (gf_layer_query(gfLayer, 0, &lInfo) != GF_ERR_OK) {
return false;
}
if (gf_surface_create_layer(&surface, &gfLayer, 1, 0, displayInfo.xres, displayInfo.yres,
lInfo.format, NULL, GF_SURFACE_CREATE_CPU_LINEAR_ACCESSIBLE) != GF_ERR_OK) {
return false;
}
gf_surface_get_info(surface, &info);
После получения vaddr я пытаюсь проверить как это работает и в цикле заполняю часть этого буфера единицами.
for (int i=0; i < info.stride * 5; i++) {
info.vaddr = 0xFF;
}
По моим представлениям за свет этого верхние 5 строк экрана должны закраситься белым цветом, однако этого не происходит.
Соответственно и вопрос в том как правильно получить адрес vaddr, а затем как с ним работать?