void SoundFX::loadImpl() { Ogre::LogManager* pLogManager = Ogre::LogManager::getSingletonPtr(); // Ruta al archivo. Ogre::FileInfoListPtr info; info = Ogre::ResourceGroupManager::getSingleton().findResourceFileInfo(mGroup, mName); for (Ogre::FileInfoList::iterator i = info->begin(); i != info->end(); ++i) { _path = i->archive->getName() + "/" + i->filename; } // Archivo no encontrado... if (_path == "") { pLogManager->logMessage("SoundFX::loadImpl() Imposible encontrar el recurso."); throw (Ogre::Exception(Ogre::Exception::ERR_FILE_NOT_FOUND, "Imposible encontrar el recurso", "SoundFX::loadImpl()")); } // Cargar el efecto de sonido. if ((_pSound = Mix_LoadWAV(_path.c_str())) == NULL) { pLogManager->logMessage("SoundFX::loadImpl() Imposible cargar el efecto."); throw (Ogre::Exception(Ogre::Exception::ERR_INTERNAL_ERROR, "Imposible cargar el efecto", "SoundFX::loadImpl()")); } // Cálculo del tamaño del recurso de sonido. std::ifstream stream; char byteBuffer; stream.open(_path.c_str(), std::ios_base::binary); while (stream >> byteBuffer) { ++_size; } stream.close(); }
//--------------------------------------------------------------------- int MilkshapePlugin::Execute (msModel* pModel) { // Do nothing if no model selected if (!pModel) return -1; Ogre::LogManager logMgr; logMgr.createLog("msOgreExporter.log", true); logMgr.logMessage("OGRE Milkshape Exporter Log"); logMgr.logMessage("---------------------------"); Ogre::ResourceGroupManager resGrpMgr; // // check, if we have something to export // if (msModel_GetMeshCount (pModel) == 0) { ::MessageBox (NULL, "The model is empty! Nothing exported!", "OGRE Export", MB_OK | MB_ICONWARNING); return 0; } if (!showOptions()) return 0; if (exportMesh) { doExportMesh(pModel); } return 0; }
// Fachada de MixFadeOutMusic() void Track::fadeOut (int ms) { Ogre::LogManager* pLogManager = Ogre::LogManager::getSingletonPtr(); if (Mix_FadeOutMusic(ms) == -1) { pLogManager->logMessage("Track::fadeIn() Error al aplicar efecto de sonido."); throw (Ogre::Exception(Ogre::Exception::ERR_INTERNAL_ERROR, "Imposible aplicar suavizado de sonido", "Track::fadeIn()")); } }
int SoundFX::play(int loop) { int channel; Ogre::LogManager* pLogManager = Ogre::LogManager::getSingletonPtr(); // Si el primer parámetro es un -1, maneja nuevos canales para efectos simultáneos if ((channel = Mix_PlayChannel(1, _pSound, loop)) == -1) { pLogManager->logMessage("SoundFX::play() Imposible reproducir el efecto de sonido."); throw (Ogre::Exception(Ogre::Exception::ERR_INTERNAL_ERROR, "Imposible reproducir el efecto de sonido", "SoundFX::play()")); } return channel; }
// Carga del recurso. void Track::loadImpl() { Ogre::LogManager* pLogManager = Ogre::LogManager::getSingletonPtr(); // Ruta al archivo. Ogre::FileInfoListPtr info; info = Ogre::ResourceGroupManager::getSingleton().findResourceFileInfo(mGroup, mName); for (Ogre::FileInfoList::const_iterator i = info->begin(); i != info->end(); ++i) { _path = i->archive->getName() + "/" + i->filename; } // Archivo no encontrado... if (_path == "") { pLogManager->logMessage("Track::loadImpl() Imposible cargar el recurso de sonido."); throw (Ogre::Exception(Ogre::Exception::ERR_FILE_NOT_FOUND, "Archivo no encontrado", "Track::loadImpl()")); } cout << "\n\nPath: " << _path << "\n\n" << endl; // Cargar el recurso de sonido. if ((_pTrack = Mix_LoadMUS(_path.c_str())) == NULL) { pLogManager->logMessage("Track::loadI() Imposible cargar el recurso de sonido."); throw (Ogre::Exception(Ogre::Exception::ERR_FILE_NOT_FOUND, "Archivo no encontrado", "Track::loadI()")); } // Cálculo del tamaño del recurso de sonido. std::ifstream stream; char byteBuffer; stream.open(_path.c_str(), std::ios_base::binary); while (stream >> byteBuffer) { _size++; } stream.close(); }
void Track::play(int loop) { Ogre::LogManager* pLogManager = Ogre::LogManager::getSingletonPtr(); // Estaba pausada? if(Mix_PausedMusic()) { Mix_ResumeMusic(); // Reanudación. } // Si no, se reproduce desde el principio. else { if (Mix_PlayMusic(_pTrack, loop) == -1) { pLogManager->logMessage("Track::play() Error al reproducir el recurso de sonido."); throw (Ogre::Exception(Ogre::Exception::ERR_FILE_NOT_FOUND, "Imposible reproducir el recurso de sonido", "Track::play()")); } } }
/**************************************************************************** ** ** Copyright (C) 2014 ** ** This file is generated by the Magus toolkit ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ****************************************************************************/ // Include #include "mainwindow.h" #include "Editor_dockwidget.h" #include "constants.h" #include "sme_asset_material.h" #include "sme_node_material.h" #include "sme_asset_technique.h" #include "sme_node_technique.h" #include "sme_asset_pass.h" #include "sme_node_pass.h" #include "sme_asset_texture_unit.h" #include "sme_node_texture_unit.h" //****************************************************************************/ EditorDockWidget::EditorDockWidget(QString title, MainWindow* parent, Qt::WindowFlags flags) : QDockWidget (title, parent, flags), mParent(parent) { mInnerMain = new QMainWindow(); setWidget(mInnerMain); // Perform standard functions createActions(); createMenus(); createToolBars(); // Create the node editor widget. mNodeEditor = new Magus::QtNodeEditor(this); mNodeEditor->setMenuSelectionToCompoundEnabled(false); // Enabling this makes it a bit more complicated mNodeEditor->setMenuExpandCompoundsEnabled(false); // No compounds are used connect(mNodeEditor, SIGNAL(nodeRemoved(QtNode*)), this, SLOT(nodeDeleted())); connect(mNodeEditor, SIGNAL(nodeSelected(QtNode*)), this, SLOT(nodeSelected(QtNode*))); mInnerMain->setCentralWidget(mNodeEditor); mMaterialNode = 0; } //****************************************************************************/ EditorDockWidget::~EditorDockWidget(void) { } //****************************************************************************/ void EditorDockWidget::createActions(void) { mMaterialHToolbarAction = new QAction(QIcon(ICON_MATERIAL), QString("Add a material node to the editor"), this); connect(mMaterialHToolbarAction, SIGNAL(triggered()), this, SLOT(doMaterialHToolbarAction())); mTechniqueHToolbarAction = new QAction(QIcon(ICON_TECHNIQUE), QString("Add a technique node to the editor"), this); connect(mTechniqueHToolbarAction, SIGNAL(triggered()), this, SLOT(doTechniqueHToolbarAction())); mPassHToolbarAction = new QAction(QIcon(ICON_PASS), QString("Add a pass node to the editor"), this); connect(mPassHToolbarAction, SIGNAL(triggered()), this, SLOT(doPassHToolbarAction())); mTextureHToolbarAction = new QAction(QIcon(ICON_TEXTURE), QString("Add a texture unit node to the editor"), this); connect(mTextureHToolbarAction, SIGNAL(triggered()), this, SLOT(doTextureHToolbarAction())); mCogHToolbarAction = new QAction(QIcon(ICON_COG), QString("Generate material"), this); connect(mCogHToolbarAction, SIGNAL(triggered()), this, SLOT(doCogHToolbarAction())); } //****************************************************************************/ void EditorDockWidget::createMenus(void) { } //****************************************************************************/ void EditorDockWidget::createToolBars(void) { mHToolBar = new QToolBar(); mInnerMain->addToolBar(Qt::TopToolBarArea, mHToolBar); mHToolBar->setMinimumHeight(TB_ICON_AND_SPACING); mHToolBar->setMinimumWidth(1200); mHToolBar->addAction(mMaterialHToolbarAction); mHToolBar->addAction(mTechniqueHToolbarAction); mHToolBar->addAction(mPassHToolbarAction); mHToolBar->addAction(mTextureHToolbarAction); mHToolBar->addAction(mCogHToolbarAction); } //****************************************************************************/ void EditorDockWidget::doMaterialHToolbarAction(void) { // Add a material node; only 1 is allowed if (!mMaterialNode) { mMaterialNode = new Magus::QtNodeMaterial(NODE_TITLE_MATERIAL); mNodeEditor->addNode(mMaterialNode); } } //****************************************************************************/ void EditorDockWidget::doTechniqueHToolbarAction(void) { // Add a technique node Magus::QtNodeTechnique* techniqueNode = new Magus::QtNodeTechnique(NODE_TITLE_TECHNIQUE); mNodeEditor->addNode(techniqueNode); } //****************************************************************************/ void EditorDockWidget::doPassHToolbarAction(void) { // Add a pass node Magus::QtNodePass* passNode = new Magus::QtNodePass(NODE_TITLE_PASS); mNodeEditor->addNode(passNode); } //****************************************************************************/ void EditorDockWidget::doTextureHToolbarAction(void) { // Add a texture unit node Magus::QtNodeTextureUnit* textureUnitNode = new Magus::QtNodeTextureUnit(NODE_TITLE_TEXTURE_UNIT); mNodeEditor->addNode(textureUnitNode); } //****************************************************************************/ void EditorDockWidget::doCogHToolbarAction(void) { if (!mMaterialNode) return; if (mMaterialNode->getMaterialName().isEmpty()) return; // ---------------------------------------- Create a material ---------------------------------------- Ogre::LogManager* logManager = Ogre::LogManager::getSingletonPtr(); Ogre::MaterialManager* materialManager = Ogre::MaterialManager::getSingletonPtr(); Ogre::String materialName = mMaterialNode->getMaterialName().toStdString(); // Convert to std format logManager->logMessage("SME: create Ogre material: " + materialName); Ogre::MaterialPtr material = materialManager->create(materialName, "General"); // Remark: Sceneblending is done for each pass individually, although it is defined on material level // ---------------------------------------- Add the technique ---------------------------------------- Magus::QtNode* node = mMaterialNode->getNodeConnectedToPort(PORT_TECHNIQUE_OUT); if (!node) { logManager->logMessage("SME: No technique node available"); return; } Magus::QtNodeTechnique* techniqueNode = static_cast<Magus::QtNodeTechnique*>(node); material->removeAllTechniques(); Ogre::Technique* technique = material->createTechnique(); technique->removeAllPasses(); logManager->logMessage("SME: Technique created" + Ogre::StringConverter::toString(material->getNumTechniques())); // ---------------------------------------- Add the passes ---------------------------------------- Magus::QtNodePass* passNode; Magus::QtNodeTextureUnit* textureUnitNode; Ogre::Pass* pass; Ogre::TextureUnitState* textureUnit; for (unsigned int i = 1; i < 5; ++i) { node = techniqueNode->getNodeConnectedToPort(PORT_PASS_OUT, i); // node with the same name if (node) { passNode = static_cast<Magus::QtNodePass*>(node); pass = technique->createPass(); pass->removeAllTextureUnitStates(); logManager->logMessage("SME: Pass on port nr. " + Ogre::StringConverter::toString(i) + " created"); propagatePassNodeData(passNode, pass); // ---------------------------------------- Add the texture units ---------------------------------------- for (unsigned int j = 1; j < 9; ++j) { node = passNode->getNodeConnectedToPort(PORT_TEXTURE_OUT, j); if (node) { logManager->logMessage("SME: Texture unit on port nr. " + Ogre::StringConverter::toString(j) + " of Pass port nr. " + Ogre::StringConverter::toString(i) + " created"); textureUnitNode = static_cast<Magus::QtNodeTextureUnit*>(node); textureUnit = pass->createTextureUnitState(); propagateTextureUnitNodeData(textureUnitNode, textureUnit); } } } } // Assign the material to the ogrehead material->compile(); material->load(); mParent->getOgreManager()->getOgreWidget(1)->mEntity->setMaterial(material); }
bool GraphicsController::onInit(Ogre::SceneManager* scnMgr, Ogre::Viewport* viewport, Ogre::Camera* camera, Ogre::int32 windowWidth, Ogre::int32 windowHeight) { _cam = camera; _scnMgr = scnMgr; _vp = viewport; //_dynLightsManager = packet->workspaceCtrl->getZWorkspace()->getWorldController()->getDynamicLightManager(); //generate random textures for(size_t i = 0; i < NUM_OF_BANDS * 4; i++) { _SHC_R[i] = 0.0f; _SHC_G[i] = 0.0f; _SHC_B[i] = 0.0f; } Ogre::LogManager* lm = Ogre::LogManager::getSingletonPtr(); lm->logMessage(Ogre::LML_TRIVIAL, "In GraphicsController::onInit()"); lm->logMessage(Ogre::LML_NORMAL, "Adding compositor bloom"); //First build the lights. _lightDir.normalise(); Vector3 lightdir(0.0, -0.5, 0.1); lightdir.normalise(); lightdir *= -1; _scnMgr->setAmbientLight(Ogre::ColourValue(0.5f, 0.5f, 0.5f)); light = _scnMgr->createLight("terrainLight"); light->setType(Light::LT_DIRECTIONAL); light->setCastShadows(true); light->setShadowFarClipDistance(256); Ogre::ColourValue fadeColour(1.0, 1.0, 1.0); _scnMgr->setFog(Ogre::FOG_NONE); _initBackgroundHdr(); _vp->setBackgroundColour(fadeColour); Ogre::CompositorManager& compMgr = Ogre::CompositorManager::getSingleton(); _hdrLogic = new HDRLogic(); compMgr.registerCompositorLogic("HDR", _hdrLogic); _ogreHdr = CompositorManager::getSingleton().addCompositor(_vp, "HDR", 0); Ogre::CompositorManager::getSingleton().setCompositorEnabled(_vp, "HDR", true); /* //setup the HDR options. auto sharedParams = Ogre::GpuProgramManager::getSingleton().getSharedParameters("HdrSharedParams"); ZGame::Graphics::GraphicsOptions gfxOptions; sharedParams->setNamedConstant("MIDDLE_GREY", gfxOptions.hdr_middle_grey); sharedParams->setNamedConstant("BRIGHT_LIMITER", gfxOptions.hdr_bright_limiter); sharedParams->setNamedConstant("FUDGE", gfxOptions.hdr_fudge_factor); */ _deferredGfx->initialize(_cam, windowWidth, windowHeight); //addTextureDebugOverlay(_deferredGfx->getLightBufferTex()->getName(), 1); //Ogre::OverlayManager::getSingleton().getByName("PRJZ/DebugOverlay")->show(); //addTextureDebugOverlay(_deferredGfx->getGBuffer1Tex()->getName(), 0); //addTextureDebugOverlay(_rtLum4->getName(), 0); //addTextureDebugOverlay(_deferredGfx->getNormalDepthTex()->getName(), 0); //Overlay* debugOverlay = OverlayManager::getSingleton().getByName("PRJZ/DebugOverlay"); //debugOverlay->show(); //addTextureDebugOverlay(_deferredGfx->getLightBufferTex()->getName(), 0); //addTextureDebugOverlay(_ssaoBlurY->getName(), 0); //addTextureDebugOverlay(_ssaoTarget->getName(), 0); //addTextureDebugOverlay(_hfaoTarget->getName(), 0); //addTextureDebugOverlay(_hfaoBlurY->getName(), 0); //addTextureDebugOverlay(_wendlandFilter->getName(), 0); //addTextureDebugOverlay(_ssaoTarget->getName(), 0); //addTextureDebugOverlay(_bitwiseLookupTex->getName(), 0); //addTextureDebugOverlay(_hfaoBlurY, 0); //setup the texture data textures. //setup lighting direction quad /* _directionLightQuad = new Ogre::Rectangle2D(true); _directionLightQuad->setCorners(-1, 1, 1, -1); _directionLightQuad->setBoundingBox(Ogre::AxisAlignedBox::BOX_INFINITE); //was 0xf0 _directionLightQuad->setVisibilityFlags(0xf0); //F**K: for mask see DynamicLightManager. We need to define these globally. _directionLightQuad->setCastShadows(false); _directionLightQuad->setRenderQueueGroup(Ogre::RENDER_QUEUE_6); _directionLightQuad->setVisible(true); _directionLightQuad->setMaterial("PRJZ/DirectionLightBuffer"); _scnMgr->getRootSceneNode()->attachObject(_directionLightQuad); */ return true; }