Lines Matching +full:- +full:- +full:include
10 #include "lv_draw_opengles.h"
12 #include "../lv_draw_private.h"
13 #include "../../misc/cache/lv_cache_entry_private.h"
14 #include "../../drivers/glfw/lv_opengles_debug.h"
15 #include "../../drivers/glfw/lv_opengles_texture.h"
16 #include "../../drivers/glfw/lv_opengles_driver.h"
17 #include <GL/glew.h>
18 #include <GLFW/glfw3.h>
19 #include "../../draw/lv_draw_label.h"
20 #include "../../draw/lv_draw_rect.h"
21 #include "../../draw/lv_draw_arc.h"
22 #include "../../draw/lv_draw_image.h"
23 #include "../../draw/lv_draw_triangle.h"
24 #include "../../draw/lv_draw_line.h"
25 #include "../../core/lv_obj.h"
26 #include "../../core/lv_refr_private.h"
27 #include "../../display/lv_display_private.h"
28 #include "../../stdlib/lv_string.h"
29 #include "../../misc/lv_area_private.h"
95 draw_opengles_unit->base_unit.dispatch_cb = dispatch; in lv_draw_opengles_init()
96 draw_opengles_unit->base_unit.evaluate_cb = evaluate; in lv_draw_opengles_init()
97 draw_opengles_unit->base_unit.name = "OPENGLES"; in lv_draw_opengles_init()
98 draw_opengles_unit->texture_cache = lv_cache_create(&lv_cache_class_lru_rb_count, in lv_draw_opengles_init()
104 lv_cache_set_name(draw_opengles_unit->texture_cache, "OPENGLES_TEXTURE"); in lv_draw_opengles_init()
106 …lv_draw_buf_init(&draw_opengles_unit->render_draw_buf, 0, 0, LV_COLOR_FORMAT_ARGB8888, LV_STRIDE_A… in lv_draw_opengles_init()
113 lv_free(g_unit->render_draw_buf.unaligned_data); in lv_draw_opengles_deinit()
114 lv_cache_destroy(g_unit->texture_cache, g_unit); in lv_draw_opengles_deinit()
115 if(g_unit->framebuffer != 0) { in lv_draw_opengles_deinit()
117 GL_CALL(glDeleteFramebuffers(1, &g_unit->framebuffer)); in lv_draw_opengles_deinit()
135 lv_free(cached_data->draw_dsc); in opengles_texture_cache_free_cb()
136 GL_CALL(glDeleteTextures(1, &cached_data->texture)); in opengles_texture_cache_free_cb()
137 cached_data->draw_dsc = NULL; in opengles_texture_cache_free_cb()
138 cached_data->texture = 0; in opengles_texture_cache_free_cb()
145 if(lhs->w != rhs->w) { in opengles_texture_cache_compare_cb()
146 return lhs->w > rhs->w ? 1 : -1; in opengles_texture_cache_compare_cb()
148 if(lhs->h != rhs->h) { in opengles_texture_cache_compare_cb()
149 return lhs->h > rhs->h ? 1 : -1; in opengles_texture_cache_compare_cb()
152 uint32_t lhs_dsc_size = lhs->draw_dsc->dsc_size; in opengles_texture_cache_compare_cb()
153 uint32_t rhs_dsc_size = rhs->draw_dsc->dsc_size; in opengles_texture_cache_compare_cb()
156 return lhs_dsc_size > rhs_dsc_size ? 1 : -1; in opengles_texture_cache_compare_cb()
159 const uint8_t * left_draw_dsc = (const uint8_t *)lhs->draw_dsc; in opengles_texture_cache_compare_cb()
160 const uint8_t * right_draw_dsc = (const uint8_t *)rhs->draw_dsc; in opengles_texture_cache_compare_cb()
164 …int cmp_res = lv_memcmp(left_draw_dsc, right_draw_dsc, lhs->draw_dsc->dsc_size - sizeof(lv_draw_ds… in opengles_texture_cache_compare_cb()
167 return cmp_res > 0 ? 1 : -1; in opengles_texture_cache_compare_cb()
178 if(draw_opengles_unit->task_act) return 0; in dispatch()
182 if(t == NULL) return -1; in dispatch()
187 if(layer != disp->layer_head) { in dispatch()
189 if(buf == NULL) return -1; in dispatch()
191 int32_t w = lv_area_get_width(&layer->buf_area); in dispatch()
192 int32_t h = lv_area_get_height(&layer->buf_area); in dispatch()
196 layer->user_data = (void *)(uintptr_t)texture; in dispatch()
199 layer->user_data = (void *)(uintptr_t)lv_opengles_texture_get_texture_id(disp); in dispatch()
203 t->state = LV_DRAW_TASK_STATE_IN_PROGRESS; in dispatch()
204 draw_opengles_unit->base_unit.target_layer = layer; in dispatch()
205 draw_opengles_unit->base_unit.clip_area = &t->clip_area; in dispatch()
206 draw_opengles_unit->task_act = t; in dispatch()
210 draw_opengles_unit->task_act->state = LV_DRAW_TASK_STATE_READY; in dispatch()
211 draw_opengles_unit->task_act = NULL; in dispatch()
222 if(task->type == LV_DRAW_TASK_TYPE_IMAGE && in evaluate()
223 ((lv_draw_image_dsc_t *)task->draw_dsc)->header.cf >= LV_COLOR_FORMAT_PROPRIETARY_START) { in evaluate()
231 if(((lv_draw_dsc_base_t *)task->draw_dsc)->user_data == NULL) { in evaluate()
232 task->preference_score = 0; in evaluate()
233 task->preferred_draw_unit_id = DRAW_UNIT_ID_OPENGLES; in evaluate()
240 lv_draw_task_t * task = u->task_act; in draw_to_texture()
245 int32_t texture_w = lv_area_get_width(&task->_real_area); in draw_to_texture()
246 int32_t texture_h = lv_area_get_height(&task->_real_area); in draw_to_texture()
248 …if(NULL == lv_draw_buf_reshape(&u->render_draw_buf, LV_COLOR_FORMAT_ARGB8888, texture_w, texture_h… in draw_to_texture()
249 uint8_t * data = u->render_draw_buf.unaligned_data; in draw_to_texture()
253 …lv_result_t init_result = lv_draw_buf_init(&u->render_draw_buf, texture_w, texture_h, LV_COLOR_FOR… in draw_to_texture()
258 dest_layer.draw_buf = &u->render_draw_buf; in draw_to_texture()
261 dest_layer.buf_area = task->_real_area; in draw_to_texture()
262 dest_layer._clip_area = task->_real_area; in draw_to_texture()
263 dest_layer.phy_clip_area = task->_real_area; in draw_to_texture()
264 lv_memzero(u->render_draw_buf.data, lv_area_get_size(&task->_real_area) * 4); in draw_to_texture()
268 lv_obj_t * obj = ((lv_draw_dsc_base_t *)task->draw_dsc)->obj; in draw_to_texture()
275 switch(task->type) { in draw_to_texture()
277 lv_draw_fill_dsc_t * fill_dsc = task->draw_dsc; in draw_to_texture()
281 rect_dsc.bg_color = fill_dsc->color; in draw_to_texture()
282 rect_dsc.bg_grad = fill_dsc->grad; in draw_to_texture()
283 rect_dsc.radius = fill_dsc->radius; in draw_to_texture()
284 rect_dsc.bg_opa = fill_dsc->opa; in draw_to_texture()
286 lv_draw_rect(&dest_layer, &rect_dsc, &task->area); in draw_to_texture()
290 lv_draw_border_dsc_t * border_dsc = task->draw_dsc; in draw_to_texture()
295 rect_dsc.radius = border_dsc->radius; in draw_to_texture()
296 rect_dsc.border_color = border_dsc->color; in draw_to_texture()
297 rect_dsc.border_opa = border_dsc->opa; in draw_to_texture()
298 rect_dsc.border_side = border_dsc->side; in draw_to_texture()
299 rect_dsc.border_width = border_dsc->width; in draw_to_texture()
300 lv_draw_rect(&dest_layer, &rect_dsc, &task->area); in draw_to_texture()
304 lv_draw_box_shadow_dsc_t * box_shadow_dsc = task->draw_dsc; in draw_to_texture()
309 rect_dsc.radius = box_shadow_dsc->radius; in draw_to_texture()
310 rect_dsc.bg_color = box_shadow_dsc->color; in draw_to_texture()
311 rect_dsc.shadow_opa = box_shadow_dsc->opa; in draw_to_texture()
312 rect_dsc.shadow_width = box_shadow_dsc->width; in draw_to_texture()
313 rect_dsc.shadow_spread = box_shadow_dsc->spread; in draw_to_texture()
314 rect_dsc.shadow_offset_x = box_shadow_dsc->ofs_x; in draw_to_texture()
315 rect_dsc.shadow_offset_y = box_shadow_dsc->ofs_y; in draw_to_texture()
316 lv_draw_rect(&dest_layer, &rect_dsc, &task->area); in draw_to_texture()
321 lv_memcpy(&label_dsc, task->draw_dsc, sizeof(label_dsc)); in draw_to_texture()
323 lv_draw_label(&dest_layer, &label_dsc, &task->area); in draw_to_texture()
328 lv_memcpy(&arc_dsc, task->draw_dsc, sizeof(arc_dsc)); in draw_to_texture()
335 lv_memcpy(&line_dsc, task->draw_dsc, sizeof(line_dsc)); in draw_to_texture()
342 lv_memcpy(&triangle_dsc, task->draw_dsc, sizeof(triangle_dsc)); in draw_to_texture()
349 lv_memcpy(&image_dsc, task->draw_dsc, sizeof(image_dsc)); in draw_to_texture()
351 lv_draw_image(&dest_layer, &image_dsc, &task->area); in draw_to_texture()
365 unsigned int texture = create_texture(texture_w, texture_h, u->render_draw_buf.data); in draw_to_texture()
367 lv_draw_dsc_base_t * base_dsc = task->draw_dsc; in draw_to_texture()
369 cache_data->draw_dsc = lv_malloc(base_dsc->dsc_size); in draw_to_texture()
370 lv_memcpy((void *)cache_data->draw_dsc, base_dsc, base_dsc->dsc_size); in draw_to_texture()
371 cache_data->w = texture_w; in draw_to_texture()
372 cache_data->h = texture_h; in draw_to_texture()
373 cache_data->texture = texture; in draw_to_texture()
384 lv_area_t clip_area = *u->base_unit.clip_area; in blend_texture_layer()
386 lv_draw_task_t * t = u->task_act; in blend_texture_layer()
387 lv_draw_image_dsc_t * draw_dsc = t->draw_dsc; in blend_texture_layer()
390 area.x1 = -draw_dsc->pivot.x; in blend_texture_layer()
391 area.y1 = -draw_dsc->pivot.y; in blend_texture_layer()
392 area.x1 = (area.x1 * draw_dsc->scale_x) / 256; in blend_texture_layer()
393 area.y1 = (area.y1 * draw_dsc->scale_y) / 256; in blend_texture_layer()
394 area.x1 += t->area.x1 + draw_dsc->pivot.x; in blend_texture_layer()
395 area.y1 += t->area.y1 + draw_dsc->pivot.y; in blend_texture_layer()
396 lv_area_set_width(&area, lv_area_get_width(&t->area) * draw_dsc->scale_x / 256); in blend_texture_layer()
397 lv_area_set_height(&area, lv_area_get_height(&t->area) * draw_dsc->scale_y / 256); in blend_texture_layer()
399 lv_layer_t * src_layer = (lv_layer_t *)draw_dsc->src; in blend_texture_layer()
403 lv_layer_t * dest_layer = u->base_unit.target_layer; in blend_texture_layer()
406 int32_t targ_tex_w = lv_area_get_width(&dest_layer->buf_area); in blend_texture_layer()
407 int32_t targ_tex_h = lv_area_get_height(&dest_layer->buf_area); in blend_texture_layer()
417 …lv_opengles_render_texture(src_texture, &area, draw_dsc->opa, targ_tex_w, targ_tex_h, &clip_area, … in blend_texture_layer()
428 lv_draw_task_t * t = u->task_act; in draw_from_cached_texture()
431 data_to_find.draw_dsc = (lv_draw_dsc_base_t *)t->draw_dsc; in draw_from_cached_texture()
433 data_to_find.w = lv_area_get_width(&t->_real_area); in draw_from_cached_texture()
434 data_to_find.h = lv_area_get_height(&t->_real_area); in draw_from_cached_texture()
439 void * user_data_saved = data_to_find.draw_dsc->user_data; in draw_from_cached_texture()
440 data_to_find.draw_dsc->user_data = NULL; in draw_from_cached_texture()
442 /*img_dsc->image_area is an absolute coordinate so it's different in draw_from_cached_texture()
444 lv_area_t a = t->area; in draw_from_cached_texture()
445 if(t->type == LV_DRAW_TASK_TYPE_IMAGE) { in draw_from_cached_texture()
447 lv_area_move(&img_dsc->image_area, -t->area.x1, -t->area.y1); in draw_from_cached_texture()
449 else if(t->type == LV_DRAW_TASK_TYPE_TRIANGLE) { in draw_from_cached_texture()
451 tri_dsc->p[0].x -= t->area.x1; in draw_from_cached_texture()
452 tri_dsc->p[0].y -= t->area.y1; in draw_from_cached_texture()
453 tri_dsc->p[1].x -= t->area.x1; in draw_from_cached_texture()
454 tri_dsc->p[1].y -= t->area.y1; in draw_from_cached_texture()
455 tri_dsc->p[2].x -= t->area.x1; in draw_from_cached_texture()
456 tri_dsc->p[2].y -= t->area.y1; in draw_from_cached_texture()
458 else if(t->type == LV_DRAW_TASK_TYPE_LINE) { in draw_from_cached_texture()
460 line_dsc->p1.x -= t->area.x1; in draw_from_cached_texture()
461 line_dsc->p1.y -= t->area.y1; in draw_from_cached_texture()
462 line_dsc->p2.x -= t->area.x1; in draw_from_cached_texture()
463 line_dsc->p2.y -= t->area.y1; in draw_from_cached_texture()
465 else if(t->type == LV_DRAW_TASK_TYPE_ARC) { in draw_from_cached_texture()
467 arc_dsc->center.x -= t->area.x1; in draw_from_cached_texture()
468 arc_dsc->center.y -= t->area.y1; in draw_from_cached_texture()
471 lv_area_move(&t->area, -a.x1, -a.y1); in draw_from_cached_texture()
472 lv_area_move(&t->_real_area, -a.x1, -a.y1); in draw_from_cached_texture()
474 … lv_cache_entry_t * entry_cached = lv_cache_acquire_or_create(u->texture_cache, &data_to_find, u); in draw_from_cached_texture()
476 lv_area_move(&t->area, a.x1, a.y1); in draw_from_cached_texture()
477 lv_area_move(&t->_real_area, a.x1, a.y1); in draw_from_cached_texture()
484 data_to_find.draw_dsc->user_data = user_data_saved; in draw_from_cached_texture()
487 unsigned int texture = data_cached->texture; in draw_from_cached_texture()
489 lv_layer_t * dest_layer = u->base_unit.target_layer; in draw_from_cached_texture()
493 int32_t targ_tex_w = lv_area_get_width(&dest_layer->buf_area); in draw_from_cached_texture()
494 int32_t targ_tex_h = lv_area_get_height(&dest_layer->buf_area); in draw_from_cached_texture()
503 lv_area_t clip_area = *u->base_unit.clip_area; in draw_from_cached_texture()
504 lv_area_move(&clip_area, -dest_layer->buf_area.x1, -dest_layer->buf_area.y1); in draw_from_cached_texture()
505 lv_area_t render_area = t->_real_area; in draw_from_cached_texture()
506 lv_area_move(&render_area, -dest_layer->buf_area.x1, -dest_layer->buf_area.y1); in draw_from_cached_texture()
511 lv_cache_release(u->texture_cache, entry_cached, u); in draw_from_cached_texture()
515 if(t->type == LV_DRAW_TASK_TYPE_LABEL) { in draw_from_cached_texture()
516 lv_draw_label_dsc_t * label_dsc = t->draw_dsc; in draw_from_cached_texture()
517 if(!label_dsc->text_static) { in draw_from_cached_texture()
518 lv_cache_drop(u->texture_cache, &data_to_find, u); in draw_from_cached_texture()
525 lv_draw_task_t * t = u->task_act; in execute_drawing()
527 if(t->type == LV_DRAW_TASK_TYPE_FILL) { in execute_drawing()
528 lv_draw_fill_dsc_t * fill_dsc = t->draw_dsc; in execute_drawing()
529 if(fill_dsc->radius == 0 && fill_dsc->grad.dir == LV_GRAD_DIR_NONE) { in execute_drawing()
530 lv_layer_t * layer = u->base_unit.target_layer; in execute_drawing()
531 lv_area_t fill_area = t->area; in execute_drawing()
532 lv_area_intersect(&fill_area, &fill_area, u->base_unit.clip_area); in execute_drawing()
533 lv_area_move(&fill_area, -layer->buf_area.x1, -layer->buf_area.y1); in execute_drawing()
537 int32_t targ_tex_w = lv_area_get_width(&layer->buf_area); in execute_drawing()
538 int32_t targ_tex_h = lv_area_get_height(&layer->buf_area); in execute_drawing()
545 … lv_opengles_render_fill(fill_dsc->color, &fill_area, fill_dsc->opa, targ_tex_w, targ_tex_h); in execute_drawing()
553 if(t->type == LV_DRAW_TASK_TYPE_LAYER) { in execute_drawing()
563 return (unsigned int)(uintptr_t)layer->user_data; in layer_get_texture()
568 if(u->framebuffer == 0) { in get_framebuffer()
569 GL_CALL(glGenFramebuffers(1, &u->framebuffer)); in get_framebuffer()
571 return u->framebuffer; in get_framebuffer()