Example #1
0
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);
}
Example #2
0
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);
}
Example #3
0
    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;
            }

        }

    }