void Renderer::clear_frame_for_postrender() { glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); float r = GameEngine::get_instance()->get_data()->screen.ratio; setup_ortho(0, 1, 0, r); }
void Renderer::clear_frame() { glClearColor(0.95f, 0.95f, 0.95f, 1.0f); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); Vec2f cam_pos = GameEngine::get_data()->camera->coords; float zoom = GameEngine::get_data()->camera->zoom_koeff; float koeff = GameEngine::get_data()->screen.ratio; setup_ortho( cam_pos.x - zoom * 1.0f, cam_pos.x + zoom * 1.0f, cam_pos.y - zoom * koeff, cam_pos.y + zoom * koeff); }
void start() { float x1 = -10; float y1 = -10; // glBindTexture(GL_TEXTURE_2D, texName); // float roty = -45; int light_x = 0; int light_xd = 1; vec3i light_pos( 0, 40, 0 ); //int steps = 1; //light_scene ls( planes_, solid_ ); auto t_old = CL_System::get_microseconds(); bool light_on = true; bool light_button_down = false; double delta_t = 0.01; player p1; //rad_core_ = make_unique<rad_core_threaded>( scene_static_, light_static_ ); // rad_core_ = make_rad_core_threaded(scene_static_, light_static_); // auto rad_core2 = make_unique<rad_core_opencl>( cl_context_, cl_cqueue_, scene_static_, light_static_ ); // rad_core2->load_kernel( cl_context_, cl_used_devices_ ); // float min_ff = 5e-5; // vab.render(planes_.begin(), planes_.end() ); // vbo_builder vbob(scene_static_.planes().size()); // vbob.update_index_buffer(scene_static_.planes().size()); // vbob.update_vertices( scene_static_.planes().begin(), scene_static_.planes().end()); // std::ifstream is( "cryistal-castle-hidden-ramp.txt" ); std::ifstream is( "house1.txt" ); render_unit runit(is, vec3f( -40.0, -20.0, -40.0 )); // std::ifstream is2( "cryistal-castle-tree-wave.txt" ); // std::ifstream is2( "cryistal-castle-hidden-ramp.txt" ); // std::ifstream is2( "house1.txt" ); // render_unit runit2(is2, vec3f( 60.0, -20.0, 0.0 )); #if 0 cl::BufferGL buf; //cl::Buffer buf; try { //cl_int cl_err; //buf = cl::Buffer( clCreateFromGLBuffer( cl_context_(), CL_MEM_WRITE_ONLY, vbob.buffers_[1], &cl_err )); //assert( cl_err == CL_SUCCESS ); buf = cl::BufferGL( cl_context_, CL_MEM_WRITE_ONLY, vbob.buffers_[1] ); cl_fcolor_ = cl::Buffer( cl_context_, CL_MEM_READ_ONLY, scene_static_.planes().size() * 3 * sizeof(float) ); cl_kernel_.setArg(0, buf() ); //cl_kernel_.setArg(1, cl_fcolor_ ); cl_kernel_.setArg(1, rad_core2->f_rad() ); cl_uint cl_color_size = scene_static_.planes().size(); cl_kernel_.setArg(2, cl_color_size ); } catch( cl::Error x ) { std::cerr << "cl error during gl buffer setup\ncall: " << x.what() << "\nerror code: " << cl_str_error( x.err() ) << "\n"; throw; } #endif bool light_changed = true; //rad_core_ = make_unique<rad_core_lockfree>( scene_static_, light_static_ ); bool do_quit = false; while ( !do_quit ) { //cube c(x1, 0, y1); CL_GraphicContext gc = wnd_.get_gc(); CL_InputDevice &keyboard = wnd_.get_ic().get_keyboard(); CL_InputDevice &mouse = wnd_.get_ic().get_mouse(); // if( keyboard.get_keycode(CL_KEY_I) ) { // // roty += 1; // // min_ff += 5e-6; // } // if( keyboard.get_keycode(CL_KEY_K) ) { // //roty -= 1; // min_ff -= 5e-6; // } // // std::cout << "min ff: " << min_ff << "\n"; p1.input(keyboard, mouse); p1.frame(t_old * 1.0e-3, delta_t); int light_speed = 1; do_quit = keyboard.get_keycode(CL_KEY_Q); if ( keyboard.get_keycode(CL_KEY_LEFT) ) { light_pos.x += light_speed; light_changed = true; } if ( keyboard.get_keycode(CL_KEY_RIGHT) ) { light_pos.x -= light_speed; light_changed = true; } if ( keyboard.get_keycode(CL_KEY_UP) ) { light_pos.z += light_speed; light_changed = true; } if ( keyboard.get_keycode(CL_KEY_DOWN) ) { light_pos.z -= light_speed; light_changed = true; } if ( keyboard.get_keycode(CL_KEY_L )) { if ( !light_button_down ) { light_on = !light_on; light_changed = true; } light_button_down = true; } else { light_button_down = false; } glEnable(GL_CULL_FACE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // glTranslatef(0,0,-100); // glRotatef(45,1,0,0); // glRotatef(roty,0,1,0); if ( light_x > 60 || light_x < -60 ) { light_xd = -light_xd; // light_x = -20; } // light_planes(vec3i(light_x, 10, 10 )); if( light_changed ) { //ls.reset_emit(); // light_dynamic_.clear_emit(); runit.clear_emit(); // runit2.clear_emit(); //ls.render_light(vec3f( 40, 50.0, light_x ), vec3f(1.0, 1.0, 1.0 )); if ( light_on ) { //ls.render_light(light_pos, vec3f(1.0, 0.8, 0.6 )); //vec3f light_pos( p1.pos) // vec3f light_pos = (p1.pos()* pump_factor_) - base_pos_; vec3f light_weird = (light_pos * pump_factor_) - base_pos_; // light_utils::render_light( light_dynamic_.emit(), scene_static_, light_weird, vec3f(1.0, 0.8, 0.6 )); runit.render_light(light_weird, vec3f(1.0, 0.8, 0.6 )); // runit2.render_light(light_weird, vec3f(1.0, 0.8, 0.6 )); } //ls.post(); light_changed = false; } runit.update(); // runit2.update(); // rad_core2->set_emit( *light_dynamic_.emit() ); // rad_core_->set_emit( *light_dynamic_.emit() ); //ls.render_emit_patches(); //steps = 1; //ls.do_radiosity( steps ); //rad_core2->run(); // rad_core_->copy( light_dynamic_.rad() ); // stupid: transfer rgb energy fomr light scene to planes // for ( size_t i = 0; i < scene_static_.planes().size(); ++i ) { // plane &p = const_cast<plane &>(scene_static_.planes()[i]); // FIXME: HACK!!! is the energy_rgp stored in the planes actually used? remove it! // p.energy_rgb((*light_dynamic_.rad())[i]); // } // light_x += light_xd; // glPushMatrix(); //CL_Mat4f proj = CL_Mat4f::look_at( 20, 20, 20, 0, 0, 0, 0.0, 1.0, 0.0 ); //vab.update_color( planes_.begin(), planes_.end() ); // vab.update_color( ls.rad_rgb().begin(), ls.rad_rgb().end() ); // vab.setup_gl_pointers(); // vbob.update_color(light_dynamic_.rad()->begin(), light_dynamic_.rad()->end()); #if 0 try { cl_int err; // glFinish(); const auto &rad_colors = *light_dynamic_.rad(); // cl_cqueue_.enqueueWriteBuffer( cl_fcolor_, false, 0, rad_colors.size() * sizeof(vec3f), rad_colors.data() ); // err = clEnqueueAcquireGLObjects( cl_cqueue_(), 1, &(buf()), 0, 0, 0 ); assert( err == CL_SUCCESS ); //cl_kernel_.setArg(1, rad_core2->f_rad() ); cl_kernel_.setArg(1, cl_fcolor_ ); cl_cqueue_.enqueueNDRangeKernel( cl_kernel_, 0, cl::NDRange(scene_static_.planes().size()) ); // unmap buffer object err = clEnqueueReleaseGLObjects( cl_cqueue_(), 1, &(buf()), 0,0,0); assert( err == CL_SUCCESS ); cl_cqueue_.finish(); } catch( cl::Error x ) { std::cerr << "cl error during kernel execution\ncall: " << x.what() << "\nerror code: " << cl_str_error( x.err() ) << "\n"; throw; } #endif //setup_perspective( p1 ); setup_ortho(); int ortho_width = 320; int ortho_heigth = 200; glViewport( gc.get_width() - ortho_width, gc.get_height() - ortho_heigth, ortho_width, ortho_heigth ); // vab.draw_arrays(); // render_quads(); // glPopMatrix(); setup_perspective(p1); glViewport( 0, 0, gc.get_width(), gc.get_height()); // render_quads(); // vab.setup_gl_pointers(); // vab.draw_arrays(); // vbob.draw_arrays(); runit.draw(); // runit2.draw(); wnd_.flip(1); auto t = CL_System::get_microseconds(); // std::cout << "fps: " << 1e6 / (t - t_old) << "\n"; delta_t = (t - t_old) * 1.0e-6; t_old = t; // std::cout << "delta: " << delta_t << "\n"; // CL_System::sleep( 1000 / 60. ); // getchar(); CL_KeepAlive::process(); x1 += 1; if ( x1 > 10 ) { x1 = -10; y1 += 1; } if ( y1 > 10 ) { y1 = -10; } } }