Changeset 508 for trunk/nv/engine/renderer.hh
- Timestamp:
- 07/19/16 13:43:10 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/nv/engine/renderer.hh
r507 r508 18 18 #include <nv/interface/device.hh> 19 19 #include <nv/interface/context.hh> 20 #include <nv/engine/program_manager.hh> 21 #include <nv/engine/material_manager.hh> 22 #include <nv/engine/mesh_manager.hh> 23 #include <nv/engine/render_pass.hh> 20 24 21 25 namespace nv 22 26 { 23 struct render_pass 27 28 struct renderer_element 24 29 { 25 render_state rstate; 26 clear_state cstate; 27 framebuffer fbuffer; 28 output_slot output[8]; 29 uint32 output_count; 30 resource< gpu_mesh > mesh; 31 resource< gpu_material > mat; 32 uint32 layer; 33 sint32 bone_offset; 34 transform model; 35 flags< 32 > flags; 36 }; 30 37 38 struct renderer_direct_element 39 { 40 vertex_array va; 41 uint32 count; 42 uint32 instances; 43 uint32 first; 44 resource< gpu_material > material; 45 resource< program > programs[4]; 46 transform model; 47 flags< 32 > flags; 48 }; 49 50 struct renderer_element_compare 51 { 52 bool operator()( const renderer_element& l, const renderer_element& r ) 53 { 54 if ( l.layer < r.layer ) return true; 55 if ( l.layer > r.layer ) return false; 56 if ( *l.flags.data() < *r.flags.data() ) return true; 57 if ( *l.flags.data() > *r.flags.data() ) return false; 58 if ( l.mat < r.mat ) return true; 59 if ( l.mat > r.mat ) return false; 60 return false; 61 } 31 62 }; 32 63 33 64 class renderer 34 65 { 66 public: 67 enum stats 68 { 69 DRAW_CALL, 70 TRIANGLE_COUNT, 71 MAX 72 }; 73 74 explicit renderer( context* ctx ); 75 void start_frame() 76 { 77 for ( uint32& s : m_statistics ) s = 0; 78 } 79 80 void push_element( const nv::renderer_element& element ) 81 { 82 m_elements.push_back( element ); 83 } 84 85 void sort(); 86 void render( const scene_state& ss, const render_pass& pass ); 87 void render( const scene_state& ss, const render_pass& pass, vertex_array va, uint32 va_count, uint32 program_idx = 0 ); 88 void render_quad( const scene_state& ss, const render_pass& pass, uint32 program_idx = 0 ) 89 { 90 render( ss, pass, m_quad, 6, program_idx ); 91 } 92 void render_direct( const scene_state& ss, const render_pass& pass, const nv::array_view< renderer_direct_element >& elements, uint32 program_idx = 0 ); 93 94 uint32 get_stat( stats s ) const { return m_statistics[s]; } 95 96 void end_frame() 97 { 98 m_elements.clear(); 99 } 100 void reset() 101 { 102 m_elements.clear(); 103 } 104 105 protected: 106 bool match( flags<32> f, const render_pass& pass ) 107 { 108 if ( ( f & pass.any ).empty() ) return false; 109 if ( ( f & pass.exclude ).any() ) return false; 110 return true; 111 } 112 113 context* m_context; 114 vertex_array m_quad; 115 vector< renderer_element > m_elements; 116 uint32 m_statistics[MAX]; 35 117 36 118 };
Note: See TracChangeset
for help on using the changeset viewer.