2015/08/10

Xcodeでも「上の行に改行」したい!

こんにちは.@rootxです.

普段はWindowsのVisual Studioを使っていたりいなかったりするのだけれど,
VSでよく使うショートカットの1つに「CTRL + ENTER」があります.

これはエディタ上で,「1つ上の行に改行を入れる」という操作を

例えば,コード補完等によって,次のような状態担っているとします(★印がカーソル位置).
-------------
if (false) {
}★
-------------
ここでおもむろに「CTRL+ENTER」を押下すると,
-------------
if (false) {
   
}
-------------
こんなふうになります.


先にフローの構造を作ってから編集する,という思考ルーチンなのでこの手順が極めて大切なのです.

xcodeにもそれっぽいのがあるはず!と思っていましたが,
どうやらなさそうなので,Karabinar(旧 KeyRemap4MacBook)で独自ショートカットを定義しました.
gistに置いときます.
https://gist.github.com/cslroot/376f6ac7724e9f1ff705





これで開発効率が5%くらいアップしたはず!



 でわでわ.

GUI付きのビューアをつくりたいのでocornut/imguiを使ってみた

こんにちは.@rootxです.

レイトレした結果をどう確認していますか?

PNGファイル出力をしていますが,毎回開くのも嫌だし,
入力ファイル指定や途中経過などなどをGUIから行いたいです.

でサクッとビューアをつくろうと思って,
過去に使ったことのあるGLUIを使おうと思いましたが,今回はGLFWを使ってウィンドウ表示するため使えません.

そこで最近のGUIライブラリを調べつつ,ImGuiというライブラリを使うことにしました.

試したGUI

見た目も良さげでhomebrewでインストールできたので試してみましたが,
osxのretinaディスプレイに対応しておらず,描画は可能なもののマウス位置と整合性がとれておらず使用を断念しました.

GWEN(https://github.com/garrynewman/GWEN)

1年くらい更新されていないのと,osx対応されていなさそうなのでやめ.
見た目は一番好みだったのだけれど.

CEGUI

ヘビィそうなのでやめとく.

AdrienHerubel/imgui (https://github.com/AdrienHerubel/imgui)

かなり良さそうだったけれど,あまりにもコミットが少なくメンテされてなさそうなのでNG.

blendish

blender-likeすぎて辛い.あと依存関係がヘビィ.


ocornut/imgui


ハマりポイント

1. 文字がちっちゃい=全体が小さい

retinaに完全対応していないのか,文字が極めて小さく表示されてしまいました.
ボタン等はちゃんとマウス位置に反応しているので,次の2通りの方法のどちらかで,暫定的に回避できました.

フォント読み込み時に,フォントサイズを大きくする.

  io.Fonts->AddFontFromFileTTF("resource/uzura.ttf"16.0fNULL, io.Fonts->GetGlyphRangesJapanese());
→ "16.0f""32.0f" にするとか.

※ README.mdの文字列サンプルは間違ってるので注意.第3引数にNULLを指定する必要があります.

グローバルスケールなるパラメータを2倍にする
次のようにウィンドウサイズとフレームバッファサイズを比べて掛けとく.
    {
        // osx retina 2x
        int w, h;
        glfwGetWindowSize(window, &w, &h);
        int ww, hh;
        glfwGetFramebufferSize(window, &ww, &hh);
        io.FontGlobalScale = ww / w;
        fprintf(stderr, "window(%d, %d) : frameBuffer(%d, %d)\n", w, h, ww, hh);
        
        io.UserData = &input;
    }


2.  2フレーム目から描画されない;

描画は次のような感じで行けますが,適当に拾ってきたModernなOpenGLサンプルでテクスチャ付き四角形を描画していたら,2フレーム目から描画されませんでした.

  while (!glfwWindowShouldClose(window))
    {
        //----- ImGui のセットアップ ----
        ImGuiIO& io = ImGui::GetIO();
        ImGui_ImplGlfwGL3_NewFrame();
        { // 〜〜 ImGuiのメニューなど
        }

        
        // ここら辺に自分の描画したいコードを書く

        ImGui::Render();
        glfwSwapBuffers(window);
        glfwPollEvents();

    }

かなり悩ましい問題でしたが,GUIコントロールのレンダリング時に glEnable(GL_BLEND)されているためでした.
まあそういうこともあるよね.



あまり使用実績がないので,ググってもあまり情報が出てこないのが辛いかな.
コンパクトにいろんな機能が用意されていることと,活発に更新されていることが優位な点なので,今後もウォッチしていきます.

でわでわ.

2015/08/02

買った本

こんにちは.@rootxです.



昨日のお昼くらいにポチったのですが,約8時間で受け取れました.
お急ぎ便は早いな!

 でわでわ.

2015/08/01

読んだ

最近読んだもの。


The comprehensive PBR guide

基礎基礎の確認に丁度いいです。
ただし、エンジニアというよりモデラーとかそっちの人向けかな。
Substanceを開発してる企業。

日本語版も公開されている方がいます.
http://www.slideshare.net/nyaakobayashi/pbr-guide-vol1jp
http://www.slideshare.net/nyaakobayashi/70100srgb180255

(ボーンデジタルでも配布していたけれど,認証が必要でしたので未確認)