2017-06-19 11 views
-3

私はフラクタルビデオフィードバックアプリを書いた。 LinuxやWindows 10を実行している古いノートパソコンで正常に動作します。Android搭載端末で正常に動作します。それはHackintoshデスクトップ上で正常に動作します。しかし、特定のMacBookでは、文字通り0.02 FPSで動作し、CPUコア全体を使用します(数%使用する必要があります)。なぜこのOpenGLアプリケーションは、特定のMacでひどく遅く動作しますか?

ソフトウェアレンダリングにドロップするシェーダ機能を使用していると仮定しますが、それは何ですか?シェーダは何もすばらしいことをしていません。あなたはsee the source code hereすることができます。シェーダは、GLES以外のプラットフォームでは#version 150を使用します。

このプログラムは、フレームあたり6つの三角形(テクスチャ間の2つのピンポンと1つのコピーを画面に描画する)だけを描画します。 CPU側の錆コードもそのレポに含まれています。

誰でもこの問題が発生する可能性がありますか、それを追跡するために使用できるツールはありますか?

答えて

2

ハードウェアレンダラーのみを使用するように強制するには、作成時に特定のピクセル形式の属性を指定します。 Technical Q&A QA1502 Ensuring hardware accelerated rendering for your OpenGL applicationに記載されているように:CGLについて

を:

kCGLPFAAcceleratedkCGLPFANoRecovery

ソフトウェアフォールバックを選択することなく、ハードウェアアクセラレーションレンダラを選択する簡単な方法は、以下のピクセルフォーマット属性を選択することにより、ありますAGLについては

AGL_ACCELERATEDとNSOpenGLのために

NSOpenGLPFAAcceleratedNSOpenGLPFANoRecovery

QA1502はまた、あなたがそれを頂点とフラグメント処理のためにGPUを使用しているかどうか内容を尋ねることができる方法を説明します。

AppleのOpenGL Capabilities Tablesに問い合わせると、ターゲットハードウェアでサポートされていない機能を使用しているかどうかを確認できます。この文書には、それぞれ10.7.5,10.8.5および10.9の3つのテーブルが含まれており、それぞれのテーブルは数ページにわたることに注意してください。 MacOS OpenGLのハードウェア機能に10.9以降の変更が加えられていないか、あるいはAppleがそれらを文書化するのを邪魔していない。

AppleのOpenGL for macOS開発者ページにNumbersスプレッドシートとしてテーブルへのリンクもあります。

機能テーブルを調べている場合は、this documentが対象のMacに搭載されているGPUハードウェアを見つけるのに便利です。

OpenGLプロファイラを使用して、OpenGLがアプリケーションから発行しているコールとその時間を知ることができます。これは何が間違っているのかを理解するのに役立ちます。 OpenGL ProfilerはAdditional Tools for Xcodeの一部です。

しかし、実行中のアプリケーションにアタッチしようとするとアプリケーションがクラッシュし、プロファイラを使用してアプリケーションを起動するとアタッチが終了しません。私はWWDC 2017で責任あるAppleエンジニアの問題を調査しました。「Xcode 9ベータ版の追加ツール」のプロファイラはmacOS Sierra 10.12.5では動作しますが、macOS High Sierra 10.13 beta 1では動作しませんでした。 macOS Sierraを実行している場合は、そのバージョンを使用してください。

明らかに問題は、アップルが、これらのエンタイトルメントで署名された新しいプロファイラバージョンを発行せずに、正しく動作するためにプロファイラが必要とする資格(制限)を作成し続けることです。私はHigh Sierraで動作するプロファイラのバージョンがベータ3(おそらくベータ2でも、おそらくはない)で利用できると期待しています。

関連する問題