From 4750da714eed2607b8a8b9d71a40aa2a08bda7e6 Mon Sep 17 00:00:00 2001 From: Alexandre Quessy Date: Fri, 22 May 2026 01:09:26 -0400 Subject: [PATCH 1/7] Update author listings to reflect new lead developer Alexandre Quessy is now listed first as lead developer across all contributor files. Sofian Audry role updated to original lead developer to honor their founding contribution. --- README.md | 4 ++-- docs/informations/CONTRIBUTORS.html | 4 ++-- docs/informations/CONTRIBUTORS.md | 8 ++++---- src/core/MM.cpp | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 57423103..e0b9279d 100644 --- a/README.md +++ b/README.md @@ -42,9 +42,9 @@ or else the menu will not show. Authors ------- -* Sofian Audry: lead developer, user interface designer, project manager. +* Alexandre Quessy: lead developer, release manager, technical writer, project manager. +* Sofian Audry: original lead developer, user interface designer, project manager. * Dame Diongue: developer. -* Alexandre Quessy: release manager, developer, technical writer, project manager. * Mike Latona: user interface designer. * Vasilis Liaskovitis: developer. diff --git a/docs/informations/CONTRIBUTORS.html b/docs/informations/CONTRIBUTORS.html index c0dee2ad..5cc00e3a 100644 --- a/docs/informations/CONTRIBUTORS.html +++ b/docs/informations/CONTRIBUTORS.html @@ -1,9 +1,9 @@

Authors

diff --git a/docs/informations/CONTRIBUTORS.md b/docs/informations/CONTRIBUTORS.md index e3514666..07c7ca70 100644 --- a/docs/informations/CONTRIBUTORS.md +++ b/docs/informations/CONTRIBUTORS.md @@ -1,10 +1,10 @@ ## Authors -- Sofian Audry: lead developer, user interface designer, project - manager. -- Dame Diongue: developer. -- Alexandre Quessy: release manager, developer, technical writer, +- Alexandre Quessy: lead developer, release manager, technical writer, + project manager. +- Sofian Audry: original lead developer, user interface designer, project manager. +- Dame Diongue: developer. - Mike Latona: user interface designer. - Vasilis Liaskovitis: developer. diff --git a/src/core/MM.cpp b/src/core/MM.cpp index 6f8df50f..bae9a734 100644 --- a/src/core/MM.cpp +++ b/src/core/MM.cpp @@ -24,7 +24,7 @@ namespace mmp { const QString MM::APPLICATION_NAME = "MapMap"; const QString MM::VERSION = "0.6.3"; -const QString MM::COPYRIGHT_OWNERS = "Sofian Audry, Dame Diongue, Alexandre Quessy, Mike Latona, Vasilis Liaskovitis"; +const QString MM::COPYRIGHT_OWNERS = "Alexandre Quessy, Sofian Audry, Dame Diongue, Mike Latona, Vasilis Liaskovitis"; const QString MM::ORGANIZATION_NAME = "MapMap"; const QString MM::ORGANIZATION_DOMAIN = "mapmap.info"; const QString MM::FILE_EXTENSION = "mmp"; From 1cdc7c896f141d1df9d6bf8da198fd92068c057a Mon Sep 17 00:00:00 2001 From: Alexandre Quessy Date: Fri, 22 May 2026 02:04:01 -0400 Subject: [PATCH 2/7] Add Art Plus Code sponsor logo to splash screen and About dialog The logo is part of splash.png directly. --- resources/images/logo/splash.png | Bin 12990 -> 20819 bytes src/gui/AboutDialog.cpp | 14 +++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/resources/images/logo/splash.png b/resources/images/logo/splash.png index aebcbd9e660153eae9d482659dd1f24d41423ff7..412185f6697f573830646950283d80025ad53c24 100644 GIT binary patch literal 20819 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 LmJzZV;SlvdGl}4e literal 12990 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 VZ_hAn5dSp+setPixmap(splashPixmap.scaledToWidth(targetWidth, Qt::SmoothTransformation)); + splashLabel->setAlignment(Qt::AlignCenter); + aboutLayout->addWidget(splashLabel); + QTextBrowser *aboutTextBrowser = new QTextBrowser; aboutTextBrowser->setOpenExternalLinks(true); @@ -104,8 +115,9 @@ void AboutDialog::createAboutTab() // Set about text aboutTextBrowser->setText(aboutText); + aboutLayout->addWidget(aboutTextBrowser); - _tabWidget->addTab(aboutTextBrowser, tr("About")); + _tabWidget->addTab(aboutWidget, tr("About")); } void AboutDialog::createChangelogTab() From 723f7c10b88d3c43e1a55bdf80b99ae6f302f549 Mon Sep 17 00:00:00 2001 From: Alexandre Quessy Date: Fri, 22 May 2026 00:21:43 -0400 Subject: [PATCH 3/7] Merge HACKING into CONTRIBUTING.md Consolidate developer documentation into a single file. Also fixes a broken issue tracker link and a typo in the feature requests section. --- CONTRIBUTING.md | 99 +++++++++++++++++++++++++++++++++++++++++++++++-- HACKING | 89 -------------------------------------------- 2 files changed, 96 insertions(+), 92 deletions(-) delete mode 100644 HACKING diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c2f587d3..a17b5376 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -13,6 +13,14 @@ It really helps us efficiently process your contribution! [Report a bug](#bug-reports) [Request a feature](#feature-requests) [Contribute code](#contributing-code) +[Coding style](#coding-style) +[Building](#building) +[Version numbers](#version-numbers) +[Files overview](#files-overview) +[Code management with Git](#code-management-with-git) +[Make a release](#make-a-release) +[Project file version number](#project-file-version-number) +[Qt resources system](#qt-resources-system) ## Report a bug @@ -44,7 +52,7 @@ We already have a formal [roadmap](https://github.com/mapmapteam/mapmap/wiki/Roa Feature requests are therefore mostly a way of us discussing/feeling out together where we'd like the project to go. This can sometimes involve a lot of discussion, as everyone uses MapMap differently. You can join the [MapMap Slack team](https://mapmap.slack.com/) and use the `#feature` channel channel for general questions or discussion about new features -Feature requests are created as Github Issues, just like bugs.t +Feature requests are created as Github Issues, just like bugs. Feature requests are also where code that you or anyone else would like to include in a future pull request is **discussed before being implemented!** If you're writing code to add a new feature that you think would be awesome to have in the core, that's great! But please make sure it's been discussed as a feature request _before_ you submit your pull request, as that increases the chances that your pull request will be accepted. @@ -63,7 +71,7 @@ As with most open source projects, the fastest way to get a feature made is to m We are more likely to accept your code if we feel like it has been discussed already. If you are submitting a new feature, it's best if the feature has been discussed beforehand, either as a [feature request](#feature-requests) or on the [Slack](https://mapmap.slack.com/) or the [mailing list](https://listes.koumbit.net/cgi-bin/mailman/listinfo/mapmap-list-mapmap.info). -- Please read the [code style guidelines](https://github.com/mapmapteam/mapmap/wiki/MapMap-Code-Style) and make sure your code conforms to them. +- Please read the [coding style](#coding-style) section below and make sure your code conforms to it. If in doubt, try and match the style and practices you find in the code you are working with. - Please write _descriptive commit messages_ for each of the commits that you make. They don't have to be in-depth, just a brief summary of what the commit contains. A page describing how well-written commit messages look like can be found [here](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). @@ -88,5 +96,90 @@ This granularity makes the code easier to deal with in cases where some things h - All pull requests that contain changes that need to be in the changelog **must include relevant additions to `NEWS`**. Use previous entries as a guide for style/indentation/etc. - In the comments field on your new pull request, enter a description of everything that the code in the pull request does. - This description is the first contact most of the core team will have with your code, so you should use it to explain why your pull request is awesome and we should accept it. - - Reference any issues or bugs in the [MapMap issue tracker](github.com/openframeworks/openFrameworks/issues) that are relevant to your pull request using `#issue number` notation, eg to reference issue __1234__ write `#1234`. + - Reference any issues or bugs in the [MapMap issue tracker](https://github.com/mapmapteam/mapmap/issues) that are relevant to your pull request using `#issue number` notation, eg to reference issue __1234__ write `#1234`. - Mention if the code has been tested and on what platform. + +## Coding style + +* Indent with 2 spaces +* Opening curly braces on a new line +* Function and method names camelCase, with lowercase first letter +* Class names CamelCase +* Private data members with an underscore as a prefix: `_likeThis` +* File names all lowercase +* Always add spaces between operators such as `+`, `-`, `/`, `*`, casts, etc. (except pointers and references) + +## Building + +See INSTALL. + +You will need to install markdown to build some of the documentation that comes with the software. + +## Version numbers + +We use Semantic Versioning 2.0.0. Given a version number MAJOR.MINOR.PATCH, increment the: +* MAJOR version when you make incompatible API changes, +* MINOR version when you add functionality in a backwards-compatible manner, and +* PATCH version when you make backwards-compatible bug fixes. +See http://semver.org/ + +We want the 0 series to be backward-compatible. That means that a project created with MapMap 0.1 should still work with MapMap 0.99, if we ever get to such a version number. When we will break this backward-compatibilty, we will start the 1 series and provide a migration script. This script might be ran from the command-line or on the Web. The other thing we need to be backward-compatible is the OSC interface. The rest of the software can change. This includes the names of the menu items and the appearance of the user interface. We will try to keep these consistent, though. + +## Files overview + +* CONTRIBUTING.md: What to know to contribute to the project. +* INSTALL: Instructions to build and install the software. +* NEWS: Release notes for each tag. +* README: The short documentation at the root of the project +* TODO: You can put things to do there, or use https://github.com/mapmapteam/mapmap +* images/: Images part of the GUI. +* prototypes/ : Contains prototypes. Please ask the project maintainer before removing some of these. +* docs/informations/*.md Markdown files to generate the About dialog + +## Code management with Git + +* We develop in the develop branch. The master branch is only for the latest tag. +* Create a branch for each new features. Merge it to develop. +* Create release-x.y.z branch for releases. +* If possible, avoid merges, and use git rebase instead. (like in the GNOME projects) +* Create a x.y branch for each x.y major.minor version series. +* For a new release, merge develop to master (or your branch to the major.minor branch if it's a bugfix release) and then tag it there. +* In doubt, ask the release manager. + +## Make a release + +* If it's a new feature, increment minor. If it's bugfix, increment micro. If it's not backward-compatible, increment major. +* Create a release-x.y.z branch +* Verify the version number: + * vim -o VERSION.txt DMGVERSION.txt mapmap.pro docs/Doxyfile NEWS src/core/MM.cpp + * VERSION.txt + * VERSION in MM.cpp + * VERSION in mapmap.pro + * PROJECT_NUMBER in Doxyfile +* Edit NEWS - update with the news for the release you are about to make +* Run ./scripts/update-changelog.sh and commit the changes +* Maybe update the docs/informations/osc.md file and run scripts/update-osc.sh and commit the changes +* Maybe update the docs/informations/CONTRIBUTORS.md file and run scripts/update-contributors.sh and commit the changes +* run make +* run ./sh_build_doc.sh +* merge to master, or to the major.minor branch +* run ./sh_make_tarball.sh +* then untar it, cd to that dir and build the whole thing to see if it works +* git tag x.y.z +* go back to your release branch +* increment micro (or minor) version number in the files above. +* merge into develop. +* keep developing. + +## Project file version number + +* Update its minor number when you introduce new features. +* Update its major number when it's not backward-compatible anymore with its previous versions. +* Generally, we should follow the MapMap version, when new changes are introduced. (no need to increment it otherwise) + +## Qt resources system + +* The mapmap.pro file is where the packaging is done +* The mapmap.qrc file is where we specify which resources are packaged with the app. +* Images are set there. They are then available as a path-like alias such as ":/fullscreen" +* See https://doc.qt.io/qt-6/resources.html diff --git a/HACKING b/HACKING deleted file mode 100644 index a7a77c91..00000000 --- a/HACKING +++ /dev/null @@ -1,89 +0,0 @@ -Contribute to MapMap -==================== - -Build software, doc and the translations ----------------------------------------- -See INSTALL. - -You will need to install markdown to build some of the documentation that comes with the software. - -Coding style ------------- -* indent with 2 spaces -* opening curly braces on a new line -* function and method names camelCase, with lowercase first letter -* class names CamelCase -* private data members with an underscore as a prefix: _likeThis -* file names all lowercase -* always add spaces between operators such as +, -, /, * casts, etc. (except pointers and references) - -Version numbers ---------------- -We use Semantic Versioning 2.0.0. Given a version number MAJOR.MINOR.PATCH, increment the: -* MAJOR version when you make incompatible API changes, -* MINOR version when you add functionality in a backwards-compatible manner, and -* PATCH version when you make backwards-compatible bug fixes. -See http://semver.org/ - -We want the 0 series to be backward-compatible. That means that a project created with MapMap 0.1 should still work with MapMap 0.99, if we ever get to such a version number. When we will break this backward-compatibilty, we will start the 1 series and provide a migration script. This script might be ran from the command-line or on the Web. The other thing we need to be backward-compatible is the OSC interface. The rest of the software can change. This includes the names of the menu items and the appearance of the user interface. We will try to keep these consistent, though. - -Files ------ -* HACKING: What to know to contribute to the project. -* INSTALL: Instructions to build and install the software. -* NEWS: Release notes for each tag. -* README: The short documentation at the root of the project -* TODO: You can put things to do there, or use https://github.com/mapmapteam/mapmap, or https://www.pivotaltracker.com/s/projects/954570/ -* images/: Images part of the GUI. -* prototypes/ : Contains prototypes. Please ask the project maintainer before removing some of these. -* docs/informations/*.md Markdown files to generate the About dialog - -Code management with Git ------------------------- -* We develop in the develop branch. The master branch is only for the latest tag. -* Create a branch for each new features. Merge it to develop. -* Create release-x.y.z branch for releases. -* If possible, avoid merges, and use git rebase instead. (like in the GNOME projects) -* Create a x.y branch for each x.y major.minor version series. -* For a new release, merge develop to master (or your branch to the major.minor branch if it's a bugfix release) and then tag it there. -* In doubt, ask the release manager. - -Make a release --------------- -* If it's a new feature, increment minor. If it's bugfix, increment micro. If it's not backward-compatible, increment major. -* Create a release-x.y.z branch -* Verify the version number: - * vim -o VERSION.txt DMGVERSION.txt mapmap.pro docs/Doxyfile NEWS src/core/MM.cpp - * VERSION.txt - * VERSION in MM.cpp - * VERSION in mapmap.pro - * PROJECT_NUMBER in Doxyfile -* Edit NEWS - update with the news for the release you are about to make -* Run ./scripts/update-changelog.sh and commit the changes -* Maybe update the docs/informations/osc.md file and run scripts/update-osc.sh and commit the changes -* Maybe update the docs/informations/CONTRIBUTORS.md file and run scripts/update-contributors.sh and commit the changes -* run make -* run ./sh_build_doc.sh -* merge to master, or to the major.minor branch -* run ./sh_make_tarball.sh -* then untar it, cd to that dir and build the whole thing to see if it works -* git tag x.y.z -* go back to your release branch -* increment micro (or minor) version number in the files above. -* merge into develop. -* keep developing. - -XML file version number ------------------------ -* update its minor number when you introduce new features. -* update its major number when it's not backward-comptatible anymore with its previous versions -* generally, we should follow the MapMap version, when new changes are introduced. (no need to increment it otherwise) -* we will need to implement some fancy XML file version number checking in the future. - -Qt resources system -------------------- -* The mapmap.pro file is where the packaging is done -* The mapmap.qrc file is where we specify which resources are packaged with the app. -* Images are set there. They are then available as a path-like alias such as ":/fullscreen" -* See http://doc.qt.io/qt-5/resources.html - From 95bbe931960040485b0caac3d7dc2d0e0d127deb Mon Sep 17 00:00:00 2001 From: Alexandre Quessy Date: Fri, 22 May 2026 00:38:18 -0400 Subject: [PATCH 4/7] Change settings domain to artpluscode.com and separate website URL Settings domain changed from mapmap.info to artpluscode.com for QSettings and macOS bundle identifier. Website URL split into its own constant pointing to mapmapteam.github.io. Contact email updated to mapmap@artpluscode.com. --- CODE_OF_CONDUCT.md | 2 +- resources/macOS/Info.plist | 2 +- src/core/MM.cpp | 3 ++- src/core/MM.h | 1 + src/gui/AboutDialog.cpp | 2 +- src/gui/MainWindow.h | 6 +++--- 6 files changed, 9 insertions(+), 7 deletions(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 4530484d..7f713de1 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -34,7 +34,7 @@ This Code of Conduct applies both within project spaces and in public spaces whe ## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at info@mapmap.info. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at mapmap@artpluscode.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. diff --git a/resources/macOS/Info.plist b/resources/macOS/Info.plist index 4708cb98..d0c0cb31 100644 --- a/resources/macOS/Info.plist +++ b/resources/macOS/Info.plist @@ -3,7 +3,7 @@ CFBundleIdentifier -info.mapmapteam.MapMap +com.artpluscode.MapMap CFBundleName mapmap CFBundleExecutable diff --git a/src/core/MM.cpp b/src/core/MM.cpp index bae9a734..f81c7bf2 100644 --- a/src/core/MM.cpp +++ b/src/core/MM.cpp @@ -26,7 +26,8 @@ const QString MM::APPLICATION_NAME = "MapMap"; const QString MM::VERSION = "0.6.3"; const QString MM::COPYRIGHT_OWNERS = "Alexandre Quessy, Sofian Audry, Dame Diongue, Mike Latona, Vasilis Liaskovitis"; const QString MM::ORGANIZATION_NAME = "MapMap"; -const QString MM::ORGANIZATION_DOMAIN = "mapmap.info"; +const QString MM::ORGANIZATION_DOMAIN = "artpluscode.com"; +const QString MM::WEBSITE_URL = "https://mapmapteam.github.io"; const QString MM::FILE_EXTENSION = "mmp"; const QString MM::VIDEO_FILES_FILTER = "*.mov *.mp4 *.avi *.ogg *.ogv *.mpeg *.mpeg1 *.mpeg4 *.mpg *.mpg2 *.mp2 *.mjpq *.mjp *.wmv *.webm *sock"; const QString MM::IMAGE_FILES_FILTER = "*.jpg *.jpeg *.gif *.png *.tiff *.tif *.bmp"; diff --git a/src/core/MM.h b/src/core/MM.h index 91928c1a..a9fec16a 100644 --- a/src/core/MM.h +++ b/src/core/MM.h @@ -55,6 +55,7 @@ class MM static const QString COPYRIGHT_OWNERS; static const QString ORGANIZATION_NAME; static const QString ORGANIZATION_DOMAIN; + static const QString WEBSITE_URL; static const QString FILE_EXTENSION; static const QString VIDEO_FILES_FILTER; static const QString IMAGE_FILES_FILTER; diff --git a/src/gui/AboutDialog.cpp b/src/gui/AboutDialog.cpp index 73d1a531..6707ab4a 100644 --- a/src/gui/AboutDialog.cpp +++ b/src/gui/AboutDialog.cpp @@ -102,7 +102,7 @@ void AboutDialog::createAboutTab() aboutMappingFile.open(QIODevice::ReadOnly | QIODevice::Text); QString aboutMappingText = QString::fromUtf8(aboutMappingFile.readAll()); // Visit our website for more information - QString projectWebsiteText = "

" + tr("See the ") + QString("").arg(MM::ORGANIZATION_DOMAIN) + + QString projectWebsiteText = "

" + tr("See the ") + QString("").arg(MM::WEBSITE_URL) + tr("%1 website").arg(MM::APPLICATION_NAME) + " for more information on this software.

"; // Append texts diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index c09d300a..2e5503a9 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -148,15 +148,15 @@ private slots: // Some help links void documentation() { - QDesktopServices::openUrl(QUrl("http://mapmap.info/")); + QDesktopServices::openUrl(QUrl(MM::WEBSITE_URL)); } // Send us feedback void sendFeedback() { - QDesktopServices::openUrl(QUrl("mailto:mapmap-list@mapmap.info")); + QDesktopServices::openUrl(QUrl("mailto:mapmap@artpluscode.com")); } // Technical support void technicalSupport() { - QDesktopServices::openUrl(QUrl("http://mapmap.info/")); + QDesktopServices::openUrl(QUrl(MM::WEBSITE_URL)); } // Report an issues void reportBug() { From 5ce2bde8d92bd0c0c9fe9827defa33ba4901e5df Mon Sep 17 00:00:00 2001 From: Alexandre Quessy Date: Fri, 22 May 2026 00:49:50 -0400 Subject: [PATCH 5/7] Move prototypes to separate repository Prototypes moved to prototypes-mapmap repo to reduce main repo size. --- prototypes/blackmagic/composite.sh | 7 - prototypes/blackmagic/hdmi-v4l2.sh | 24 -- prototypes/blackmagic/hdmi.sh | 16 - prototypes/blackmagic/s-video.sh | 15 - prototypes/cairo/build.sh | 5 - prototypes/cairo/cairo-proto.c | 182 --------- prototypes/controller/controller.h | 51 --- prototypes/glfw/Makefile | 20 - prototypes/glfw/README | 1 - prototypes/glfw/example.png | Bin 13385 -> 0 bytes prototypes/glfw/main.c | 257 ------------ prototypes/gst/color-balance.sh | 21 - prototypes/gtk/Makefile | 20 - prototypes/gtk/main.c | 353 ----------------- prototypes/properties/README | 2 - prototypes/properties/build.sh | 4 - prototypes/properties/hello.pro | 11 - prototypes/properties/main.cpp | 66 ---- prototypes/sdl/Makefile | 20 - prototypes/sdl/README | 1 - prototypes/sdl/example.png | Bin 13385 -> 0 bytes prototypes/sdl/main.c | 370 ----------------- prototypes/sh-osx-gst-test.sh | 10 - prototypes/shm/read.sh | 5 - prototypes/shm/write.sh | 5 - prototypes/wx/wx-01-simple/build.sh | 3 - prototypes/wx/wx-01-simple/example.png | Bin 13385 -> 0 bytes prototypes/wx/wx-01-simple/main.cpp | 373 ------------------ prototypes/wx/wx-02-input-output/Common.cpp | 52 --- prototypes/wx/wx-02-input-output/Common.h | 38 -- .../DestinationGLCanvas.cpp | 71 ---- .../wx-02-input-output/DestinationGLCanvas.h | 49 --- prototypes/wx/wx-02-input-output/Mapper.h | 174 -------- .../wx/wx-02-input-output/MapperGLCanvas.cpp | 120 ------ .../wx/wx-02-input-output/MapperGLCanvas.h | 56 --- prototypes/wx/wx-02-input-output/Paint.h | 92 ----- prototypes/wx/wx-02-input-output/Shape.h | 66 ---- .../wx/wx-02-input-output/SourceGLCanvas.cpp | 109 ----- .../wx/wx-02-input-output/SourceGLCanvas.h | 50 --- prototypes/wx/wx-02-input-output/build.sh | 3 - prototypes/wx/wx-02-input-output/example.png | Bin 13385 -> 0 bytes prototypes/wx/wx-02-input-output/main.cpp | 63 --- prototypes/wx/wx-03-polyline/build.sh | 7 - prototypes/wx/wx-03-polyline/main.cpp | 369 ----------------- 44 files changed, 3161 deletions(-) delete mode 100755 prototypes/blackmagic/composite.sh delete mode 100755 prototypes/blackmagic/hdmi-v4l2.sh delete mode 100755 prototypes/blackmagic/hdmi.sh delete mode 100755 prototypes/blackmagic/s-video.sh delete mode 100755 prototypes/cairo/build.sh delete mode 100644 prototypes/cairo/cairo-proto.c delete mode 100644 prototypes/controller/controller.h delete mode 100644 prototypes/glfw/Makefile delete mode 100644 prototypes/glfw/README delete mode 100644 prototypes/glfw/example.png delete mode 100644 prototypes/glfw/main.c delete mode 100755 prototypes/gst/color-balance.sh delete mode 100644 prototypes/gtk/Makefile delete mode 100644 prototypes/gtk/main.c delete mode 100644 prototypes/properties/README delete mode 100755 prototypes/properties/build.sh delete mode 100644 prototypes/properties/hello.pro delete mode 100644 prototypes/properties/main.cpp delete mode 100644 prototypes/sdl/Makefile delete mode 100644 prototypes/sdl/README delete mode 100644 prototypes/sdl/example.png delete mode 100644 prototypes/sdl/main.c delete mode 100755 prototypes/sh-osx-gst-test.sh delete mode 100755 prototypes/shm/read.sh delete mode 100755 prototypes/shm/write.sh delete mode 100755 prototypes/wx/wx-01-simple/build.sh delete mode 100644 prototypes/wx/wx-01-simple/example.png delete mode 100644 prototypes/wx/wx-01-simple/main.cpp delete mode 100644 prototypes/wx/wx-02-input-output/Common.cpp delete mode 100644 prototypes/wx/wx-02-input-output/Common.h delete mode 100644 prototypes/wx/wx-02-input-output/DestinationGLCanvas.cpp delete mode 100644 prototypes/wx/wx-02-input-output/DestinationGLCanvas.h delete mode 100644 prototypes/wx/wx-02-input-output/Mapper.h delete mode 100644 prototypes/wx/wx-02-input-output/MapperGLCanvas.cpp delete mode 100644 prototypes/wx/wx-02-input-output/MapperGLCanvas.h delete mode 100644 prototypes/wx/wx-02-input-output/Paint.h delete mode 100644 prototypes/wx/wx-02-input-output/Shape.h delete mode 100644 prototypes/wx/wx-02-input-output/SourceGLCanvas.cpp delete mode 100644 prototypes/wx/wx-02-input-output/SourceGLCanvas.h delete mode 100755 prototypes/wx/wx-02-input-output/build.sh delete mode 100644 prototypes/wx/wx-02-input-output/example.png delete mode 100644 prototypes/wx/wx-02-input-output/main.cpp delete mode 100755 prototypes/wx/wx-03-polyline/build.sh delete mode 100644 prototypes/wx/wx-03-polyline/main.cpp diff --git a/prototypes/blackmagic/composite.sh b/prototypes/blackmagic/composite.sh deleted file mode 100755 index c8c250c0..00000000 --- a/prototypes/blackmagic/composite.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -# Using the Blackmagic Intensity Pro - -gst-launch -v decklinksrc mode=3 connection=4 ! \ - ffmpegcolorspace ! \ - xvimagesink sync=false - diff --git a/prototypes/blackmagic/hdmi-v4l2.sh b/prototypes/blackmagic/hdmi-v4l2.sh deleted file mode 100755 index 1fcf2aec..00000000 --- a/prototypes/blackmagic/hdmi-v4l2.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash -# Using the Blackmagic Intensity Shuttle USB 3.0 -# -# Download and build: you can download source driver from -# https://www.blackmagicdesign.com/support - compile a driver from this site -# for a decklinksink blackmagic card -# Direct link: -# https://www.blackmagicdesign.com/support/download/f73ee77fdd384b5286fe86a46d20d045/Linux - -GST_DEBUG=2 \ -LANG=C \ -gst-launch-1.0 decklinksrc mode=11 connection=0 audio-input=3 ! \ - video/x-raw,format=UYVY,width=1920,height=1080,framerate=30000/1001,interlace-mode=interleaved ! \ - queue ! xvimagesink - -# v4l2sink device=/dev/video1 sync=false - - -# sync=false -# gst-launch-1.0 -v decklinksrc mode=18 connection=1 ! \ -# videoconvert ! \ -# queue ! \ -# xvimagesink -# diff --git a/prototypes/blackmagic/hdmi.sh b/prototypes/blackmagic/hdmi.sh deleted file mode 100755 index 2964797a..00000000 --- a/prototypes/blackmagic/hdmi.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -# Using the Blackmagic Intensity Shuttle USB 3.0 -# -# Download and build: you can download source driver from -# https://www.blackmagicdesign.com/support - compile a driver from this site -# for a decklinksink blackmagic card -# Direct link: -# https://www.blackmagicdesign.com/support/download/f73ee77fdd384b5286fe86a46d20d045/Linux - -GST_DEBUG=4 \ -LANG=C \ -gst-launch-1.0 -v decklinksrc mode=18 connection=1 ! \ - videoconvert ! \ - queue ! \ - xvimagesink -# sync=false diff --git a/prototypes/blackmagic/s-video.sh b/prototypes/blackmagic/s-video.sh deleted file mode 100755 index de3e6146..00000000 --- a/prototypes/blackmagic/s-video.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -# Using the Blackmagic Intensity Shuttle USB 3.0 -# -# Download and build: you can download source driver from -# https://www.blackmagicdesign.com/support - compile a driver from this site -# for a decklinksink blackmagic card -# Direct link: -# https://www.blackmagicdesign.com/support/download/f73ee77fdd384b5286fe86a46d20d045/Linux - -GST_DEBUG=2 \ -LANG=C \ -sudo gst-launch-1.0 -v decklinksrc mode=3 connection=5 ! \ - videoconvert ! \ - xvimagesink -# sync=false diff --git a/prototypes/cairo/build.sh b/prototypes/cairo/build.sh deleted file mode 100755 index e2bb4427..00000000 --- a/prototypes/cairo/build.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -CFLAGS=`pkg-config --cflags cairo gstreamer-plugins-base-1.0 gstreamer-video-1.0 gstreamer-1.0` -LDFLAGS=`pkg-config --libs cairo gstreamer-plugins-base-1.0 gstreamer-video-1.0 gstreamer-1.0` - -gcc -o cairo-proto -Wall cairo-proto.c ${LDFLAGS} ${CFLAGS} diff --git a/prototypes/cairo/cairo-proto.c b/prototypes/cairo/cairo-proto.c deleted file mode 100644 index 9e9f71af..00000000 --- a/prototypes/cairo/cairo-proto.c +++ /dev/null @@ -1,182 +0,0 @@ -/* GStreamer - * Copyright (C) 2011 Jon Nordby - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -/* - * Example showing usage of the cairooverlay element - */ - -#include -#include - -#include -#include - -#include - - -static gboolean -on_message (GstBus * bus, GstMessage * message, gpointer user_data) -{ - GMainLoop *loop = (GMainLoop *) user_data; - - switch (GST_MESSAGE_TYPE (message)) { - case GST_MESSAGE_ERROR:{ - GError *err = NULL; - gchar *debug; - - gst_message_parse_error (message, &err, &debug); - g_critical ("Got ERROR: %s (%s)", err->message, GST_STR_NULL (debug)); - g_main_loop_quit (loop); - break; - } - case GST_MESSAGE_WARNING:{ - GError *err = NULL; - gchar *debug; - - gst_message_parse_warning (message, &err, &debug); - g_warning ("Got WARNING: %s (%s)", err->message, GST_STR_NULL (debug)); - g_main_loop_quit (loop); - break; - } - case GST_MESSAGE_EOS: - g_main_loop_quit (loop); - break; - default: - break; - } - - return TRUE; -} - -/* Datastructure to share the state we are interested in between - * prepare and render function. */ -typedef struct -{ - gboolean valid; - GstVideoInfo vinfo; -} CairoOverlayState; - -/* Store the information from the caps that we are interested in. */ -static void -prepare_overlay (GstElement * overlay, GstCaps * caps, gpointer user_data) -{ - CairoOverlayState *state = (CairoOverlayState *) user_data; - - state->valid = gst_video_info_from_caps (&state->vinfo, caps); -} - -/* Draw the overlay. - * This function draws a cute "beating" heart. */ -static void -draw_overlay (GstElement * overlay, cairo_t * cr, guint64 timestamp, - guint64 duration, gpointer user_data) -{ - CairoOverlayState *s = (CairoOverlayState *) user_data; - double scale; - int width, height; - - if (!s->valid) - return; - - width = GST_VIDEO_INFO_WIDTH (&s->vinfo); - height = GST_VIDEO_INFO_HEIGHT (&s->vinfo); - - scale = 2 * (((timestamp / (int) 1e7) % 70) + 30) / 100.0; - cairo_translate (cr, width / 2, (height / 2) - 30); - - /* FIXME: this assumes a pixel-aspect-ratio of 1/1 */ - cairo_scale (cr, scale, scale); - - cairo_move_to (cr, 0, 0); - cairo_curve_to (cr, 0, -30, -50, -30, -50, 0); - cairo_curve_to (cr, -50, 30, 0, 35, 0, 60); - cairo_curve_to (cr, 0, 35, 50, 30, 50, 0); - cairo_curve_to (cr, 50, -30, 0, -30, 0, 0); - cairo_set_source_rgba (cr, 0.9, 0.0, 0.1, 0.7); - cairo_fill (cr); -} - -static GstElement * -setup_gst_pipeline (CairoOverlayState * overlay_state) -{ - GstElement *pipeline; - GstElement *cairo_overlay; - GstElement *source, *adaptor1, *adaptor2, *sink; - - pipeline = gst_pipeline_new ("cairo-overlay-example"); - - /* Adaptors needed because cairooverlay only supports ARGB data */ - source = gst_element_factory_make ("videotestsrc", "source"); - adaptor1 = gst_element_factory_make ("videoconvert", "adaptor1"); - cairo_overlay = gst_element_factory_make ("cairooverlay", "overlay"); - adaptor2 = gst_element_factory_make ("videoconvert", "adaptor2"); - sink = gst_element_factory_make ("ximagesink", "sink"); - if (sink == NULL) - sink = gst_element_factory_make ("autovideosink", "sink"); - - /* If failing, the element could not be created */ - g_assert (cairo_overlay); - - /* Hook up the neccesary signals for cairooverlay */ - g_signal_connect (cairo_overlay, "draw", - G_CALLBACK (draw_overlay), overlay_state); - g_signal_connect (cairo_overlay, "caps-changed", - G_CALLBACK (prepare_overlay), overlay_state); - - gst_bin_add_many (GST_BIN (pipeline), source, adaptor1, - cairo_overlay, adaptor2, sink, NULL); - - if (!gst_element_link_many (source, adaptor1, - cairo_overlay, adaptor2, sink, NULL)) { - g_warning ("Failed to link elements!"); - } - - return pipeline; -} - -int -main (int argc, char **argv) -{ - GMainLoop *loop; - GstElement *pipeline; - GstBus *bus; - CairoOverlayState *overlay_state; - - gst_init (&argc, &argv); - loop = g_main_loop_new (NULL, FALSE); - - /* allocate on heap for pedagogical reasons, makes code easier to transfer */ - overlay_state = g_new0 (CairoOverlayState, 1); - - pipeline = setup_gst_pipeline (overlay_state); - - bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline)); - gst_bus_add_signal_watch (bus); - g_signal_connect (G_OBJECT (bus), "message", G_CALLBACK (on_message), loop); - gst_object_unref (GST_OBJECT (bus)); - - gst_element_set_state (pipeline, GST_STATE_PLAYING); - g_main_loop_run (loop); - - gst_element_set_state (pipeline, GST_STATE_NULL); - gst_object_unref (pipeline); - - g_free (overlay_state); - return 0; -} diff --git a/prototypes/controller/controller.h b/prototypes/controller/controller.h deleted file mode 100644 index cb1bd8ee..00000000 --- a/prototypes/controller/controller.h +++ /dev/null @@ -1,51 +0,0 @@ -#include -#include -#include "MainWindow.h" - -/** - * Facade to control the application. - * - * TODO: implement it. - * TODO: include it in the project - * TODO: add signals - * TODO: the whole app should use actual QObject for properties of everything - */ -class Controller -{ - public: - Controller(MainWindow *owner); - // CRUD - bool createObject(const char *objType, std::string &objName); - bool listObjects(const char *objType, QList &objNames); - bool destroyObject(const char *objName); - bool setObjectProperty(const char *objName, const char *propName, - const QVariantList &value); - bool getObjectProperty(const char *objName, const char *propName, - QVariantList &value); - bool listObjectProperties(const char *objName, QList &values); - bool saveProject(const char *fileName); - bool loadProject(const char *fileName); - bool quit(); - private: - MainWindow *_owner; -}; - -int main(int argc, char **argv) -{ - /* Example: */ - Controller *controller = new Controller(NULL); - - std::string quadName; - std::string imageName; - - controller->createObject("image", imageName); - controller->createObject("quad", quadName); - controller->setObjectProperty(sourceName, "uri", QVariant(QString("image.jpg"))); - controller->setObjectProperty(quadName, "source", QVariant(QString(imageName.c_str()))); - controller->setObjectProperty(quadName, "x1", QVariant(3.14159)); - controller->saveProject("project.lmp"); - controller->quit(); - - delete controller; - return 0; -} diff --git a/prototypes/glfw/Makefile b/prototypes/glfw/Makefile deleted file mode 100644 index 5c275e4b..00000000 --- a/prototypes/glfw/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -DEPS=glfw3 glu gl -CC=gcc -CC_FLAGS=-O0 -g `pkg-config --cflags --libs $(DEPS)` -lSOIL -EXEC=run -SOURCES=$(wildcard *.c) -OBJECTS=$(SOURCES:.c=.o) - -all: run - -$(EXEC): $(OBJECTS) - $(CC) $(OBJECTS) $(CC_FLAGS) -o $(EXEC) - -%.o: %.c - $(CC) -c $(CC_FLAGS) $< -o $@ - -clean: - rm -f $(EXEC) $(OBJECTS) - diff --git a/prototypes/glfw/README b/prototypes/glfw/README deleted file mode 100644 index 0cc36a2a..00000000 --- a/prototypes/glfw/README +++ /dev/null @@ -1 +0,0 @@ -sudo yum install -y SOIL-devel glfw-devel diff --git a/prototypes/glfw/example.png b/prototypes/glfw/example.png deleted file mode 100644 index ffb8a2c1664e7ea2a0b61fce458c9c555c71638c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13385 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 b3RF0eGJ`!~>AC$EA;9dc)tU0s?$Q4P3fSHz diff --git a/prototypes/glfw/main.c b/prototypes/glfw/main.c deleted file mode 100644 index a77e18ae..00000000 --- a/prototypes/glfw/main.c +++ /dev/null @@ -1,257 +0,0 @@ -//======================================================================== -// Simple GLFW example -// Copyright (c) Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. // -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== -//! [code] - -#include -#include -#include -#include - -typedef struct _Quad -{ - int x1; - int x2; - int x3; - int x4; - int y1; - int y2; - int y3; - int y4; -} Quad; - -static Quad src; -static Quad dst; - -static void error_callback(int error, const char* description) -{ - fputs(description, stderr); -} - -// static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -// { -// if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) -// glfwSetWindowShouldClose(window, GL_TRUE); -// } -// - -static void -move_point (int index, int x, int y) -{ - printf ("move_point (index=%d, x=%d, y=%d)\n", index, x, y); - switch (index) - { - case 1: - src.x1 += x; - src.y1 += y; - break; - case 2: - src.x2 += x; - src.y2 += y; - break; - case 3: - src.x3 += x; - src.y3 += y; - break; - case 4: - src.x4 += x; - src.y4 += y; - break; - case 5: - dst.x1 += x; - dst.y1 += y; - break; - case 6: - dst.x2 += x; - dst.y2 += y; - break; - case 7: - dst.x3 += x; - dst.y3 += y; - break; - case 8: - dst.x4 += x; - dst.y4 += y; - break; - } -} - -static void -key_callback (GLFWwindow *window, int key, int scancode, int action, int mods) -{ - static int current = 0; - - //printf ("key_callback (window=%p, key=%d, scancode=%d, action=%d, mods=%d)\n", - // window, key, scancode, action, mods); - - if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) - glfwSetWindowShouldClose(window, GL_TRUE); - else if (key == GLFW_KEY_TAB && action == GLFW_PRESS) - { - current = (current + 1) % 8; - printf ("Current = %d\n", current); - } - else if (action == GLFW_PRESS || action == GLFW_REPEAT) - { - if (key == GLFW_KEY_UP) - move_point (current + 1, 0, 1); - else if (key == GLFW_KEY_DOWN) - move_point (current + 1, 0, -1); - else if (key == GLFW_KEY_LEFT) - move_point (current + 1, -1, 0); - else if (key == GLFW_KEY_RIGHT) - move_point (current + 1, 1, 0); - else - printf ("Unhandled key = %d\n", key); - } -} - -GLuint load_image (const char *imagepath) -{ - int width, height; - GLuint textureID = 0; - - unsigned char * data = - SOIL_load_image(imagepath, &width, &height, 0, SOIL_LOAD_RGB ); - textureID = SOIL_create_OGL_texture ( - data, width, height, 3, textureID, 0); - - // TODO: free data? - - return textureID; -} - -int main(void) -{ - GLFWwindow* window; - GLuint texture; - const int wrap = 1; - - const float image_width = 320; - const float image_height = 240; - - //source - src.x1 = 0; - src.y1 = 0; - - src.x2 = 320; - src.y2 = 0; - - src.x3 = 320; - src.y3 = 240; - - src.x4 = 0; - src.y4 = 240; - - //destination - dst.x1 = 0; - dst.y1 = 0; - - dst.x2 = 320; - dst.y2 = 0; - - dst.x3 = 320; - dst.y3 = 240; - - dst.x4 = 0; - dst.y4 = 240; - - glfwSetErrorCallback (error_callback); - - if (! glfwInit ()) - exit(EXIT_FAILURE); - - window = glfwCreateWindow (640, 480, "MapMap prototype", NULL, NULL); - if (! window) - { - glfwTerminate (); - exit (EXIT_FAILURE); - } - - glfwMakeContextCurrent (window); - - texture = load_image ("example.png"); - - glfwSetKeyCallback (window, (GLFWkeyfun) key_callback); - - while (! glfwWindowShouldClose (window)) - { - float ratio; - int width, height; - - //glfwGetFramebufferSize(window, &width, &height); - // XXX aalex I commented the line above and added the two lines below - width = 640; - height = 480; - - ratio = width / (float) height; - - glViewport (0, 0, width, height); - glClear (GL_COLOR_BUFFER_BIT); - - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - glOrtho (-ratio, ratio, -1.f, 1.f, 1.f, -1.f); - glMatrixMode (GL_MODELVIEW); - - glLoadIdentity (); - - // DRAW THE TEXTURE - glPushMatrix (); - glDisable (GL_LIGHTING); - glColor3f (1, 1, 1); - glEnable (GL_TEXTURE_2D); - glBindTexture (GL_TEXTURE_2D, texture); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - - glBegin (GL_QUADS); - - glTexCoord2f (src.x1 / image_width, src.y1 / image_height); - glVertex3f (dst.x1 / image_width, dst.y1 / image_height, 0); - - glTexCoord2f (src.x2 / image_width, src.y2 / image_height); - glVertex3f (dst.x2 / image_width, dst.y2 / image_height, 0); - - glTexCoord2f (src.x3 / image_width, src.y3 / image_height); - glVertex3f (dst.x3 / image_width, dst.y3 / image_height, 0); - - glTexCoord2f (src.x4 / image_width, src.y4 / image_height); - glVertex3f (dst.x4 / image_width, dst.y4 / image_height, 0); - - glEnd (); - glDisable (GL_TEXTURE_2D); - glPopMatrix (); - - glfwSwapBuffers (window); - glfwPollEvents (); - } - - glfwDestroyWindow (window); - - glfwTerminate (); - exit (EXIT_SUCCESS); -} diff --git a/prototypes/gst/color-balance.sh b/prototypes/gst/color-balance.sh deleted file mode 100755 index c21d02ed..00000000 --- a/prototypes/gst/color-balance.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash -# default: -CONTRAST=1.5 -BRIGHTNESS=0.25 -SATURATION=1.25 -HUE=0.0 - -# blasted -# CONTRAST=2.0 -# BRIGHTNESS=1.0 -# SATURATION=2.0 -# HUE=0.0 - -gst-launch-1.0 videotestsrc ! videobalance contrast=${CONTRAST} brightness=${BRIGHTNESS} saturation=${SATURATION} hue=${HUE} ! videoconvert ! autovideosink - -# Valid value for each setting: -# -# contrast: [ 0 ~ 2 ] (default = 1) -# brightness: [ -1~ 1] (default = 0) -# saturation: [ 0 ~ 2 ] (default = 1) -# hue: [ -1 ~ 1 ] (default = 0) diff --git a/prototypes/gtk/Makefile b/prototypes/gtk/Makefile deleted file mode 100644 index ce7e8159..00000000 --- a/prototypes/gtk/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -DEPS=gtk+-2.0 gtkglext-1.0 -CC=gcc -CC_FLAGS=-O0 -g `pkg-config --cflags --libs $(DEPS)` -EXEC=run -SOURCES=$(wildcard *.c) -OBJECTS=$(SOURCES:.c=.o) - -all: run - -$(EXEC): $(OBJECTS) - $(CC) $(OBJECTS) $(CC_FLAGS) -o $(EXEC) - -%.o: %.c - $(CC) -c $(CC_FLAGS) $< -o $@ - -clean: - rm -f $(EXEC) $(OBJECTS) - diff --git a/prototypes/gtk/main.c b/prototypes/gtk/main.c deleted file mode 100644 index 36442112..00000000 --- a/prototypes/gtk/main.c +++ /dev/null @@ -1,353 +0,0 @@ -/* - * pixmap.c: - * Simple off-screen OpenGL rendering example. - * - * written by Naofumi Yasufuku - */ - -#include - -#include - -#include - -#ifdef G_OS_WIN32 -#define WIN32_LEAN_AND_MEAN 1 -#include -#endif - -#ifdef GDK_WINDOWING_QUARTZ -#include -#else -#include -#include -#endif - -static GdkGLConfig *glconfig = NULL; -static GdkGLContext *glcontext = NULL; -static GdkPixmap *pixmap = NULL; - -static void -init (void) -{ - GLUquadricObj *qobj; - static GLfloat light_diffuse[] = {1.0, 0.0, 0.0, 1.0}; - static GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0}; - - qobj = gluNewQuadric (); - gluQuadricDrawStyle (qobj, GLU_FILL); - glNewList (1, GL_COMPILE); - gluSphere (qobj, 1.0, 20, 20); - glEndList (); - - glLightfv (GL_LIGHT0, GL_DIFFUSE, light_diffuse); - glLightfv (GL_LIGHT0, GL_POSITION, light_position); - glEnable (GL_LIGHTING); - glEnable (GL_LIGHT0); - glEnable (GL_DEPTH_TEST); - - glClearColor (1.0, 1.0, 1.0, 1.0); - glClearDepth (1.0); - - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - gluPerspective (40.0, 1.0, 1.0, 10.0); - - glMatrixMode (GL_MODELVIEW); - glLoadIdentity (); - gluLookAt (0.0, 0.0, 3.0, - 0.0, 0.0, 0.0, - 0.0, 1.0, 0.0); - glTranslatef (0.0, 0.0, -3.0); -} - -static gboolean -configure_event (GtkWidget *widget, - GdkEventConfigure *event, - gpointer data) -{ - GtkAllocation allocation; - GdkGLDrawable *gldrawable; - static gboolean is_initialized = FALSE; - - gtk_widget_get_allocation (widget, &allocation); - - /* - * Create an OpenGL off-screen rendering area. - */ - - if (pixmap != NULL) - g_object_unref (G_OBJECT (pixmap)); - - pixmap = gdk_pixmap_new (gtk_widget_get_window (widget), - allocation.width, - allocation.height, - -1); - - /* - * Set OpenGL-capability to the pixmap - */ - - gldrawable = GDK_GL_DRAWABLE (gdk_pixmap_set_gl_capability (pixmap, - glconfig, - NULL)); - - /* - * Create OpenGL rendering context (not direct). - */ - - if (glcontext == NULL) - { - glcontext = gdk_gl_context_new (gldrawable, - NULL, - FALSE, - GDK_GL_RGBA_TYPE); - if (glcontext == NULL) - { - g_print ("Connot create the OpenGL rendering context\n"); - if (gtk_main_level () != 0) - gtk_main_quit (); - return TRUE; - } - - g_print ("The OpenGL rendering context is created\n"); - } - - /*** OpenGL BEGIN ***/ - if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) - return FALSE; - - if (!is_initialized) - { - init (); - is_initialized = TRUE; - } - - glViewport (0, 0, - allocation.width, allocation.height); - - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glCallList (1); - - glFlush (); - - gdk_gl_drawable_gl_end (gldrawable); - /*** OpenGL END ***/ - - return TRUE; -} - -static gboolean -expose_event (GtkWidget *widget, - GdkEventExpose *event, - gpointer data) -{ - gdk_draw_drawable (gtk_widget_get_window (widget), - gtk_widget_get_style (widget)->fg_gc[gtk_widget_get_state (widget)], - pixmap, - event->area.x, event->area.y, - event->area.x, event->area.y, - event->area.width, event->area.height); - - return FALSE; -} - -static gboolean -destroy_gl_context (gpointer data) -{ - if (glconfig != NULL) - g_object_unref (G_OBJECT (glconfig)); - - if (glcontext != NULL) - g_object_unref (G_OBJECT (glcontext)); - - return FALSE; -} - -static void -print_gl_config_attrib (GdkGLConfig *glconfig, - const gchar *attrib_str, - int attrib, - gboolean is_boolean) -{ - int value; - - g_print ("%s = ", attrib_str); - if (gdk_gl_config_get_attrib (glconfig, attrib, &value)) - { - if (is_boolean) - g_print ("%s\n", value == TRUE ? "TRUE" : "FALSE"); - else - g_print ("%d\n", value); - } - else - g_print ("*** Cannot get %s attribute value\n", attrib_str); -} - -static void -examine_gl_config_attrib (GdkGLConfig *glconfig) -{ - g_print ("\nOpenGL visual configurations :\n\n"); - - g_print ("gdk_gl_config_is_rgba (glconfig) = %s\n", - gdk_gl_config_is_rgba (glconfig) ? "TRUE" : "FALSE"); - g_print ("gdk_gl_config_is_double_buffered (glconfig) = %s\n", - gdk_gl_config_is_double_buffered (glconfig) ? "TRUE" : "FALSE"); - g_print ("gdk_gl_config_is_stereo (glconfig) = %s\n", - gdk_gl_config_is_stereo (glconfig) ? "TRUE" : "FALSE"); - g_print ("gdk_gl_config_has_alpha (glconfig) = %s\n", - gdk_gl_config_has_alpha (glconfig) ? "TRUE" : "FALSE"); - g_print ("gdk_gl_config_has_depth_buffer (glconfig) = %s\n", - gdk_gl_config_has_depth_buffer (glconfig) ? "TRUE" : "FALSE"); - g_print ("gdk_gl_config_has_stencil_buffer (glconfig) = %s\n", - gdk_gl_config_has_stencil_buffer (glconfig) ? "TRUE" : "FALSE"); - g_print ("gdk_gl_config_has_accum_buffer (glconfig) = %s\n", - gdk_gl_config_has_accum_buffer (glconfig) ? "TRUE" : "FALSE"); - - g_print ("\n"); - - print_gl_config_attrib (glconfig, "GDK_GL_USE_GL", GDK_GL_USE_GL, TRUE); - print_gl_config_attrib (glconfig, "GDK_GL_BUFFER_SIZE", GDK_GL_BUFFER_SIZE, FALSE); - print_gl_config_attrib (glconfig, "GDK_GL_LEVEL", GDK_GL_LEVEL, FALSE); - print_gl_config_attrib (glconfig, "GDK_GL_RGBA", GDK_GL_RGBA, TRUE); - print_gl_config_attrib (glconfig, "GDK_GL_DOUBLEBUFFER", GDK_GL_DOUBLEBUFFER, TRUE); - print_gl_config_attrib (glconfig, "GDK_GL_STEREO", GDK_GL_STEREO, TRUE); - print_gl_config_attrib (glconfig, "GDK_GL_AUX_BUFFERS", GDK_GL_AUX_BUFFERS, FALSE); - print_gl_config_attrib (glconfig, "GDK_GL_RED_SIZE", GDK_GL_RED_SIZE, FALSE); - print_gl_config_attrib (glconfig, "GDK_GL_GREEN_SIZE", GDK_GL_GREEN_SIZE, FALSE); - print_gl_config_attrib (glconfig, "GDK_GL_BLUE_SIZE", GDK_GL_BLUE_SIZE, FALSE); - print_gl_config_attrib (glconfig, "GDK_GL_ALPHA_SIZE", GDK_GL_ALPHA_SIZE, FALSE); - print_gl_config_attrib (glconfig, "GDK_GL_DEPTH_SIZE", GDK_GL_DEPTH_SIZE, FALSE); - print_gl_config_attrib (glconfig, "GDK_GL_STENCIL_SIZE", GDK_GL_STENCIL_SIZE, FALSE); - print_gl_config_attrib (glconfig, "GDK_GL_ACCUM_RED_SIZE", GDK_GL_ACCUM_RED_SIZE, FALSE); - print_gl_config_attrib (glconfig, "GDK_GL_ACCUM_GREEN_SIZE", GDK_GL_ACCUM_GREEN_SIZE, FALSE); - print_gl_config_attrib (glconfig, "GDK_GL_ACCUM_BLUE_SIZE", GDK_GL_ACCUM_BLUE_SIZE, FALSE); - print_gl_config_attrib (glconfig, "GDK_GL_ACCUM_ALPHA_SIZE", GDK_GL_ACCUM_ALPHA_SIZE, FALSE); - - g_print ("\n"); -} - -int -main (int argc, - char *argv[]) -{ - gint major, minor; - - GtkWidget *window; - GtkWidget *vbox; - GtkWidget *drawing_area; - GtkWidget *button; - - /* - * Init GTK. - */ - - gtk_init (&argc, &argv); - - /* - * Init GtkGLExt. - */ - - gtk_gl_init (&argc, &argv); - - /* - * Query OpenGL extension version. - */ - - gdk_gl_query_version (&major, &minor); - g_print ("\nOpenGL extension version - %d.%d\n", - major, minor); - - /* - * Configure OpenGL-capable visual. - */ - - /* Try single-buffered visual */ - glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB | - GDK_GL_MODE_DEPTH | - GDK_GL_MODE_SINGLE); - if (glconfig == NULL) - { - g_print ("*** No appropriate OpenGL-capable visual found.\n"); - exit (1); - } - - examine_gl_config_attrib (glconfig); - - /* - * Top-level window. - */ - - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title (GTK_WINDOW (window), "pixmap"); - - /* - * If window manager doesn't watch the WM_COLORMAP_WINDOWS property on - * the top-level window, we have to set OpenGL window's colormap to the - * top-level window. - */ - gtk_widget_set_colormap (window, - gdk_gl_config_get_colormap (glconfig)); - - g_signal_connect (G_OBJECT (window), "delete_event", - G_CALLBACK (gtk_main_quit), NULL); - - /* - * VBox. - */ - - vbox = gtk_vbox_new (FALSE, 0); - gtk_container_add (GTK_CONTAINER (window), vbox); - gtk_widget_show (vbox); - - /* - * Drawing area for drawing OpenGL scene. - */ - - drawing_area = gtk_drawing_area_new (); - gtk_widget_set_size_request (drawing_area, 200, 200); - - /* Set OpenGL-capable colormap. */ - gtk_widget_set_colormap (drawing_area, - gdk_gl_config_get_colormap (glconfig)); - - g_signal_connect (G_OBJECT (drawing_area), "configure_event", - G_CALLBACK (configure_event), NULL); - g_signal_connect (G_OBJECT (drawing_area), "expose_event", - G_CALLBACK (expose_event), NULL); - - gtk_box_pack_start (GTK_BOX (vbox), drawing_area, TRUE, TRUE, 0); - - gtk_widget_show (drawing_area); - - /* - * Simple quit button. - */ - - button = gtk_button_new_with_label ("Quit"); - - g_signal_connect (G_OBJECT (button), "clicked", - G_CALLBACK (gtk_main_quit), NULL); - - gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); - - gtk_widget_show (button); - - /* - * Show window. - */ - - gtk_widget_show (window); - - /* - * Main loop. - */ - - /* Destroy the GLX context explicitly when application is terminated. */ - gtk_quit_add (0, (GtkFunction) destroy_gl_context, NULL); - - gtk_main (); - - return 0; -} diff --git a/prototypes/properties/README b/prototypes/properties/README deleted file mode 100644 index 18e16616..00000000 --- a/prototypes/properties/README +++ /dev/null @@ -1,2 +0,0 @@ -Doesn't work yet, but that is how properties work in Qt4. - diff --git a/prototypes/properties/build.sh b/prototypes/properties/build.sh deleted file mode 100755 index c8d77916..00000000 --- a/prototypes/properties/build.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -# qt4-default qt4-qmake -qmake-qt4 -make diff --git a/prototypes/properties/hello.pro b/prototypes/properties/hello.pro deleted file mode 100644 index 31f56c8a..00000000 --- a/prototypes/properties/hello.pro +++ /dev/null @@ -1,11 +0,0 @@ -CONFIG += qt debug -TEMPLATE = app -HEADERS = -SOURCES = main.cpp -QT += gui -RESOURCES = - -docs.depends = $(HEADERS) $(SOURCES) -docs.commands = (cat Doxyfile; echo "INPUT = $?") | doxygen - -QMAKE_EXTRA_TARGETS += docs - diff --git a/prototypes/properties/main.cpp b/prototypes/properties/main.cpp deleted file mode 100644 index 433871d0..00000000 --- a/prototypes/properties/main.cpp +++ /dev/null @@ -1,66 +0,0 @@ -#include -#include -#include -#include - -class MyClass : public QObject - { - Q_OBJECT - Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged) - Q_ENUMS(Priority) - Q_CLASSINFO("Version", "3.0.0") - public: - MyClass() {} - //MyClass(QObject *parent = 0); - ~MyClass(); - - enum Priority { High, Low, VeryHigh, VeryLow }; - - void setPriority(Priority priority) - { - m_priority = priority; - emit priorityChanged(priority); - } - Priority priority() const - { return m_priority; } - - signals: - void priorityChanged(Priority); - - private: - Priority m_priority; - }; - - -void MyClass::priorityChanged(Priority) -{ - // pass -} -void dump (QObject *object) -{ - std::cout << "object: " << std::endl; - const QMetaObject *metaobject = object->metaObject(); - int count = metaobject->propertyCount(); - for (int i=0; iproperty(i); - const char *name = metaproperty.name(); - QVariant value = object->property(name); - std::cout << " * " << name << " = " << value.toString().toStdString() << std::endl; - } -} - -int main(int /* argc */, char ** /* argv */) -{ - MyClass *myinstance = new MyClass(); - //QObject *object = myinstance; - - myinstance->setPriority(MyClass::VeryHigh); - //object->setProperty("priority", "VeryHigh"); - - dump ((QObject *) myinstance); - - delete myinstance; - - return 0; -} diff --git a/prototypes/sdl/Makefile b/prototypes/sdl/Makefile deleted file mode 100644 index 65bae740..00000000 --- a/prototypes/sdl/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -DEPS=sdl gl glu SDL_image -CC=gcc -CC_FLAGS=-O0 -g `pkg-config --cflags --libs $(DEPS)` -EXEC=run -SOURCES=$(wildcard *.c) -OBJECTS=$(SOURCES:.c=.o) - -all: run - -$(EXEC): $(OBJECTS) - $(CC) $(OBJECTS) $(CC_FLAGS) -o $(EXEC) - -%.o: %.c - $(CC) -c $(CC_FLAGS) $< -o $@ - -clean: - rm -f $(EXEC) $(OBJECTS) - diff --git a/prototypes/sdl/README b/prototypes/sdl/README deleted file mode 100644 index 6a3fe519..00000000 --- a/prototypes/sdl/README +++ /dev/null @@ -1 +0,0 @@ -sudo yum install -y SDL_image-devel diff --git a/prototypes/sdl/example.png b/prototypes/sdl/example.png deleted file mode 100644 index ffb8a2c1664e7ea2a0b61fce458c9c555c71638c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13385 zcmeI3=T}o(+wNBg1OyTrN()6%ib@fJ5NZ%bigXo3n&JkjCWMIe1XNU{C`d0s5+QV? zgJ9SwL8Tc2Q3%Zd5s-)?g47qsc=pS4&L42b`LMratdTJ?=A75O@85N;xmF(7Se=6k zN(ce~05vl`V+Q~r)b{m)0A%|Uquk;P0J4DD8KVogv*$-*k~J|;xZg9ShU@%?>#97y zc76T$=jvA1$oGU`zhRU44TdCc3;#$`OGDwsG4;{N=3YwZEHk2Y-E)W;RF z4e%CzDcTic(;=Q8mRlrgI$AQ;R zgNKDqIH{$k+M@mjDnloa-#`AXPSml+{e*G>{tn1}sncPP!>GS%<&8E+Clk;vFm?9d z3H__kzcuu4m;KA3f5G^#b^L3t|HhC1Be(q<(Eh(ljP4|%`wzHczg5c}uUA}A{E?>I z`HII^^!KNLCaK#lb#d!AZ-0qBvN3QV?ki5{?B)w7AnC{Nnl^uUOHz9EkXaP&&Ec?- z(~n>IfvJ#T0`srt&aHc~k*0Jvm#R+JdYehrVW6_@);R8y%8yqQ`7%#_Iyjto!BiIc z{r(i-SNZP{|IdZ`6;(49wc!;P)zSUehP??v^xM{)_N;B<>Xvf$H($54q0q`0DZiFa z-2rv2Kb}@NTi^bBe|benx9=cZW@}{*SB}kDI_~!S-Rj1-sHljg61NuVyt|t3Uvlns}dvp^nd2>ZW&!0U3OKyRTWouGqgYJ)b=trmzaeH zOOz~?ytTL1kuOH4Pt}V9w?5I0G=USlP&TXU9K%<+n?DQPWESxJrS&cI{>(p9lYF@? z(#juADOYLCvXd7 zHoidaZL1V4DYCT?YgoEF;)^kpW4QHu&N^zff62@`lpgxfKKt6n=yGd4Xh!iI^4;oP z)$ptO>l3?QwFx_NZ`C)Koikkhz>L~jjvC_;xrvFpQu^&SO?Pm6kE-SzUabx+^=yj) zIlBM!Sf3+MboF08(H+kBDx z^}50^YEI(MkIHB|gH?6D>vL{fO|HvL%n^fI29*ZP#-7^TsS{q8-F`etEA0&(tgdqd z{>)zsh?xW`-=@NfLGEV2_Etu*;2*cvd$&rLx2s}sdl22MYLKwX?5^#~oG#*qjjaU$ z>^iF8%gsf@Eo{rQW<_ILto`~@MN~`MPcfQy2jr=0JzI}0 z-usdDoc3zrt}2Vgl;WaemyBgr`$9AOvpr+fS6V(FsQ3s>E(SNgcNyFrwbGuY!FME& z)73B#BeOm}7t$Lx3Vodrk*Hy`r~=868`#_Q>sGcpLhg1PIrxOY6`v^baTo8H>?oP-4hmqlz2VU- zoYNu9&u*8?^qDq#)y#s$#52*BFVpgb46y$6$wVaZ^#wV`2XNenNBwABZn^a=FwO;}qS+lq`KX69x}eT){@j+y1(?kQ+= zkDMi^6CR_2=LzWPt4h38Q&6TF_UZkpLI{!Wn#X^QIoH&9Y0LZr(#h&lapYSI*FbQ? z9IuVU`n4oj3^`?EVteyfw}tVr$mhpf)&0SlhK-zwn~LN_%})~e!>pZ6v<7<@6> zJp@01#}HV19LQYxH!bfjmcM8`s+J_EbI^Tz-QQeP10TngzFMDBt%ux0IK}XUYnywY zA{Ot}nGSxnHnKFeEe1r-DzSNc>mzFjOwJ#1ZYEfoza#5!%vihK#Fbp}A765GpE9uy z|GfVu?p@Scebg}hMkViYDj9S~e|Z~_zo)Mukux=`6HhC`r@C{RAbDVqfYf2VP9xY0 z@)!D#Ka`sLQ@~{t?32#_)n}oHz#aPELVC+aIa|bqVuuzV{p|*6KpyE4EJc_#9O7EZ z;g5qw5`+Y#jLTp_20tDr`qgUSbjR(3?S0u2jqhWme-b5MYL}kVpS6{|(5T6MB8l_s zV<WZ!gH>5t)1 zG14QS8*~RvjqVuHZF7@UY@7Lm$7vGqn&!|vG*Gvi)e$Gb8pYw9t%T8cJnub!xH#J} zJ1%iK-z^z@1ZkMC2XDmuB3M{FeBv+8;Q^@u30!>qSP@^eN>0x%e0hd_P+1Ka5gZcl z>+GSck|uC(HfKlH8!2Z*FM!YJbYjFWKn_#nl0qh89wewJ1_u0DxfW2=Yv$Y5ucqNh zIS}{|lDv&LjhjT!2|)cCkF&|mKZ(G9&r^w#Lc&AFh2k>Uu7`O3z@{qaXWSDu$kyrm zQ3GOac0O|-v!#|f+IUWOHf0W{S8&44Sx$Z2H~ZYVG>w#Z{m(3*#gRx;&T{7SDDuGU zL!U=G^Am8FkZhtj4}rIF0Y%W=XG##saZg}aM+p)7WuQ-OrDAKfq8k*QW^@f^r)+EA z?*76PTqGV0GVbN4M@U9LPJ=|)fcLhC1Nz7t+0nIWw8=}a}4O`S=G=Fsegm(u;3R%a%i2w#oXnW&}iA&mnOKN zxPe1En6N2}6Qa*djlWy~b^Bk_X&P_GV8ZCv5*^n0<)l2=M`yidXTG;W#E69-u716f z#bZ*SbgEXzQqYa9O@8MICL9pXi93E#gIB5iJuOp7_IyF}#RmI?-i2zX=c~_P$~Sz` zUwmSSA|JPML^~NmNOPC#1?q#W-_C_@kPaMtOckVJKO|H-n<-tO0c*|vvEwg1X`+pY zwD%gr5TDuG9R{e!YoAwc^cVHrRy!eVihtwcZI``1sW4{Z97HfWQxfTXs30GGfsmmGn5(WYE6d^T#OBZQ;s`gA7zTV)4ZcI(E*EL28Fqt^d=fS_a5xa zj7sxC<_%QVaFFy&OATwI%`Tjq4rax^AXDwoz0CWzf?~j_e{zy>=cq7h{=LwZjV|Zx zCdoa45dmHr$9Qf40*~x2Y8s;eqa`&P5uFN@Tn?{Bfx4Xu?UuC5CGY2pE15b{qHjUb zeXwiQ4`#7k>4|-s^5Lb^g}I6wsdYN{R&#WYjNtiLnJPZnt>pn;gS~ph8p$)uVQKo( z!bk(}7J0$jfrRNz)MFFi>1pf(cSBg^hySDy9+=itf^b6Y;wRb}#?YfTXbfD$-^bmZ z_5gEsHdMO(Xmkoj}@RN$&yyo_eM#PCvanrHhwg>b zlmUy0+iX?I>KpFR9dn!bR7aL3$ANo95YyQ~4|LK)an%&ia0cR4dw&USmvDFr% zJGBcqrr$mE4&vg=OxJ?6k;o+tO)b?>l{lgOI)6K7rPxSWn}P`VFvRT>OMC_+&H;P$ zG?g0=OX{`SeUAmf$s$j$ARLvUd`8_6C)Vuq>F2-mcjb@rH+5iy-AfDuJu~5Ue?i4K zygr(GJ$9MGc5p=^LCecDOp#X`}UK?enlgq(vgAb!+xKn3Rm)nDS}siLk3WWCPeV9zqt<137=q<50O6YHb} zc-GKSegPkr+V`%V)5~D>dQ3B{I}4rTqw+J@$X@) zMl86dL0wZ9l_cnMr>G^Q^yfa_MlDN-m6_H>9iN^=k056obzj9C-s4KgV>>61X&(;k zNjc@4pq-du)T`y0>fDxb_O4MHH>*6_#%)~BT~emvvz?1iQPWvacULjyonj!Lh$P%D~I8j3_??_ zGb!KQMIaX%brbC?l8=?}n_IV#529uTn-BEpw*h|V-(ZAoV-C{3WTWJj)2=m_yoqQ@ zP_(P&jCaj{vUi8E zw(63;riP|^H}Ea@8YCfZG0K?EO75k+|Lu_D7gd3(ZzS+9pv}i844mCGtZ8K#2Uug4 zPTf5x$(6ZZ(r1N6YQc8;0_QcldJfUymP#UIHU4jIMMfUF1WVuD#TVLxq$It z`hunl!w`1|smB4IDNnqVb2EUxQ11q#-%w#R73rE+gKq8Ae9L&FR6Kxp;(uzzITmJCUC>P23ruXjNeZy5o z^hd(ml`9claAZRE{3C$r&k@*93Cp`JKRh; z{7nu?cZnGsKk}5BqdC-`(FEaM%;_7~SZFdR7Y)xz(*iBcP(SWS0^KGoq7KX!6+ek!?Q6Jy}`m z0+{*)xG?wm7O8|gcQIL`?(p4OZ>KNMirdZXNAeFzG1LIrbr2i?M0o$a3vj&tZlf|Z z2_e90g}Bl$K}8Y=YQ|F;yMj3aCM?M>JO==CI^ zQIqS; z%hfOc^rsoX!?%Z0fC(aAT@XJ)YH>brA0%8j>7iz$z)mOC%m%U~Dlzda(fUcp4s+I% zy2LWH1L~bVrP{0tdNHir6C5j_!)L%@H>{5>k~%#%sRtgx+wVVWHUv^3m2B6M-}$bT zg94pv*@s2nJ*FSQLC_;E%$Kj;9BdFzx&?DDw3XY{$BU?Dhm3^XNr`q& zRJF~vT{A=Gm=?2WrwkK92Ri!qjii**7XHX%XmwfWYnFnIIl;(|Iao!e z{6rS^yy$=~^C#F{j-fZT{`{mz+gc7LLi7`!WZ_(?I8nitun7BPT5Z-A_!e}xch$GJ z%tIVbj(1S<$Vm;r@1GL{_*0e2@1ou%KMzbYhN*Gv4;w#`wJ4X%vS2kOMXKplToO6Y z^M|&%hrBzP06cWgQw!q{S{oamdd5=z4BNZB$)n=n)0sZ^8P$lKQ2=InV~(ywlY@r7 zduttRC#>qZgP%Ts)I{VI{SM)XYMvdr7B8h#6;L105PFCh*k*@ue>xo)Im&CqVKxCZ zZu_vuoeTcc0h58G^l>nPC4PVY8{_Y{gu|xX1egs9rU-cPE7CeFy)WQ}QPDX=xdA6o zK9xZBRWGIL?hw3L@$7o`&}Ii;<}tdn?2~BUbaWX!XP8O)Jo`vue}L^GPN_WT(#T`a z1^f1XN6@(fRn$u@6aYsX?QK9Bbi-7V!9i&c5m%I`dZbl_1@pok+fJ$mL*k)0Lpc>Y zeQzZWn+sKX(F8|(>!h>6sxV8zx7`^7VC^N1-eAeBM!oWGNhn?RHrjA+Zpodu3tBQ7au(um9NXki zr`{Cqa4Iq`7BY{2%10VEklvYD_b%_sfaA1D|7Q)SwqxMpvovmTnzsb-&?$E)Q}?8{ zT#pU-EHjO5Cxg|x$1#f{_emTYZ`^7->aC2zT*($6N8hJ=E!e;6-!*s}bRmfi*H4f{ zz}V>>UX0HSPQxkOSth7PLW7m7YtSXRoho03oXhd1p)K*Wc!}YO6GnM4I9Dfp0`{qd z?@EI!%)b5l4*JPC4>#-#1CoRS6H9GHT`pP0&e<)q!x^h2n)GgAfG4u!Jk_|LM;6YH zr(R4pQnvn##4UzmtRS4e1-)0QyF5=T72Aln@Kjb0Aqe-FcK zd<1y5r)I2ryBwO1kkUS-Vms8dRVLgGT^JtgqcV|3loJBKUv>y6X7sXGy6B+1pe#wS zY(Q^Fu-BJtXJSo%2xAHu$`OaBg%&)IV-xoGd82P+YNsZ)e_q>*gSpQMJjz&=Aj$BAB3aMG0F+_dTZo8lTBOE3` zYGyqS+7IYkEnkp|Pfn&sD-erzuVz0dNaU_QlNS`gIQcxZyHS9c4b-XUPF9+QXBHm+ojO)_LY2s6Q3szAuyQx&cFyi3DbaBj zOhH*IfIZ}*Dkc5?fKMj+rG%kQ??1uyFHjL?yobLM(45@#{liUMZw zZI&)}BQ{R{A2SY8Y8khqs_mFZYnSwBXy=|MzS~?r0ac$ZWs7#ah*%>khPtE6qg0^URLt5dS`;AfpE4TgoLgXjTsf6)t_kHYsV4B> z0CL!?nF-3W7@VhYO&VF8X^k{6#4BCpViSp`y+1Ht5RdTlJluB}P zGFLKn5C_pO?}y7de8o^XqIfsKwc%gjmfFSdJ24`9_x;9ZqvDc$00z%DT<iL=yv~k4`rHEEyuqOCbZr0wO8MVgk%ezIO+Y4Bfj9Wdpyc7t zrFx!GZiXZF&|NBz3sPL8x3h1}0Y4InZn35Hu;9>(E$Chj#JU$GiPJ@ck3hx8Q=bHu zQF%-4oa9c@-8J<_oO8TjA2_&Bq$N}KFOJ%b<`{p6gru|d?X|yvb=fbXJU~Ta;%p7LC?FX)y-9jz=T;r-bAL@N4kJ=oKtpB^-+v?`jn_P# zohZb2#uCcy;b^ME`GqwDgB}iS2?tx?q#VQ^LR|Oo>bdj!fTnxO5bhnA9Y%lz?lY*2 z@$9^24IxGSsRnAag~l-dF}iCKfC|2khjs$uUVKmJE=pyvQd$_6SCZKD#xF|i=?G!I zlK1Ljq|RIT5df1y^^(oB2Yaanr3pkx?Dq+xf8Fq}*S1{Mvx4?*KW;2`32i`=w zY?L%b`J;1bARajZGkv7~)e{|@wnqg#ruAhRhK%{8U?bF}V_#c%+Jdb6$zyhx5~m=9 z9x0ht`P#aBYgt8s6`ArT*hgjBqPH7ivZ-9`Q)gl?sBjKZ?%`4jcDYB%F)rph;gc=? zD@5Rw0YC^3@a>uC(}qJ~)QN}M>U-=8`bBIMk|CMx;DZZ@m9KNMGcCUw&IJga(bjA4 z9TzC?5z2JGCY`uOUqOpPn0zKwKJ@lk3gde=I9yW;bx^kPqKfUZ#Q8>}CejLOhWm6Q z@wl0{OUYKVJm+a@313sBcdbsI$dw`Gqx`p`3SYY@kA`2YAI=`%p+g`d;0pGAW{7ry zGVxm1n_+X%0mU1qiiR-{;7Qz*Hch(5nKM>GNl)Z;V4Nct5&Jv8o7t1!Q+H)1)FxKl zAff&6yR3Y0taL1>1|k$Y{V~B8*2nG^)lskkRdRHnrwrbJp}o7(cTd_Fb#=ytg^}0X zx#1}9>n88!Le}zlYYil1;c^>*AJ*CTbF8riVwc&ny^ubfyGz5T}XLsBbrO zAwQQcDJX6(IY>Kdz87iYT@@DDl3#>yz_xvFIIW~08|VVO1?kAhN>oBFR!82e92gPS zjX7CQE*Buq214qj#+ZOpXm_o|rwQJ8Iy$E#Nc(ho|0_Fg#Q3nRMqgml>?3Cq2UOgV zB$D2*p(^mOwQh`u^GlDZxr41Wx6}Q?w!v&JDZ7aRfE`i%k2)NA)qL!3+%9^GvAdTB z;$2`&;h`ekzd}k6dD}2P4Qxy?v{f`aHzGDkW!%>BnxM3e_Zi%8$G|3lBKheieG<-9 z&nFoF3;~hGX&Xob;_oypuLHV&;FdoJnj56{dx1V};4N0<#K6FGuXU>jUq#OUq#;4IKZS=>!E^nA=<`ME;zj}fDN)w&K{ z`+0Kj#fRm_SAUH%=$DfBA(W5l6zK=PfwYkSmJRsI=ht`@XB3d~Yv*1&r8V#z@O*Si zDj(-ezDK2P6s65H`M~fX^varyEH4_8s<}t6*X4+v1(q-yV0XctN5;E`Vc(=2KY4`k zcCo>75pUv1dOaIBen!TUl{?{4Umao$Su$JFwV7OD6`!lP_fSU$x~8k`iw5MhO00?= zoURBh^n7^X@=*C+HfAlWviP|9Z~shHyC5nDfjqr<@1JCI6r@IqKGk(-Tqtnki}VYy(}9^^|ZPv zqxJncB)5H+PfF3)jG`_CXg=DVB`-#Yn6~%857=rGek+fog$-~5x-wc8#E8Y;XoEz4x$6h24&UI z-~jyY!VY~5fo`WOIvGD&M0uViUnew$@^(3sJikd0X$W|*=#Y2YmgjSM4;8O#U zwf3l;pVywf=ehW6c?FCpw@|iD8{{-1@!0T6oWlK}%yzbkk>GVQdAykW1)hoU1REt7 zPkq+bnUkWk#&&Q6?}s1cvyqvE0%vyC9V0e+))J?RG1_=w!B9|6Z$dlV`8n7C;+3K!*d z;M>YG-#P5K(osHhC`8TH0jwPmU|m7D2%K8QE|2NKkYG16cW02PsVf<-IXS z)n@5B1_}a>z$~T)gN5YJJo(&os@9ZNILs9Gw(;6 z@f+Kuy&^w_XVfsWj^fi)D497BUUW3np>XaPj$vbag<%Q^p?~V-G0lF3K%}sY~K#nz?o>oj4S(JT4t+}yJUq* zdq94(>8P)vq$#2@F17sI2pZr>8;vaKPVZ1ZI%ySdbGr)M70HP~1j(#Vl~Ut|lc%Ha zJ?E#RPdU!(Ae}gq zJZ%mksCLh&7zmWOLyHT^8Z>?}yDI<)(haNC^*Aaaf|r*%1(dP{Rn{aA6^((CI-+gG zy~(r{M>)cN7VVm_MMloKi!#;7&)samP6|VO(d3>w);%-FWd?;Zx b3RF0eGJ`!~>AC$EA;9dc)tU0s?$Q4P3fSHz diff --git a/prototypes/sdl/main.c b/prototypes/sdl/main.c deleted file mode 100644 index 8d13bfa4..00000000 --- a/prototypes/sdl/main.c +++ /dev/null @@ -1,370 +0,0 @@ -#include "SDL.h" -#include "SDL_opengl.h" -#include "SDL_image.h" - -#include -#include -#include - -#define WIDTH 640 -#define HEIGHT 480 - -static const char * IMAGE_FILE = "example.png"; - -GLfloat yaw; -GLfloat pitch; -int level; - -static void -subdivide (GLfloat point0[3], GLfloat point1[3], GLfloat point2[3], int level) -{ - int coord; - GLfloat midpoint[3][3]; - - /* Don't subdivide any further; just draw the triangle */ - if (level==0) - { - glColor3fv (point0); - glVertex3fv (point0); - glColor3fv (point1); - glVertex3fv (point1); - glColor3fv (point2); - glVertex3fv (point2); - return; - } - - /* Calculate a midpoint on each edge of the triangle */ - for (coord = 0; coord<3; coord++) - { - midpoint[0][coord] = (point0[coord] + point1[coord])*0.5; - midpoint[1][coord] = (point1[coord] + point2[coord])*0.5; - midpoint[2][coord] = (point2[coord] + point0[coord])*0.5; - } - - /* Subdivide each triangle into three more */ /* . */ - level--; /* /X\ */ - subdivide (point0,midpoint[0],midpoint[2],level); /* /xxx\ */ - subdivide (point1,midpoint[1],midpoint[0],level); /* /X\ /X\ */ - subdivide (point2,midpoint[2],midpoint[1],level); /* /XXXVXXX\ */ -} - -static void -paint_triangles () -{ - int i; - - /* Coordinates of the 6 vertices of the octahedron */ - static GLfloat point[6][3] = { - {1.0f,0.0f,0.0f},{-1.0f,0.0f,0.0f}, - {0.0f,1.0f,0.0f},{0.0f,-1.0f,0.0f}, - {0.0f,0.0f,1.0f},{0.0f,0.0f,-1.0f} - }; - - /* indices of the vertices of the triangles which make up each of - * the 8 faces of the octahedron */ - static int triangle[8][3] = { - {2,4,0},{2,0,5},{2,5,1},{2,1,4},{3,0,4},{3,5,0},{3,1,5},{3,4,1} - }; - - /* Rotate the object */ - glRotatef (pitch, 1.0f, 0.0f, 0.0f); - glRotatef (yaw, 0.0f, 1.0f, 0.0f); - - /* Draw the triangles which make up the object */ - glBegin (GL_TRIANGLES); - - for (i=0; i<8; i++) - { - subdivide (point[triangle[i][0]],point[triangle[i][1]],point[triangle[i][2]],level); - } - - glEnd (); - - /* increment the rotation every frame */ - yaw = yaw + 0.05; -} - -static void -paint_begin () -{ - /* Clear the color plane and the z-buffer */ - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glLoadIdentity (); - - /* Move the object 2 units away from the camera */ - glTranslatef (0.0f, 0.0f, -2.0f); -} - - -static void -paint_end () -{ - /* finally, swap the back and front buffers */ - SDL_GL_SwapBuffers (); -} - -static void -setup_sdl () -{ - const SDL_VideoInfo* video; - int img_flags; - int img_initted; - - if (SDL_Init (SDL_INIT_VIDEO) < 0 ) - { - fprintf (stderr, "Couldn't initialize SDL: %s\n", SDL_GetError ()); - exit (1); - } - - /* Quit SDL properly on exit */ - atexit (SDL_Quit); - - /* Get the current video information */ - video = SDL_GetVideoInfo ( ); - if ( video == NULL ) - { - fprintf (stderr, "Couldn't get video information: %s\n", SDL_GetError ()); - exit (1); - } - - /* Set the minimum requirements for the OpenGL window */ - SDL_GL_SetAttribute ( SDL_GL_RED_SIZE, 5 ); - SDL_GL_SetAttribute ( SDL_GL_GREEN_SIZE, 5 ); - SDL_GL_SetAttribute ( SDL_GL_BLUE_SIZE, 5 ); - SDL_GL_SetAttribute ( SDL_GL_DEPTH_SIZE, 16 ); - SDL_GL_SetAttribute ( SDL_GL_DOUBLEBUFFER, 1 ); - - /* Note the SDL_DOUBLEBUF flag is not required to enable double - * buffering when setting an OpenGL video mode. - * Double buffering is enabled or disabled using the - * SDL_GL_DOUBLEBUFFER attribute. - */ - if ( SDL_SetVideoMode ( WIDTH, HEIGHT, video->vfmt->BitsPerPixel, SDL_OPENGL ) == 0 ) - { - fprintf (stderr, "Couldn't set video mode: %s\n", SDL_GetError ()); - exit (1); - } - - img_flags = IMG_INIT_JPG | IMG_INIT_PNG; - img_initted = IMG_Init (img_flags); - if (img_initted & img_flags != img_flags) - { - printf ("IMG_Init: Failed to init required jpg and png support!\n"); - printf ("IMG_Init: %s\n", IMG_GetError ()); - exit (1); - } -} - -static void -setup_opengl () -{ - float aspect = (float)WIDTH / (float)HEIGHT; - - /* Make the viewport cover the whole window */ - glViewport (0, 0, WIDTH, HEIGHT); - - /* Set the camera projection matrix: - * field of view: 90 degrees - * near clipping plane at 0.1 - * far clipping plane at 100.0 - */ - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - - gluPerspective (60.0, aspect, 0.1, 100.0); - /* We're done with the camera, now matrix operations - * will affect the modelview matrix - * */ - glMatrixMode (GL_MODELVIEW); - - /* set the clear color to gray */ - glClearColor (0.5, 0.5 ,0.5, 0); - - /* We want z-buffer tests enabled*/ - glEnable (GL_DEPTH_TEST); - - /* Do draw back-facing polygons*/ - glDisable (GL_CULL_FACE); -} - -static void -EnableTransparency () -{ - glEnable (GL_BLEND); - glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); -} - -static GLuint -LoadTexture(const char *filename, int *textw, int *texth) -{ - SDL_Surface *surface; - GLuint textureid; - int mode; - - surface = IMG_Load (filename); - - // Or if you don't use SDL_image you can use SDL_LoadBMP here instead: - // surface = SDL_LoadBMP(filename); - - // could not load filename - if (! surface) - { - return 0; - } - - // work out what format to tell glTexImage2D to use... - if (surface->format->BytesPerPixel == 3) - { // RGB 24bit - mode = GL_RGB; - } - else if (surface->format->BytesPerPixel == 4) - { // RGBA 32bit - mode = GL_RGBA; - } - else - { - SDL_FreeSurface (surface); - return 0; - } - - *textw = surface->w; - *texth = surface->h; - // create one texture name - glGenTextures (1, &textureid); - - // tell opengl to use the generated texture name - glBindTexture (GL_TEXTURE_2D, textureid); - - // this reads from the sdl surface and puts it into an opengl texture - glTexImage2D (GL_TEXTURE_2D, 0, mode, surface->w, surface->h, 0, mode, GL_UNSIGNED_BYTE, surface->pixels); - - // these affect how this texture is drawn later on... - glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - - // clean up - SDL_FreeSurface (surface); - - printf ("Loaded image %s %dx%d\n", filename, *textw, *texth); - - return textureid; -} - -static void -DrawTexture(int x, int y, GLuint textureid, int textw, int texth) -{ - // tell opengl to use the generated texture name - glBindTexture (GL_TEXTURE_2D, textureid); - glEnable (GL_TEXTURE_2D); - - // make a rectangle - glBegin (GL_QUADS); - - // top left - glTexCoord2i (0, 0); - glVertex3f (x, y, 0); - - // top right - glTexCoord2i (1, 0); - glVertex3f (x + textw, y, 0); - - // bottom right - glTexCoord2i (1, 1); - glVertex3f (x + textw, y + texth, 0); - - // bottom left - glTexCoord2i (0, 1); - glVertex3f (x, y + texth, 0); - - glEnd (); - - glDisable (GL_TEXTURE_2D ); -} - -static void -main_loop () -{ - SDL_Event event; - - GLuint texture; - int textw, texth; - - printf ("Loading texture %s\n", IMAGE_FILE); - texture = LoadTexture (IMAGE_FILE, &textw, &texth); - - while (1) - { - /* process pending events */ - while (SDL_PollEvent (&event)) - { - switch (event.type) - { - case SDL_KEYDOWN: - switch (event.key.keysym.sym) - { - case SDLK_ESCAPE: - exit (0); - break; - - case SDLK_KP_PLUS: - level++; - if (level > 5) - level=5; - break; - - case SDLK_KP_MINUS: - level--; - if (level < 0) - level=0; - break; - - default: - //no default key processing - // (stops compiler warnings for unhandled SDL keydefs - break; - } - break; - - case SDL_MOUSEMOTION: - pitch += event.motion.yrel; - if (pitch < -70) - pitch = -70; - if (pitch > 70) - pitch = 70; - break; - - case SDL_QUIT: - exit (0); - break; - } - } - - /* update the screen */ - paint_begin (); - paint_triangles (); - glColor3f (1.0, 1.0, 1.0); - DrawTexture (0, 0, texture, textw, texth); - paint_end (); - - /* Wait 50ms to avoid using up all the CPU time */ - SDL_Delay (50); - } -} - - -int -main (int argc, char* argv[]) -{ - setup_sdl (); - - setup_opengl (); - - yaw = 45; - pitch = 0; - level = 2; - - main_loop (); - - return 0; -} diff --git a/prototypes/sh-osx-gst-test.sh b/prototypes/sh-osx-gst-test.sh deleted file mode 100755 index 9405310b..00000000 --- a/prototypes/sh-osx-gst-test.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -set -o verbose -#export GST_PLUGIN_PATH=/Library/Frameworks/GStreamer.framework/Libraries -export LANG=C -# export GST_DEBUG=3 -#FILEPATH=/Users/aalex/Desktop/mapmap-videos/BonneFete.mov -FILEPATH=/Users/aalex/Downloads/sintel_trailer-480p.ogv - -gst-launch-0.10 uridecodebin uri=file://${FILEPATH} ! ffmpegcolorspace ! autovideosink - diff --git a/prototypes/shm/read.sh b/prototypes/shm/read.sh deleted file mode 100755 index 46806fb3..00000000 --- a/prototypes/shm/read.sh +++ /dev/null @@ -1,5 +0,0 @@ -gst-launch-0.10 -e shmsrc socket-path=/tmp/test is-live=1 ! \ - video/x-raw-yuv,format=\(fourcc\)I420,framerate=30/1,width=640,height=480 ! \ - xvimagesink - - diff --git a/prototypes/shm/write.sh b/prototypes/shm/write.sh deleted file mode 100755 index 14b1f667..00000000 --- a/prototypes/shm/write.sh +++ /dev/null @@ -1,5 +0,0 @@ -gst-launch-0.10 -v videotestsrc ! \ - 'video/x-raw-yuv, width=640, height=480, framerate=30/1, format=(fourcc)I420' ! \ - shmsink socket-path=/tmp/test shm-size=10000000 wait-for-connection=0 - - diff --git a/prototypes/wx/wx-01-simple/build.sh b/prototypes/wx/wx-01-simple/build.sh deleted file mode 100755 index 91a8fec9..00000000 --- a/prototypes/wx/wx-01-simple/build.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -# libwxgtk2.8-dev -g++ main.cpp -o run `wx-config --libs --cxxflags --gl-libs` -lglut -lGL -lSOIL -I/usr/include diff --git a/prototypes/wx/wx-01-simple/example.png b/prototypes/wx/wx-01-simple/example.png deleted file mode 100644 index ffb8a2c1664e7ea2a0b61fce458c9c555c71638c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13385 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 b3RF0eGJ`!~>AC$EA;9dc)tU0s?$Q4P3fSHz diff --git a/prototypes/wx/wx-01-simple/main.cpp b/prototypes/wx/wx-01-simple/main.cpp deleted file mode 100644 index 7de3b8bc..00000000 --- a/prototypes/wx/wx-01-simple/main.cpp +++ /dev/null @@ -1,373 +0,0 @@ -// NOTE: To run, it is recommended not to be in Compiz or Beryl, they have shown some instability. -// Needs: libwxgtk2.8-dev libsoil-dev -// g++ main.cpp -o run `wx-config --libs --cxxflags --gl-libs` -lSOIL - -#include -#include -#include -#include -#include - -#ifndef WIN32 -#include // FIXME: ¿This work/necessary in Windows? - //Not necessary, but if it was, it needs to be replaced by process.h AND io.h -#endif - -typedef struct _Quad -{ - int x1; - int x2; - int x3; - int x4; - int y1; - int y2; - int y3; - int y4; -} Quad; - -static void -move_point (Quad *src, Quad *dst, int index, int x, int y) -{ - printf ("move_point (index=%d, x=%d, y=%d)\n", index, x, y); - switch (index) - { - case 1: - src->x1 += x; - src->y1 += y; - break; - case 2: - src->x2 += x; - src->y2 += y; - break; - case 3: - src->x3 += x; - src->y3 += y; - break; - case 4: - src->x4 += x; - src->y4 += y; - break; - case 5: - dst->x1 += x; - dst->y1 += y; - break; - case 6: - dst->x2 += x; - dst->y2 += y; - break; - case 7: - dst->x3 += x; - dst->y3 += y; - break; - case 8: - dst->x4 += x; - dst->y4 += y; - break; - } -} - -GLuint load_image (const char *imagepath, float *image_width, float *image_height) -{ - int width, height; - GLuint textureID = 0; - - unsigned char * data = - SOIL_load_image(imagepath, &width, &height, 0, SOIL_LOAD_RGB ); - textureID = SOIL_create_OGL_texture ( - data, width, height, 3, textureID, 0); - - // TODO: free data? - - (* image_width) = width; - (* image_height) = height; - - return textureID; -} - -class wxGLCanvasSubClass: public wxGLCanvas -{ - void Render(); - public: - wxGLCanvasSubClass(wxFrame* parent); - void Paintit(wxPaintEvent& event); - void movePoint(int index, int x, int y); - protected: - DECLARE_EVENT_TABLE() - private: - GLuint texture; - float image_width; - float image_height; - Quad src; - Quad dst; - - void OnChar(wxKeyEvent & event); - - void OnMouseEvent(wxMouseEvent& event); - void setup_texture(); -}; - -BEGIN_EVENT_TABLE(wxGLCanvasSubClass, wxGLCanvas) - EVT_PAINT (wxGLCanvasSubClass::Paintit) - EVT_KEY_DOWN (wxGLCanvasSubClass::OnChar) - EVT_MOUSE_EVENTS(wxGLCanvasSubClass::OnMouseEvent) -// EVT_ENTER_WINDOW(wxGLCanvasSubClass::OnMouseEnter) -END_EVENT_TABLE() - -wxGLCanvasSubClass::wxGLCanvasSubClass(wxFrame *parent) -:wxGLCanvas(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, wxT("GLCanvas")) -{ - int argc = 1; - char* argv[1] = { wxString((wxTheApp->argv)[0]).char_str() }; -} - -void wxGLCanvasSubClass::Paintit(wxPaintEvent& WXUNUSED(event)) -{ - Render(); -} - -void wxGLCanvasSubClass::OnChar(wxKeyEvent & event) -{ - static int current = 0; - printf("hello"); - switch (event.GetKeyCode()) - { - case WXK_TAB: - current = (current + 1) % 8; - printf ("Current = %d\n", current); - break; - case WXK_UP: - move_point (&src, &dst, current + 1, 0, 1); - break; - case WXK_DOWN: - move_point (&src, &dst, current + 1, 0, -1); - break; - case WXK_LEFT: - move_point (&src, &dst, current + 1, -1, 0); - break; - case WXK_RIGHT: - move_point (&src, &dst, current + 1, 1, 0); - break; - default: - printf ("Unhandled key"); - break; - } - Render(); -} - -void wxGLCanvasSubClass::OnMouseEvent(wxMouseEvent& event) -{ - printf("x=%d y=%d LeftIsDown=%d\n", event.GetX(), event.GetY(), (int)event.LeftIsDown()); - SetFocus(); -} - -void wxGLCanvasSubClass::setup_texture() -{ - texture = load_image ("example.png", &image_width, &image_height); - - //source - src.x1 = 0; - src.y1 = 0; - - src.x2 = 320; - src.y2 = 0; - - src.x3 = 320; - src.y3 = 240; - - src.x4 = 0; - src.y4 = 240; - - //destination - dst.x1 = -320; - dst.y1 = -240; - - dst.x2 = 0; - dst.y2 = -240; - - dst.x3 = 0; - dst.y3 = 0; - - dst.x4 = -320; - dst.y4 = 0; // 240; -} - -void wxGLCanvasSubClass::Render() -{ - static bool texture_is_set = false; - float ratio; - - SetCurrent(); - wxPaintDC dc(this); - - if (! texture_is_set) - { - this->setup_texture(); - texture_is_set = true; - } - ratio = (float) GetSize().x / (float) GetSize().y; - - glClearColor(0, 0, 0, 0); - glClear(GL_COLOR_BUFFER_BIT); -// glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glViewport(0, 0, (GLint) GetSize().x, (GLint) GetSize().y); - - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - glOrtho (-ratio, ratio, -1.f, 1.f, 1.f, -1.f); - glMatrixMode (GL_MODELVIEW); - - glLoadIdentity (); - - // Now, draw - // DRAW THE TEXTURE - glPushMatrix (); - - // Enable blending mode (for alphas). - glEnable (GL_BLEND); - glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - - glDisable (GL_LIGHTING); - glEnable (GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, texture); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - - - // Draw source texture (not moving). - glColor4f (1, 1, 1, 0.5f); - glBegin (GL_QUADS); - { - glTexCoord2f (0, 0); - glVertex3f (0, 0, 0); - - glTexCoord2f (1, 0); - glVertex3f (1, 0, 0); - - glTexCoord2f (1, 1); - glVertex3f (1, 1, 0); - - glTexCoord2f (0, 1); - glVertex3f (0, 1, 0); - } - glEnd (); - - // Project source texture and sent it to destination. - glColor4f (1, 1, 1, 1.0f); - glBegin (GL_QUADS); - { - glTexCoord2f (src.x1 / image_width, src.y1 / image_height); - glVertex3f (dst.x1 / image_width, dst.y1 / image_height, 0); - - glTexCoord2f (src.x2 / image_width, src.y2 / image_height); - glVertex3f (dst.x2 / image_width, dst.y2 / image_height, 0); - - glTexCoord2f (src.x3 / image_width, src.y3 / image_height); - glVertex3f (dst.x3 / image_width, dst.y3 / image_height, 0); - - glTexCoord2f (src.x4 / image_width, src.y4 / image_height); - glVertex3f (dst.x4 / image_width, dst.y4 / image_height, 0); - } - glEnd (); - - glDisable(GL_TEXTURE_2D); - - glColor4f (1, 1, 1, 1); - - // Source quad. - glLineWidth(5); - glBegin (GL_LINE_STRIP); - { - glVertex3f(src.x1 / image_width, src.y1 / image_height, 0); - glVertex3f(src.x2 / image_width, src.y2 / image_height, 0); - glVertex3f(src.x3 / image_width, src.y3 / image_height, 0); - glVertex3f(src.x4 / image_width, src.y4 / image_height, 0); - glVertex3f(src.x1 / image_width, src.y1 / image_height, 0); - } - glEnd (); - - glColor4f (1, 0, 0, 1); - - // Destination quad. - glBegin (GL_LINE_STRIP); - { - glVertex3f(dst.x1 / image_width, dst.y1 / image_height, 0); - glVertex3f(dst.x2 / image_width, dst.y2 / image_height, 0); - glVertex3f(dst.x3 / image_width, dst.y3 / image_height, 0); - glVertex3f(dst.x4 / image_width, dst.y4 / image_height, 0); - glVertex3f(dst.x1 / image_width, dst.y1 / image_height, 0); - } - glEnd (); - - glDisable (GL_TEXTURE_2D); - glPopMatrix (); - - // Done drawing - - glFlush(); - SwapBuffers(); -} - -void wxGLCanvasSubClass::movePoint(int index, int x, int y) -{ - move_point (&src, &dst, index, x, y); -} - -class MyApp: public wxApp -{ - private: - virtual bool OnInit(); - wxGLCanvasSubClass * MyGLCanvas; - int FilterEvent(wxEvent& event); -}; - -int MyApp::FilterEvent(wxEvent& event) -{ - static int current = 0; - if ((event.GetEventType() == wxEVT_KEY_DOWN)) - { - switch (((wxKeyEvent&)event).GetKeyCode()) - { - case WXK_TAB: - current = (current + 1) % 8; - printf ("Current = %d\n", current); - return true; - break; - case WXK_UP: - MyGLCanvas->movePoint(current + 1, 0, 1); - return true; - break; - case WXK_DOWN: - MyGLCanvas->movePoint(current + 1, 0, -1); - return true; - break; - case WXK_LEFT: - MyGLCanvas->movePoint(current + 1, -1, 0); - return true; - break; - case WXK_RIGHT: - MyGLCanvas->movePoint(current + 1, 1, 0); - return true; - break; - default: - printf ("Unhandled key"); - break; - } - } - return -1; -} - -IMPLEMENT_APP(MyApp) - -bool MyApp::OnInit() -{ - wxFrame *frame = new wxFrame((wxFrame *) NULL, -1, wxT("Hello GL World"), wxPoint(50, 50), wxSize(640, 480)); - MyGLCanvas = new wxGLCanvasSubClass(frame); - -// frame->SetWindowStyle(wxWANTS_CHARS); - frame->Show(TRUE); - return TRUE; -} diff --git a/prototypes/wx/wx-02-input-output/Common.cpp b/prototypes/wx/wx-02-input-output/Common.cpp deleted file mode 100644 index 8f6ee49f..00000000 --- a/prototypes/wx/wx-02-input-output/Common.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Common.cpp - * - * (c) 2013 Sofian Audry -- info(@)sofianaudry(.)com - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "Common.h" - -std::tr1::shared_ptr Common::currentMapping; -std::tr1::shared_ptr Common::currentMapper; - -void Common::initializeLibremapper(int frameWidth, int frameHeight) { - Image* img = new Image("example.png"); - - float centerX = frameWidth / 2; - float centerY = frameHeight / 2; - float textureHalfWidth = img->getWidth() / 2; - float textureHalfHeight = img->getHeight() / 2; -// printf("Common: %f %f %f %f\n", centerX, centerY, textureHalfWidth, textureHalfHeight); - - TextureMapping* tm = new TextureMapping( - img, - - // Destination. - new Quad(Point(centerX-textureHalfWidth, centerY-textureHalfHeight), - Point(centerX+textureHalfWidth, centerY-textureHalfHeight), - Point(centerX+textureHalfWidth, centerY+textureHalfHeight), - Point(centerX-textureHalfWidth, centerY+textureHalfHeight)), - - // Input. - new Quad(Point(centerX-textureHalfWidth, centerY-textureHalfHeight), - Point(centerX+textureHalfWidth, centerY-textureHalfHeight), - Point(centerX+textureHalfWidth, centerY+textureHalfHeight), - Point(centerX-textureHalfWidth, centerY+textureHalfHeight)) - ); - Common::currentMapping.reset( tm ); - Common::currentMapper.reset( new QuadTextureMapper( tm ) ); -} - diff --git a/prototypes/wx/wx-02-input-output/Common.h b/prototypes/wx/wx-02-input-output/Common.h deleted file mode 100644 index ede3e08d..00000000 --- a/prototypes/wx/wx-02-input-output/Common.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Common.h - * - * (c) 2013 Sofian Audry -- info(@)sofianaudry(.)com - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - - -#ifndef COMMON_H_ -#define COMMON_H_ - -#include - -#include "Paint.h" -#include "Shape.h" -#include "Mapper.h" - -class Common { -public: - static std::tr1::shared_ptr currentMapping; - static std::tr1::shared_ptr currentMapper; - - static void initializeLibremapper(int frameWidth, int frameHeight); -}; - -#endif /* COMMON_H_ */ diff --git a/prototypes/wx/wx-02-input-output/DestinationGLCanvas.cpp b/prototypes/wx/wx-02-input-output/DestinationGLCanvas.cpp deleted file mode 100644 index 5b32167a..00000000 --- a/prototypes/wx/wx-02-input-output/DestinationGLCanvas.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/* - * DestinationGLCanvas.cpp - * - * (c) 2013 Sofian Audry -- info(@)sofianaudry(.)com - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "DestinationGLCanvas.h" - -DestinationGLCanvas::DestinationGLCanvas(wxFrame *parent) : - MapperGLCanvas(parent) { -// int argc = 1; -// char* argv[1] = { wxString((wxTheApp ->argv)[0]).char_str() }; -} - -void DestinationGLCanvas::doRender() { - // TODO: Ceci est un hack necessaire car tout est en fonction de la width/height de la texture. - // Il faut changer ca. - std::tr1::shared_ptr textureMapping = std::tr1::static_pointer_cast(Common::currentMapping); - wxASSERT(textureMapping != NULL); - - std::tr1::shared_ptr texture = std::tr1::static_pointer_cast(textureMapping->getPaint()); - wxASSERT(texture != NULL); - - if (texture->getTextureId() == 0) - { - texture->loadTexture(); - texture->setPosition( (GetClientSize().x - texture->getWidth()) / 2, - (GetClientSize().y - texture->getHeight()) / 2 ); - } - - // Now, draw - // DRAW THE TEXTURE - glPushMatrix(); - - // Draw the mapping. - Common::currentMapper->draw(); - - // Draw the quad. - Quad& quad = getQuad(); - - glColor4f(1, 0, 0, 1); - - // Destination quad. - // Source quad. - glLineWidth(5); - glBegin (GL_LINE_STRIP); - { - for (int i=0; i<5; i++) { - glVertex3f(quad.getVertex(i % 4).x, - quad.getVertex(i % 4).y, - 0); - } - } - glEnd (); - - glPopMatrix(); -} - diff --git a/prototypes/wx/wx-02-input-output/DestinationGLCanvas.h b/prototypes/wx/wx-02-input-output/DestinationGLCanvas.h deleted file mode 100644 index e6681767..00000000 --- a/prototypes/wx/wx-02-input-output/DestinationGLCanvas.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * DestinationGLCanvas.h - * - * (c) 2013 Sofian Audry -- info(@)sofianaudry(.)com - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef DESTINATIONGLCANVAS_H_ -#define DESTINATIONGLCANVAS_H_ - -#include -#include -#include -#include -#include - -#include "MapperGLCanvas.h" - -class DestinationGLCanvas: public MapperGLCanvas { -public: - DestinationGLCanvas(wxFrame* parent); - - virtual Quad& getQuad() { - std::tr1::shared_ptr textureMapping = std::tr1::static_pointer_cast(Common::currentMapping); - wxASSERT(textureMapping != NULL); - - std::tr1::shared_ptr quad = std::tr1::static_pointer_cast(Common::currentMapping->getShape()); - wxASSERT(quad != NULL); - - return (*quad); - } - -private: - virtual void doRender(); -}; - -#endif /* DESTINATIONGLCANVAS_H_ */ diff --git a/prototypes/wx/wx-02-input-output/Mapper.h b/prototypes/wx/wx-02-input-output/Mapper.h deleted file mode 100644 index a4fb31d1..00000000 --- a/prototypes/wx/wx-02-input-output/Mapper.h +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Mapper.h - * - * (c) 2013 Sofian Audry -- info(@)sofianaudry(.)com - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - - -#ifndef MAPPER_H_ -#define MAPPER_H_ - -#include "Shape.h" -#include "Paint.h" - -#include - -#include -#include -#include -#include -#include - -class Mapping -{ -protected: - std::tr1::shared_ptr _paint; - std::tr1::shared_ptr _shape; - -public: - Mapping(Paint* paint, Shape* shape) - : _paint(paint), _shape(shape) - {} - - virtual void build() { - _paint->build(); - _shape->build(); - } - -public: - std::tr1::shared_ptr getPaint() const { return _paint; } - std::tr1::shared_ptr getShape() const { return _shape; } -}; - -class TextureMapping : public Mapping -{ -private: - std::tr1::shared_ptr _inputShape; - -public: - TextureMapping(Paint* paint, - Shape* shape, - Shape* inputShape) - : Mapping(paint, shape), - _inputShape(inputShape) - {} - - virtual void build() { - Mapping::build(); - _inputShape->build(); - } -public: - std::tr1::shared_ptr getInputShape() const { return _inputShape; } -}; - -class Mapper -{ -protected: - std::tr1::shared_ptr _mapping; - Mapper(Mapping* mapping) : _mapping(mapping) {} - virtual ~Mapper() {} - -public: - virtual void draw() = 0; -}; - -//class ShapeDrawer -//{ -//protected: -// std:tr1::shared_ptr _shape; -// -//public: -// ShapeDrawer(const std:tr1::shared_ptr& shape) : _shape(shape) {} -// virtual ~ShapeDrawer() {} -// -// virtual void draw() = 0; -//}; -// -//class QuadDrawer -//{ -//public: -// QuadDrawer(const std:tr1::shared_ptr& quad) : ShapeDrawer(quad) {} -// -// virtual void draw() { -// std::tr1::shared_ptr quad = std::tr1::static_pointer_cast(_shape); -// wxASSERT(quad != NULL); -// -// glColor4f (1, 1, 1, 1); -// -// // Source quad. -// glLineWidth(5); -// glBegin (GL_LINE_STRIP); -// { -// for (int i=0; i<5; i++) { -// glVertex3f(quad->getVertex(i % 4).x / (GLfloat)texture->getWidth(), -// quad->getVertex(i % 4).y / (GLfloat)texture->getHeight(), -// 0); -// } -// } -// glEnd (); -// } -//}; - -class QuadTextureMapper : public Mapper -{ -public: - QuadTextureMapper(TextureMapping* mapping) : Mapper(mapping) {} - virtual ~QuadTextureMapper() {} - - virtual void draw() { - std::tr1::shared_ptr textureMapping = std::tr1::static_pointer_cast(_mapping); - wxASSERT(textureMapping != NULL); - - std::tr1::shared_ptr texture = std::tr1::static_pointer_cast(textureMapping->getPaint()); - wxASSERT(texture != NULL); - - std::tr1::shared_ptr quad = std::tr1::static_pointer_cast(textureMapping->getShape()); - wxASSERT(quad != NULL); - - std::tr1::shared_ptr inputQuad = std::tr1::static_pointer_cast(textureMapping->getInputShape()); - wxASSERT(inputQuad != NULL); - - printf("Texid: %d\n", texture->getTextureId()); - // Project source texture and sent it to destination. - - glEnable (GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, texture->getTextureId()); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - - glColor4f(1, 1, 1, 1.0f); - glBegin(GL_QUADS); - { - for (int i=0; i<4; i++) - { - glTexCoord2f( ( inputQuad->getVertex(i).x - texture->getX() ) / (GLfloat) texture->getWidth(), - ( inputQuad->getVertex(i).y - texture->getY() ) / (GLfloat) texture->getHeight()); - glVertex3f( quad->getVertex(i).x, - quad->getVertex(i).y, - 0); - } - } - glEnd(); - - glDisable(GL_TEXTURE_2D); - } -}; - - -#endif /* MAPPER_H_ */ diff --git a/prototypes/wx/wx-02-input-output/MapperGLCanvas.cpp b/prototypes/wx/wx-02-input-output/MapperGLCanvas.cpp deleted file mode 100644 index 5142d69f..00000000 --- a/prototypes/wx/wx-02-input-output/MapperGLCanvas.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/* - * MapperGLCanvas.cpp - * - * (c) 2013 Sofian Audry -- info(@)sofianaudry(.)com - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "MapperGLCanvas.h" - -wxGLContext* MapperGLCanvas::sharedContext = 0; - -BEGIN_EVENT_TABLE (MapperGLCanvas, wxGLCanvas) - EVT_PAINT (MapperGLCanvas::Paintit) - EVT_KEY_DOWN (MapperGLCanvas::OnChar) - EVT_MOUSE_EVENTS(MapperGLCanvas::OnMouseEvent) -// EVT_ENTER_WINDOW(MapperGLCanvas::OnMouseEnter) -END_EVENT_TABLE() - - -MapperGLCanvas::MapperGLCanvas(wxFrame *parent) : - wxGLCanvas(parent, sharedContext, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, - wxT("GLCanvas")) { - if (!sharedContext) { - sharedContext = GetContext(); - } - // int argc = 1; - // char* argv[1] = { wxString((wxTheApp ->argv)[0]).char_str() }; -} - -void MapperGLCanvas::Paintit(wxPaintEvent& WXUNUSED(event)) { - GetParent()->Refresh(); - Render(); -} - -void MapperGLCanvas::OnChar(wxKeyEvent & event) { - static int current = 0; - int xMove = 0; - int yMove = 0; - switch (event.GetKeyCode()) { - case WXK_TAB: - current = (current + 1) % 4; - break; - case WXK_UP: - yMove = -1; - break; - case WXK_DOWN: - yMove = +1; - break; - case WXK_LEFT: - xMove = -1; - break; - case WXK_RIGHT: - xMove = +1; - break; - default: - printf("Unhandled key"); - break; - } - - Quad& quad = getQuad(); - Point p = quad.getVertex(current); - p.x += xMove; - p.y += yMove; - quad.setVertex(current, p); - - Render(); -} - -void MapperGLCanvas::OnMouseEvent(wxMouseEvent& event) { - printf("x=%d y=%d LeftIsDown=%d\n", event.GetX(), event.GetY(), - (int) event.LeftIsDown()); - SetFocus(); -} - -void MapperGLCanvas::Render() { - if (!sharedContext) { - sharedContext = GetContext(); - } - SetCurrent(*sharedContext); - wxPaintDC dc(this); - - enterRender(); - doRender(); - exitRender(); -} - -void MapperGLCanvas::enterRender() { - - glClearColor(0.0, 0.0, 0.0, 0.0); - glClear(GL_COLOR_BUFFER_BIT); - glViewport(0, 0, (GLint) GetSize().x, (GLint) GetSize().y); - - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - glOrtho ( - 0.0f, (float) GetSize().x, // left, right - (float) GetSize().y, 0.0f, // bottom, top - -1.0, 1.0f); - glMatrixMode (GL_MODELVIEW); -// glLoadIdentity (); // FIXME? is this needed here? -} - -void MapperGLCanvas::exitRender() { - glFlush(); - SwapBuffers(); -} - - diff --git a/prototypes/wx/wx-02-input-output/MapperGLCanvas.h b/prototypes/wx/wx-02-input-output/MapperGLCanvas.h deleted file mode 100644 index 46351f55..00000000 --- a/prototypes/wx/wx-02-input-output/MapperGLCanvas.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * MapperGLCanvas.h - * - * (c) 2013 Sofian Audry -- info(@)sofianaudry(.)com - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - - -#ifndef MAPPERGLCANVAS_H_ -#define MAPPERGLCANVAS_H_ - -#include -#include - -#include "Common.h" -#include "Shape.h" - -class MapperGLCanvas: public wxGLCanvas { -private: - static wxGLContext* sharedContext; - -public: - MapperGLCanvas(wxFrame* parent); - virtual ~MapperGLCanvas() {} - - virtual void Paintit(wxPaintEvent& event); - - virtual Quad& getQuad() = 0; - -protected: - DECLARE_EVENT_TABLE() - - virtual void Render(); - virtual void enterRender(); - virtual void doRender() = 0; - virtual void exitRender(); - -private: - virtual void OnChar(wxKeyEvent& event); - virtual void OnMouseEvent(wxMouseEvent& event); - -}; - -#endif /* MAPPERGLCANVAS_H_ */ diff --git a/prototypes/wx/wx-02-input-output/Paint.h b/prototypes/wx/wx-02-input-output/Paint.h deleted file mode 100644 index 377cde11..00000000 --- a/prototypes/wx/wx-02-input-output/Paint.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Paint.h - * - * (c) 2013 Sofian Audry -- info(@)sofianaudry(.)com - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - - -#ifndef PAINT_H_ -#define PAINT_H_ - -#include -#include -#include - -class Paint -{ -protected: - Paint() {} -public: - virtual ~Paint() {} - virtual void build() {} -}; - -class Texture : public Paint -{ -protected: - GLuint textureId; - int x; - int y; - - Texture(GLuint textureId_=0) : textureId(textureId_) {} - virtual ~Texture() {} - -public: - GLuint getTextureId() const { return textureId; } - virtual void loadTexture() = 0; - virtual int getWidth() const = 0; - virtual int getHeight() const = 0; - - virtual void setPosition(int xPos, int yPos) { - x = xPos; - y = yPos; - } - virtual int getX() const { return x; } - virtual int getY() const { return y; } -}; - -class Image : public Texture -{ -protected: - std::string imagePath; - int width; - int height; - int x; - int y; - unsigned char* imageData; - -public: - Image(const std::string imagePath_) : Texture(), imagePath(imagePath_), width(-1), height(-1), x(-1), y(-1) { - imageData = SOIL_load_image(imagePath.c_str(), &width, &height, 0, SOIL_LOAD_RGB ); - wxASSERT(imageData); - } - virtual ~Image() {} - - virtual void loadTexture() { - textureId = SOIL_create_OGL_texture ( imageData, width, height, 3, textureId, 0); - // TODO: free data? - } - - virtual void build() { - } - - virtual int getWidth() const { return width; } - virtual int getHeight() const { return height; } - - -}; - -#endif /* PAINT_H_ */ diff --git a/prototypes/wx/wx-02-input-output/Shape.h b/prototypes/wx/wx-02-input-output/Shape.h deleted file mode 100644 index 279e2352..00000000 --- a/prototypes/wx/wx-02-input-output/Shape.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Shape.h - * - * (c) 2013 Sofian Audry -- info(@)sofianaudry(.)com - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - - -#ifndef SHAPE_H_ -#define SHAPE_H_ - -#include -#include - -struct Point -{ - double x; - double y; - Point(double x_, double y_) : x(x_), y(y_) {} -}; - -class Shape -{ -public: - std::vector vertices; - Shape() {} - Shape(std::vector vertices_) : vertices(vertices_) {} - virtual ~Shape() {} - - virtual void build() {} - - const Point& getVertex(int i) { return vertices[i]; } - void setVertex(int i, Point v) { vertices[i] = v; } - void setVertex(int i, double x, double y) - { - vertices[i].x = x; - vertices[i].y = y; - } -}; - -class Quad : public Shape -{ -public: - Quad() {} - Quad(Point p1, Point p2, Point p3, Point p4) { - vertices.push_back(p1); - vertices.push_back(p2); - vertices.push_back(p3); - vertices.push_back(p4); - } - virtual ~Quad() {} -}; - -#endif /* SHAPE_H_ */ diff --git a/prototypes/wx/wx-02-input-output/SourceGLCanvas.cpp b/prototypes/wx/wx-02-input-output/SourceGLCanvas.cpp deleted file mode 100644 index 6ccd03a8..00000000 --- a/prototypes/wx/wx-02-input-output/SourceGLCanvas.cpp +++ /dev/null @@ -1,109 +0,0 @@ -/* - * SourceGLCanvas.cpp - * - * (c) 2013 Sofian Audry -- info(@)sofianaudry(.)com - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "SourceGLCanvas.h" - -SourceGLCanvas::SourceGLCanvas(wxFrame *parent) : - MapperGLCanvas(parent) { -// int argc = 1; -// char* argv[1] = { wxString((wxTheApp ->argv)[0]).char_str() }; -} - -void SourceGLCanvas::doRender() { - // TODO: Ceci est un hack necessaire car tout est en fonction de la width/height de la texture. - // Il faut changer ca. - std::tr1::shared_ptr textureMapping = std::tr1::static_pointer_cast(Common::currentMapping); - wxASSERT(textureMapping != NULL); - - std::tr1::shared_ptr texture = std::tr1::static_pointer_cast(textureMapping->getPaint()); - wxASSERT(texture != NULL); - - if (texture->getTextureId() == 0) { - texture->loadTexture(); - texture->setPosition( (GetClientSize().x - texture->getWidth()) / 2, - (GetClientSize().y - texture->getHeight()) / 2 ); - } - // Now, draw - // DRAW THE TEXTURE - glPushMatrix(); - - // Enable blending mode (for alphas). - glEnable (GL_BLEND); - glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glDisable (GL_LIGHTING); - glEnable (GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, texture->getTextureId()); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - - // TODO: Exact projection of texture - // see http://stackoverflow.com/questions/15242507/perspective-correct-texturing-of-trapezoid-in-opengl-es-2-0 - - // Draw source texture (not moving) in the center of the area. - - float centerX = GetClientSize().x / 2; - float centerY = GetClientSize().y / 2; - float textureHalfWidth = texture->getWidth() / 2; - float textureHalfHeight = texture->getHeight() / 2; - - //printf("SRC: %f %f %f %f\n", centerX, centerY, textureHalfWidth, textureHalfHeight); - glColor4f (1, 1, 1, 1.0f); - glBegin (GL_QUADS); - { - glTexCoord2f (0, 0); - glVertex3f (texture->getX(), texture->getY(), 0); - - glTexCoord2f (1, 0); - glVertex3f (texture->getX()+texture->getWidth(), texture->getY(), 0); - - glTexCoord2f (1, 1); - glVertex3f (texture->getX()+texture->getWidth(), texture->getY()+texture->getHeight(), 0); - - glTexCoord2f (0, 1); - glVertex3f (texture->getX(), texture->getY()+texture->getHeight(), 0); - } - glEnd (); - - glDisable(GL_TEXTURE_2D); - - // Draw the quad. - Quad& quad = getQuad(); - - glColor4f(1, 0, 0, 1); - - // Source quad. - // Source quad. - glLineWidth(5); - glBegin (GL_LINE_STRIP); - { - for (int i=0; i<5; i++) { - glVertex3f(quad.getVertex(i % 4).x, - quad.getVertex(i % 4).y, - 0); - } - } - glEnd (); - - glPopMatrix(); -} - diff --git a/prototypes/wx/wx-02-input-output/SourceGLCanvas.h b/prototypes/wx/wx-02-input-output/SourceGLCanvas.h deleted file mode 100644 index 270bec03..00000000 --- a/prototypes/wx/wx-02-input-output/SourceGLCanvas.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * SourceGLCanvas.h - * - * (c) 2013 Sofian Audry -- info(@)sofianaudry(.)com - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef SOURCEGLCANVAS_H_ -#define SOURCEGLCANVAS_H_ - -#include -#include -#include -#include -#include - -#include "MapperGLCanvas.h" - -class SourceGLCanvas: public MapperGLCanvas { -public: - SourceGLCanvas(wxFrame* parent); - - virtual Quad& getQuad() { - std::tr1::shared_ptr textureMapping = std::tr1::static_pointer_cast(Common::currentMapping); - wxASSERT(textureMapping != NULL); - - std::tr1::shared_ptr inputQuad = std::tr1::static_pointer_cast(textureMapping->getInputShape()); - wxASSERT(inputQuad != NULL); - - return (*inputQuad); - } - -private: - virtual void doRender(); -}; - - -#endif /* DESTINATIONGLCANVAS_H_ */ diff --git a/prototypes/wx/wx-02-input-output/build.sh b/prototypes/wx/wx-02-input-output/build.sh deleted file mode 100755 index 1f32ba81..00000000 --- a/prototypes/wx/wx-02-input-output/build.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -# libwxgtk2.8-dev -g++ main.cpp Common.cpp DestinationGLCanvas.cpp SourceGLCanvas.cpp MapperGLCanvas.cpp -o run `wx-config --libs --cxxflags --gl-libs` -lglut -lGL -lSOIL -I/usr/include diff --git a/prototypes/wx/wx-02-input-output/example.png b/prototypes/wx/wx-02-input-output/example.png deleted file mode 100644 index ffb8a2c1664e7ea2a0b61fce458c9c555c71638c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13385 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 b3RF0eGJ`!~>AC$EA;9dc)tU0s?$Q4P3fSHz diff --git a/prototypes/wx/wx-02-input-output/main.cpp b/prototypes/wx/wx-02-input-output/main.cpp deleted file mode 100644 index 10c89b40..00000000 --- a/prototypes/wx/wx-02-input-output/main.cpp +++ /dev/null @@ -1,63 +0,0 @@ -// NOTE: To run, it is recommended not to be in Compiz or Beryl, they have shown some instability. - -#include -#include "Common.h" -#include "DestinationGLCanvas.h" -#include "SourceGLCanvas.h" - -#include -#include - -#ifndef WIN32 -#include // FIXME: ¿This work/necessary in Windows? - //Not necessary, but if it was, it needs to be replaced by process.h AND io.h -#endif - -class MyApp: public wxApp -{ - virtual bool OnInit(); - SourceGLCanvas * sourceCanvas; - DestinationGLCanvas * destinationCanvas; -//public: -// int FilterEvent(wxEvent& event); -}; - -IMPLEMENT_APP(MyApp) - -bool MyApp::OnInit() -{ - wxFrame *frame = new wxFrame((wxFrame *) NULL, -1, wxT("Libremapping"), wxPoint(50, 50), wxSize(640, 480)); - - wxBoxSizer* topSizer = new wxBoxSizer( wxHORIZONTAL ); - sourceCanvas = new SourceGLCanvas(frame); - destinationCanvas = new DestinationGLCanvas(frame); - - topSizer->Add(sourceCanvas, 1, wxEXPAND); - topSizer->AddSpacer(10); - topSizer->Add(destinationCanvas, 1, wxEXPAND); - -// frame->SetWindowStyle(wxWANTS_CHARS); - frame->SetSizer(topSizer); - - // HACK: values 320x480 should be retrieved automatically - Common::initializeLibremapper(320, 480); - - frame->Show(TRUE); - - - - return TRUE; -} -// -//int MyApp::FilterEvent(wxEvent& event) { -// printf("Event: %d %d\n", event.GetEventType(), wxEVT_KEY_DOWN); -// -// if (event.GetEventType() == wxEVT_CHAR) { -// printf("Char: %d\n", ((wxKeyEvent&)event).GetKeyCode()); -// return true; -// } -// -// return -1; -//} -// - diff --git a/prototypes/wx/wx-03-polyline/build.sh b/prototypes/wx/wx-03-polyline/build.sh deleted file mode 100755 index e778f155..00000000 --- a/prototypes/wx/wx-03-polyline/build.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -set -o verbose - -# libwxgtk2.8-dev -g++ main.cpp -o run `wx-config --libs --cxxflags --gl-libs` -lGL -lGLU -lglut - -# g++ main.cpp -o run -I/usr/lib/x86_64-linux-gnu/wx/include/gtk2-unicode-release-2.8 -I/usr/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ -pthread -lwx_gtk2u_gl-2.8 -L/usr/lib/x86_64-linux-gnu -pthread -Wl,-Bsymbolic-functions -Wl,-z,relro -L/usr/lib/x86_64-linux-gnu -lwx_gtk2u_richtext-2.8 -lwx_gtk2u_aui-2.8 -lwx_gtk2u_xrc-2.8 -lwx_gtk2u_qa-2.8 -lwx_gtk2u_html-2.8 -lwx_gtk2u_adv-2.8 -lwx_gtk2u_core-2.8 -lwx_baseu_xml-2.8 -lwx_baseu_net-2.8 -lwx_baseu-2.8 diff --git a/prototypes/wx/wx-03-polyline/main.cpp b/prototypes/wx/wx-03-polyline/main.cpp deleted file mode 100644 index 424c0940..00000000 --- a/prototypes/wx/wx-03-polyline/main.cpp +++ /dev/null @@ -1,369 +0,0 @@ -// NOTE: To run, it is recommended not to be in Compiz or Beryl, they have shown some instability. -// Needs: libwxgtk2.8-dev -// g++ main.cpp -o run `wx-config --libs --cxxflags --gl-libs` - -#include -#include -#include -#include -#include - -#ifndef WIN32 -#include // FIXME: ¿This work/necessary in Windows? - //Not necessary, but if it was, it needs to be replaced by process.h AND io.h -#endif - -typedef enum -{ - LINES = 0, - POLYGON = 1 -} Style; - -/* - * Left: place point - * Right: remove previous point - * Middle: invisible line. (no line) - */ -class Point -{ - public: - Point(float x, float y) - { - this->x = x; - this->y = y; - } - float x; - float y; -}; - -class PolyLine -{ - public: - void addPoint(Point point); - void removeLastPoint(); - void clear(); - void draw(); - unsigned int size(); - void setStyle(Style style); - private: - std::vector points; - Style style; -}; - -void PolyLine::setStyle(Style style) -{ - this->style = style; -} - -unsigned int PolyLine::size() -{ - return points.size(); -} - -void PolyLine::addPoint(Point point) -{ - points.push_back(point); -} - -void PolyLine::removeLastPoint() -{ - if (points.size() >= 1) - points.erase(points.end()); -} -void PolyLine::clear() -{ - points.clear(); -} - -void PolyLine::draw() -{ - std::vector::const_iterator iter; - - glPushMatrix (); - if (style == LINES) - glBegin (GL_LINE_STRIP); - else if (style == POLYGON) - glBegin (GL_POLYGON); - for (iter = points.begin(); iter != points.end(); iter++) - glVertex3f ((*iter).x, (*iter).y, 0.0f); - glEnd (); - glPopMatrix (); -} - -class Manager -{ - public: - void addPoint(Point point); - void addPolyLine(Point point); - void removeLastPoint(); - void draw(); - void clear(); - void setStyle(Style style); - Style getStyle(); - private: - std::vector lines; - unsigned int current; - Style style; -}; - -void Manager::setStyle(Style style) -{ - this->style = style; -} - -Style Manager::getStyle() -{ - return style; -} - -void Manager::addPoint(Point point) -{ - if (lines.size() == 0) - { - lines.push_back(PolyLine()); - current = 0; - } - lines[current].addPoint(point); -} - -void Manager::addPolyLine(Point point) -{ - lines.push_back(PolyLine()); - current++; - lines[current].addPoint(point); -} - -void Manager::removeLastPoint() -{ - // TODO: return bool - if (lines.size() > 0) - { - if (lines[current].size() == 0) - if (current == 0) - lines.clear(); - else - { - lines.erase(lines.end()); - current--; - } - else - lines[current].removeLastPoint(); - } -} - -void Manager::draw() -{ - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_BLEND); - glDisable (GL_TEXTURE_2D); - glEnable(GL_LINE_SMOOTH); - glLineWidth(3.0f); - glDisable (GL_LIGHTING); - glColor3f (0.2f, 1.0f, 0.2f); - - std::vector::iterator iter; - for (iter = lines.begin(); iter != lines.end(); iter++) - { - (*iter).setStyle(style); - (*iter).draw(); - } -} - -void Manager::clear() -{ - lines.clear(); -} - -void draw_marquee(float x, float y) -{ - const int length = 30; - const int distance = 10; - - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_BLEND); - glDisable (GL_TEXTURE_2D); - glEnable(GL_LINE_SMOOTH); - glLineWidth(3.0f); - glDisable (GL_LIGHTING); - glColor3f (1.0f, 0.0f, 0.0f); - - glBegin(GL_LINES); - glVertex3f(x - (length + distance), y, 0.0f); - glVertex3f(x - distance, y, 0.0f); - glEnd(); - - glBegin(GL_LINES); - glVertex3f(x + (length + distance), y, 0.0f); - glVertex3f(x + distance, y, 0.0f); - glEnd(); - - glBegin(GL_LINES); - glVertex3f(x, y - (length + distance), 0.0f); - glVertex3f(x, y - distance, 0.0f); - glEnd(); - - glBegin(GL_LINES); - glVertex3f(x, y + (length + distance), 0.0f); - glVertex3f(x, y + distance, 0.0f); - glEnd(); -} - -class MyCanvas: public wxGLCanvas -{ - void Render(); - public: - MyCanvas(wxFrame* parent); - void evt_paint_cb(wxPaintEvent& event); - protected: - DECLARE_EVENT_TABLE() - private: - void evt_mouse_events_cb (wxMouseEvent& event); - void evt_key_down_cb (wxKeyEvent& event); - void setup_polyline (); - Manager manager; - float mousex; - float mousey; -}; - -BEGIN_EVENT_TABLE(MyCanvas, wxGLCanvas) - EVT_PAINT (MyCanvas::evt_paint_cb) - EVT_KEY_DOWN (MyCanvas::evt_key_down_cb) - EVT_MOUSE_EVENTS(MyCanvas::evt_mouse_events_cb) -END_EVENT_TABLE() - -MyCanvas::MyCanvas(wxFrame *parent) -:wxGLCanvas(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, wxT("GLCanvas")) -{ - int argc = 1; - char* argv[1] = { wxString((wxTheApp->argv)[0]).char_str() }; -} - -void MyCanvas::evt_paint_cb(wxPaintEvent& WXUNUSED(event)) -{ - Render(); -} - -void MyCanvas::evt_mouse_events_cb(wxMouseEvent& event) -{ - //printf("x=%d y=%d LeftIsDown=%d\n", event.GetX(), event.GetY(), (int) event.LeftIsDown()); - bool should_render = false; - Point point = Point(mousex, mousey); - mousex = (float) event.GetX(); - mousey = (float) event.GetY(); - - should_render = true; - if (event.LeftIsDown()) - { - manager.addPoint(point); - should_render = true; - } - else if (event.RightIsDown()) - { - // FIXME - manager.removeLastPoint(); - manager.removeLastPoint(); - should_render = true; - } - else if (event.MiddleIsDown()) - { - manager.addPolyLine(point); - should_render = true; - } - else - { - manager.removeLastPoint(); - manager.addPoint(point); - should_render = true; - } - // if (event.Leaving()) { } - // else if (event.Entering()) { } - - if (should_render) - Render(); - // To catch keyboard events - SetFocus(); -} - -void MyCanvas::evt_key_down_cb(wxKeyEvent & event) -{ - bool should_render = false; - switch (event.GetKeyCode()) - { - case WXK_TAB: - if (manager.getStyle() == POLYGON) - manager.setStyle(LINES); - else - manager.setStyle(POLYGON); - should_render = true; - break; - case WXK_UP: - break; - case WXK_DOWN: - break; - case WXK_LEFT: - break; - case WXK_RIGHT: - break; - default: - break; - } - if (should_render) - Render(); -} - -void MyCanvas::setup_polyline() -{ - manager.clear(); -} - -void MyCanvas::Render() -{ - static bool polyline_is_set = false; - - SetCurrent(); - wxPaintDC(this); - - if (! polyline_is_set) - { - setup_polyline(); - polyline_is_set = true; - } - - glClearColor(0.0, 0.0, 0.0, 0.0); - glClear(GL_COLOR_BUFFER_BIT); - glViewport(0, 0, (GLint) GetSize().x, (GLint) GetSize().y); - - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - glOrtho ( - 0.0f, (float) GetSize().x, // left, right - (float) GetSize().y, 0.0f, // bottom, top - -1.0, 1.0f); - glMatrixMode (GL_MODELVIEW); - glLoadIdentity (); // FIXME? is this needed here? - - manager.draw(); - draw_marquee(mousex, mousey); - - glFlush(); - SwapBuffers(); -} - -class MyApp: public wxApp -{ - private: - virtual bool OnInit(); - MyCanvas * MyGLCanvas; -}; - -IMPLEMENT_APP(MyApp) - -bool MyApp::OnInit() -{ - wxFrame *frame = new wxFrame((wxFrame *) NULL, -1, wxT("LibreMapping - PolyLine Prototype"), wxPoint(50, 50), wxSize(640, 480)); - //frame->SetWindowStyle(wxWANTS_CHARS); - MyGLCanvas = new MyCanvas(frame); - - frame->Show(TRUE); - return TRUE; -} From aca315e3477ff708ba8f96752fe490bb2274a576 Mon Sep 17 00:00:00 2001 From: Alexandre Quessy Date: Fri, 22 May 2026 21:07:18 -0400 Subject: [PATCH 6/7] Rename Paint to Source and Mapping to Layer throughout codebase Aligns C++ class names with the terminology already used in the GUI, project file format, and OSC interface. MappingManager class keeps its name. Old project files with TextureMapping/ColorMapping class names are supported via MetaObjectRegistry aliases. OSC paths change from /paint/ and /mapping/ to /source/ and /layer/. --- src/app/main.cpp | 12 +- src/control/OscInterface.cpp | 50 +- src/core/Commands.cpp | 128 +- src/core/Commands.h | 46 +- src/core/{Mapping.cpp => Layer.cpp} | 64 +- src/core/{Mapping.h => Layer.h} | 100 +- src/core/MappingManager.cpp | 210 +- src/core/MappingManager.h | 100 +- src/core/MetaObjectRegistry.h | 5 + src/core/ProjectReader.cpp | 60 +- src/core/ProjectReader.h | 8 +- src/core/ProjectWriter.cpp | 8 +- src/core/ProjectWriter.h | 4 +- src/core/{Paint.cpp => Source.cpp} | 14 +- src/core/{Paint.h => Source.h} | 40 +- src/core/Util.h | 2 +- src/core/core.pri | 8 +- src/gui/{MappingGui.cpp => LayerGui.cpp} | 190 +- src/gui/{MappingGui.h => LayerGui.h} | 86 +- ...ItemDelegate.cpp => LayerItemDelegate.cpp} | 16 +- ...pingItemDelegate.h => LayerItemDelegate.h} | 10 +- ...appingListModel.cpp => LayerListModel.cpp} | 96 +- .../{MappingListModel.h => LayerListModel.h} | 20 +- src/gui/MainWindow.cpp | 1732 ++++++++--------- src/gui/MainWindow.h | 250 +-- src/gui/MapperGLCanvas.cpp | 38 +- src/gui/MapperGLCanvas.h | 6 +- src/gui/ShapeGraphicsItem.cpp | 56 +- src/gui/ShapeGraphicsItem.h | 34 +- src/gui/{PaintGui.cpp => SourceGui.cpp} | 66 +- src/gui/{PaintGui.h => SourceGui.h} | 42 +- src/gui/gui.pri | 16 +- 32 files changed, 1762 insertions(+), 1755 deletions(-) rename src/core/{Mapping.cpp => Layer.cpp} (66%) rename src/core/{Mapping.h => Layer.h} (68%) rename src/core/{Paint.cpp => Source.cpp} (98%) rename src/core/{Paint.h => Source.h} (89%) rename src/gui/{MappingGui.cpp => LayerGui.cpp} (65%) rename src/gui/{MappingGui.h => LayerGui.h} (68%) rename src/gui/{MappingItemDelegate.cpp => LayerItemDelegate.cpp} (93%) rename src/gui/{MappingItemDelegate.h => LayerItemDelegate.h} (90%) rename src/gui/{MappingListModel.cpp => LayerListModel.cpp} (61%) rename src/gui/{MappingListModel.h => LayerListModel.h} (84%) rename src/gui/{PaintGui.cpp => SourceGui.cpp} (83%) rename src/gui/{PaintGui.h => SourceGui.h} (78%) diff --git a/src/app/main.cpp b/src/app/main.cpp index b3a481ec..ca8b2994 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -37,14 +37,18 @@ void initRegistry() { MetaObjectRegistry& registry = MetaObjectRegistry::instance(); - // Paints. + // Sources. registry.add