Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2023.1.0 - 日本語


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"を探し, オプションDrivervesaに変更します:

Section "Device"
        Identifier      "Your Graphic card"
        Driver  "vesa"
[...]
EndSection

残念なことに, この解はScilabをかなり遅くします.

Windowsでは, ビデオカードの製造元は定期的に更新しており, pbuffersは管理されています. 最近のドライバを以下の場所からダウンロードしてください:

(ビデオドライバが古くなったり,サポートされていない) Windows 2000においても何らかの問題が発生する可能性があります.

pBufferが問題を発生する場合, pbufferが動作するのを待つのは解決策ではありません: OpenGLコミュニティはpbufferからフレームバッファオブジェクト拡張 に移行しつつあります. この拡張は移植性に優れ,オフスクリーン描画に関してpbufferよりも より高い性能を得ることができます. JOGLチームはこの問題を修正中です.

この問題に関する詳細については以下を参照ください:

// 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 >>

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Mon May 22 12:43:11 CEST 2023