Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include <qpainter></qpainter>
Toshihiro Shimizu 890ddd
#include "tgl.h"
Toshihiro Shimizu 890ddd
#include "writer.h"
Toshihiro Shimizu 890ddd
#include "processor.h"
Toshihiro Shimizu 890ddd
#include "trasterimage.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// Writer
Toshihiro Shimizu 890ddd
//----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Writer::Writer(const TFilePath &outputFile, int lx, int ly)
Toshihiro Shimizu 890ddd
	: m_pixmap(lx, ly), m_context(0), m_levelWriter(outputFile), m_frameCount(0), m_raster(lx, ly)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	QGLFormat glFormat;
Toshihiro Shimizu 890ddd
	m_context = new QGLContext(glFormat, &m_pixmap);
Toshihiro Shimizu 890ddd
	m_context->makeCurrent();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	glViewport(0, 0, lx, ly);
Toshihiro Shimizu 890ddd
	glMatrixMode(GL_PROJECTION);
Toshihiro Shimizu 890ddd
	glLoadIdentity();
Toshihiro Shimizu 890ddd
	glOrtho(0, lx, 0, ly, -1, 1);
Toshihiro Shimizu 890ddd
	glMatrixMode(GL_MODELVIEW);
Toshihiro Shimizu 890ddd
	glLoadIdentity();
Toshihiro Shimizu 890ddd
	// To maintain pixel accuracy
Toshihiro Shimizu 890ddd
	glTranslated(0.375, 0.375, 0.0);
Toshihiro Shimizu 890ddd
	glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Writer::~Writer()
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	delete m_context;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void Writer::write(const TRaster32P &ras, Processor *processor)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_context->makeCurrent();
Toshihiro Shimizu 890ddd
	glClear(GL_COLOR_BUFFER_BIT);
Toshihiro Shimizu 890ddd
	if (ras) {
Toshihiro Shimizu 890ddd
		glRasterPos2d(0, 0);
Toshihiro Shimizu 890ddd
		glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); // ras->getWrap());
Toshihiro Shimizu 890ddd
		glDrawPixels(ras->getLx(), ras->getLy(), TGL_FMT, TGL_TYPE, ras->getRawData());
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	if (processor) {
Toshihiro Shimizu 890ddd
		processor->draw();
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	glRasterPos2d(0, 0);
Toshihiro Shimizu 890ddd
	glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); // ras->getWrap());
Toshihiro Shimizu 890ddd
	glReadPixels(0, 0, m_raster->getLx(), m_raster->getLy(), TGL_FMT, TGL_TYPE, m_raster->getRawData());
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TImageP img = TRasterImageP(m_raster);
Toshihiro Shimizu 890ddd
	m_levelWriter->getFrameWriter(++m_frameCount)->save(img);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------