From: <le...@us...> - 2007-01-04 09:32:55
|
Revision: 92 http://svn.sourceforge.net/qcell/?rev=92&view=rev Author: lessm Date: 2007-01-04 01:32:52 -0800 (Thu, 04 Jan 2007) Log Message: ----------- - 2d rendering have software rendering mode Modified Paths: -------------- trunk/qcell/baseheaders/Renderer.h trunk/qcell/basesources/Renderer.cpp Modified: trunk/qcell/baseheaders/Renderer.h =================================================================== --- trunk/qcell/baseheaders/Renderer.h 2007-01-02 16:29:31 UTC (rev 91) +++ trunk/qcell/baseheaders/Renderer.h 2007-01-04 09:32:52 UTC (rev 92) @@ -27,6 +27,8 @@ protected: QVector<SYMBOL> symbolsMap; QGLPixelBuffer *OGLpBuffer; + QImage *imageBuffer; + QPainter painter; bool discretValues; QVector<GLuint> primitives; @@ -57,7 +59,7 @@ bool resizeData(QVector<int> newSize, char *dataPointer=NULL, bool foreignDataPointer=0); void render(void); - QImage renderToQImage(void); + QImage renderToQImage(int zplane=-1); bool setSymbolColor(int index, QColor color); bool hideSymbol(int index); bool showSymbol(int index); Modified: trunk/qcell/basesources/Renderer.cpp =================================================================== --- trunk/qcell/basesources/Renderer.cpp 2007-01-02 16:29:31 UTC (rev 91) +++ trunk/qcell/basesources/Renderer.cpp 2007-01-04 09:32:52 UTC (rev 92) @@ -49,18 +49,28 @@ QImage Renderer::render1D(void) { - QPainter painter(OGLpBuffer); + if(OGLpBuffer) + painter.begin(OGLpBuffer); + else + painter.begin(imageBuffer); for(int x=0;x<sizeX;++x) { painter.setPen(symbolsMap[getValueAt_i(x)].color); painter.drawPoint(x, 0); } - return OGLpBuffer->toImage(); + painter.end(); + if(OGLpBuffer) + return OGLpBuffer->toImage(); + + return *imageBuffer; } QImage Renderer::render2D(int zval) { - QPainter painter(OGLpBuffer); + if(OGLpBuffer) + painter.begin(OGLpBuffer); + else + painter.begin(imageBuffer); for(int y=0;y<sizeY;++y) { for(int x=0;x<sizeX;++x) @@ -69,7 +79,11 @@ painter.drawPoint(x, y); } } - return OGLpBuffer->toImage(); + painter.end(); + if(OGLpBuffer) + return OGLpBuffer->toImage(); + + return *imageBuffer; } QImage Renderer::render3D(void) @@ -140,21 +154,22 @@ { discretValues = 1; OGLpBuffer = NULL; - + imageBuffer = NULL; +// painter = NULL; - SYMBOL baseSymbols; - baseSymbols.hide = 1; - baseSymbols.primitiveID = 0; - addSymbol(baseSymbols); - setSymbolColor(0, QColor(0,0,0)); + SYMBOL baseSymbols; + baseSymbols.hide = 1; + baseSymbols.primitiveID = 0; + addSymbol(baseSymbols); + setSymbolColor(0, QColor(0,0,0)); - baseSymbols.hide = 0; - baseSymbols.primitiveID = 0; - addSymbol(baseSymbols); - setSymbolColor(1, QColor(255,255,255)); + baseSymbols.hide = 0; + baseSymbols.primitiveID = 0; + addSymbol(baseSymbols); + setSymbolColor(1, QColor(255,255,255)); - translation.resize(3); - rotation.resize(3); + translation.resize(3); + rotation.resize(3); } Renderer::~Renderer() @@ -163,9 +178,17 @@ for(int i=0;i<primitives.size();++i) glDeleteLists(primitives[i], 1); + // if(painter) + // delete painter; + // painter = NULL; + if(OGLpBuffer) delete OGLpBuffer; OGLpBuffer = NULL; + + if(imageBuffer) + delete imageBuffer; + imageBuffer = NULL; } void Renderer::setDataType(baseDataTypes::DATA_TYPES type) @@ -193,9 +216,28 @@ if(CalculationData::resizeData(x, dataPointer, foreignDataPointer)) { + //if(painter) + // delete painter; + if(OGLpBuffer) delete OGLpBuffer; OGLpBuffer = new QGLPixelBuffer(sizeX, 1, format(), this); + if(!OGLpBuffer->hasOpenGLPbuffers()) + { + // painter = new QPainter(OGLpBuffer); + //} + //else + //{ + if(OGLpBuffer) + delete OGLpBuffer; + OGLpBuffer = NULL; + + if(imageBuffer) + delete imageBuffer; + imageBuffer = new QImage(sizeX, 1, QImage::Format_RGB32); + //painter = new QPainter(imageBuffer); + + } return 1; } return 0; @@ -205,9 +247,28 @@ { if(CalculationData::resizeData(x, y, dataPointer, foreignDataPointer)) { + //if(painter) + // delete painter; + if(OGLpBuffer) delete OGLpBuffer; OGLpBuffer = new QGLPixelBuffer(sizeX, sizeY, format(), this); + + if(!OGLpBuffer->hasOpenGLPbuffers()) + { + // painter = new QPainter(OGLpBuffer); + //} + //else + //{ + if(OGLpBuffer) + delete OGLpBuffer; + OGLpBuffer = NULL; + + if(imageBuffer) + delete imageBuffer; + imageBuffer = new QImage(sizeX, sizeY, QImage::Format_RGB32); + //painter = new QPainter(imageBuffer); + } return 1; } return 0; @@ -215,7 +276,34 @@ bool Renderer::resizeData(int x, int y, int z, char *dataPointer, bool foreignDataPointer) { - return CalculationData::resizeData(x, y, z, dataPointer, foreignDataPointer); + + if(CalculationData::resizeData(x, y, z, dataPointer, foreignDataPointer)) + { + //if(painter) + // delete painter; + + if(OGLpBuffer) + delete OGLpBuffer; + OGLpBuffer = new QGLPixelBuffer(sizeX, sizeY, format(), this); + + if(!OGLpBuffer->hasOpenGLPbuffers()) + { + //painter = new QPainter(OGLpBuffer); + //} + //else + //{ + if(OGLpBuffer) + delete OGLpBuffer; + OGLpBuffer = NULL; + + if(imageBuffer) + delete imageBuffer; + imageBuffer = new QImage(sizeX, sizeY, QImage::Format_RGB32); + //painter = new QPainter(imageBuffer); + } + return 1; + } + return 0; } bool Renderer::resizeData(int x, int y, int z, int t, char *dataPointer, bool foreignDataPointer) @@ -260,7 +348,6 @@ { glPushMatrix(); glTranslatef(mx + (float)x * 2.0f , my + (float)y * 2.0f, mz + (float)z * 2.0f); - //glColor3ub(symbolsMap[index].color.red(), symbolsMap[index].color.green(), symbolsMap[index].color.blue()); glMaterialfv(GL_FRONT, GL_DIFFUSE, symbolsMap[index].floatColorDiffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, symbolsMap[index].floatColorSpectacular); glCallList(primitives[symbolsMap[index].primitiveID]); @@ -271,17 +358,25 @@ } } -QImage Renderer::renderToQImage(void) +QImage Renderer::renderToQImage(int zplane) { - switch(dimension) + if(zplane==-1) { - case 1: - return render1D(); - case 2: - return render2D(); - case 3: - return render3D(); + switch(dimension) + { + case 1: + return render1D(); + case 2: + return render2D(); + case 3: + return render3D(); + } } + else + { + if(dimension>1) + return render2D(zplane); + } return QImage(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |