|
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 |
//-----------------------------------------------------------------------------
|