Changeset 119 for trunk/tests/cachebuf_test
- Timestamp:
- 06/12/13 09:38:06 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tests/cachebuf_test/nv_cachebuf_test.cc
r118 r119 19 19 #include <nv/gfx/cached_buffer.hh> 20 20 21 #define INDEXED_TEST 22 21 23 struct vertex 22 24 { … … 28 30 }; 29 31 32 #ifndef INDEXED_TEST 30 33 struct quad 31 34 { … … 63 66 64 67 }; 68 #endif 69 70 #ifdef INDEXED_TEST 71 typedef nv::indexed_cached_buffer<vertex> gcache; 72 typedef nv::indexed_buffer_slice<vertex> gslice; 73 #else 74 typedef nv::cached_buffer<quad> gcache; 75 typedef nv::buffer_slice<quad> gslice; 76 #endif 65 77 66 78 struct app_window 67 79 { 68 app_window( nv::cached_buffer<quad>* cache, const glm::ivec2& a, const glm::ivec2& b, const glm::vec4& color )69 : m_slice( cache ), m_ a( a ), m_b( b ), m_c( color )80 app_window( gcache* cache, const glm::ivec2& a, const glm::ivec2& b, const glm::vec4& color ) 81 : m_slice( cache ), m_simple( false ), m_a( a ), m_b( b ), m_c( color ) 70 82 { 71 83 create_complex(); … … 76 88 m_c = color; 77 89 glm::vec4 dcolor( color.x * 0.5, color.y * 0.5, color.z * 0.5, 1.0 ); 90 #ifdef INDEXED_TEST 91 std::vector<vertex>& v = m_slice.lock_vertices(); 92 size_t size = v.size(); 93 size_t dcount = 8; 94 size_t dmin = 8; 95 size_t count = size; 96 #else 78 97 std::vector<quad>& v = m_slice.lock(); 98 size_t size = v.size(); 99 size_t dcount = (size - 1) * 6; 100 size_t dmin = 1; 101 size_t count = size * 6; 102 #endif 79 103 vertex* vtx = (vertex*)v.data(); 80 if ( v.size() > 1)81 { 82 for (size_t i = 0; i < (v.size() - 1) * 6; ++i )104 if ( size > dmin ) 105 { 106 for (size_t i = 0; i < dcount; ++i ) 83 107 vtx[i].color = dcolor; 84 for (size_t i = (v.size() - 1) * 6; i < (v.size()) * 6; ++i )108 for (size_t i = dcount; i < count; ++i ) 85 109 vtx[i].color = color; 86 110 } 87 111 else 88 112 { 89 for (size_t i = 0; i < 6; ++i )113 for (size_t i = 0; i < count; ++i ) 90 114 vtx[i].color = color; 91 115 } … … 94 118 void simplify_toggle() 95 119 { 96 if ( m_slice.data().size() > 1)120 if ( !m_simple ) 97 121 { 98 122 NV_LOG( nv::LOG_INFO, "Simplifing" ); … … 108 132 void create_simple() 109 133 { 134 #ifdef INDEXED_TEST 135 std::vector<vertex>& v = m_slice.lock_vertices(); 136 std::vector<nv::uint16>& i = m_slice.lock_indices(); 137 v.clear(); 138 i.clear(); 139 v.emplace_back( m_a, m_c ); 140 v.emplace_back( nv::ivec2( m_a.x, m_b.y ), m_c ); 141 v.emplace_back( m_b, m_c ); 142 v.emplace_back( nv::ivec2( m_b.x, m_a.y ), m_c ); 143 nv::uint16 tmp[] = { 0, 1, 2, 2, 3, 0 }; 144 i.insert( i.end(), tmp, std::end( tmp ) ); 145 #else 110 146 std::vector<quad>& v = m_slice.lock(); 111 147 v.clear(); 112 148 v.emplace_back( m_a, m_b, m_c ); 149 #endif 150 m_simple = true; 113 151 } 114 152 … … 116 154 { 117 155 glm::vec4 dcolor( m_c.x * 0.5, m_c.y * 0.5, m_c.z * 0.5, 1.0 ); 118 std::vector<quad>& v = m_slice.lock();119 v.clear();120 156 nv::ivec2 a2( m_a.x, m_b.y ); 121 157 nv::ivec2 b2( m_b.x, m_a.y ); 122 158 nv::ivec2 t1( 10, 10 ); 123 159 nv::ivec2 t2( -10, 10 ); 160 #ifdef INDEXED_TEST 161 std::vector<vertex>& v = m_slice.lock_vertices(); 162 std::vector<nv::uint16>& i = m_slice.lock_indices(); 163 v.clear(); 164 i.clear(); 165 v.emplace_back( m_a- t1, dcolor ); // 0 166 v.emplace_back( a2 + t2, dcolor ); // 1 167 v.emplace_back( m_b+ t1, dcolor ); // 2 168 v.emplace_back( b2 - t2, dcolor ); // 3 169 170 v.emplace_back( m_a, dcolor ); // 4 171 v.emplace_back( a2, dcolor ); // 5 172 v.emplace_back( m_b, dcolor ); // 6 173 v.emplace_back( b2, dcolor ); // 7 174 nv::uint16 tmp[] = { 175 0, 4, 7, 7, 3, 0, 176 0, 1, 5, 5, 4, 0, 177 1, 2, 6, 6, 5, 1, 178 2, 3, 7, 7, 6, 2, 179 }; 180 i.insert( i.end(), tmp, std::end( tmp ) ); 181 182 v.emplace_back( m_a, m_c ); // 8 183 v.emplace_back( a2, m_c ); // 9 184 v.emplace_back( m_b, m_c ); // 10 185 v.emplace_back( b2, m_c ); // 11 186 nv::uint16 tmp2[] = { 8, 9, 10, 10, 11, 8 }; 187 i.insert( i.end(), tmp2, std::end( tmp2 ) ); 188 189 #else 190 std::vector<quad>& v = m_slice.lock(); 191 v.clear(); 124 192 v.emplace_back( m_a - t1, m_a, b2, b2 - t2, dcolor ); 125 193 v.emplace_back( m_a - t1, a2 + t2, a2, m_a, dcolor ); … … 127 195 v.emplace_back( m_b + t1, b2 - t2, b2, m_b, dcolor ); 128 196 v.emplace_back( m_a, m_b, m_c ); 197 #endif 198 m_simple = false; 129 199 } 130 200 … … 134 204 } 135 205 136 nv::buffer_slice<quad> m_slice; 206 gslice m_slice; 207 bool m_simple; 137 208 nv::ivec2 m_a; 138 209 nv::ivec2 m_b; … … 157 228 nv::render_state m_render_state; 158 229 159 nv::cached_buffer<quad>* m_quad_cache;230 gcache* m_quad_cache; 160 231 std::vector<app_window> m_windows; 161 232 … … 185 256 { 186 257 { 187 m_program = m_device->create_program( nv::slurp( "cachebuf.vert" ), nv::slurp( "cachebuf.frag" ) ); 188 m_va = m_device->create_vertex_array(); 189 190 m_quad_cache = new nv::cached_buffer<quad>( m_device, nv::DYNAMIC_DRAW, 20, true ); 191 m_coord_loc = m_program->get_attribute("coord")->get_location(); 192 m_color_loc = m_program->get_attribute("color")->get_location(); 193 194 m_va->add_vertex_buffer( m_coord_loc, (nv::vertex_buffer*)m_quad_cache->get_buffer(), nv::INT, 2, 0, sizeof( vertex ), false ); 195 m_va->add_vertex_buffer( m_color_loc, (nv::vertex_buffer*)m_quad_cache->get_buffer(), nv::FLOAT, 4, offset_of( &vertex::color ), sizeof( vertex ), false ); 258 m_program = m_device->create_program( nv::slurp( "cachebuf.vert" ), nv::slurp( "cachebuf.frag" ) ); 259 m_coord_loc = m_program->get_attribute("coord")->get_location(); 260 m_color_loc = m_program->get_attribute("color")->get_location(); 261 m_va = m_device->create_vertex_array(); 262 263 #ifdef INDEXED_TEST 264 m_quad_cache = new gcache( m_device, nv::DYNAMIC_DRAW, 200, 200 ); 265 m_va->set_index_buffer( m_quad_cache->get_index_buffer(), nv::USHORT, false ); 266 nv::vertex_buffer* buffer = m_quad_cache->get_vertex_buffer(); 267 #else 268 m_quad_cache = new gcache( m_device, nv::DYNAMIC_DRAW, 20, true ); 269 nv::vertex_buffer* buffer = (nv::vertex_buffer*)m_quad_cache->get_buffer(); 270 #endif 271 272 m_va->add_vertex_buffer( m_coord_loc, buffer, nv::INT, 2, 0, sizeof( vertex ), false ); 273 m_va->add_vertex_buffer( m_color_loc, buffer, nv::FLOAT, 4, offset_of( &vertex::color ), sizeof( vertex ), false ); 196 274 } 197 275 return true; … … 213 291 if (m_quad_cache->commit() ) 214 292 { 215 m_va->update_vertex_buffer( m_coord_loc, (nv::vertex_buffer*)m_quad_cache->get_buffer(), false ); 216 m_va->update_vertex_buffer( m_color_loc, (nv::vertex_buffer*)m_quad_cache->get_buffer(), false ); 293 #ifdef INDEXED_TEST 294 m_va->set_index_buffer( m_quad_cache->get_index_buffer() ); 295 nv::vertex_buffer* buffer = m_quad_cache->get_vertex_buffer(); 296 #else 297 nv::vertex_buffer* buffer = (nv::vertex_buffer*)m_quad_cache->get_buffer(); 298 #endif 299 m_va->update_vertex_buffer( m_coord_loc, buffer, false ); 300 m_va->update_vertex_buffer( m_color_loc, buffer, false ); 217 301 } 218 302 … … 220 304 m_program->bind(); 221 305 // m_program->set_uniform( "tex", 0 ); 222 m_window->get_context()->draw( nv::TRIANGLES, m_render_state, m_program, m_va, m_quad_cache->get_size() * 6 ); 306 #ifdef INDEXED_TEST 307 size_t draw_size = m_quad_cache->get_index_size(); 308 #else 309 size_t draw_size = m_quad_cache->get_size() * 6; 310 #endif 311 m_window->get_context()->draw( nv::TRIANGLES, m_render_state, m_program, m_va, draw_size ); 223 312 m_window->swap_buffers(); 224 313
Note: See TracChangeset
for help on using the changeset viewer.