usecanvas
Scilabグラフィックで使用されるメイン要素を取得/設定.
呼び出し手順
[canvasused] = usecanvas([usecanvasfordisplay]);
引数
- canvasused
論理値:
グラフィックディスプレイに"GLCanvas" を 使用する場合は
%T
(uicontrols とグラフィックは混用 できません).グラフィックディスプレイに"GLJPanel" を 使用する場合は
%F
(uicontrols とグラフィックは混用 できません).
- usecanvasfordisplay
Boolean:
グラフィックディスプレイに"GLCanvas" を 使用する場合は
%T
(uicontrols とグラフィックは混用 できません).グラフィックディスプレイに"GLJPanel" を 使用する場合は
%F
(uicontrols とグラフィックは混用 できません).
説明
Scilabはグラフィック(plot3d, plot, ...)を表示する際に"GLJPanel" (Swing OpenGL要素)を使用します. この要素は, いくつかのプラットフォームに正しくサポートされていない (オペレーティング・システム, ビデオカード, ドライバ ...に依存する) いくつかの高レベルOpenGLプリミティブを使用します.
"GLCanvas" (AWT + OpenGL) は, Javaフレームワークで提供される 別の要素です. Scilabはグラフィックを描画する際にこれを使用することができます. しかし, この要素を使用するとプロットと uicontrolの混用のようないくつかの機能が無効となります(デモGUI/UIcontrol2参照). これがこの機能がデフォルトとなっていない理由です.
いくつかの特殊なケースでは, Scilab開始時に"GLCanvas"要素の使用が強制されます (最初にグラフィック関数が使用される際に警告メッセージが表示されます), 以下にこれらのケースの一覧を示します:
オペレーティング・システム | ビデオカード | 詳細 |
64ビットWindows | All | When Scilab is used in a remote session. |
Linux | NVIDIAカード | フリードライバを使用. |
ATIカード | フリードライバまたはバージョン< 8.52.3の ATIドライバ(インストーラ バージョン < 8.8 / OpenGL バージョン < 2.1.7873). | |
INTELカード | 直接レンダリングが有効になります. |
Scilabによりusecanvas
を用いてこの要素を動的に有効にします:
usecanvas(%T)
はプロット描画に "GLCanvas" を使用します.usecanvas(%F)
はプロット描画に "GLJPanel" を使用します. 使用する設定において"GLJPanel"で問題が発生することが既知の場合 (上の表を参照),警告メッセージが表示されます.
"GLJPanel"を使用することできる環境であると信じているにも関わらず,
Scilabが自動的に "GLCanvas" の使用を強制する場合,設定を
"GLJPanel" (usecanvas(%F)
)に切り替え,
何か(例えばplot3d()
)をプロットしてみてください.
Scilabグラフィックが動作する場合,
emailをscilab.support@scilab.org
に送信し,
オペレーティング・システム/ビデオカード/ビデオカードドライバの
バージョンを我々に知らせてください.
これによりScilabの将来のバージョンを改良できるようになります.
Workaround
このコードは,グラフィックカードの問題に関連する潜在的な問題の多くを 修正します.性能が低下することに注意してください.
system_setproperty("jogl.gljpanel.nohw","");
技術的な側面
バージョン 5.0以降, ScilabはJOGL(the Java Binding for the OpenGL)の
先進的な使用として, Java2D OpenGLパイプラインを使用しています.
性能上の理由により,Java2D OpenGLパイプラインを使用しています.
より技術的な側面から, pbuffer
と呼ばれる
グラフィックカードの内部バッファを使用します.
グラフィックカードのドライバがこのアプローチを正しくサポートしていない 場合に問題が発生する可能性があります. 既知のように, Linuxではこの機能を処理するフリードライバは 存在しません. Intelのプロプライエタリな世界では,状況は以下のようになります:
NVIDIA
: Nvidia は適当なプロプライエタリドライバを 提供します. Scilabのグラフィックは多くのNVIDIAドライバで 問題なく動作します.ATI
: ドライババージョン8.8以降, 多くの ATIグラフィックはLinuxでpbufferをサポートします.Intel
: これがpbufferの大きな欠点です. 公式なIntelのドライバはLinuxでpbufferをサポートしていません.
この問題に立ち向かうためのLinux用の回避策がありますが,
解決策はソフトウェアアクセラレータドライバを使用することです.
これを行うには, /etc/X11/xorg.conf
で,
Section "Device"を探し,
オプションDriverを
vesaに変更します:
Section "Device" Identifier "Your Graphic card" Driver "vesa" [...] EndSection
残念なことに, この解はScilabをかなり遅くします.
Windowsでは, ビデオカードの製造元は定期的に更新しており,
pbuffers
は管理されています.
最近のドライバを以下の場所からダウンロードしてください:
ATIカード
の場合: http://ati.amd.com/support/driver.htmlIntelカード
の場合: http://www.intel.com/support/graphics/Matroxカード
の場合: http://www.matrox.com/graphics/en/support/drivers/NVIDIAカード
の場合: http://www.nvidia.com/content/drivers/drivers.aspS3カード
の場合: http://www.s3graphics.com/en/resources/drivers/index.jspSiSカード
の場合: http://www.sis.com/download/
(ビデオドライバが古くなったり,サポートされていない) Windows 2000においても何らかの問題が発生する可能性があります.
pBufferが問題を発生する場合,
pbuffer
が動作するのを待つのは解決策ではありません:
OpenGLコミュニティはpbufferからフレームバッファオブジェクト拡張
に移行しつつあります.
この拡張は移植性に優れ,オフスクリーン描画に関してpbufferよりも
より高い性能を得ることができます.
JOGLチームはこの問題を修正中です.
この問題に関する詳細については以下を参照ください:
JoGL
bug database: Bug #366Scilab
bug database: Bug #3525Debian
bug database: Bug #501799Freedesktop
bug database: Bug #17603
例
// GLJPanelの使用例 (uicontrolsおよびグラフィックの混用) usecanvas(%F); plot2d(); uicontrol("String", "Close the window", "Position", [10 10 100, 25], "Callback", "delete(gcf())"); messagebox("You can see the button on the figure.", "Usecanvas example", "info"); // GLCanvasの使用例 (uicontrolsとグラフィックを混用せずに, uicontrolsは不可視) usecanvas(%T); plot2d(); uicontrol("String", "Close the window", "Position", [10 10 100, 25], "Callback", "delete(gcf())"); messagebox("You can''t see any button on the figure.", "Usecanvas example", "info");
Report an issue | ||
<< uiputfile | GUI | waitbar >> |