Blame c++/contourgl/measure.cpp

Ivan Mahonin 49e693
/*
Ivan Mahonin 49e693
    ......... 2015 Ivan Mahonin
Ivan Mahonin 49e693
Ivan Mahonin 49e693
    This program is free software: you can redistribute it and/or modify
Ivan Mahonin 49e693
    it under the terms of the GNU General Public License as published by
Ivan Mahonin 49e693
    the Free Software Foundation, either version 3 of the License, or
Ivan Mahonin 49e693
    (at your option) any later version.
Ivan Mahonin 49e693
Ivan Mahonin 49e693
    This program is distributed in the hope that it will be useful,
Ivan Mahonin 49e693
    but WITHOUT ANY WARRANTY; without even the implied warranty of
Ivan Mahonin 49e693
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Ivan Mahonin 49e693
    GNU General Public License for more details.
Ivan Mahonin 49e693
Ivan Mahonin 49e693
    You should have received a copy of the GNU General Public License
Ivan Mahonin 49e693
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
Ivan Mahonin 49e693
*/
Ivan Mahonin 49e693
Ivan Mahonin 49e693
#include <iostream>
Ivan Mahonin 49e693
#include <iomanip>
Ivan Mahonin 49e693
Ivan Mahonin 49e693
#include "measure.h"
Ivan Mahonin 49e693
#include "utils.h"
Ivan Mahonin 49e693
#include "glcontext.h"
Ivan Mahonin 49e693
Ivan Mahonin 49e693
Ivan Mahonin 49e693
using namespace std;
Ivan Mahonin 49e693
Ivan Mahonin 49e693
Ivan Mahonin 49e693
std::vector<Measure*> Measure::stack;
Ivan Mahonin 49e693
Ivan Mahonin 49e693
Ivan Mahonin 49e693
Measure::Measure(const std::string &filename):
Ivan Mahonin 49e693
	filename(filename),
Ivan Mahonin 49e693
	surface(),
Ivan Mahonin 49e693
	tga(filename.size() > 4 && filename.substr(filename.size()-4, 4) == ".tga"),
Ivan Mahonin 49e693
	sub_tasks(),
Ivan Mahonin 49e693
	t()
Ivan Mahonin 49e693
{
Ivan Mahonin 5890eb
	cout << string(stack.size()*2, ' ') << "begin             " << filename << endl << flush;
Ivan Mahonin 49e693
	stack.push_back(this);
Ivan Mahonin 49e693
	t = clock();
Ivan Mahonin 49e693
}
Ivan Mahonin 49e693
Ivan Mahonin 49e693
Measure::Measure(const std::string &filename, Surface &surface):
Ivan Mahonin 49e693
	filename(filename),
Ivan Mahonin 49e693
	surface(&surface),
Ivan Mahonin 49e693
	tga(filename.size() > 4 && filename.substr(filename.size()-4, 4) == ".tga"),
Ivan Mahonin 49e693
	sub_tasks(),
Ivan Mahonin 49e693
	t()
Ivan Mahonin 49e693
{
Ivan Mahonin 5890eb
	cout << string(stack.size()*2, ' ') << "begin             " << filename << endl << flush;
Ivan Mahonin 49e693
	stack.push_back(this);
Ivan Mahonin 49e693
	t = clock();
Ivan Mahonin 49e693
}
Ivan Mahonin 49e693
Ivan Mahonin 49e693
Measure::~Measure() {
Ivan Mahonin 49e693
	if (!surface && tga) glFinish();
Ivan Mahonin 49e693
Ivan Mahonin 49e693
	clock_t dt = sub_tasks ? sub_tasks : clock() - t;
Ivan Mahonin 5890eb
	Real ms = 1000.0*(Real)dt/(Real)(CLOCKS_PER_SEC);
Ivan Mahonin f83e6b
Ivan Mahonin 5890eb
	cout << string((stack.size()-1)*2, ' ') << "end "
Ivan Mahonin 5890eb
		 << setw(8) << fixed << setprecision(3)
Ivan Mahonin f83e6b
		 << ms << " ms - "
Ivan Mahonin f83e6b
		 << filename
Ivan Mahonin f83e6b
		 << endl << flush;
Ivan Mahonin 49e693
Ivan Mahonin 49e693
	if (tga) {
Ivan Mahonin 49e693
		if (surface)
Ivan Mahonin 49e693
			Utils::save_surface(*surface, filename);
Ivan Mahonin 49e693
		else
Ivan Mahonin 49e693
			Utils::save_viewport(filename);
Ivan Mahonin 49e693
	}
Ivan Mahonin 49e693
Ivan Mahonin 49e693
	if (surface) {
Ivan Mahonin 49e693
		surface->clear();
Ivan Mahonin 49e693
	} else {
Ivan Mahonin 49e693
		glClear(GL_COLOR_BUFFER_BIT);
Ivan Mahonin 49e693
		glFinish();
Ivan Mahonin 49e693
	}
Ivan Mahonin 49e693
Ivan Mahonin 49e693
	stack.pop_back();
Ivan Mahonin 49e693
	if (!stack.empty()) stack.back()->sub_tasks += dt;
Ivan Mahonin 49e693
}
Ivan Mahonin 49e693