cambios desconocidos...:

This commit is contained in:
snt 2023-09-05 17:21:57 +02:00
parent 874a669660
commit d2c3682c23
26 changed files with 541 additions and 32 deletions

0
LICENSE.txt Executable file → Normal file
View file

0
puredata/glsl/gain.ctl.pd Executable file → Normal file
View file

0
puredata/glsl/gain.frag Executable file → Normal file
View file

0
puredata/glsl/gain.vert Executable file → Normal file
View file

View file

@ -1,6 +1,6 @@
#N canvas 548 180 611 438 10;
#N canvas -93 562 1280 675 10;
#X declare -path . -path externals;
#N canvas 57 385 240 272 fondo 0;
#N canvas 54 425 240 272 fondo 0;
#X obj -452 -118 color 0 0 0;
#X obj -452 -150 alpha;
#X text -486 -209 Pantalla fondo Negra;
@ -73,7 +73,7 @@
#X connect 27 7 12 0;
#X connect 27 8 10 0;
#X restore -249 -438 pd receive;
#N canvas 814 208 450 333 window 0;
#N canvas 1408 248 1280 675 window 1;
#X msg 809 -348 color 0 0 0;
#X msg 620 -350 print;
#X msg 466 -352 border \$1;
@ -103,6 +103,9 @@
#X msg 161 -350 0 \, destroy;
#X msg 93 -265 frame \$1;
#X obj 55 -290 r fps;
#X obj 682 -129 import gem;
#X obj 680 -175 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X connect 0 0 24 0;
#X connect 1 0 24 0;
#X connect 2 0 24 0;
@ -138,6 +141,7 @@
#X connect 26 0 24 0;
#X connect 27 0 24 0;
#X connect 28 0 27 0;
#X connect 30 0 29 0;
#X restore -175 -438 pd window;
#N canvas 818 219 450 300 layer_5 0;
#X msg -209 -32 1;
@ -246,7 +250,7 @@
#X connect 13 0 14 1;
#X connect 14 0 3 0;
#X restore -28 -379 pd layer_7;
#N canvas 889 319 450 300 layer_8 0;
#N canvas 830 332 450 300 layer_8 1;
#X msg -124 -41 1;
#X msg -177 -42 0;
#X obj -177 -64 select 0;
@ -351,7 +355,7 @@
#X connect 13 0 14 1;
#X connect 14 0 3 0;
#X restore -323 -379 pd layer_3;
#N canvas 879 237 450 300 layer_2 0;
#N canvas 876 250 450 300 layer_2 0;
#X msg -86 -22 1;
#X msg -139 -23 0;
#X obj -139 -45 select 0;
@ -386,7 +390,7 @@
#X connect 13 0 14 1;
#X connect 14 0 3 0;
#X restore -396 -379 pd layer_2;
#N canvas 899 309 450 300 layer_1 0;
#N canvas 830 322 450 300 layer_1 1;
#X obj -253 -28 layer;
#X msg -61 -33 1;
#X msg -114 -34 0;
@ -467,6 +471,8 @@ GPL License;
#X text -474 -219 This patch can not be run alone \, needs the libremediaserver
GUI http://libremediaserver.googlecode.com;
#X obj -388 -164 declare -path . -path externals;
#N canvas 0 93 450 300 layer_9 0;
#X restore 420 -224 pd layer_9;
#X connect 4 0 15 0;
#X connect 4 0 18 0;
#X connect 13 0 14 0;

0
puredata/vera.ttf Executable file → Normal file
View file

0
scripts/install_precise.sh Executable file → Normal file
View file

0
scripts/install_wheezy.sh Executable file → Normal file
View file

0
src/Gem/autogen.sh Executable file → Normal file
View file

0
src/Gem/build/osx-dmginstaller/buildinstaller.sh Executable file → Normal file
View file

0
src/Gem/build/osx-dmginstaller/icon2app Executable file → Normal file
View file

0
src/Gem/src/importGLEW.sh Executable file → Normal file
View file

0
src/Gem/src/openGL/fun2object.sh Executable file → Normal file
View file

0
src/Gem/src/pkgversion.sh Executable file → Normal file
View file

0
src/Gem/tests/all/existence.sh Executable file → Normal file
View file

0
src/Gem/tests/runtests.sh Executable file → Normal file
View file

View file

@ -73,6 +73,7 @@ libreMediaServer::libreMediaServer(QStringList args, QWidget *parent)
qDebug() << VERSION;
qDebug() << COPYRIGHT;
qDebug() << LICENSE;
// Init Unix Local Sockets
QFile socket(SOCKET);
if (socket.exists())
@ -97,6 +98,7 @@ libreMediaServer::libreMediaServer(QStringList args, QWidget *parent)
connect(ui.actionSave_conf, SIGNAL(triggered()), this, SLOT(saveFile()));
connect(ui.actionChange_Media_Path, SIGNAL(triggered()), this, SLOT(ChangeMediaPath()));
connect(ui.actionLaunch_OLA_Setup,SIGNAL(triggered()),this, SLOT(olasetup()));
connect(ui.actionSettings,SIGNAL(triggered()),this, SLOT(settings()));
// Start PD
pdstart();
// Load the configuration
@ -106,6 +108,13 @@ libreMediaServer::libreMediaServer(QStringList args, QWidget *parent)
connect(m_olaInterface->m_msex->m_timer, SIGNAL(timeout()), this, SLOT(sendFrame()));
connect(m_olaInterface, SIGNAL(sendDmx(int,int,int)), this, SLOT(receiveDMX(int,int,int)));
connect(m_olaInterface, SIGNAL(newFile(QString)), this, SLOT(newFile(QString)));
// Load the last configuration
settingswindow = new settingsDialog();
connect(settingswindow, SIGNAL(pathChanged(QString)), m_olaInterface, SLOT(setPath(QString)));
connect(settingswindow, SIGNAL(dmxChanged(int,int,int)), m_olaInterface->worker,SLOT(dmxConf(int,int,int)));
settingswindow->readXML(); // Read the last configuration file
m_olaInterface->open(); // Start the dmx reading
}
///////////////////////////////////////////////////////////////////
@ -197,6 +206,12 @@ void libreMediaServer::ChangeMediaPath()
m_olaInterface->setPath(file);
}
void libreMediaServer::settings(){
settingswindow->show();
settingswindow->exec(); //retorno de error
}
///////////////////////////////////////////////////////////////////
// Open/save Subroutines. The real work.
///////////////////////////////////////////////////////////////////

View file

@ -39,6 +39,7 @@
#include "MSEXDefines.h"
#include "ui_libremediaserver.h"
#include "olainterface.h"
#include "settingsdialog.h"
#define VERSION "LibreMediaServer Version 0.05-1"
#define COPYRIGHT "(C) 2012-2013 Santi Norena libremediaserver@gmail.com"
@ -77,8 +78,9 @@ protected:
int m_startvideo; // Counter starts video engine. Debugging purpose
bool m_gui;
private:
settingsDialog *settingswindow; // The settings dialog
private:
void errorsending();
void pdstart();
@ -118,6 +120,7 @@ private slots:
void openFile();
void saveFile();
void ChangeMediaPath();// Change the path to medias
void settings(); // Open the settings window
};
#endif // LIBREMEDIASERVER_H

View file

@ -11,7 +11,8 @@ HEADERS += libremediaserver.h \
msex.h \
CITPDefines.h \
MSEXDefines.h \
olainterface.h
olainterface.h \
settingsdialog.h
SOURCES += main.cpp \
libremediaserver.cpp \
@ -19,10 +20,12 @@ SOURCES += main.cpp \
PacketCreator.cpp \
PeerInformationSocket.cpp \
msex.cpp \
olainterface.cpp
olainterface.cpp \
settingsdialog.cpp
FORMS += \
libremediaserver.ui
libremediaserver.ui \
settingsdialog.ui
#INCLUDEPATH += ./

View file

@ -451,6 +451,7 @@
<addaction name="actionSave_conf"/>
<addaction name="actionChange_Media_Path"/>
<addaction name="actionLaunch_OLA_Setup"/>
<addaction name="actionSettings"/>
</widget>
<addaction name="menuFile"/>
</widget>
@ -497,6 +498,11 @@
<string>OLA Setup</string>
</property>
</action>
<action name="actionSettings">
<property name="text">
<string>Settings</string>
</property>
</action>
</widget>
<resources/>
<connections/>

37
src/olainterface.cpp Executable file → Normal file
View file

@ -4,6 +4,7 @@
olaWorker is the threading class that reads raw DMX from ola daemon and save it into a buffer ordered in layers
olaInterface controls olaWorker and translates DMX values received from olaWorker into orders to RenderingManager and Source
*/
#include "olainterface.h"
olaInterface::olaInterface()
@ -12,12 +13,12 @@ olaInterface::olaInterface()
m_thread = NULL;
worker = new olaWorker();
Q_CHECK_PTR(worker);
readDataFromXML(); // Read the dmx setting from dmx.xml
// readDataFromXML(); // Read the dmx setting from dmx.xml
connect (worker, SIGNAL(dmx(int,int,int)), this, SLOT(dmx(int,int,int)), Qt::QueuedConnection); // The DMX values.
initMediaLibrary(); // Init the media library reading the files in m_pathmedia
m_msex = new msex(this); // Init the CITP/MSEx protocol
Q_CHECK_PTR(m_msex);
open();
// open();
}
olaInterface::~olaInterface()
@ -49,6 +50,7 @@ void olaInterface::close()
// - The number of sources/layers controlled by DMX
// - The first DMX channel of each source/layer
// - The universe to bind in OLA
// All this is being moved to settingsDialog Class
void olaInterface::readDataFromXML() {
QFile* xmlFile = new QFile("dmx.xlm");
@ -319,6 +321,7 @@ olaWorker::olaWorker() {
m_dmx[i][j] = 0;
}
}
m_layersNumber = 8; // hardcoded at the moment. This should be variable --> the gui must be dynamic...
}
// --- DECONSTRUCTOR ---
@ -407,21 +410,19 @@ void olaWorker::RegisterComplete(const string &error) {
qWarning() << "olaWorker|" << "Register command failed" << QString::fromStdString(error);
}
}
/*
* Slot for change the dmx configuration
*/
void olaWorker::dmxConf(int layer, int address, int universe) {
dmxSettings temp;
temp.address = address;
temp.universe = universe;
m_settings.replace(layer, temp);
// If the universe is not in the list, append it.
if(!m_universe.contains(universe)) {
m_universe.append(universe);
}
}
////////////////////////////////////////////////////////////////////////////////////////////
/* We will need some GUI interaction from the user for settings. We will need:
* - Change the path to the medias
* - Change the DMX address of each layer
* - Change the universe to bind in ola
* - Write and read different xml configuration files for different setups
* - Start and stop the dmx reading
void savesetttingtoxml{
// Habrá que salvar las settings en algún sitio
}
void opensettings{
Posibilidad de abrir otro archivo de configuración
}
*/

6
src/olainterface.h Executable file → Normal file
View file

@ -75,6 +75,9 @@ private:
bool CheckDataLoss();
void RegisterComplete(const string &error); // Called after completing the register
public slots:
void dmxConf(int layer, int address, int universe);
protected slots:
void olastart(); // Starts the conexion with olad. olad must be running before this
@ -100,7 +103,7 @@ public:
olaWorker *worker; // The thread of connection with ola.
inline void setPath(QString path) {m_pathmedia = path;} // Set the path to the root media path. The media files are inside this folder tree.
inline QString getPath () {return m_pathmedia;} // Get the path to the medias folder tree.
msex *m_msex;
@ -124,6 +127,7 @@ public slots:
void dmx(int layer, int channel, int value); // Connected with signal dmx from olaWorker. This is the horsepower of all this. Converts DMX orders
// into orders to RenderingManager and Source. Mantains updated the videolayer struct.
inline void setPath(QString path) {m_pathmedia = path;} // Set the path to the root media path. The media files are inside this folder tree.
signals:
void sendDmx(int layer,int channel, int value);

98
src/settingsdialog.cpp Normal file
View file

@ -0,0 +1,98 @@
#include <QFileDialog>
#include <QFile>
#include <QXmlStreamReader>
#include <QMessageBox>
#include "settingsdialog.h"
#include "ui_settingsdialog.h"
settingsDialog::settingsDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::settingsDialog)
{
ui->setupUi(this);
readXML();
connect(ui->choosePathButton,SIGNAL(clicked(QAbstractButton*)), this, SLOT(changeMediaPath()));
}
settingsDialog::~settingsDialog()
{
delete ui;
}
void settingsDialog::readXML() {
// QFile xmlFile("conf.xml");
QFile* xmlFile = new QFile("conf.xlm");
Q_CHECK_PTR(xmlFile);
if (!xmlFile->open(QIODevice::ReadOnly | QIODevice::Text)) {
QMessageBox::critical(NULL,"Load XML File Problem",
"Couldn't open configuration file",
QMessageBox::Ok);
//return;
}
QXmlStreamReader* xmlReader = new QXmlStreamReader(xmlFile);
//Parse the XML until we reach end of it
while(!xmlReader->atEnd() && !xmlReader->hasError()) {
// Read next element
QXmlStreamReader::TokenType token = xmlReader->readNext();
//If token is just StartDocument - go to next
if(token == QXmlStreamReader::StartDocument) {
continue;
}
//If token is StartElement - read it
if(token == QXmlStreamReader::StartElement) {
if(xmlReader->name() == "windowSettings") {
int version = xmlReader->attributes().value("fileVersion").toLocal8Bit().toInt();
if(version == 1) {
ui->winpositionx->setValue(xmlReader->attributes().value("XPos").toLocal8Bit().toInt());
ui->winpositiony->setValue(xmlReader->attributes().value("YPos").toLocal8Bit().toInt());
ui->winsizex->setValue(xmlReader->attributes().value("XSize").toLocal8Bit().toInt());
ui->winsizey->setValue(xmlReader->attributes().value("YSize").toLocal8Bit().toInt());
ui->fps->setValue(xmlReader->attributes().value("FPS").toLocal8Bit().toInt());
continue;
}
}
int counter = 0;
if(xmlReader->name() == "dmxSettings") {
int version = xmlReader->attributes().value("fileVersion").toLocal8Bit().toInt();
if(version == 1) {
// worker->m_layersNumber = xmlReader->attributes().value("layersNumber").toLocal8Bit().toInt();
emit pathChanged(xmlReader->attributes().value("path").toLocal8Bit());
continue;
}
}
// if (worker->m_layersNumber > MAX_SOURCE_DMX) {
// worker->m_layersNumber = MAX_SOURCE_DMX;
// }
QString add = "layer";
add.append(QString("%1").arg(counter));
if((xmlReader->name() == add)/* && (counter < worker->m_layersNumber)*/) {
emit dmxChanged(counter, (xmlReader->attributes().value("dmx").toLocal8Bit().toInt() - 1),xmlReader->attributes().value("universe").toLocal8Bit().toInt());
}
counter++;
}
}
if(xmlReader->hasError()) {
QMessageBox::critical(NULL,"xmlFile.xml Parse Error",xmlReader->errorString(), QMessageBox::Ok);
}
//close reader and flush file
xmlReader->clear();
xmlFile->close();
delete xmlReader;
delete xmlFile;
}
void settingsDialog::changeMediaPath(){
QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::Directory);
QStringList fileNames;
if (!dialog.exec())
return;
fileNames = dialog.selectedFiles();
QString file = fileNames.at(0);
ui->currentPath->clear();
ui->currentPath->setText(file);
emit pathChanged(file);
// m_olaInterface->setPath(file); //Setear en olaInterface
}

32
src/settingsdialog.h Normal file
View file

@ -0,0 +1,32 @@
#ifndef SETTINGSDIALOG_H
#define SETTINGSDIALOG_H
#include <QDialog>
#define LMS_CONF_FILE "lmsconf.xml"
namespace Ui {
class settingsDialog;
}
class settingsDialog : public QDialog
{
Q_OBJECT
public:
explicit settingsDialog(QWidget *parent = 0);
~settingsDialog();
void readXML();
private:
Ui::settingsDialog *ui;
signals:
void pathChanged(QString);
void dmxChanged(int layer, int address, int universe);
private slots:
void changeMediaPath();
};
#endif // SETTINGSDIALOG_H

340
src/settingsdialog.ui Normal file
View file

@ -0,0 +1,340 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>settingsDialog</class>
<widget class="QDialog" name="settingsDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>615</width>
<height>341</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="geometry">
<rect>
<x>260</x>
<y>300</y>
<width>341</width>
<height>32</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
<property name="centerButtons">
<bool>true</bool>
</property>
</widget>
<widget class="QTabWidget" name="tabWidget">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>591</width>
<height>281</height>
</rect>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>General</string>
</attribute>
<widget class="QLineEdit" name="currentPath">
<property name="geometry">
<rect>
<x>10</x>
<y>20</y>
<width>371</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>Path to medias</string>
</property>
</widget>
<widget class="QDialogButtonBox" name="choosePathButton">
<property name="geometry">
<rect>
<x>390</x>
<y>20</y>
<width>91</width>
<height>31</height>
</rect>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Open</set>
</property>
</widget>
<widget class="QTextEdit" name="textEdit">
<property name="geometry">
<rect>
<x>10</x>
<y>60</y>
<width>561</width>
<height>121</height>
</rect>
</property>
<property name="html">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Warning! &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Changing this will reload the library and will make the thumbnails for all the medias. This will take a while.&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Do not use in live!&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;You are warned.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</widget>
<widget class="QWidget" name="Video">
<property name="enabled">
<bool>true</bool>
</property>
<property name="accessibleName">
<string>Video</string>
</property>
<attribute name="title">
<string>Video</string>
</attribute>
<widget class="QLabel" name="winposLabel">
<property name="geometry">
<rect>
<x>30</x>
<y>130</y>
<width>121</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Window Position</string>
</property>
</widget>
<widget class="QSpinBox" name="winpositionx">
<property name="geometry">
<rect>
<x>20</x>
<y>90</y>
<width>55</width>
<height>27</height>
</rect>
</property>
<property name="maximum">
<number>5000</number>
</property>
</widget>
<widget class="QSpinBox" name="winsizex">
<property name="geometry">
<rect>
<x>20</x>
<y>40</y>
<width>55</width>
<height>27</height>
</rect>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::UpDownArrows</enum>
</property>
<property name="maximum">
<number>5000</number>
</property>
</widget>
<widget class="QSpinBox" name="winpositiony">
<property name="geometry">
<rect>
<x>80</x>
<y>90</y>
<width>55</width>
<height>27</height>
</rect>
</property>
<property name="maximum">
<number>5000</number>
</property>
</widget>
<widget class="QSpinBox" name="winsizey">
<property name="geometry">
<rect>
<x>80</x>
<y>40</y>
<width>55</width>
<height>27</height>
</rect>
</property>
<property name="maximum">
<number>5000</number>
</property>
</widget>
<widget class="QLabel" name="winsizeLabel">
<property name="geometry">
<rect>
<x>30</x>
<y>70</y>
<width>101</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Window Size</string>
</property>
</widget>
<widget class="QDialogButtonBox" name="restartButton">
<property name="geometry">
<rect>
<x>340</x>
<y>40</y>
<width>81</width>
<height>31</height>
</rect>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Reset</set>
</property>
</widget>
<widget class="QSpinBox" name="fps">
<property name="geometry">
<rect>
<x>20</x>
<y>180</y>
<width>59</width>
<height>31</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="fpsLabel">
<property name="geometry">
<rect>
<x>90</x>
<y>180</y>
<width>121</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>FPS</string>
</property>
</widget>
</widget>
<widget class="QWidget" name="DMX">
<attribute name="title">
<string>DMX</string>
</attribute>
<widget class="QSpinBox" name="universe">
<property name="geometry">
<rect>
<x>30</x>
<y>20</y>
<width>59</width>
<height>31</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="labelUniverse">
<property name="geometry">
<rect>
<x>100</x>
<y>20</y>
<width>101</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>OLA Universe</string>
</property>
</widget>
<widget class="QWidget" name="horizontalLayoutWidget">
<property name="geometry">
<rect>
<x>10</x>
<y>90</y>
<width>516</width>
<height>131</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QSpinBox" name="dmx1"/>
</item>
<item>
<widget class="QSpinBox" name="dmx2"/>
</item>
<item>
<widget class="QSpinBox" name="dmx3"/>
</item>
<item>
<widget class="QSpinBox" name="dmx4"/>
</item>
<item>
<widget class="QSpinBox" name="dmx5"/>
</item>
<item>
<widget class="QSpinBox" name="dmx6"/>
</item>
<item>
<widget class="QSpinBox" name="dmx7"/>
</item>
<item>
<widget class="QSpinBox" name="dmx8"/>
</item>
</layout>
</widget>
<widget class="QLabel" name="labeDMXaddress">
<property name="geometry">
<rect>
<x>170</x>
<y>60</y>
<width>101</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>DMX Address</string>
</property>
</widget>
</widget>
</widget>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>settingsDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>settingsDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View file

@ -16,10 +16,11 @@ v0.05 video:
Necesarios:
+ ¿Cómo transmitir el dmx a Pure Data? --> Unix Domain Socket parece lo mejor. Habría que hacer external en PD?
+ Mover ola2pd a la parte C++ (importar de glmixer-dmx)
+ Mover fileselector a la parte C++ (importar de glmixer-dmx)
+ Crear base de datos al inicio en vez de leer ficheros del disco. Generar thumbs --> Importar de glmixer-dmx
+ Mover ola2pd a la parte C++
+ Mover fileselector a la parte C++
+ Crear base de datos al inicio en vez de leer ficheros del disco.
+ Cambiar archivo de configuracion a xml (importar de glmixer-dmx)
- Añadir shaders, cambiar objetos Gem por uniform glsl. Alpha, chroma, ...
- Añadir la configuración de la ventana al archivo de configuración xlm
- Documentación en inglés