Scilabグラフィックで使用されるメイン要素を取得/設定.
[canvasused] = usecanvas([usecanvasfordisplay]);
論理値:
グラフィックディスプレイに"GLCanvas" を
使用する場合は%T
(uicontrols とグラフィックは混用
できません).
グラフィックディスプレイに"GLJPanel" を
使用する場合は%F
(uicontrols とグラフィックは混用
できません).
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の将来のバージョンを改良できるようになります.
このコードは,グラフィックカードの問題に関連する潜在的な問題の多くを 修正します.性能が低下することに注意してください.
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に変更します:
残念なことに, この解はScilabをかなり遅くします.
Windowsでは, ビデオカードの製造元は定期的に更新しており,
pbuffers
は管理されています.
最近のドライバを以下の場所からダウンロードしてください:
ATIカード
の場合: http://ati.amd.com/support/driver.html
Intelカード
の場合: http://www.intel.com/support/graphics/
Matroxカード
の場合: http://www.matrox.com/graphics/en/support/drivers/
NVIDIAカード
の場合: http://www.nvidia.com/content/drivers/drivers.asp
S3カード
の場合: http://www.s3graphics.com/en/resources/drivers/index.jsp
SiSカード
の場合: http://www.sis.com/download/
(ビデオドライバが古くなったり,サポートされていない) Windows 2000においても何らかの問題が発生する可能性があります.
pBufferが問題を発生する場合,
pbuffer
が動作するのを待つのは解決策ではありません:
OpenGLコミュニティはpbufferからフレームバッファオブジェクト拡張
に移行しつつあります.
この拡張は移植性に優れ,オフスクリーン描画に関してpbufferよりも
より高い性能を得ることができます.
JOGLチームはこの問題を修正中です.
この問題に関する詳細については以下を参照ください:
JoGL
bug database: Bug #366
Scilab
bug database: Bug #3525
Debian
bug database: Bug #501799
Freedesktop
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"); | ![]() | ![]() |