Changeset 118 for trunk/tests/cachebuf_test
- Timestamp:
- 06/12/13 04:01:20 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tests/cachebuf_test/nv_cachebuf_test.cc
r106 r118 67 67 { 68 68 app_window( nv::cached_buffer<quad>* cache, const glm::ivec2& a, const glm::ivec2& b, const glm::vec4& color ) 69 : m_slice( cache ) 70 { 71 glm::vec4 dcolor( color.x * 0.5, color.y * 0.5, color.z * 0.5, 1.0 ); 72 std::vector<quad>& v = m_slice.lock(); 73 nv::ivec2 a2( a.x, b.y ); 74 nv::ivec2 b2( b.x, a.y ); 75 nv::ivec2 t1( 10, 10 ); 76 nv::ivec2 t2( -10, 10 ); 77 v.emplace_back( a - t1, a, b2, b2 - t2, dcolor ); 78 v.emplace_back( a - t1, a2 + t2, a2, a, dcolor ); 79 v.emplace_back( a2 + t2, b + t1, b, a2, dcolor ); 80 v.emplace_back( b + t1, b2 - t2, b2, b, dcolor ); 81 v.emplace_back( a, b, color ); 69 : m_slice( cache ), m_a( a ), m_b( b ), m_c( color ) 70 { 71 create_complex(); 82 72 } 83 73 84 74 void change_color( const glm::vec4& color ) 85 75 { 76 m_c = color; 86 77 glm::vec4 dcolor( color.x * 0.5, color.y * 0.5, color.z * 0.5, 1.0 ); 87 78 std::vector<quad>& v = m_slice.lock(); 88 79 vertex* vtx = (vertex*)v.data(); 89 for (size_t i = 0; i < (v.size() - 1) * 6; ++i ) 90 vtx[i].color = color; 91 for (size_t i = (v.size() - 1) * 6; i < (v.size()) * 6; ++i ) 92 vtx[i].color = dcolor; 80 if ( v.size() > 1 ) 81 { 82 for (size_t i = 0; i < (v.size() - 1) * 6; ++i ) 83 vtx[i].color = dcolor; 84 for (size_t i = (v.size() - 1) * 6; i < (v.size()) * 6; ++i ) 85 vtx[i].color = color; 86 } 87 else 88 { 89 for (size_t i = 0; i < 6; ++i ) 90 vtx[i].color = color; 91 } 92 } 93 94 void simplify_toggle() 95 { 96 if ( m_slice.data().size() > 1 ) 97 { 98 NV_LOG( nv::LOG_INFO, "Simplifing" ); 99 create_simple(); 100 } 101 else 102 { 103 NV_LOG( nv::LOG_INFO, "Complexifing" ); 104 create_complex(); 105 } 106 } 107 108 void create_simple() 109 { 110 std::vector<quad>& v = m_slice.lock(); 111 v.clear(); 112 v.emplace_back( m_a, m_b, m_c ); 113 } 114 115 void create_complex() 116 { 117 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 nv::ivec2 a2( m_a.x, m_b.y ); 121 nv::ivec2 b2( m_b.x, m_a.y ); 122 nv::ivec2 t1( 10, 10 ); 123 nv::ivec2 t2( -10, 10 ); 124 v.emplace_back( m_a - t1, m_a, b2, b2 - t2, dcolor ); 125 v.emplace_back( m_a - t1, a2 + t2, a2, m_a, dcolor ); 126 v.emplace_back( a2 + t2, m_b + t1, m_b, a2, dcolor ); 127 v.emplace_back( m_b + t1, b2 - t2, b2, m_b, dcolor ); 128 v.emplace_back( m_a, m_b, m_c ); 93 129 } 94 130 … … 99 135 100 136 nv::buffer_slice<quad> m_slice; 137 nv::ivec2 m_a; 138 nv::ivec2 m_b; 139 nv::vec4 m_c; 101 140 }; 102 141 … … 109 148 void kill_window(); 110 149 void spawn_window(); 150 void simplify_window(); 111 151 void recolor_window(); 112 152 ~application(); … … 180 220 m_program->bind(); 181 221 // m_program->set_uniform( "tex", 0 ); 182 m_window->get_context()->draw( nv::TRIANGLES, m_render_state, m_program, m_va, m_ windows.size() * 5* 6 );222 m_window->get_context()->draw( nv::TRIANGLES, m_render_state, m_program, m_va, m_quad_cache->get_size() * 6 ); 183 223 m_window->swap_buffers(); 184 224 … … 197 237 { 198 238 case nv::KEY_N : spawn_window(); break; 239 case nv::KEY_S : simplify_window(); break; 199 240 case nv::KEY_C : recolor_window(); break; 200 241 case nv::KEY_K : kill_window(); break; … … 223 264 m_windows.erase( m_windows.begin() + index ); 224 265 } 266 225 267 void application::recolor_window() 226 268 { … … 228 270 size_t index = rand() % m_windows.size(); 229 271 m_windows[ index ].change_color( nv::vec4( (float)rand() / float(RAND_MAX), (float)rand() / float(RAND_MAX), (float)rand() / float(RAND_MAX), 1.0 ) ); 272 } 273 274 void application::simplify_window() 275 { 276 if ( m_windows.size() == 0 ) return; 277 size_t index = rand() % m_windows.size(); 278 NV_LOG( nv::LOG_INFO, "Simplify " << index ); 279 m_windows[ index ].simplify_toggle(); 230 280 } 231 281
Note: See TracChangeset
for help on using the changeset viewer.