Skip to content

render plan api plan

Matthew Egeler edited this page Dec 16, 2019 · 18 revisions
// Create render plan objects                                                                                                                 
gfks_render_plan *deferred_render_plan = gfks_create_render_plan(context);                                                                    
                                                                                                                                              
gfks_render_pass *geometry_pass        = gfks_create_render_pass(context);                                                                    
gfks_render_pass *diffuse_pass         = gfks_create_render_pass(context);                                                                    
gfks_render_pass *specular_pass        = gfks_create_render_pass(context);                                                                    
gfks_render_pass *composite_pass       = gfks_create_render_pass(context);                                                                    
                                                                                                                                              
// Add passes to our plan (order does not matter)                                                                                             
deferred_render_plan->add_render_pass(deferred_render_plan, geometry_pass);                                                                   
deferred_render_plan->add_render_pass(deferred_render_plan, diffuse_pass);                                                                    
deferred_render_plan->add_render_pass(deferred_render_plan, specular_pass);                                                                   
deferred_render_plan->add_render_pass(deferred_render_plan, composite_pass);                                                                  
                                                                                                                                              
// Define dependencies                                                                                                                        
diffuse_pass->depends_on(diffuse_pass, geometry_pass);                                                                                        
specular_pass->depends_on(specular_pass, geometry_pass);                                                                                      
composite_pass->depends_on(composite_pass, diffuse_pass);                                                                                     
composite_pass->depends_on(composite_pass, specular_pass);                                                                                    
                                                                                                                                              
// Set up render pass info                                                                                                                    
//                                                                                                                                            
// def_shaderset_attr_* defines the existance of an input for a specified chain of shaders -                                                  
// the 2nd arg is always the shaderset index within the pass info we want to feed this input to                                               
// the 3nd arg is always an input index for the shader. The data type within the shader depends on the call.                                  
uint32_t shaderset_index = diffuse_pass->add_shaderset(shaders);                                                                              
diffuse_pass->def_shaderset_attr_meshes(diffuse_pass, shaderset_index, 0);                                                                    
diffuse_pass->def_shaderset_attr_mesh_vertex_colors(diffuse_pass, shaderset_index, 1);                                                        
diffuse_pass->def_shaderset_attr_global_transformation_matrix(diffuse_pass, shaderset_index, 2);                                              
diffuse_pass->def_shaderset_attr_mesh_transformation_matrix(diffuse_pass, shaderset_index, 3);                                                
diffuse_pass->def_shaderset_attr_previous_pass(diffuse_pass, shaderset_index, 4, geometry_pass); // should error here if we don't have the dep
// etc etc for other passes                                                                                                                   
                                                                                                                                              
// Define the surface(s) that we want to be presented to                                                                                      
deferred_render_plan->add_presentation_surface(deferred_render_plan, surface);                                                                
                                                                                                                                              
// All done planning - finalize the plan!                                                                                                     
deferred_render_plan->finalize_plan();                                                                                                        
                                                                                                                                              
// Give our passes some input data                                                                                                            
//                                                                                                                                            
// set_shaderset_attr_* sets the value of a specified attr, and can be called any number of times                                             
// 2nd arg is always the input index for the shader (we already have a unique ID, no need to make another)                                    
diffuse_pass->set_shaderset_attr_meshes(diffuse_pass, 0, mesh_array); // mesh_array could be a gfks_meshgroup object to do your memory stuffs 
diffuse_pass->set_shaderset_attr_mesh_vertex_colors(diffuse_pass, 1, mesh_index, color_array);                                                
diffuse_pass->set_shaderset_attr_global_transformation_matrix(diffuse_pass, 2, matrix);                                                       
diffuse_pass->set_shaderset_attr_mesh_transformation_matrix(diffuse_pass, 3, mesh_index, matrix);                                             
// etc etc for other passes                                                                                                                   
                                                                                                                                              
// Draw loop                                                                                                                                  
while (drawing frames) {                                                                                                                      
  deferred_render_plan.execute()                                                                                                              
}                                                                                                                                             

Clone this wiki locally