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