void daemon_compute_append_queue(struct razer_daemon *daemon,list *queue) { while(!list_IsEmpty(queue)) { struct razer_fx_render_node *render_node = (struct razer_fx_render_node*)list_Dequeue(queue); list_Push(daemon->render_nodes,render_node); if(render_node->input_frame_linked_uid!=-1 && render_node->input_frame_linked_uid != 0) list_Queue(queue,daemon_get_render_node(daemon,render_node->input_frame_linked_uid)); if(render_node->second_input_frame_linked_uid!=-1 && render_node->second_input_frame_linked_uid != 0) list_Queue(queue,daemon_get_render_node(daemon,render_node->second_input_frame_linked_uid)); } }
void daemon_disconnect_frame_buffer(struct razer_daemon *daemon) { if(daemon->frame_buffer_linked_uid != 0) //unlink old render node first { struct razer_fx_render_node *old_rn = daemon_get_render_node(daemon,daemon->frame_buffer_linked_uid); old_rn->output_frame = razer_create_rgb_frame(); old_rn->output_frame_linked_uid = -1; } //if(render_node->output_frame_linked_uid == -1) // razer_free_rgb_frame(render_node->output_frame); //daemon->frame_buffer = razer_create_rgb_frame(); daemon->frame_buffer_linked_uid = -1; daemon->is_render_nodes_dirty = 1; }
void daemon_compute_render_nodes(struct razer_daemon *daemon) { //struct razer_queue *queue = daemon_create_queue(); list *queue = list_Create(0,0); list_Clear(daemon->render_nodes); struct razer_fx_render_node *rn = daemon_get_render_node(daemon,daemon->frame_buffer_linked_uid); if(rn) { list_Queue(queue,rn); daemon_compute_append_queue(daemon,queue); } //daemon_free_queue(&queue); list_Close(queue); daemon->is_render_nodes_dirty = 0; }
void daemon_connect_frame_buffer(struct razer_daemon *daemon,struct razer_fx_render_node *render_node) { if(daemon->frame_buffer_linked_uid != 0) //unlink old render node first { struct razer_fx_render_node *old_rn = daemon_get_render_node(daemon,daemon->frame_buffer_linked_uid); old_rn->output_frame = razer_create_rgb_frame(); old_rn->output_frame_linked_uid = -1; } if(render_node->output_frame_linked_uid == -1) razer_free_rgb_frame(render_node->output_frame); render_node->output_frame = daemon->frame_buffer; daemon->frame_buffer_linked_uid = render_node->id; daemon->fps = render_node->effect->fps; daemon->is_render_nodes_dirty = 1; }
struct razer_fx_render_node *daemon_create_render_node(struct razer_daemon *daemon,struct razer_effect *effect,int input_render_node_uid,int second_input_render_node_uid,int output_render_node_uid,char *name,char *description) { struct razer_fx_render_node *render_node = (struct razer_fx_render_node*)malloc(sizeof(struct razer_fx_render_node)); render_node->daemon = daemon; //render_node->effect = effect; if(effect) render_node->effect = daemon_create_effect_instance(daemon,effect); else render_node->effect = NULL; render_node->opacity = 1.0f; if(input_render_node_uid == -1) { struct razer_rgb_frame *iframe = razer_create_rgb_frame(); render_node->input_frame = iframe; render_node->input_frame_linked_uid = -1; } else if(input_render_node_uid == 0) //set input to daemon output buffer { render_node->input_frame = daemon->frame_buffer; render_node->input_frame_linked_uid = 0; } else { struct razer_fx_render_node *rn = daemon_get_render_node(daemon,input_render_node_uid); render_node->input_frame = rn->output_frame; render_node->input_frame_linked_uid = input_render_node_uid; } if(second_input_render_node_uid == -1) { struct razer_rgb_frame *siframe = razer_create_rgb_frame(); render_node->second_input_frame = siframe; render_node->second_input_frame_linked_uid = -1; } else if(second_input_render_node_uid == 0) //set input to daemon output buffer { render_node->second_input_frame = daemon->frame_buffer; render_node->second_input_frame_linked_uid = 0; } else { struct razer_fx_render_node *srn = daemon_get_render_node(daemon,second_input_render_node_uid); render_node->second_input_frame = srn->output_frame; render_node->second_input_frame_linked_uid = second_input_render_node_uid; } if(output_render_node_uid == -1) { struct razer_rgb_frame *oframe = razer_create_rgb_frame(); render_node->output_frame = oframe; render_node->output_frame_linked_uid = -1; } else if(output_render_node_uid == 0) //set input to daemon output buffer { render_node->output_frame = daemon->frame_buffer; render_node->output_frame_linked_uid = 0; } /*else //not used { struct razer_fx_render_node *orn = daemon_get_render_node(daemon,output_render_node_uid); render_node->output_frame = orn->output_frame; render_node->output_frame_linked_uid = output_render_node_uid; }*/ render_node->description = str_Copy(description); render_node->name = str_Copy(name); //render_node->fps = daemon->fps; render_node->compose_mode = RAZER_COMPOSE_MODE_MIX; render_node->next = NULL; render_node->parent = NULL; //render_node->parameters = NULL; //render_node->parameters_num = 0; render_node->subs = list_Create(0,0); render_node->start_ticks = 0; render_node->running = 0;//set to 1 with first update render_node->limit_render_time_ms = 0; render_node->move_frame_buffer_linkage_to_next = 1; //render_node->continue_chain=1; render_node->loop_count = -1; return(render_node); }