【openFrameworks】macOS High Sierraでプログラムをビルドするときにエラーが出る場合の対策

openFrameworksのプログラムをmacOS High Sierraでビルドしようとしたらエラーが出たので原因を調べてみました。
ちなみにプログラムはSierraで制作したものです。

Showing Recent Messages
:-1: The i386 architecture is deprecated. You should update your ARCHS build setting to remove the i386 architecture. (in target 'openFrameworks')

High Sierraから64bitのプログラムしか作れなくなっているようでそれが原因でエラーが出ているようでした。

修正箇所

BuildSettings

Architectureが64bit – intelになっていることを確認します。
Architecture

CoreOF.xcconfig

次にlibs/openFrameworksCompiled/project/osx/CoreOF.xcconfigを書き換えます。
書き換え箇所は以下を参考にしました。
github
この修正を適用すると無事にビルドできました。参考までに以下にも修正箇所を掲載しておきます。

VLID_ARCHSとOF_CORE_FRAMEWORKSの項目を修正します。

VALID_ARCHS = x86_64
OF_CORE_FRAMEWORKS = -framework Accelerate -framework AGL -framework AppKit -framework ApplicationServices -framework AudioToolbox -framework AVFoundation -framework Cocoa -framework CoreAudio -framework CoreFoundation -framework CoreMedia -framework CoreServices -framework CoreVideo -framework IOKit -framework OpenGL -framework QuartzCore -framework QTKit -framework Security -framework LDAP

【openFrameworks】ofTrueTypeFontで日本語のフォントを読み込む方法

openFrameworks v0.10.0でofTrueTypeFontを使って日本語のフォントを読み込む方法です。

ofApp.hにofTrueTypeFontのインスタンスを設定します。

ofTrueTypeFont text;

続きを読む

openFrameworks v0.10.0で画面サイズを設定できない場合

ofGLFWWindowSettings s;

のようにofGLFWWindowSettingsで作った画面のサイズを指定する方法です。

以下のように書くとエラーが出ます

s.width  = 1920;  //直接書き換えられない
s.height = 1080;  //直接書き換えられない

エラーメッセージは以下のようなものです。
‘height’ is a protected member of ‘ofWindowSettings’

直接書き換えるなということなので

以下のように書き換えます

s.setSize(1920, 1080);

v0.9.8では個別に書き換えられたのですが、v0.10.0からできなくなったようです。

iPhoneのSafariからファイルをアップしたときにPHPのTMP_NAMEがなくなる問題

iPhoneのSafariからファイルをアップロードした際にPHPで指定したTMP_NAMEが空になってしまっていることがありました。
この現象について調査したところ、stackoverflowで同様の現象に関する質問がありました。
続きを読む

Raspberry PI 3 + openFrameworksでマウスポインタが動かない時に確認すること

Raspberry PI 3にopenFrameworks(0.9.8)を入れてサンプルプログラムを動かしたのですが、マウスを使って操作するプログラムでマウスポインタが反応しない事象が発生したので、原因を調べてみました。
続きを読む

Raspberry PI 3からHDMI出力されないのを修正する方法

Raspberry PI 3のHDMI出力に4Kディスプレイをつないだ所、起動しても映像が出力されませんでした。
調べた結果、公式のフォーラムに情報がありました
続きを読む

【Mac】Python 3.6.0 で Matplotlib が動かない時にチェックした点

HomebrewでMacにPython 3.6.0を入れて以下のコードでMatplotlibを読み込もうとしたところ

import matplotlib.pyplot as pet

以下のようなエラーが出ました。ちなみに依存しているライブラリは全部インストール済みの状態です。
Traceback (most recent call last):
File "", line 1, in
File "/Users/(ユーザー名)/.pyenv/versions/3.6.0/lib/python3.6/site-packages/matplotlib/pyplot.py", line 115, in
_backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
File "/Users/(ユーザー名)/.pyenv/versions/3.6.0/lib/python3.6/site-packages/matplotlib/backends/__init__.py", line 32, in pylab_setup
globals(),locals(),[backend_name],0)
File "/Users/(ユーザー名)/.pyenv/versions/3.6.0/lib/python3.6/site-packages/matplotlib/backends/backend_macosx.py", line 19, in
from matplotlib.backends import _macosx
RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are using (Ana)Conda please install python.app and replace the use of 'python' with 'pythonw'. See 'Working with Matplotlib on OSX' in the Matplotlib FAQ for more information.

バックエンドの設定に問題があるということで、以下のコマンドでmatplotlibのバックエンド設定が書かれたファイルのパスを調べ

$python -c "import matplotlib;print(matplotlib.matplotlib_fname())"

エディタで該当箇所を編集しました。macosxとなっているところをコメントアウトまたは削除してTkaggを指定します。

#backend : macosx
backend : Tkagg #←これに書き換える

これで以下のようなグラフを出力できるようになりました。

Elgato Game Capture HD60でMacの画面をビデオ録画する

Elgato Game Capture HD60
openFrameworksで作った映像をキャプチャーするためにElgato Game Capture HD60を導入しました。
続きを読む

openFrameworksでFboのスクリーンショットを保存する方法

openFrameworksでFboのスクリーンショットを保存する方法です。
ofFboをを一旦ofPixelsに変換したのちofImageにするとうまくいくようです。

    ofImage img;
    ofFbo fbo;
    ofPixels pixels;

sキーが押されたらファイルが保存されるようにします。

void ofApp::keyPressed(int key){
    if(key =='s'){
        fbo.readToPixels(pixels);
        img.setFromPixels(pixels);
        char fileNameStr[255];
        string date = ofGetTimestampString();//タイムスタンプをファイル名にする
        sprintf(fileNameStr, "%s.png", date.c_str());
        img.save(fileNameStr,OF_IMAGE_QUALITY_BEST);
    }
}

ofCreateWindowでウィンドウを作った際にGLSL #version 120のShaderを動かすための設定

ofCreateWindowでウィンドウを作った際にGLSLの#version 120が動きませんでした。
setGLVersionの設定を3,2から2,1に書き換えると動きました。

int main( ){
    ofGLWindowSettings s;
    s.setGLVersion(2,1);//ここを2,1にする
    s.width  = 1920;//画面サイズ
    s.height = 1080;//画面サイズ
    ofCreateWindow(s);
    ofRunApp(newofApp());
}

このサイトでも紹介されているように3,2だと#version 150しか動作しません。