- Added support for more than one shader

- Some methods renamed
- Adjusted some accelerators keys
- Fixed up minor visual issues
This commit is contained in:
Paolo Cignoni cignoni 2005-12-22 20:01:23 +00:00
parent b04772047c
commit 7802cec136
5 changed files with 102 additions and 58 deletions

View File

@ -24,6 +24,12 @@
History
$Log$
Revision 1.59 2005/12/22 20:01:23 glvertex
- Added support for more than one shader
- Some methods renamed
- Adjusted some accelerators keys
- Fixed up minor visual issues
Revision 1.58 2005/12/22 10:33:37 vannini
Removed old code
On SaveSnapshotDialog, "Save" button is default
@ -242,7 +248,7 @@ using namespace vcg;
GLArea::GLArea(QWidget *parent)
: QGLWidget(parent)
{
iRender=0; //MeshRender support
iRenderer=0; //Shader support
iDecoratorsList=0;
currentTime=0;
lastTime=0;
@ -254,6 +260,7 @@ GLArea::GLArea(QWidget *parent)
takeSnapTile=false;
infoAreaVisible = false;
trackBallVisible = true;
currentSharder = NULL;
time.start();
}
@ -262,12 +269,12 @@ GLArea::GLArea(QWidget *parent)
void GLArea::displayModelInfo()
{
QString strMessage;
QString strVertex="Vertex "+QString("").setNum(mm->cm.vert.size(),10);
QString strTriangle="Triangle "+QString("").setNum(mm->cm.face.size(),10);
QString strVertex="Vertices "+QString("").setNum(mm->cm.vert.size(),10);
QString strTriangle="Faces "+QString("").setNum(mm->cm.face.size(),10);
//strVertex+=strVertex.setNum(mm->cm.vert.size(),10);
//strTriangle.setNum(mm->cm.face.size(),10);
renderText(currentWidth-currentWidth*0.15,currentHeight-25,strVertex);
renderText(currentWidth-currentWidth*0.15,currentHeight-45,strTriangle);
renderText(currentWidth-currentWidth*0.15,currentHeight-45,strVertex);
renderText(currentWidth-currentWidth*0.15,currentHeight-30,strTriangle);
}
@ -284,16 +291,12 @@ void GLArea::initializeGL()
{
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
//glEnable(GL_CULL_FACE);
glEnable(GL_NORMALIZE);
GLfloat pfront[] = {0,0,1,0};
glLightfv(GL_LIGHT0,GL_POSITION,pfront);
glEnable(GL_LIGHT0);
/*glLightfv(GL_LIGHT1,GL_POSITION,pback);
glLightfv(GL_LIGHT1,GL_DIFFUSE,l_diffuseFancy);*/
glEnable(GL_LIGHTING);
}
@ -397,7 +400,6 @@ void GLArea::paintGL()
GLint old_matrixMode;
lastTime=time.elapsed();
initTexture();
glDisable(GL_TEXTURE_2D); // FIX FIX FIX to move in trimesh.h ?
glClearColor(1.0,1.0,1.0,0.0); //vannini: alpha was 1.0
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
@ -426,8 +428,6 @@ void GLArea::paintGL()
trackball.Apply(trackBallVisible && !takeSnapTile);
glColor3f(1.f,1.f,1.f);
//Box3f bb(Point3f(-.5,-.5,-.5),Point3f(.5,.5,.5));
//glBoxWire(bb);
float d=2.0f/mm->cm.bbox.Diag();
glScale(d);
glTranslate(-mm->cm.bbox.Center());
@ -452,13 +452,15 @@ void GLArea::paintGL()
glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);
}
if(iRender) {
iRender->Render(new QAction("Toon Shader", this), *mm, rm, this);
if(iRenderer && currentSharder) {
//iRender->Render(new QAction("Toon Shader", this), *mm, rm, this);
iRenderer->Render(currentSharder, *mm, rm, this);
}
mm->Render(rm.drawMode,rm.colorMode,rm.textureMode);
if(iRender) {
if(iRenderer) {
glUseProgramObjectARB(0);
}
@ -508,22 +510,19 @@ void GLArea::paintGL()
glColor4f(1,1,1,1);
if(logVisible)
log.glDraw(this,0,3);
// More info to add.....
displayModelInfo();
currentTime=time.elapsed();
deltaTime=currentTime-lastTime;
updateFps();
if ((cfps>0) && (cfps<200)) renderFps();
displayModelInfo();
glPopAttrib();
glPopMatrix();
}
// ==============================
}
void GLArea::resizeGL(int _width, int _height)
@ -608,23 +607,25 @@ void GLArea::setColorMode(vcg::GLW::ColorMode mode)
void GLArea::initTexture()
{
if(!mm->cm.textures.empty() && mm->glw.TMId.empty()){
for(unsigned int i =0; i< mm->cm.textures.size();++i){
QImage img, imgGL;
img.load(mm->cm.textures[i].c_str());
imgGL=convertToGLFormat(img);
qDebug("loaded texture %s. with id %i w %i h %i",mm->cm.textures[i].c_str(),i, imgGL.width(), imgGL.height());
mm->glw.TMId.push_back(0);
glEnable(GL_TEXTURE_2D);
glGenTextures( 1, &(mm->glw.TMId.back()) );
glBindTexture( GL_TEXTURE_2D, mm->glw.TMId.back() );
glTexImage2D( GL_TEXTURE_2D, 0, 3, imgGL.width(), imgGL.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, imgGL.bits() );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
qDebug("loaded texture %s. in %i",mm->cm.textures[i].c_str(),mm->glw.TMId[i]);
}
}
glEnable(GL_TEXTURE_2D);
for(unsigned int i =0; i< mm->cm.textures.size();++i){
QImage img, imgGL;
img.load(mm->cm.textures[i].c_str());
imgGL=convertToGLFormat(img);
qDebug("loaded texture %s. with id %i w %i h %i",mm->cm.textures[i].c_str(),i, imgGL.width(), imgGL.height());
mm->glw.TMId.push_back(0);
glGenTextures( 1, &(mm->glw.TMId.back()) );
glBindTexture( GL_TEXTURE_2D, mm->glw.TMId.back() );
glTexImage2D( GL_TEXTURE_2D, 0, 3, imgGL.width(), imgGL.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, imgGL.bits() );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
qDebug("loaded texture %s. in %i",mm->cm.textures[i].c_str(),mm->glw.TMId[i]);
}
}
glDisable(GL_TEXTURE_2D);
}
void GLArea::setTextureMode(vcg::GLW::TextureMode mode)

View File

@ -24,6 +24,12 @@
History
$Log$
Revision 1.39 2005/12/22 20:01:23 glvertex
- Added support for more than one shader
- Some methods renamed
- Adjusted some accelerators keys
- Fixed up minor visual issues
Revision 1.38 2005/12/14 22:25:26 cignoni
Added preliminary supprot for editing/selection plugins.
@ -285,11 +291,9 @@ public:
void resetTrackBall();
list<pair<QAction *,MeshDecorateInterface *> > *iDecoratorsList;
//shader support
MeshRenderInterface *iRender;
void setRender(MeshRenderInterface *rend){ iRender = rend; }
MeshRenderInterface * getRender() { return iRender; }
MeshEditInterface *iEdit;
void setRenderer(MeshRenderInterface *rend, QAction *shader){ iRenderer = rend; currentSharder = shader;}
MeshRenderInterface * getRenderer() { return iRenderer; }
void setEdit(MeshEditInterface *edit){ iEdit = edit; }
protected:
@ -310,6 +314,14 @@ private:
bool logVisible; // Prints out log infos ?
bool infoAreaVisible; // Draws the lower info area ?
bool trackBallVisible; // Draws the trackball ?
//shader support
MeshRenderInterface *iRenderer;
QAction *currentSharder;
// Editing support
MeshEditInterface *iEdit;
RenderMode rm;
ColorSetting cs;
float cfps;
@ -324,7 +336,6 @@ private:
QImage tileBuffer;
bool takeSnapTile;
int vpWidth, vpHeight, tileCol, tileRow, totalCols, totalRows;
};

View File

@ -23,6 +23,12 @@
/****************************************************************************
History
$Log$
Revision 1.51 2005/12/22 20:01:23 glvertex
- Added support for more than one shader
- Some methods renamed
- Adjusted some accelerators keys
- Fixed up minor visual issues
Revision 1.50 2005/12/19 19:03:06 davide_portelli
Now decorations in render menu are consistent when we have tiled windows.
@ -183,6 +189,7 @@ private:
QMenu *filterMenu;
QMenu *editMenu;
//Render Menu and SubMenu ////
QMenu *shadersMenu;
QMenu *renderMenu;
QMenu *renderModeMenu;
QMenu *lightingModeMenu;

View File

@ -24,6 +24,12 @@
History
$Log$
Revision 1.32 2005/12/22 20:01:23 glvertex
- Added support for more than one shader
- Some methods renamed
- Adjusted some accelerators keys
- Fixed up minor visual issues
Revision 1.31 2005/12/19 19:03:31 davide_portelli
Now decorations in render menu are consistent when we have tiled windows.
@ -343,7 +349,7 @@ void MainWindow::createActions()
saveAsAct->setShortcut(Qt::CTRL+Qt::Key_S);
connect(saveAsAct, SIGNAL(triggered()), this, SLOT(saveAs()));
saveSnapshotAct = new QAction(QIcon(":/images/save.png"),tr("&Save snapshot"), this);
saveSnapshotAct = new QAction(QIcon(":/images/save.png"),tr("Save snapsho&t"), this);
connect(saveSnapshotAct, SIGNAL(triggered()), this, SLOT(saveSnapshot()));
for (int i = 0; i < MAXRECENTFILES; ++i) {
@ -472,7 +478,7 @@ void MainWindow::createActions()
setCustomizeAct = new QAction(tr("&Options..."),this);
connect(setCustomizeAct, SIGNAL(triggered()), this, SLOT(setCustomize()));
setSaveMaskObjAct = new QAction(tr("&Options Save Obj"),this);
setSaveMaskObjAct = new QAction(tr("Ob&j saving options..."),this);
connect(setSaveMaskObjAct, SIGNAL(triggered()), this, SLOT(setSaveMaskObj()));
//////////////Action Menu About ///////////////////////////////////////////////////////////////////////////
@ -532,7 +538,9 @@ void MainWindow::createMenus()
lightingModeMenu->addAction(setDoubleLightingAct);
lightingModeMenu->addAction(setFancyLightingAct);
colorModeMenu=renderMenu->addMenu(tr("Color"));
colorModeMenu = renderMenu->addMenu(tr("Color"));
shadersMenu = renderMenu->addMenu(tr("Shaders"));
shadersMenu->addAction("None",this,SLOT(applyRenderMode()));
//////////////////// Menu View ////////////////////////////////////////////////////////////////////////////
viewMenu = menuBar()->addMenu(tr("&View"));
@ -606,7 +614,7 @@ void MainWindow::loadPlugins()
MeshRenderInterface *iRender = qobject_cast<MeshRenderInterface *>(plugin);
if (iRender)
addToMenu(iRender->actions(), renderMenu, SLOT(applyRenderMode()));
addToMenu(iRender->actions(), shadersMenu, SLOT(applyRenderMode()));
MeshEditInterface *iEdit = qobject_cast<MeshEditInterface *>(plugin);
if (iEdit)

View File

@ -24,6 +24,12 @@
History
$Log$
Revision 1.54 2005/12/22 20:01:23 glvertex
- Added support for more than one shader
- Some methods renamed
- Adjusted some accelerators keys
- Fixed up minor visual issues
Revision 1.53 2005/12/22 15:18:19 mariolatronico
passed GLA() to applyFilter in order to use log
@ -485,16 +491,29 @@ void MainWindow::applyEditMode()
void MainWindow::applyRenderMode()
{
QAction *action = qobject_cast<QAction *>(sender()); // find the action which has sent the signal
if(action->text() == tr("None"))
{
GLA()->log.Log(GLLogStream::Info,"No Shader");
GLA()->setRenderer(0,0); //vertex and fragment programs not supported
return;
}
// Make the call to the plugin core
MeshRenderInterface *iRenderTemp = qobject_cast<MeshRenderInterface *>(action->parent());
iRenderTemp->Init(action,*(GLA()->mm),GLA());
if(iRenderTemp->isSupported()) {
GLA()->setRender(iRenderTemp);
} else {
GLA()->setRender(0); //vertex and fragment programs not supported
if(iRenderTemp->isSupported())
{
GLA()->setRenderer(iRenderTemp,action);
GLA()->log.Log(GLLogStream::Info,"%s",action->text().toLocal8Bit().constData()); // Prints out action name
}
GLA()->log.Log(GLLogStream::Info,"%s",action->text().toLocal8Bit().constData()); // Prints out action name
else
{
GLA()->setRenderer(0,0); //vertex and fragment programs not supported
GLA()->log.Log(GLLogStream::Warning,"Shader not supported!");
}
}
@ -504,10 +523,10 @@ void MainWindow::applyColorMode()
MeshColorizeInterface *iColorTemp = qobject_cast<MeshColorizeInterface *>(action->parent());
iColorTemp->Compute(action,*(GLA()->mm ),GLA()->getCurrentRenderMode(), GLA());
if (action->isChecked()) {
action->setChecked(true);
//action->setChecked(true);
GLA()->log.Log(GLLogStream::Info,"Applied colorize %s",action->text().toLocal8Bit().constData());
} else {
action->setChecked(false);
//action->setChecked(false);
GLA()->log.Log(GLLogStream::Info,"Turning off colorize %s",action->text().toLocal8Bit().constData());
}
}
@ -556,15 +575,13 @@ void MainWindow::setLight()
void MainWindow::setDoubleLighting()
{
const RenderMode &rm=GLA()->getCurrentRenderMode();
if (rm.doubleSideLighting) GLA()->setLightMode(false,LDOUBLE);
else GLA()->setLightMode(true,LDOUBLE);
GLA()->setLightMode(!rm.doubleSideLighting,LDOUBLE);
}
void MainWindow::setFancyLighting()
{
const RenderMode &rm=GLA()->getCurrentRenderMode();
if (rm.fancyLighting) GLA()->setLightMode(false,LFANCY);
else GLA()->setLightMode(true,LFANCY);
GLA()->setLightMode(!rm.fancyLighting,LFANCY);
}
void MainWindow::toggleBackFaceCulling()