>

2014年9月4日木曜日

retina displayでAntTweakBarを表示すると異常に小さく表示されてカーソル位置も正しく認識されない件

ネット上に似たような問題についての書き込みの記事はちらほらあるが抜本的な対応がいまいちよく分からない。
https://github.com/memononen/nanovg/issues/12
https://groups.google.com/forum/#!topic/pupil-discuss/2Ga6aQWVoWQ

AntTweakBarの操作においてretinaディスプレイの画素シミュレーションがうまくいっていないことが原因。
マウスイベントから取るWindow上の位置は低解像度の値にシミュレートされた値だがglViewPortやAntTweakBarではretinaのフル解像度の値で描画している。なのでイベント発生時のコールバック関数内でresizeイベントやmouseイベントから取ってきた低解像度の値にシミュレートされた位置情報をretinaのフル解像度での値に直す(2倍する)した上でOpenGLやAntTweakBarの関数を呼ぶようにすることで対応。

対応の例
static void resizeCallback(GLFWwindow* window, int width, int height)
{
    TwWindowSize(width*2, height*2);

}

とりあえず動くが表示が小さいという問題は未解決。本当はretinaのシミュレーション機能に乗っ取った抜本的な対応方法(glViewPorttはwindowサイズではなくてframe bufferのサイズを設定して、AntTweakBarは二倍のサイズで描画する?)があると思う。抜本的な対応が分かる方いらっしゃいましたら是非コメントお願いします。

0 件のコメント: