LoginSignup
2

More than 3 years have passed since last update.

[openFrameworks] Projectのテンプレートを変更する

Last updated at Posted at 2019-04-22

テンプレートを替えたい

openFrameworks(以下oF)でアプリを制作するときは、自分はほぼ毎回プログラマブルレンダラを使うし、ofAppの不要なエベントハンドラー系の関数を削除したりしているが、毎回やるのは面倒くさいのでテンプレートを替えられないか調べた。テンプレートというとジェネリックプログラミングのtemplateと混同を招きかねないがここではemptyExampleとして生成したいファイルのことを指す。

Projectのテンプレートの所在

プロジェクトのsrc\に生成されるmain.cppofApp.hofApp.cppのテンプレートはof_root\scripts\templatesに配置されており、ProjectGeneratorが新規作成の際にコピー操作をする。

よって、Windowsの場合、of_root\scripts\templates\vs\srcにあるデフォルトのテンプレートを書き換えれば目的を達成できる。

ここには様々なテンプレートが用意されており、\gl4.5などプログラマブルレンダラ用のテンプレートも存在することがわかる。ただしこれらのテンプレートの指定はProjectGeneratorのGUIからはできず、プラットフォームのデフォルトのものが選択されるのみとなる。

変更後のテンプレート

ちなみに自分はこうした。

main.cpp
#include "ofMain.h"
#include "ofApp.h"
int main( ){
    ofGLFWWindowSettings s;
    s.setGLVersion(4, 5);
    s.setSize(1920, 1080);
    ofCreateWindow(s);
    ofRunApp(new ofApp());
}
ofApp.h
#pragma once
#include "ofMain.h"

class ofApp : public ofBaseApp{
public:
    void setup();
    void update();
    void draw();
    void keyPressed(int key);
private:

};
ofApp.cpp
#include "ofApp.h"

void ofApp::setup(){

}

void ofApp::update(){

}

void ofApp::draw(){

}

void ofApp::keyPressed(int key){
    if (key == ' ') {}
}

これより以下は番外編となるが、oFが地味に用意している機能の紹介となる。

PojectGenerator

openFrameworksのProjectを作成するためには、ProjectGeneratorを使うのが一般的かと思う。ProjectoGeneratorはソースを見ればわかるが、frontendcommandLineから成り立っている。

frontend

Electron(Node.jsとChromiumによるクロスプラットフォームのGUIフレームワーク)によって作られたGUIであり、ProjectGeneratorとして目にするものである。UIの描画と操作の受付を担当しているが、プロジェクト生成自体はcommandLineという別の実行ファイルに移譲しており、これに対してコマンドを発行している。

commandLine

ウィンドウのないCUIツールだがopenFrameworksによって制作されている。Githubからソースを落としてくると、oFと同じようにソリューションファイルからコンパイルができる。ダウンロード版は、of_root/projectGenerator-xx/resources/app/app/にあるprojectGenerator.exeが実体。使い方はREADMEを参照するか、ヘルプオプション(--helpまたは-h)を加えて実行ファイルをコマンドライン上で叩けば確認できる。

Options:

  --help               Print usage and exit.
  --recursive, -r      update recursively (applies only to update)
  --listtemplates, -l  list templates available for the specified or current
                       platform(s)
  --platforms, -p      platform list (such as osx, ios, winvs)
  --addons, -a         addon list (such as ofxOpenCv, ofxGui, ofxXmlSettings)
  --ofPath, -o         path to openframeworks (relative or absolute). This
                       *must* be set, or you can also alternatively use an
                       environment variable PG_OF_PATH and if this isn't set, it
                       will use that value instead
  --verbose, -v        run verbose
  --template, -t       project template
  --dryrun, -d         dry run, don't change files

examples:

projectGenerator -o"../../../../" ../../../../apps/myApps/newExample
(create a project called newExample using a relative path for the OF root and the project. note the relative path may be different depending on where this app is located)

projectGenerator -r -o"../../../../" ../../../../examples
(recursively update the examples folder)

projectGenerator -o"../../../../" -a"ofxXmlSettings, ofxOpenCv" ../../../../apps/myApps/newExample
(create / update an example with addons)

CUIを用いたテンプレート作成

このCUIを用いて、例えば自分の制作したオリジナルのテンプレートに加え、必ず組み込むであろうaddonも含めたオリジナルの生成コマンドを作れる。バッチファイルなどに保存すれば便利かもしれない。以下は、引数にプロジェクト名をとって、gl4.5のテンプレートとofxGuiとofxDeferredShadingのaddonを自動選択してプロジェクトを生成するバッチファイルとなる。

create_my_proj.bat
cd C:\path\to\of\projectGenerator-vs\resources\app\app
.\commandLine.exe -o"../../../../" -a"ofxGui, ofxDeferredShading" -t"gl4.5" ../../../../apps/myApps/%1

あとは自分でcommandLine自体を改変すれば(oFなので意外と現実的にできそう)、ビルドのための構成なども含めてプロジェクトテンプレートが組めたりして捗りそうではある。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2