JPH09504895A - オブジェクト指向ペインタ・メーカ - Google Patents

オブジェクト指向ペインタ・メーカ

Info

Publication number
JPH09504895A
JPH09504895A JP7513187A JP51318795A JPH09504895A JP H09504895 A JPH09504895 A JP H09504895A JP 7513187 A JP7513187 A JP 7513187A JP 51318795 A JP51318795 A JP 51318795A JP H09504895 A JPH09504895 A JP H09504895A
Authority
JP
Japan
Prior art keywords
painter
maker
chain
computer
graphical
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP7513187A
Other languages
English (en)
Inventor
マーシュ,ドナルド,エム.
ワトソン,ラルフ,トーマス
Original Assignee
オブジェクト テクノロジー ライセンシング コーポレイション
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by オブジェクト テクノロジー ライセンシング コーポレイション filed Critical オブジェクト テクノロジー ライセンシング コーポレイション
Publication of JPH09504895A publication Critical patent/JPH09504895A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/001Texturing; Colouring; Generation of texture or colour
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Geometry (AREA)
  • Software Systems (AREA)
  • Image Generation (AREA)

Abstract

(57)【要約】 オブジェクト指向ペインタ・メーカが開示されている。本発明は、複数のグラフィカル環境において複数のグラフィカル・プリミティブをレンダリングするためのコンピュータ・ベースのシステムを目的としている。システムは複数のペインタ・メーカ・オブジェクトと、該ペインタ・メーカ・オブジェクトの少なくとも1つを含むペインタ・メーカ・チェインとを含んでいる。タスクはペインタ・メーカ・チェインに結合されていて、特定のグラフィカル環境で特定のグラフィカル・プリミティブをレンダリングする要求をペインタ・メーカ・チェインに引き渡す。ペインタ・メーカ・チェイン内のペインタ・メーカ・オブジェクトは、グラフィカル・レンダリング要求を受け取るとその要求に応答して、各々が特定のグラフィカル・プリミティブのレンダリングに対して特定のグラフィカル・オペレーションを、特定のグラフィカル環境で実行するように最適化された複数のペインタ・オブジェクトを含んでいるペインタ・メーカを作成する。タスクはペインタ・メーカ・チェイン内のペインタ・メーカ・オブジェクトによって作成されたペインタ・オブジェクトを使用して、レンダリング・オペレーションを特定のグラフィカル環境で実行する。

Description

【発明の詳細な説明】 オブジェクト指向ペインタ・メーカ 本特許出願の開示内容一部には著作権保護の対象となる内容が含まれている。 著作権所有者は、米国特許商標庁の特許ファイルまたはレコードに記録されてい る特許開示内容を何人もが原文とおりに複製することを妨げるものではないが、 その他の場合には、一切の著作権を所有することを留保する。 発明の分野 本発明はコンピュータをベースとするグラフィックス・システムおよび方法を 目的とし、具体的には、コンピュータをベースとするオブジェクト指向ペインタ ・メーカおよびペインタを目的としている。 関連技術 レンダリング・ルーチン(レンダリング・ソフトウェア、レンダリング・プロ グラム、およびレンダ・コードとも呼ばれる)はコンピュータ・システムで実行 されて、ポリゴン(多角形)、レクタングル(矩形)、ライン(線)、サークル (円)などのグラフィカル・プリミティブをドローイング(描画)している。コ ンピュータ・システムは、異なる出力デバイスや異なるレンダリング要求条件と いったように、異なるグラフィカル特性をもつ多数のグラフィカル環境を構成し ていることがよくある。例えば、あるグラフィカル環境では、出力デバイスはフ レーム・バッファ・ディスプレイ・デバイス(フレーム・バッファ・ディスプレ イ・デバイスは周知である)になっている場合がある。別のグラフィカル環境で は、出力デバイスはプリンタ、プロッタ、非フレーム・バッファ・ディスプレイ ・デバイス、またはオフスクリーン・バッファになっている場合がある。また、 あるグラフィカル環境は、他のグラフィカル環境とは異なるレンダリング要 求条件(クリッピングを行う必要性など)をもっている場合もある。 以上から理解されるように、あるグラフィカル環境でグラフィカル・プリミテ ィブをドローイングするために必要なソフトウェアが、他のグラフィカル環境で グラフィカル・プリミティブをドローイングするために必要なソフトウェアと異 なることはよく起こることである。このようなことが起こるのは、グラフィカル 環境が異なると、グラフィカル特性も異なるからである。 従来の、ある種のコンピュータ・ベースのグラフィックス・システムでは、レ ンダリング・ルーチンが各グラフィカル環境ごとに用意されている。例えば、第 1のグラフィカル環境(例えば、フレーム・バッファが出力デバイスになってい る)と第2のグラフィカル環境(例えば、プリンタが出力デバイスになっている )からなるグラフィックス・システムでは、2つのドロー・レクタングル・レン ダリング・ルーチン(draw-rectangle rendering routine)が、各グラフィカル環 境用に1つずつ用意されることになる。これらのドロー・レクタングル・レンダ リング・ルーチンは、それぞれのグラフィカル環境に特有のものとなっている。 しかし、レンダリング・ルーチンを各グラフィカル環境ごとに用意することは、 プログラムに組み込まれる内容がさらに複雑化することになるので、理想的な解 決法ではない。 従来の、他のコンピュータ・ベースのグラフィックス・システムでは、限られ た数のレンダリング・ルーチンが用意され、そこではレンダリング・ルーチンの 各々は、グラフィカル環境のすべてについてグラフィカル環境特有のコードを含 んでいる。この種のグラフィカル環境特有コードの実行は、同じようにレンダリ ング・ルーチンに含まれている条件ステートメント("if-then-else"ステートメ ントなどの)の実行に基づいている。しかし、限られた数のレンダリング・ルー チンを用意し、各ルーチンがグラフィカル環境のすべてについてグラフィカル環 境特有コードをもつことは、結果として得られるレンダリング・ルーチンが複雑 になり、開発と保守が困難になるので理想的な解決法ではない。 発明の概要 本発明は、様々なグラフィカル環境でグラフィカル・プリミティブをドローイ ング(またはレンダリング、またはペインティング)するためのオブジェクト指 向ペインタを提供することを目的とし、さらに、グラフィカル環境のグラフィカ ル特性に従って上記ペインタを選択し、リンクするためのオブジェクト指向ペイ ンタ・メーカを提供することを目的としている。ペインタ・メーカ、より具体的 には、本発明のペインタ・メーカ・アーキテクチャは、ピクセル・ペインティン グ、クリッピング、領域作成、マルチスレッド同期化、ペインタ・キャッシング および対話型コンポジション(合成)といったように、異なるグラフィカル環境 のグラフィカル特性を取り扱うために必要な異なる機能(関数)を抽象化してい る。これらの関数をレンダリング・コードから見えないようにすると、様々な状 況で同じレンダリング・コードを使用することが可能になる。ペインタ・メーカ ・アーキテクチャは、ある状況でペイントするのに2つ以上のペインタが必要に なる所定の場合には、複数のペインタを動的に使用することもサポートしている 。 具体的には、本発明は、複数のグラフィカル環境で複数のグラフィカル・プリ ミティブをレンダリングするためのコンピュータ・ベース・システムを提供する ことを目的としている。このシステムは複数のペインタ・メーカ・オブジェクト と、ペインタ・メーカ・オブジェクトの少なくとも1つを含むペインタ・メーカ ・チェインとを含んでいる。レンダリング・ルーチンはデバイス・キャッシュ内 のペインタ・メーカに対して特定タイプのペインタを作成するように要求する。 ペインタ・メーカからは、要求されたタイプのペインタが返却され、このペイン タは現環境で正しく機能するようになっている。ペインタはピクセル・プロセッ サであり、好適実施例ではフレーム・バッファ・デバイス用に使用されることを 主目的としている。しかし、ペインタの機能は非フレーム・バッファ・デバイス もサポートするように十分に豊富になっている。ペインタ・メーカ・チェイン内 のペインタ・メーカ・オブジェクトはグラフィカル・レンダリング要求の受け取 りに応答して、複数のペインタ・オブジェクトを含んでいるペインタ・チェ インを作成する。ペインタ・オブジェクトの各々は、特定のグラフィカル・プリ ミティブのレンダリングに対して特定のグラフィカル・オペレーションを特定の グラフィカル環境で実行するように最適化されている。タスクは、ペインタ・メ ーカ・チェイン内のペインタ・メーカ・オブジェクトによって作成されたペイン タ・オブジェクトを使用して、特定のグラフィカル環境でレンダリング・オペレ ーションを実行する。 本発明には、有利な特徴がいくつかある。例えば、新しいペインタを作成する ことができ、ペインタ作成が拡張可能である。従って、レンダラ(renderer)を変 化するペインタに適応させる必要がない(例えば、レンダリングを領域に行うか 、ピクセル・バッファに行うか、あるいはコンポジションを行うか、といった場 合)。さらに、異種のペインタをー緒に使用することが可能であり、ペインタ同 士が相互について知っている必要がない。好ましくは、レンダラはそのペインタ のための単一の公知ソースをコールする。このソースは採用されているタイプの ペインティングを抽象化している。この単一ソースは、本明細書ではペインタ・ メーカと呼ぶことにする。 また、本発明によれば、可能な限り多数の「ペインティング変数」がバインド されてから、ペインティングが多態(polymorphism)を通して開始するようになっ ている。「フック(hook)」が用意されているので、ペインタ・メーカは繰返し使 用されるオブジェクトをキャッシュしておくことができる。キャッシングはレン ダラからは見えないように(tranparant)なっている。また、スプライト(sprite) の応答時間(レスポンス・タイム)は、スクリーンの一部がマルチスレッド・セ ーフ(multi-thread safe)のレンダリングに対してロックされているスコープ( 有効範囲)の外で、時間のかかるレンダリング・ステップが実行されるように配 慮することにより最適化されている。従って、本発明によれば、ハイパフォーマ ンスのペインティングが達成される。 ペインテイングは本来的に複雑である。本発明によれば、このような複雑性は レンダラから見えないように(hidden)なっている。動的ストレージはスタック・ ベースのクリーンアップ・オブジェクトを通して割り当てられるので、例外処理 は適切なクリーンアップを行うことができる。 本発明には、ペインタおよび関連のオブジェクトの使用を監視する機能が用意 されており(その結果、ペインタと関連オブジェクトは正しい使い方がされるよ うになる)、他にも、正しくない使い方を検出する機能が用意されている(例え ば、パフォーマンス上の理由から正しい使い方が強要されていないとき)。 本発明のその他の機能(特徴)と利点については、本発明の種々実施例の構造 とオペレーションと共に、添付図面を参照して以下で詳しく説明する。 図面の簡単な説明 以下、添付図面を参照して本発明を説明する。添付図面において、 図1は、本発明の好適実施例の構造を示すハイレベル・ブロック図である。 図2は、タスクが本発明の好適実施例に従ってディスプレイ・デバイスにレン ダリングするときオブジェクト間で受け渡しされるメッセージを示す図である。 図3は、本発明のオペレーションを示すフローチャートである。 図4Aは、好適実施例によるペインタ・クラスを示す図である。 図4Bは、本発明の好適実施例によるペインタ・メーカ・クラスを示す図であ る。 図5は、ペインタ・メーカ・チェインの例を示す図である。 図6は、ペインタ・チェインの例を示す図である。 図7は、本発明の好適実施例に従ってgrafport用のペインタ・メーカを作成す るときの手順を示す図である。 図8は、本発明の好適実施例によるクリップ領域クラスを示す図である。 好適実施例の詳しい説明 1.発明の概観 図1は、本発明のコンピュータ・システム102の構造を示すハイレベル・ブ ロック図である。コンピュータ・システム102は、ランダムアクセス・メモリ (RAM)108、中央演算処理ユニット(CPU)110、および入出力 (I/O)インタフェース112などのハードウェア・コンポーネント106を 備えているコンピュータ・プラットフォーム104を備えている。なお、CPU 110は単ープロセッサを表す場合も、並列に動作する複数のプロセッサを表す 場合もある。 コンピュータ・システム102は、ハードウェア・コンポーネント104に接 続された周辺デバイスも備えている。これらの周辺デバイスとしては、入力デバ イス124(キーボード、マウス、ライトペンなど)、データ・ストレージ・デ バイス122(ハードディスクやフロッピディスクなど)、出力デバイス126 (フレーム・バッファ・ディスプレイ・デバイス、プリンタ、プロッタ、オフス クリーン・バッファなど)がある。 コンピュータ・プラットフォーム104には、オペレーティング・システム1 16も含まれているが、マイクロコード114を含んでいる場合もある。オペレ ーティング・システム116は、ディスク・オペレーティング・システム(DO S)やUNIXオペレーティング・システムなどの、ほぼ全機能のオペレーティ ング・システムを表している。しかし、オペレーティング・システム116は他 のタイプのオペレーティング・システムを表すことも可能である。そのようなも のとしては、IBM社が開発したMachマイクロカーネルなどの、限定機能の 手続き型オペレーティング・システムがあるが、これは当該分野では公知である 。 本発明の好適実施例では、コンピュータ・プラットフォーム104はインター ナショナル・ビジネス・マシンズ(IBM)社コンピュータまたはIBMコンパ チブル・コンピュータになっている。本発明の別の実施例では、コンピュータ・ プラットフォーム104はアップル社コンピュータになっている。コンピュータ ・プラットフォーム104上で動作するものとしては、アプリケーション・プロ グラム118,120がある。これらのアプリケーション・プログラム118, 120の各々はドローイング命令を含んでいる。これらの命令はコンピュータ・ プロットフォーム104で実行されると、グラフィック・プリミティブを出力デ ィスプレイ・デバイス126上にレンダリングするものである。 好ましくは、グラフィック・プリミティブを出力ディスプレイ・デバイス 126上にレンダリングするとき、多数のオブジェクトが関与する。このような レンダリングを行うときのメッセージの流れは、図2に示されている。好ましく は、タスク202(アプリケーション・プログラムは、その実行時に1つまたは 2つ以上のタスクで表されている)は、grafportオブジェクト204へのプリミ ティブ・ドローイング・メッセージをコールする。このプリミティブ・ドローイ ング・メッセージは、ドローイングすべきプリミティブのタイプ(レクタングル など)およびドローイングすべきプリミティブの属性(カラーおよび/または塗 りつぶし(filling)および/またはフレーミングまたはライン・タイプなど)を 指定している。 grafportオブジェクト204は各タスクと関連づけられており、これは、そこ を通してタスクがディスプレイ・デバイス126とやりとりできるウィンドウを 表している。grafportオブジェクト204はディスプレイ・デバイスをアクセス するときの機能(関数)を抽象化しているので、タスク202に実装されている レンダリング・コードは単純化されている。grafportオブジェクト204は、デ ィスプレイ・ピクセル情報などの、タスク特有のグラフィカル情報を表している キャッシュ203を含んでいる。キャッシュ203をgrafport204で維持する 必要があるのは、多数のタスクがディスプレイ・デバイス126にレンダリング する可能性があるからである。grafportはキャッシュ用のストレージを維持して いるが、ディスプレイ・デバイスは、タスクによる以後のレンダリングを高速化 するために情報をストアしておく。GrafDevicesは、スレッド特有データ(キャ ッシュ)をgrafportに保持すること、および、そのデータを各レンダリング・コ ールと一緒にgrafdeviceに渡すことによって、マルチスレッド・セイフ(multith read safe)とされている。 タスク202からのプリミティブ・ドローイング・メッセージの受け取りに応 答して、grafport204は、メッセージをgrafdeviceオブジェクト208へ送っ て、grafdeviceオブジェクト208によって定義された(およびメッセージで識 別された)レンダリング・メソッドをgrafdevice208に実行させる。grafport 204からgrafdevice208へ送られるメッセージには、キャッシュ203が含 まれている。 grafdevice208は、多数のディスプレイ・デバイス126と関連づけられて おり、ディスプレイ・デバイス126の機能を抽象化している。このようになっ ているので、タスクとgrafportは、ディスプレイ・デバイスの技術的詳細を知ら なくてもディスプレイ・デバイスと一緒に働くことができる。すべてのgrafdevi ceのインタフェースは同じであるので、grafportは、関連のgrafdeviceへ適切な メッセージを送ることにより、すべてのディスプレイ・デバイスと一緒に容易に 動作することができる。 grafport204からのメッセージの受け取りに応答して、grafdeviceオブジェ クト208はメッセージで識別されたレンダリング・メソッドを実行する。図3 は本発明のハイレベル・オペレーションを示すフローチャートであり、図3に示 すように、レンダリング・メソッドの実行中に、タスク202に関連するペイン タ・メーカ・チェインが使用されて、ペインタのチェインが生成される(ステッ プ308)。ペインタ・メーカ・チェインは以前に生成されたものである(ステ ップ306)。レンダリング・メソッドはこのペインタ・チェインを使用して、 ディスプレイ・デバイス126にレンダリングする(ステップ310)。このオ ペレーションは以下に詳しく説明されているが、最初に、ペインタとペインタ・ メーカについて以下のセクションで説明することにする。 2.ペインタ ペインタは、特定のグラフィカル・レンダリング・オペレーションを実行する オブジェクトである。例えば、ある種のペインタ(スパン・ペインタ(span pain ter)と呼ばれる)はスパンをレンダリングすることに関連づけられている。スパ ンとは、高さが1ピクセルの水平ラインである。他のペインタ(ヘアライン・ペ インタ(hairline painter)と呼ばれる)は、ヘアラインをレンダリングすること に関連づけられている。ヘアラインとは、任意の向きをもち、ヘアラインが表示 されるディスプレイ・デバイスの最小太さに等しい太さをもつラインのことであ る。glyphペインタはglyphをレンダリングすることに関連づけられている。glyp hとは絵文字(character)のことである。3次元(3D)スパン・ペインタは3D モデルに従ってスパンをレンダリングすることに関連づけられている (例えば、シェーディング(陰影付け)モデルをスパンに適用する)。 限定された機能(ペインタがレンダリングすることを受け持つグラフィカル・ プリミティブのタイプに対して)を有する、高度に特殊化されたペインタを定義 すると、本発明のペインタは、グラフィカル・レンダリングにおいてハイパフォ ーマンスを達成するように高度に最適化することができる。これは対話型グラフ ィカル・システムでは非常に重要である。 本発明のペインタは、ペインタがレンダリングするグラフィカル・プリミティ ブのタイプに対して特殊化されているほかに、ペインタがそれぞれのグラフィカ ル・プリミティブで実行するオペレーションのタイプに対しても特殊化されてい る。スパン・ペインタを例にして説明する。ある種のスパン・ペインタ(クリッ ピング・スパン・ペインタ(clipping span painter)と呼ばれる)はクリッピン グを取り扱う。クリッピング・スパン・ペインタを使用すると、特定の「クリッ ピング・エリア」でレンダリングを行うことができる。ウィンドウは、クリッピ ングを応用した一例である。クリッピング・エリアを採用すると、オーバラップ するウィンドウを実現することができる。 ある種のスパン・ペインタ(コンポジット・スパン・ペインタ(composite spa n painter)と呼ばれる)はコンポジション(合成)を取り扱う。コンポジット・ スパン・ペインタは、2つ以上のタスクが任意のディスプレイ・デバイスの任意 の部分に同時にレンダリングすることがないようにする。スクリーン・ペインタ ・メーカは、2つ以上のタスクがデバイスの任意のレクタングル・エリアに同時 にレンダリングすることがないようにする。また、コンポジット・スパン・ペイ ンタは、スプライト(明滅カーソルや移動するウィンドウなど)とスパンのレン ダリングを統合化して、グラフィカルな異常(anomaly)が現れないようにする。 コンポジット・スパン・ペインタは、スパン・データとスプライトの両方の組合 せを表すグラフィカル・データをレンダリングすることにより(スパン・データ をスプライトの上にランダリングするのではなく)これを行う。 他のスパン・ペインタ(ピクセル・スパン・ペインタ(pixel span painter)と 呼ばれる)はディスプレイ・デバイス・ピクセル・バッファの中にレンダリング することを取り扱う。ペインタがレンダリングするグラフィカル・プリミティブ のタイプに対して、および、ペインタが実行するグラフィカル・プリミティブに 対するオペレーションのタイプに対しての両方に特殊化されたペインタを用意す ることにより、本発明のペインタは非常に最適化されるので、パフォーマンスが 向上する。ペインタ・メーカは、特定のレンダリングに関係するペインタだけが ペインタ・チェインに含まれるようにする。特定のレンダリング・オペレーショ ンでクリッピングが必要でなければ、クリッピング・ペインタがペインタ・チェ インに含まれない。 下述するように、本発明のペインタ・メーカは、レンダリングが行われようと するグラフィカル環境の特性に基づいてペインタのチェインを作成する。作成さ れたペインタ・チェインはレンダリング・ルーチンによって使用されて、ディス プレイ・デバイス126にレンダンリングが行われる。図6はペインタ・チェイ ンの例を示す図である。好ましくは、オブジェクト指向ペインタ基底クラスは幾 何形状をレンダリングするために使用される標準タイプと拡張不能タイプのペイ ンティングの各々について定義されている。例えば、スパン・ペインタのクラス 、ヘアライン・ペインタのクラス、glyphペインタのクラス、および3Dスパン ・ペインタのクラスが定義されている。 特定のグラフィカル・プリミティブ・タイプをレンダリングすることに関連す るすべてのペインタは、その特定グラフィカル・プリミティブ・タイプに関係す るペインタ・クラスを用いてインスタンス生成される。図4Aは、好適実施例に よるペインタ・クラスのモデルを示す図である。TVerificationSpanPainter44 0のように、クラスは基底クラスのTSpanPainter442から派生している。従っ て、これらのクラスはすべてが共通のプロトコルをもっている。例えば、クリッ ピング・スパン・ペインタ、コンポジット・スパン・ペインタ、およびピクセル ・スパン・ペインタはすべて、スパン・ペインタ・クラスを使用してインスタン ス生成されたオブジェクトである。クラスのメソッドは必要に応じてオーバライ ド(override)される。コード例1は、本発明の好適実施例によるglyphペインタ ・クラスのインタフェースを示している(これはC++コンピュータ・プログラミ ング言語で書かれている)。他のペインタ・クラスのインタフェースとインプリ メンテーションはこの分野の精通者ならば理解される通りである。 3.ペインタ・メーカ ペインタ・メーカは、拡張が不能である標準タイプのペインタを獲得するとき の固定インタフェースとなるものである。これらの標準タイプのペインタは特殊 化し、チェイニングすることにより、新しい拡張した動作(behavior)をもつペイ ンタを標準インタフェースを使用して構築することができる。ペインタ・メーカ はペインタをこのように構築して、現在のレンダリング要求に見合うように最適 化されたペインタを作成する。 本発明の範囲には、図4に示すように他のタイプのペインタも含まれている。 図4に示す領域ペインタ・メーカ(region painter maker)406は、ディスプレ イ・デバイスに依存する方法で領域を作成することに関連づけられている。スク リーン・ペインタ・メーカ(screen painter maker)410は、ディスプレイ・デ バイスへのアクセスをレクタングル・セグメント単位で調整することに関連づけ られている。スクリーン・ペインタ・メーカ410はコンポジションも取り扱う 。領域(region)は、フレーム・バッファ・デバイスで高速クリッピング・オペレ ーションを行なうために使用されるデータ構造である。領域には、どのピクセル がレンダリング・オペレーション期間に変更されたかが記録されるが、ピクセル ・カラーや透明(transparency)といった他の情報は無視される。領域ペインタ・ メーカはこのタイプの情報を領域データ構造に記録するように最適化された特殊 な領域ペインタを作成する。 スクリーン・ペインタ・メーカは、マルチタスクによる共有ディスプレイ・デ バイスへのアクセスを調整する。あるタスクがデバイス上のピクセルを変更する 必要があるときは、スクリーン・ペインタ・メーカは、ソフトウェア・カーソル やスプライトなどのエレメントを合成していた交差(インタセクション)がある かどうかを特定する。交差があることが特定されると、スクリーン・ペインタ・ メーカは、コンフリクト(競合)が起こったときにそのコンフリクトを解消でき る特殊なコンポジション・ペインタ(compositing painter)を作成する。好まし くは、デバイス・キャッシュ203(図2)とレンダリング・ルーチンには、ペ インタ・メーカが単一のオブジェクトとして見えるようになっている。しかし、 実際には、チェイニングされるペインタ・メーカは、トップ・ペインタ・メーカ の下にいくつでも存在する。チェイン内の各ペインタ・メーカは、チェイン内の 次のペインタ・メーカだけを知っており、抽象的にTPainterMarkerとしてそれを 知っているだけである(図4)。図5は、ペインタ・メーカ・チェインの例を示 す図である。 すべてのペインタ・メーカは、好ましくは、単一のペインタ・メーカ・クラス からインスタンス生成されたオブジェクトになっている(図4参照)。本発明の 好適実施例によるペインタ・メーカ・クラスのインタフェースは、コード例2に 示されている。 ペインタ・メーカはペインタを作成するために使用される。最も単純なケース では、ペインタはピクセル・バッファに直接に書込みを行う単一ピクセル・バッ ファ・ペインタにすることができる。しかし、もっと複雑なペインティング・シ ナリオでは、ペインタ・メーカ・チェインから戻されるペインタは、各々がペイ ンティング・プロセスで別々の役割を果たすペインタのチェインの最初のペイン タになっている場合がある。例えば、最初のペインタはクリップ・エリアへのペ インティングを消去し、二番目のペインタはオーバラップするカーソルでペイン ティングを合成し、三番目のペインタはピクセル・バッファに直接に書込みを行 うことができる(図6)。 上述したように、ペインタ・メーカ・チェイン内の各ペインタ・メーカは、レ ンダリング・ルーチンがディスプレイ・デバイスにレンダリングするとき使用す るペインタを作成する。図3のステップ308を参照。具体的には、ペインタ・ メーカがペインタを作成するためにコールされたとき、そのペインタ・メーカは チェインの次のペインタ・メーカをコールし、そのペインタを戻されたペインタ とチェイニングしなければならない。当然のことであるが、最後のペインタ・メ ーカはこれを行う必要はない。各ペインタ・チェインは、それを作成するペイン タ・メーカ・チェインと直接にパラレルになっている。しかし、必ずしもそうで ある必要はない。ペインタ・メーカは複数の連続するペインタをチェイン内に作 成することができる。あるいは、ペインタ・メーカは、次のペインタ・メーカか ら返されてきたペインタを返すだけで、ペインタを作成しないことを決定するこ ともできる(例えば、クリッピングが必要でないとき)。 次に、ペインタ・メーカ・チェインがどのようにして作成されるかについて図 7を参照して説明する。好ましくは、ペインタ・メーカ・チェインは、grafdevi ce208に対してgrafport204を構築するときにインスタンス生成され、イン ストールされる。この場合、grafport204は特定のタスク202と関連づけれ 、grafdevice208は特定のディスプレイ・デバイス126と関連づけられてい る。grafport204がインスタンス生成されるとき、grafportコンストラクタ(c onstructor)はCreateGrafCacheと名づけたgrafdeviceメソツドをコールする(こ れは図7にライン718で示されている)。図7に示す例では、フ レーム・バッファ・ディスプレイ・デバイスを取り扱っているので、grafdevice 208はフレーム・バッファ・オブジェクト706で表されている。 CreateGrafCacheはキャッシュ203を生成し、これは最終的には、新しく作 成されたgrafport204にストアされる。キャッシュ203の構築中に、フレー ム・バッファ・オブジェクト706はピクセル・バッファ・オブジェクト708 に入っているCreatePainterMakerメソッドをコールする(図7にライン720で 示されている)。ピクセル・バッファ・オブジェクト708は、好ましくはディ スプレイ・デバイス126と関連づけられているが、これは、上述したように、 図7の例ではフレーム・バッファ・ディスプレイ・デバイスになっている。 CreatePainterMakerメソッドは、好ましくは、ピクセル・バッファ・ペインタ ・メーカ・オブジェクト710を作成し、返却するように動作する(図7にライ ン722で示されている)。ピクセル・バッファ・ペインタ・メーカ・オブジェ クト710はペインタ・メーカ・クラスからインスタンス生成されるが(上記の コード例2)、そこでは、そのメソッドは特定の機能をインプリメントするよう に必要に応じてオーバライドされている。具体的には、ピクセル・バッファ・ペ インタ・メーカ710は、特定ピクセル・バッファ・タイプのペインタを作成す る。 戻されたピクセル・バッファ・ペインタ・メーカ710を使用して、フレーム ・バッファ・オブジェクト706はスクリーン・ペインタ・メーカ712を構築 する(フレーム・バッファがスクリーンを表している場合。これは図7にライン 724で示されている)。スクリーン・ペインタ・メーカ・オブジェクト712 を使用して、フレーム・バッファ・オブジェクト706はクリッピング・ペイン タ・メーカ714を作成する(図7にライン726で示されている)。最後に、 フレーム・バッファ706(または、同等のgrafdevice208)はクリッピング ・ペインタ・メーカ714をデバイス・キャッシュ203内のペインタ・メーカ ・フィールドに割り当て、デバイス・キャッシュ203をgrafport204にスト アする。これにより、grafport204はデバイス・キャッシュ203を所有し、 それを各レンダ・コールと一緒にgrafdevice208に引き渡す。 4.発明の動作 以下では、本発明の動作について詳しく説明する。 各grafdevice208には、grafport204から各レンダリング・コールと一緒 にデバイス・キャッシュ203が渡される。デバイス・キャッシュ203は、最 上部のペインタ・メーカを指しているポインタを供給している。チェイン内の各 ペインタ・メーカはチェイン内の次のペインタ・メーカだけを指している。デバ イスは、キャッシュを作成するときの一部としてチェインを作成してリンクする ので、新しいペインタ・メーカ・チェインはデバイスをサブクラス化することに よりインストールされる。 レンダリング・ルーチンは、インストールされたペインタ・メーカを使用して 、それぞれのペインタを作成する。その結果、同じレンダリング・コードはスク リーンまたは領域内にも、または、それを受け入れる他のオブジェクト内にもレ ンダリングを行うことができる。レンダリング・メソッドは、そのことを知らな い。これらのメソッドはペインタ・メーカを多態的にコールし、ペインタ・メー カからは、適切なグラフィカル・オペレーションを多態的に実行するペインタが 戻される。 図3を参照して上述したように、タスク202からプリミティブ・ドローイン グ・メッセージの受け取りに応答して、grafport204はメッセージをgrafdevi ceオブジェクト208に送って、grafdeviceオブジェクト208によって定義さ れたレンダリング・メソッドをgrafdeviceオブジェクト208に実行させる。gr afport204からgrafdevice208へ送られるメッセージには、キャッシュ20 3が含まれている。grafport204からのメッセージの受け取りに応答して、gr afdeviceオブジェクト208はメッセージで識別されたレンダリング・メソッド (またはルーチン)を実行する。 好ましくは、本発明のペインタ・アーキテクチャはレンダリング・ルーチンの 内部で起動される。そこで、以下では、本発明のペインタ・アーキテクチャのオ ペレーション(つまり、ペインタ・メーカとペインタのオペレーション)をコー ド例3に示すレンダラ・ルーチン例を参照して説明することにする。 命令"TDrawingLock"(コード例3のセグメントA)はドローイング・ロック(d rawing lock)を構築するように動作するが、このロックはペインタ・クラスのタ イプを取るテンプレート・クラスからインスタンス生成されたオブジェクトであ る。以下で説明するように、2つのペインタを同時に使用できるようにする特殊 なドローイング・ロックが用意されている。ドローイング・ロック・オブジェク トは、ペインタ・メソッドがコールされる前にルーチン内のどの個所でも作成す ることが可能である。このクラスの主目的は、タスクに関するかぎり、ペインタ とペインタ・サポート・オブジェクトの例外アンワインディング(exception unw inding)を取り扱うことである。コードをレンダリングしているとき例外が引き 起こされた場合は、同期ロックを解放し、ペインタ・ロックを割り当て解除しな ければならない。そのような理由から、ドローイング・ロックは、好ましくは、 スタック上に割り当てられている。また、ドローイング・ロックはなんらかのキ ャッシングを行うので、その後で行われるAcquire(獲得)、Release(解放)お よびペインティング・コール(下述する)は可能な限り高速化している。 AcquireとReleaseはドローイング・ロックのメソッドである。これらのドロー イング・ロック・メソッドは、ペインタ・メーカのメソッドをコールし、レンダ リング・ルーチンで使用されるペインタをペインタ・メーカに作成させる。本発 明の別実施例では、ドローイング・ロックは使用されない。その代わりに、ペイ ンタ・メーカ・メソッドがレンダリング・ルーチンから直接にコールされる。 レンダラ(つまり、レンダリング・ルーチン)はペインタ・メソッドをコール する準備状態になると(ディスプレイ・デバイスにレンダリングするために)、 ドローイング・ロック・テンプレートに渡されたタイプに一致するペインタ・ポ インタを作成し、ドローイング・ロックのAcquireメソッドをコールする(セグ メントE)。ドローイング・ロックのAcquireメソッドはこのポインタを適切な ペインタを指すように変更する。このペインタはペインタ・メーカ・チェインに よって生成されたものである(具体的には、Acquireメソッドはペインタ・メー カ・チェインの適切なメソッドをコールし、ペインタ・メーカ・チェインが次に ペインタを生成する)。動的環境によっては、ドローイング・ロックは、領域に クリッピングし、共有デバイスへのマルチスレッド・アクセスに参加し、コンポ ジション・オペレーションを実行し、正しいかどうかを検証し、あるいは領域構 造内にペインティングすることができるペインタを返却する。そのピクセルがど こに移動するかは、レンダラに知らされない。 正しいポインタを返すためには、Acquireメソッドはレンダリングしようとし ている領域の境界(bounds)を知っている必要がある。そのようにする必要がある のは、ある種のペインタのオペレーションがレンダリングしようとする境界に左 右されるからである(例えば、クリッピング・ペインタ)。そのような境界は境 界パラメータ(bounds parameter)によってレンダリング・ルーチンに渡される。 なお、この境界パラメータはドローイング・ロックを作成するコールの中で渡さ れる(セグメントA)。また、この境界パラメータは、レンダリングしようとす るエリアの左境界と右境界を判断するためにもアクセスされる(セグメントB) 。さらに、この境界パラメータは、レンダリングしようとするエリアを垂直方向 に繰り返すために使用されるWHILEループ(セグメントCから始まる)の出口条 件を定義するためにアクセスされる。WHILEループ(セグメントC)を繰り返す ごとにレンダリングしようとするサブエリアは、セグメントDのステートメント によって定義されている。レンダリング・ルーチンがペインタ(これはセグメン トEでAcquireメソッドによって戻されたものである)を得ると、レンダリング ・ルーチンはペインタを使用してディスプレイ・デバイスにレンダリングする。 具体的には、レンダリング・ルーチンはペインタの適切なメソッドをコールし、 これらのペインタ・メソッドはディスプレイ・デバイスにレンダリングする。こ れはセグメントGで表されているが、ペインタ・メソッドへの実際のコールが示 されていないのは、これらがインプリメンテーションに依存するためである。セ グメントDのステートメントで定義されたサブエリアで実行しようとしているグ ラフィカル・レンダリング・オペレーションのすべてを、レンダリング・ルーチ ンが実行すると、レンダリング・ルーチンはペインタを解放し(セグメントH) 、WHILEループを再び繰り返すことにより次のサブエリアのドローイングを開始 する。 カーソルやスプライトなどの対話型スクリーン・エレメントの応答性を保証す るためには、レンダラはAcquireコールからReleaseコールまでの計算を最小限に 抑える必要がある。 上述したように、ドローイング・ロックはペインタ・メーカ・オブジェクトの メソッドをコールする(別の方法として、レンダリング・ルーチンがこれらのペ インタ・メーカ・メソッドを直接にコールすることも可能である)。デバイスは 1つのアクティブ・ペインタ・マーカをもっており、これはドローイング・ロッ クがデバイス・キャッシュから取り出したものである。下に示す表1は、ドロー イング・ロックとペインタ・メーカの双方に行われるコールの時間順の概略で( 上述したとおり)、各コールの機能(関数)の簡単なコメントを示している。 5.例 以下、レンダリングの例を用いて本発明をさらに詳しく説明するが、この例で は、クリッピング、コンポジション、およびマルチスレッド同期化を取り扱う必 要のあるレンダリングがスクリーン・デバイス上で行われものである。このセク ションでは、そのような場合に使用されるペインタ・メーカと、表1に概略とし て示されているコールに対するペインタ・メーカの応答について説明する。 前述したように、ドローイング・ロックが作成された後(コード例3のセグメ ントA)、ドローイング・ロックはペインタ・メーカをデバイス・キャッシュ2 03から取り出すことから開始する。デバイス・キャッシュ203は、デバイス と現環境に応じて、単純ペインタ・メーカを含んでいる場合と複合ペインタ・メ ーカを含んでいる場合がある。この例では、デバイス・キャッシュから戻される ペインタ・メーカは複合ペインタ・メーカ(complex painter maker)であり、図 5に示すように3つのペインタ・メーカからなっている。 ドローイング・ロックは、まず、ペインタ・メーカのUsePaintメソッドをコー ルする。このコールでは、ドローイング・ロックは使用しようとするペインタの タイプを指定している(ドローイング・ロックを作成したレンダリング・ルーチ ンの中のステートメントで与えられた情報から)。コード例2に示すように、ペ インタ・メーカ・クラスは以下に示すタイプのペインタに対するUsePaintメソッ ドを定義している。つまり、スパン・ペインタ、ヘアライン・ペインタ、ビット マップ・グリフ(glyph)・ペインタ、および3Dスパン・ペインタである。しか し、他のタイプのペインタも、本発明の範囲と精神に属するものである。UsePai ntに渡される他のパラメータは実行すべきペインティングのタイプを記述してい る。例えば、ペイント・パラメータはカラーを指定している。トランスファモー ド(transfermode)パラメータは、ペイントをどのように適用するかを指定してい る(例えば、レンダリングされるイメージ(画像)を半透明(translucent)にす る)。境界パラメータはペインティングを行おうとしているエリアを指定してい る。 UsePaintによると、ローレベル・ペインタ・メーカ(ピクセル・バッファ・ペ インタ・メーカ508など)は、このペインティング・オペレーションに対して ペインタをキャッシュすることができるので、パフォーマンスがさらに向上する 。ピクセル・バッファ・ペインタ・メーカ508が、UsePaintのオペレーション の間にペインタを作成し、キャッシュするものとする。正しいペインタを作成す るためには、TPixelBufferPainterMaker508は、ペインタとペインタ・タイプ (TSpanPainter、TGlyphPainterなど)の両方を知っている必要がある。適切なペ インタ・クラスのNILポインタが渡されて、オーバライドされた適切なUsePaint コールが選択される。TPixelBufferPainterMakerはペイント・パラメータに入っ ている値を調べ、対応するペインタが作成するのに高速であるかどうか、あるい はキャッシュすべきかどうかを判断する。そのペインタがキャッシュの候補にな っていれば、これはすでにキャッシュにある可能性があるので、ピクセル・バッ ファ・ペインタ・メーカ508はそこを調べる。いずれの場合も、ペインタを作 成するか、あるいはそれをキャッシュから取り出すことになる。そのあとで、ペ インタを指すポインタを、ペインタ・メーカ508内部の特殊なスロットにスト アしておくので、ペインタは動的フェーズの各部分で調べることなく、そこから 取り出されることになる。 しばらくの間先に進むことにして、理解されるように、対応するTPainterMake r::DoneWithPaintsメソッドを使用すると、TPixelBufferPainterMaker508は 、必要ならばそのペインタを削除することができる。このメソッドはドローイン グ・ロックのデストラクタ(destructor)によってコールされる。 ペインタ・アーキテクチャの動的フェーズは、レンダラが実際にピクセルのド ローイングを開始する準備状態になったとき開始する。なお、任意の量の初期設 定または計算をドローイング・ロックが作成されてから、使用することができる 。即時にペインティングを開始する意図があることをペインタ・アーキテクチャ に知らせるには、レンダラは、コード例3のセグメントE中のドローイング・ロ ックのAcquireメソッドをコールする。 Acquireメソッドは、適切なペインタのペインタ・メーカStartDrawingメソッ ドをコールする(コード例2参照。ここではペインタ・メーカ・オブジェクトは 各ペインタ・タイプ別にStartDrawingメソッドをもっていることが示されてい る)。ペインタ・メーカはStartDrawingメソッドを使用して、どの種類のクリッ ピング、コンポジション、およびマルチスレッド同期化が必要であるかを動的に 判断する。単一のプリミティブのレンダリングをペインタ・アーキテクチャを通 る複数の小さなパスに分割することが可能であり、その場合、各パスは、クリッ ピングとコンポジションに関するかぎり、同様の問題を取り扱う。これは、オリ ジナル境界以下のものを許可することにより行なわれる。ペインタ・メーカは、 レンダリングを制限するようにboundsBottomパラメータを変更することができる 。なお、境界は垂直方向にだけ制限することができる。Acquireメソッドが戻る と、レンダラは、ロックが解放され、再獲得されるまで、スキャンラインをboun dsBottom(これは含まない)まで変更することが許される。 StartDrawingコールは、TCippingPainterMaker504から始まるペインタ・メ ーカ・チェインをたどって伝わっていく。各ペインタ・メーカの応答の仕方は次 のとおりである。まず、その環境をチェックして、境界レクタングルを制限する 必要があるかどうかを判断する。そうであれば、boundsBottomパラメータを現在 値の最小値およびペインタ・メーカの限界値になるように変更する。(boundsBo ttomが現在30であり、TScreenPainterMake506はペインティングをスキャン ライン20に制限してスキャンライン21から始まるスプライトを避けようとし ていると想定する。)次に、ペインタ・メーカはチェイン内の次のペインタ・メ ーカのStartDrawingメソッドをコールしてそのペインタを得る。そのあと、現在 のペインタ・メーカは、必要ならば、自身のペインタを次のペインタ・メーカか ら返されたペインタの上にチェインする。 ここで述べている例では、TClippingPainterMaker504はTScreenPainterMak er506のStartDrawingメソッドをコールする(TClippingPainterMaker504は 、下位レベルのStartDrawingメソッドが終了した後、その作業のすべてを行う) 。TScreenPainterMaker506は境界レクタングルを、スプライトやラバーバン ドなどの種々のコンポジットされたアイテムの境界と交差させる。交差(interse ction)が見つかつたとき、boundsBottom値を制限すると最も効率のよいペインタ を使用することができる。次に、境界(boundsBottomによって変更されている) のサイズのスクリーン・シールドが 作成されて、スクリーンのその部分が排他的にアクセスできるようにする。その あと、TScreenPainterMaker506はTPixelBufferPainterMaker508のStartDr awingメソッドをコールする。 TPixelBufferPainterMaker508は、自身が作成したペインタをUsePainterメ ソッドの間にキャッシュから取り出す。なお、StartDrawingは、UsePaintよりも 相当コールされるので、ルックアップおよび/または作成費用のすべてはUsePai ntに配置し、StartDrawingは高度に最適化されることになる。ある種のペインタ は、そこにドローイングしようとするレクタングルの境界を知っている必要があ るので(自身のポインタ、パターンへのオフセットをキャッシュするか、または メモリをロックするために)、TPixelBufferPainterMaker508はペインタのSe tBoundsメソッドをコールしてその情報を伝達する。そのあと、自身が作成した ペインタを返却する。ピクセル・バッファは、通常は、ドローイングの境界を制 約することがないので、boundsBottomパラメータは通常、変更されない。デバイ スの境界へのクリッピングは、パイプライン中でもっと早い時点で行われている 。 ここでの説明において、ペインタ・メーカがペインタを「作成する」というと きは、ペインタ・メーカ・オブジェクトが新しいペインタ・オブジェクトをイン スタンス生成するという意味である。新しいペインタ・オブジェクトは適切なペ インタ・クラスを用いてインスタンス生成される(すべに述べたように、ペイン タ・クラスは各グラフィカル・プリミティブごとに異なっている)。コード例1 を参照。新しいペインタ・オブジェクトをインスタンス生成するとき、クラス・ メソッドは、ペインタ・オブジェクトがレンダリングを実行しようとしている特 定のグラフィカル環境で必要とする機能(関数)を実行できるように、必要に応 じてオーバライドされる。 コントロール(制御権)はTScreenPainterMaker506のStartDrawingメソッ ドに戻される。適切なペインタ・チェインを作成するために、ペインタ・チェイ ン内の各ペインタはチェインの次のペインタを指すポインタをもっているので、 チェインの存在は明示(explicit)の外部リストではなく、黙示(implicit)である 。ペインタ・メーカ・チェイン内の各ペインタ・メーカは、ゼロ個または1個 以上のペインタを作成し、これらをペインタ・メーカ・チェインの次のペインタ ・メーカから返されたペインタとチェイニングする。TScreenPainterMaker50 6は最も適切な(つまり、最も効率的な)ペインタを作成し、返却する。多くの 場合、このジョブを最適に行うには、2つ以上のペインタが必要になる。例えば 、2つのスプライトの下にレンダリングしようとするラインは、単純ピクセル・ バッファ・ペインタを使用して、そのラインのうち隠されていない部分をペイン トし、そのあとで単純コンポジション・パインタを使用して、1つのスプライト の下に置かれているラインの部分をペイントし、そのあとで複合コンポジション ・ペインタを使用して、両方のスプライトの下に置かれている部分をペイントし 、最後に単純ペインタを使用して、再びスクリーンに直接にペイントすることが できる。 本発明のペインタ・アーキテクチャによれば、好ましくは、一度に戻されるペ インタは1つだけとしているので、TScreenPainterMaker506は最初のペイン タを返却し、boundsBottomパラメータは、レンダラに追加のドローイング・ロッ クAcquireコールを行わせて、他のペインタを得るように変更される。この方法 は相対的に複雑であるが、不必要なコンポジション・オーバヘッド、バックバッ ファ割当て、およびシールドの存続期間(これはスプライトの応答性に影響する )が大幅に節減される。また、この動作はコンポジション・アーキテクチャによ ってチューニングできるので、単一の複合ペインタの実行効率がロックを何度も 獲得する場合よりもすぐれていれば、これはどのレンダリング・コードを変更し なくても行うことができる。 この時点で、コントロールはTClippingPainterMaker504に戻される。これ は、単純ピクセル・バッファ・ペインタ(コンポジションを行う必要がない場合 )またはコンポジション・ペインタ・ラッパ(compositing painter wrapper)の どちらかであるペインタを受け取る。TClippingPainterMakerは境界レクタング ル(boundsBottomによって変更されている)とクリッピング領域の間に交差があ るかどうかをチェックする。交差が見つからなければ、その下に置かれたペイン タ・メーカから受け取ったペインタとboundsBottom値を返却する。そうでなけれ ば、クリッピング・ペインタをペインタ・チェインに追加する。 TScreenPainterMaker506の場合と同じ方法でドローイングを中断する必要が 起こったときは、boundsBottomを変更することが許される。 そのあと、コントロールはTDrawingLockのAcquireメソッドに戻される。ペイ ンタはAcquireメソッドに返却されている。その場合、返されたペインタは、そ こでドローイングしようとしている動的環境によっては、ペインタ・チェインに なっている場合がある。ペインタとboundsBottom値はドローイング・ロック・ク ライアント(つまり、レンダリング・ルーチン)に返される。 レンダラはさらに進んで、TDrawingLockから受け取ったペインタにコールを行 う(コード例3のセグメントGに示されている)。これらのコールは次のような 形式になっている(少なくとも、スパン・ペインタの場合。他のペインタはメソ ッドが異なっている)。 スクリーン・デバイスでレンダリングを行うとき、ペインタ・コールはタイム ・クリティカル(time-critical)である。従って、レンダラはAcquireメソッドが コールされる前またはReleaseメソッドがコールされたあと、重要な計算を行う 必要がある。 レンダラが完了したとき、あるいはboundsBottom値まで達したとき、あるいは ペインタ・コール間で別の計算を行うために休止する必要が起こったとき、TDra wingLock::Releaseをコールする(コード例3のセグメントH)。これにより、 ペインタ・メーカのStopDrawingメソッドがコールされる。TClippingPainterMak er504、TScreenPainterMaker506、およびTPixelBufferPainterMaker50 8のStopDrawingメソッドは順番にコールされる。StartDrawingパスの間に自身 が作成したクリッピング・ペインタを削除する必要がなければ、TClippingPaint erMaker504が行う仕事はほとんどない。TScreenPainterMaker506はスクリ ーン・シールドを解放し、他のスレッドがスクリーンのこの部分を再び変更でき るようにする。TPixelBufferPainterMaker508は多分なにもしない(そのペイ ンタの破壊が後続のDoneWithPaintsコール まで行われないのは、追加のStartDrawingコールがこのペインタを使用して行わ れる可能性があるからである)。 レンダラは、独自のアルゴリズムに従って、あるいはペインタ・メーカによっ て課されたboundsBottomの制約に応じて、AcquireメソッドとReleaseメソッドを 複数回コールすることができる。最終的に終了すると、スタック・ベースのTDra wingLockはレンダリング・ルーチンから出るとき自動的に破壊される。この時点 で、ペインタ・マーカは最後のコールDoneWithPaintsを取得し、これは各ペイン タ・メーカに渡される。この時点で、TPixelBufferMaker508は使用していた ペインタを削除するか、あるいはキャッシュする。ペインタ・メーカがそのペイ ンタを削除するか、キャッシュするかどうか、およびこれをStopDrawingコール 中で行うか、DoneWithPaintsコール中で行うかどうかは、作成されたペインタの 有効な存続によって決まる。 6.2ペインタの同時使用 ある種のレンダラは2つのペインタを同時に使用して、例えば、塗りつぶしや フレーミングを行う必要が起こることがある。重要なことは、2つのペインタは 多数のものを共有するので(境界レクタングル、クリッピングおよびスクリーン ・ペインタ、およびスクリーン・シールド)、この使い方を予測しておくことで ある。これはパフォーマンス向上が得られるだけでない。これらのペインタが独 立に扱われると、同じスクリーン・シールドを予約しようとしたとき、問題が発 生することになる。 本発明によれば、特殊なドローイング・ロックTDoubleDrawingLockが2つのペ インタを同時使用することをサポートしている。これらの2ペインタはクラスが 同じでも、異なっていても構わない。好ましくは、3つ以上のペインタが同時に アクティブになっていることはない。この制約により、一定数のペインタをTPix elBufferPainterMakerレベルでキャッシュすることが最適化される。以下は、2 ペインタ・レンダラから抜粋したサンプル・コードである。 コード例4のレンダリング・ルーチンのオペレーション、具体的には、本発明 のペインタ・メーカへのコールとその後のオペレーションは、ドローイング・ロ ックがある種のペインタ・メーカ・メソッドを複数回コールし、その他は一度だ けコールすることを除けば、単一ペインタ・レンダラと同じである。例えば、Tr imBoundsメソッドを一度だけコールするだけで済むのは、同じクリッピング領域 が両方のペインタで使用されるからである。他方、2つのUsePaintコールが行わ れるのは、最下位ペインタ・メーカに両方のペインタをキャッシュするためであ る。この場合には、TPixelBufferPainterMakerは2つのアクティブ・ペインタを 1回でキャッシュするストラテジをもち、これらをStarDrawingコールの間に即 時に返却できることが必要である。UsePaintコールは2回であるのに対し、1回 のDoneWithPaintsコールだけが必要である。 TDoubleDrawingLockは、TPainterMaker::StartDrawingへの各コールでどちら のペインタが必要であるかを指定している。クリッピングとスクリーン・ペイン タ・メーカのようなペインタ・メーカが余分の仕事を行うのは、最初のペインタ のときだけである。例えば、スクリーン・ペインタ・メーカは最初のパスのとき だけシールドを予約する。二番目のパスで再びそれを行おうとすると、永久にブ ロックされることになる。 7.検査ペインタ レンダリング・コードを書く人が本発明のペインタ・メーカとペインタを誤っ た使い方をする場合、それは様々である。プログラマがユーザ・フレンドリで強 固な環境で作業できるようにするために、本発明は、プログラマが犯し易いエラ ーを検出する機能を用意している。以下は、本発明によって検出されるエラーを 列挙したものである。 ・ TDrawingLock::Acquireに渡された境界は、ドローイング・ロック・コンス トラクタに渡された境界より大きい。 ・ ペインタ・コールは、TDrawingLock::Acquire中で境界(boundsBottomで変 更されている)の外で行われた。 ・ ペインタ・コールは、ドローイング・ロックAcquire/Releaseペアの外で行 われた。 ・ ペインタ・コールは、ペインタのロックが壊されたあとで行われた。 これらの各々は、ドローイング・ロックがパラメータとして各ペインタ・メソ ッドに渡されていれば、比較的チェックが容易である(アサーション(assertion )を使用すると)。しかし、ペインタにドローイング・ロックを知らせるアーキ テクチャ上の理由はほかにないので、その解決法は理想的でない。 改善された解決法では、条件付きでインストールされた検査ペインタ・マーカ がペインタ・メーカ・チェインに含まれている。この検査ペインタ・マーカは正 しいかどうかのチェックを次のように行う。 検査ペインタ・メーカのStartDrawingメソッドでは、境界レクタングルはUseP aintコールの間に検出された境界と比較される。新しい境界(boundsBottomによ って変更)は返却されたペインタにコピーされる。 ペインタは各ペインタ・コールをインターセプトし、これらの境界と突き合わ せてそれを検査する。境界を越えているペインタ・コールがあれば、アサーショ ンが引き起こされる。 ペインタ・メーカのStopDrawingコールは、検査ペインタを削除しない。境界 を空にセットするだけである。ドローイング・ロックReleaseコールのあとでド ローイングしようとすると、アサーションが引き起こされる。 ドローイング・ロックが破壊されたあとでは、検査ペインタもDoneWithPaints コールを受けて破壊されるので、ペインタの使用を検出することは困難である。 その仮想テーブル(virtual table)がまだ影響を受けていなければ、削除された 検査ペインタがコールされる可能性がある。その場合、その境界がまだ空である おそれがあるので、その試みはアサーションを引き起こすことになる。なお、そ の保証はない。これはロック・パラメータを使用する解決法と対照的であり、こ の場合には、ロックがないとペインタがコールされないという保証が得られる。 8.クリップ領域の作成 このアーキテクチャが解決することを目的としている別の問題は、クリッピン グ領域の作成と関係がある。このような領域を作成するためには、レンダラは通 常のピクセル・バッファではなく、領域にペイントを行う特殊なペインタを使用 する必要があるが、同じレンダリング・パイプライン・コードをすべて再利用す ることが望ましい。この新しいアーキテクチャによれば、特殊な領域ペインタを 作成する方法を知っている、別のペインタ・メーカをデバイス・キャッシュに挿 入すると、この問題は簡単に解決する。このペインタ・メーカはCreateRegionペ インタ・メーカと呼ばれる。 これを真のオブジェクト指向方式で行うために、CreateRegionペインタ・メー カはデバイス・キャッシュの内部を調整するだけではない。その代わりに、その ペインタ・マーカを要求された場合を除き、通常のフレームバッファ・キャッシ ュと同じ働きをするフレームバッファ・キャッシュ・サブクラス804(図8参 照)を作成する。その時点で、その特殊なTRegionPainterMakerを返却し、これ は特殊なデバイス依存領域データ構造に「ペイントする」ペインタを作成する。 フレームバッファ・キャッシュをライトウィエト方式でサブクラス化するため に、TFrameBufferCache804は、TStandardFrameBufferCache806とTLinkedR egionPainterMakerCache808の2つのサブクラスをもつライトウェイト抽象ク ラスである。TLinkedRegionPainterMakerCache808はGetPainterMakerメソッ ドだけをインプリメントしており、このメソッドはコールされると、キャッシュ にそのペインタ・メーカ(つまり、そこにストアされたペインタ・メーカ)を返 却させる。その他はすべてTFrameBufferCache804へ送り返され、これによっ てTLinkedRegionPainterMakerCache808が作られる。CreateRegionペインタ・ メーカは、その特殊フレームバッファ・キャッシュ808を、コールしたレンダ リング・メソッドに引き渡す。 9.ピクセル・ストリーマ これまでに説明してきたアーキテクチャは、ペインタを使用するどのレンダリ ング・ルーチンに対しても有効である。しかし、本発明のアーキテクチャによれ ば、ピクセル・バッファに書き込む方法が他にもいくつか用意されている。最も 重要なケースの1つではピクセル・ストリーマ(pixel streamer)を含み、それは 大部分のイメージ・レンダリング・オペレーションで使用されている。 ピクセル・ストリーマとペインタとの主な違いは、ピクセル・ストリーマをペ ア(リーダとライタ)にすると、ピクセル・データを一方のフォーマットから他 方のフォーマットへ変換できることである。なお、このペアリングはオプション である。ソースとデスティネーションのピクセル・バッファが同じフォーマット を共有するときは、ジョブを処理するには一方のピクセル・ストリーマだけが必 要である。2つのストリーマが必要になるような場合には、リーダを一度だけ割 り当て、初期化すればよい。これは、ライタに影響する同じ動的制約(クリッピ ング、コンポジション、マルチスレッド同期化)を受けないからである。リーダ は常にオフスクリーン・バッファから読み取る(これはアーキテクチャ上の制約 である)。これとは逆に、ライタはペインタと同じ動的制約の対象となる。 ペインタと共有する類似性が多数あるため、ピクセル・ストリーマは同じペイ ンタ・メーカ・クラスを通して取り扱われる。違いもあるため、ペインタ・メー カ・クラス内に新しいメソッドが必要であり、別種のドローイング・ロックが採 用されている。これらは、一方または他方のケースで未使用になっている多数の パラメータを受け渡ししないと統合化できない(例えば、ストリーマはTPaintパ ラメータを使用しない)。 類似性と相違点は、コード例5に示す例を参照して下述する。 この例に示すように、トリビアル・リジェクト(trivial reject)・クリッピン グおよびドローイング・ロック構築を行うコードはペインタで使用されるものと 同じである。1つの違いは、TPixelStreamerDrawingLockがテンプレート・クラ スでないことであるが、これは、異なるピクセル・ストリーマがすべて共通の基 底ベースから派生しているためである。ペインタの場合ではそうでない。 最大の違いは、ドローイング・ロックに余分のコールGetPixelStreamerReader があることである。ピクセル・ストリーム・リーダは一度だけ割り当てられる必 要があるのに対し、ピクセル・ストリーム・ライタは、クリッピング、コンポジ ション、およびマルチスレッド同期化を可能にするために、動的にラップ(循環 )することが可能である。パフォーマンス上の理由から、この費用のかかるルッ クアップはAcquireコールの外に移動して、何度でも実行できるようにしている 。GetPixelStreamReaderコールに渡される最後のパラメータはenum(列挙型)で あり、これは、リーダが必要でない場合(同じピクセル・フォーマットの2ピク セル・バッファ間で転送するにはピクセル・ストリーマは1つで十分である)、 リーダがオプションである場合(ピクセル・バッファは変換が必要かどうかを判 断する)、およびリーダが必要である場合(ある種のフィルタリング・オプショ ンでは、特定のピクセル・フォーマットを想定している)を区別するために使用 される。 10.スクロールエリア イメージ・レンダリングに対するドローイング・ロック・サポートでは、パフ ォーマンス上の理由から重要な想定を行っている。その想定とは、リーダがクリ ッピング、コンポジション、またはマルチスレッド同期化の問題を気にする必要 がないことである。言い換えれば、リーダは非共有のオフスクリーン・データか ら読み取らなければならない。 この想定には、スクローリングをサポートするために必要なスクリーン間のコ ピーは除外されている。スクリーン・デバイス・サブクラスは、その特定スクリ ーン・デバイスで意味をもつような形で、スクローリング・メソッドをインプリ メントしている。最悪の場合でも、スクリーン全体をロックすることができ、 ピクセル情報をオフスクリーン・バッファに転送することができ(スプライトを 考慮に入れていることは勿論である)、オフスクリーン・バッファをあとで新し いスクリーン位置に書き込むことができる。殆どの場合、もっと効率的な別の方 法が用意されている。 11.3Dサポート 3Dレンダリングは、ドローイング・ロック・コンストラクタが、ペインタと トランスファ・モードではなく、拡張可能シェーディング・アルゴリズムをイン プリメントしているシェーダ・オブジェクトを受け取る点を除けば、2Dのそれ と同じである。3Dでは、シングルとダブルのドローイング・ロックがまだあり 、これらはまだテンプレート化されているが、好ましくは、2つの3Dスパン・ ペインタ用のダブル・ドローイング・ロックだけが使用されている。次の例は、 3Dドローイング・ロックの使い方を示したものである。 12.拡張可能性 本発明は、(1)新しいタイプのペインタ・メーカを作成するようにTPainterM akerをサブクラス化し、(2)そのような新ペインタ・メーカをペインタ・メー カ・チェインにインストールすることにより拡張可能である。新ペインタ・メー カのインストールは、ピクセル・バッファをサブクラス化し、デバイスがそれを コールしてチェインの最後のペインタ・メーカを作成するか、あるいはデバイス をサブクラス化し、そのピクセル・バッファから返されたものの上に他のペイン タ・メーカを階層化する機会をそのデバイスに与えることにより行われる。 ペインタ・メーカは,将来必要になると予想されるペインタをキャッシュして おくことができる。そのために、キャッシュをメンバ・データとしてストアして おく。TPainterMaker::UsePaintメソッドとTPainterMaker::DoneWithPaintsメソ ッドは、チェイン内の各ペインタ・メーカにキャッシュを割り当て、その割当て を解除する機会を与える。 本発明の種々実施例について上述してきたが、これらの実施例は単なる例示で あり、これらに限定されるものではない。従って、本発明の技術範囲と効力が及 ぶ範囲は上述した実施例のいずれにも制限されるものではなく、請求の範囲に明 確化されている内容およびその均等なものに従ってのみ判断されるものである。
【手続補正書】特許法第184条の8 【提出日】1995年10月23日 【補正内容】 (原文明細書第2頁) 従来の、他のコンピュータ・ベースのグラフィックス・システムでは、限られ た数のレンダリング・ルーチンが用意され、そこではレンダリング・ルーチンの 各々は、グラフィカル環境のすべてについてグラフィカル環境特有のコードを含 んでいる。この種のグラフィカル環境特有コードの実行は、同じようにレンダリ ング・ルーチンに含まれている条件ステートメント("if-then-else"ステートメ ントなどの)の実行に基づいている。しかし、限られた数のレンダリング・ルー チンを用意し、各ルーチンがグラフィカル環境のすべてについてグラフィカル環 境特有コードをもつことは、結果として得られるレンダリング・ルーチンが複雑 になり、開発と保守が困難になるので理想的な解決法ではない。オブジェクト指 向環境で実現されている従来のビジュアルおよびグラフィック・システムは、W. J.Schroeder 著"VISAGE"Proceedings Visualization 19 October 1992,Los Ala mitos,pp.219-226に開示されている。オブジェクト指向イメージ処理環境を示 す別の文献としては、Drake著「オブジェクトおよびイメージ(Objects and Imag es)」(Computer Systems Europe 10(1990)January,No.1 pp.31-32)に記載さ れているものがある。 発明の概要 本発明は、様々なグラフィカル環境でグラフィカル・プリミティブをドローイ ング(またはレンダリング、またはペインティング)するためのオブジェクト指 向ペインタを提供することを目的とし、さらに、グラフィカル環境のグラフィカ ル特性に従って上記ペインタを選択し、リンクするためのオブジェクト指向ペイ ンタ・メーカを提供することを目的としている。ペインタ・メーカ、より具体的 には、本発明のペインタ・メーカ・アーキテクチャは、ピクセル・ペインティン グ、クリッピング、領域作成、マルチスレッド同期化、ペインタ・キャッシング および対話型コンポジション(合成)といったように、異なるグラフィカル環境 のグラフィカル特性を取り扱うために必要な異なる機能(関数)を抽象化してい る。これらの関数をレンダリング・コードから見えないようにすると、様々な状 況で同じレンダリング・コードを使用することが可能になる。ペインタ・メーカ ・アーキテクチャは、ある状況でペイントするのに2つ以上のペインタが必要に なる所定の場合には、複数のペインタを動的に使用することもサポートしている 。 具体的には、本発明は、複数のグラフィカル環境で複数のグラフィカル・プリ ミティブをレンダリングするためのコンピュータ・ベース・システムを提供する ことを目的としている。このシステムは複数のペインタ・メーカ・オブジェクト と、ペインタ・メーカ・オブジェクトの少なくとも1つを含むペインタ・メーカ ・チェインとを含んでいる。レンダリング・ルーチンはデバイス・キャッシュ内 のペインタ・メーカに対して特定タイプのペインタを作成するように要求する。 請求の範囲 1.複数のグラフィカル環境の少なくとも1つで複数のグラフィカル・プリミテ ィブをレンダリングするコンピュータ・ベース・システムであって、 常駐しているオペレーティング・システムをもつ中央処理ユニットと、該オペ レーティング・システム用のストレージ手段と、該コンピュータ・ベース・シス テムを使用して適当なグラフィカル環境でグラフィカル・プリミティブをドロー イングするグラフィカル出力デバイスとを含んでいるコンピュータ・プラットフ ォームを備えたものにおいて、 複数のペインタ・メーカ・オブジェクトと、 複数のペインタ・メーカ・オブジェクトの少なくとも1つを備えるペインタ・ メーカ・チェインと、 グラフィカル・レンダリング要求を前記ペインタ・メーカ・チェインに渡して 、前記グラフィカル環境でグラフィカル・プリミティブをレンダリングするグラ フィカル・レンダリング手段と、 前記ペインタ・メーカ・オブジェクトは、前記ペインタ・メーカ・チェイン内 にあって、グラフィカル・レンダリング要求の受け取りに応答して、特定のグラ フィカル・プリミティブをレンダリングすることに対してグラフィカル・オペレ ーションを実行するメソッドを備えるペインタ・オブジェクトを作成するペイン タ作成手段と、グラフィカル要求を満たすようにグラフィカル・オペレーション を実行するメソッドを有するペインタ・オブジェクトを備えるペインタ・オブジ ェクト・チェインに前記ペインタ・オブジェクトをチェイニングする手段とを備 えており、 前記グラフィカル・レンダリング手段は、ペインタ・メーカ・チェイン内のペ インタ・メーカ・オブジェクトによって生成されたペインタ・オブジェクトを使 用して、前記グラフィカル環境でレンダリング・オペレーションを実行する手段 も備える ことを特徴とするコンピュータ・ベース・システム。 2.ペインタ・メーカ・オブジェクトの各々は、スパン・ペインタを生成する手 段を備えることを特徴とする請求項1に記載のコンピュータ・ベース・システム 。 3.ペインタ・メーカ・オブジェクトの各々は、ヘアライン・ペインタを生成す る手段を備えることを特徴とする請求項1に記載のコンピュータ・ベース・シス テム。 4.ペインタ・メーカ・オブジェクトの各々はグリフ(glyph)・ペインタを生成 する手段を備えることを特徴とする請求項1に記載のコンピュータ・ベース・シ ステム。 5.ペインタ・メーカ・オブジェクトの各々は、3次元スパン・ペインタを生成 する手段を備えることを特徴とする請求項1に記載のコンピュータ・ベース・シ ステム。 6.ペインタ・メーカ・オブジェクトの各々は、クリッピングを実行するペイン タを生成する手段を備えることを特徴とする請求項1に記載のコンピュータ・ベ ース・システム。 7.ペインタ・メーカ・オブジェクトの各々は、コンポジションを実行するペイ ンタを生成する手段を備えることを特徴とする請求項1に記載のコンピュータ・ ベース・システム。 8.ペインタ・メーカ・オブジェクトの各々は、ピクセル・バッファに書き込む ペインタを生成する手段を備えることを特徴とする請求項1に記載のコンピュー タ・ベース・システム。 9.各々がグラフィカル・プリミティブの1つと関連づけられた複数のペインタ 基底クラスが定義されていて、その場合、ペインタ作成手段はペインタ基底クラ スを使用してペインタ・オブジェクトを作成する手段を備えることを特徴とする 請求項1に記載のコンピュータ・ベース・システム。 10.複数のグラフィカル環境で複数のグラフィカル・プリミティブをレンダリ ングするコンピュータに実装された方法であって、 (a)タスクのためにペインタ・メーカ・チェインを生成するステップであっ て、該ペインタ・メーカ・チェインは複数のペインタ・メーカ・オブジェクトを 備えるものと、 (b)特定のグラフィカル環境で特定のグラフィカル・プリミティブをレンダ リングする要求をタスクから受け取るステップと、 (c)レンダリング要求を受け取りに応答して、ペインタ・メーカ・チェイン 内のペインタ・メーカ・オブジェクトを使用してペインタ・オブジェクトのチェ インを作成するステップであって、該ペインタ・オブジェクトの各々は、ペイン タ・オブジェクトのチェインがレンダリング要求を満たすように複数のグラフィ カル・オペレーションを実行するようにグラフィカル・オペレーションを実行す るものと、 (d)ペインタ・チェイン内のペインタ・オブジェクトのチェインを使用して 特定のグラフィカル環境でレンダリング・オペレーションを実行するステップと を備えていることを特徴とするコンピュータ実装方法。 11.ペインタ・メーカ・チェイン内のペインタ・メーカ・オブジェクトを使用 してスパン・ペインタを作成し、該スパン・ペインタをペインタ・チェインに追 加するステップをさらに含むことを特徴とする請求項10に記載のコンピュータ 実装方法。 12.ペインタ・メーカ・チェイン内のペインタ・メーカ・オブジェクトを使用 してヘアライン・ペインタを作成し、該ヘアライン・ペインタをペインタ・チェ インに追加するステップをさらに含むことを特徴とする請求項10に記載のコン ピュータ実装方法。 13.ペインタ・メーカ・チェイン内のペインタ・メーカ・オブジェクトを使用 してグリフ(glyph)ペインタを作成し、該グリフ・ペインタをペインタ・チェイ ンに追加するステップをさらに含むことを特徴とする請求項10に記載のコンピ ュータ実装方法。 14.ペインタ・メーカ・チェイン内のペインタ・メーカ・オブジェクトを使用 して3次元スパン・ペインタを作成し、該3次元スパン・ペインタをペインタ・ チェインに追加するステップをさらに含むことを特徴とする請求項10に記載の コンピュータ実装方法。 15.ペインタ・メーカ・チェイン内のペインタ・メーカ・オブジェクトを使用 してクリッピングを行うペインタを作成し、該クリッピング・ペインタをペイン タ・チェインに追加するステップをさらに含むことを特徴とする請求項10に記 載のコンピュータ実装方法。 16.ペインタ・メーカ・チェイン内のペインタ・メーカ・オブジェクトを使用 してコンポジションを行うペインタを作成し、該コンポジション・ペインタをペ インタ・チェインに追加するステップをさらに含むことを特徴とする請求項10 に記載のコンピュータ実装方法。 17.ペインタ・メーカ・チェイン内のペインタ・メーカ・オブジェクトを使用 してピクセル・バッファに書き込むペインタを作成し、該ピクセル・バッファ書 込みペインタをペインタ・チェインに追加するステップをさらに含むことを特徴 とする請求項10に記載のコンピュータ実装方法。 18.複数のペインタ基底クラスがグラフィカル・プリミティブの各々に関連づ けられていて、ペインタ基底クラスを使用してペインタ・オブジェクトを作成す るステップをさらに含むことを特徴とする請求項10に記載のコンピュータ実装 方法。
───────────────────────────────────────────────────── フロントページの続き (81)指定国 EP(AT,BE,CH,DE, DK,ES,FR,GB,GR,IE,IT,LU,M C,NL,PT,SE),OA(BF,BJ,CF,CG ,CI,CM,GA,GN,ML,MR,NE,SN, TD,TG),AT,AU,BB,BG,BR,BY, CA,CH,CN,CZ,DE,DK,ES,FI,G B,HU,JP,KP,KR,KZ,LK,LU,LV ,MG,MN,MW,NL,NO,NZ,PL,PT, RO,RU,SD,SE,SK,UA,UZ,VN (72)発明者 ワトソン,ラルフ,トーマス アメリカ合衆国 95014 カリフォルニア 州 クパチーノ レバノン ドライブ 10191

Claims (1)

  1. 【特許請求の範囲】 1.複数のグラフィカル環境で複数のグラフィカル・プリミティブをレンダリン グするコンピュータ・ベース・システムであって、 複数のペインタ・メーカ・オブジェクトと、 ペインタ・メーカ・オブジェクトの少なくとも1つを含んでいるペインタ・メ ーカ・チェインと、 ペインタ・メーカ・チェインに結合されていて、特定のグラフィカル環境で特 定のグラフィカル・プリミティブをレンダリングする要求をペインタ・メーカ・ チェインへ渡すためのグラフィカル・レンダリング手段とを備えていて、 前記ペインタ・メーカ・チェインに含まれる前記ペインタ・メーカ・オブジェ クトの各々は、グラフィカル・レンダリング要求を受けるとそれに応答して、特 定のグラフィカル・プリミティブをレンダリングすることに対して特定のグラフ ィカル・オペレーションを、特定のグラフィカル環境で実行するように最適化さ れたペインタ・オブジェクトを作成するペインタ作成手段を含んでおり、 前記グラフィカル・レンダリング手段は、ペインタ・メーカ・チェインに含ま れるペインタ・メーカ・オブジェクトによって生成されたペインタ・オブジェク トを使用して、レンダリング・オペレーションを特定のグラフィカル環境で実行 する手段 も含んでいることを特徴とするコンピュータ・ベース・システム。 2.ペインタ・メーカ・オブジェクトの各々は、スパン・ペインタを生成する手 段を含んでいることを特徴とする請求項1に記載のコンピュータ・ベース・シス テム。 3.ペインタ・メーカ・オブジェクトの各々は、ヘアライン・ペインタを生成す る手段を含んでいることを特徴とする請求項1に記載のコンピュータ・ベース・ システム。 4.ペインタ・メーカ・オブジェクトの各々は絵文字(glyph)ペインタを生成す る手段を含んでいることを特徴とする請求項1に記載のコンピュータ・ベース・ システム。 5.ペインタ・メーカ・オブジェクトの各々は、3次元スパン・ペインタを生成 する手段を含んでいることを特徴とする請求項1に記載のコンピュータ・ベース ・システム。 6.ペインタ・メーカ・オブジェクトの各々は、クリッピングを実行するペイン タを生成する手段を含んでいることを特徴とする請求項1に記載のコンピュータ ・ベース・システム。 7.ペインタ・メーカ・オブジェクトの各々は、コンポジションを実行するペイ ンタを生成する手段を含んでいることを特徴とする請求項1に記載のコンピュー タ・ベース・システム。 8.ペインタ・メーカ・オブジェクトの各々は、ピクセル・バッファに書き込む ペインタを生成する手段を含んでいることを特徴とする請求項1に記載のコンピ ュータ・ベース・システム。 9.単一のペインタ・メーカ基底クラスからペインタ・メーカ・オブジェクトを サブクラス化する手段をさらに含んでいることを特徴とする請求項1に記載のコ ンピュータ・ベース・システム。 10.各々がグラフィカル・プリミティブの1つと関連づけられた複数のペイン タ基底クラスが定義されていて、その場合、ペインタ作成手段はペインタ基底ク ラスを使用してペインタ・オブジェクトを作成する手段を含んでいることを特徴 とする請求項1に記載のコンピュータ・ベース・システム。 11.複数のグラフィカル環境で複数のグラフィカル・プリミティブをレンダリ ングするコンピュータに実装された方法であって、 (a)タスクのためにペインタ・メーカ・チェインを生成するステップであっ て、該ペインタ・メーカ・チェインは複数のペインタ・メーカ・オブジェクトを 含んでいるものと、 (b)特定のグラフィカル環境で特定のグラフィカル・プリミティブをレンダ リングする要求をタスクから受け取るステップと、 (c)レンダリング要求を受けると、それに応答して、ペインタ・メーカ・チ ェイン内のペインタ・メーカ・オブジェクトを使用して、ペインタ・オブジェク トのチェインを作成するステップであって、該ペインタ・オブジェクトの各々は 特定のグラフィカル・プリミティブをレンダリングすることに対して特定のグラ フィカル・オペレーションを、特定のグラフィカル環境で実行するように最適化 されているものと、 (d)ペインタ・チェイン内のペインタ・オブジェクトを使用して、特定のグ ラフィカル環境でレンダリング・オペレーションを実行するステップとを含んで いることを特徴とするコンピュータ実装方法。 12.ステップ(c)は、ペインタ・メーカ・チェイン内のペインタ・メーカ・ オブジェクトを使用してスパン・ペインタを作成し、該スパン・ペインタをペイ ンタ・チェインに追加するステップを含んでいることを特徴とする請求項11に 記載のコンピュータ実装方法。 13.ステップ(c)は、ペインタ・メーカ・チェイン内のペインタ・メーカ・ オブジェクトを使用してヘアライン・ペインタを作成し、該ヘアライン・ペイン タをペインタ・チェインに追加するステップを含んでいることを特徴とする請求 項11に記載のコンピュータ実装方法。 14.ステップ(c)は、ペインタ・メーカ・チェイン内のペインタ・メーカ・ オブジェクトを使用して絵文字(glyph)ペインタを作成し、該絵文字ペインタを ペインタ・チェインに追加するステップを含んでいることを特徴とする請求項1 1に記載のコンピュータ実装方法。 15.ステップ(c)は、ペインタ・メーカ・チェイン内のペインタ・メーカ・ オブジェクトを使用して3次元スパン・ペインタを作成し、該3次元スパン・ペ インタをペインタ・チェインに追加するステップを含んでいることを特徴とする 請求項11に記載のコンピュータ実装方法。 16.ステップ(c)は、ペインタ・メーカ・チェイン内のペインタ・メーカ・ オブジェクトを使用してクリッピングを行うペインタを作成し、該クリッピング ・ペインタをペインタ・チェインに追加するステップを含んでいることを特徴と する請求項11に記載のコンピュータ実装方法。 17.ステップ(c)は、ペインタ・メーカ・チェイン内のペインタ・メーカ・ オブジェクトを使用してコンポジションを行うペインタを作成し、該コンポジシ ョン・ペインタをペインタ・チェインに追加するステップを含んでいることを特 徴とする請求項11に記載のコンピュータ実装方法。 18.ステップ(c)は、ペインタ・メーカ・チェイン内のペインタ・メーカ・ オブジェクトを使用してピクセル・バッファに書き込むペインタを作成し、該ピ クセル・バッファ書込みペインタをペインタ・チェインに追加するステップを含 んでいることを特徴とする請求項11に記載のコンピュータ実装方法。 19.ステップ(a)は、単一のペインタ・メーカ基底クラスからペインタ・メ ーカ・オブジェクトをサブクラス化するステップを含んでいることを特徴とする 請求項11に記載のコンピュータ実装方法。 20.各々がグラフィカル・プリミティブの1つに関連づけられた複数のペイン タ基底クラスが定義されていて、ステップ(c)はペインタ基底クラスを使用し てペインタ・オブジェクトを作成するステップを含んでいることを特徴とする請 求項11に記載のコンピュータ実装方法。
JP7513187A 1993-11-05 1994-01-03 オブジェクト指向ペインタ・メーカ Pending JPH09504895A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/148,051 US5428722A (en) 1993-11-05 1993-11-05 Object-oriented painter maker
US08/148,051 1993-11-05
PCT/US1994/000055 WO1995012865A1 (en) 1993-11-05 1994-01-03 Object-oriented painter maker

Publications (1)

Publication Number Publication Date
JPH09504895A true JPH09504895A (ja) 1997-05-13

Family

ID=22524029

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7513187A Pending JPH09504895A (ja) 1993-11-05 1994-01-03 オブジェクト指向ペインタ・メーカ

Country Status (7)

Country Link
US (1) US5428722A (ja)
EP (1) EP0717868B1 (ja)
JP (1) JPH09504895A (ja)
AU (1) AU6019294A (ja)
CA (1) CA2169627A1 (ja)
DE (1) DE69404469T2 (ja)
WO (1) WO1995012865A1 (ja)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU695019B2 (en) * 1994-09-12 1998-08-06 Canon Kabushiki Kaisha Rendering of overlapping objects
US5561752A (en) * 1994-12-22 1996-10-01 Apple Computer, Inc. Multipass graphics rendering method and apparatus with re-traverse flag
US5986667A (en) * 1994-12-22 1999-11-16 Apple Computer, Inc. Mechanism for rendering scenes using an object drawing subsystem
US5847712A (en) * 1995-01-03 1998-12-08 University Of Washington Method and system for generating graphic illustrations according to a stroke texture and a tone
JP3636809B2 (ja) * 1996-03-12 2005-04-06 株式会社リコー 画像処理方法
US5801717A (en) * 1996-04-25 1998-09-01 Microsoft Corporation Method and system in display device interface for managing surface memory
US5844569A (en) * 1996-04-25 1998-12-01 Microsoft Corporation Display device interface including support for generalized flipping of surfaces
US6008816A (en) * 1996-04-25 1999-12-28 Microsoft Corporation Method and system for managing color specification using attachable palettes and palettes that refer to other palettes
US5850232A (en) * 1996-04-25 1998-12-15 Microsoft Corporation Method and system for flipping images in a window using overlays
US5848246A (en) 1996-07-01 1998-12-08 Sun Microsystems, Inc. Object-oriented system, method and article of manufacture for a client-server session manager in an interprise computing framework system
US6038590A (en) 1996-07-01 2000-03-14 Sun Microsystems, Inc. Object-oriented system, method and article of manufacture for a client-server state machine in an interprise computing framework system
US6272555B1 (en) 1996-07-01 2001-08-07 Sun Microsystems, Inc. Object-oriented system, method and article of manufacture for a client-server-centric interprise computing framework system
US6266709B1 (en) 1996-07-01 2001-07-24 Sun Microsystems, Inc. Object-oriented system, method and article of manufacture for a client-server failure reporting process
US5987245A (en) 1996-07-01 1999-11-16 Sun Microsystems, Inc. Object-oriented system, method and article of manufacture (#12) for a client-server state machine framework
US6424991B1 (en) 1996-07-01 2002-07-23 Sun Microsystems, Inc. Object-oriented system, method and article of manufacture for a client-server communication framework
US6434598B1 (en) 1996-07-01 2002-08-13 Sun Microsystems, Inc. Object-oriented system, method and article of manufacture for a client-server graphical user interface (#9) framework in an interprise computing framework system
US6304893B1 (en) 1996-07-01 2001-10-16 Sun Microsystems, Inc. Object-oriented system, method and article of manufacture for a client-server event driven message framework in an interprise computing framework system
US5999972A (en) 1996-07-01 1999-12-07 Sun Microsystems, Inc. System, method and article of manufacture for a distributed computer system framework
US6275871B1 (en) * 1996-07-03 2001-08-14 Siemens Aktiengesellschaft Asynchronous transport optimizing observer-pattern-like system supporting several modes for an interface definition language-less communication subsystem
US5897670A (en) * 1996-07-12 1999-04-27 Sun Microsystems, Inc. Method and system for efficient organization of selectable elements on a graphical user interface
US5936641A (en) * 1997-06-27 1999-08-10 Object Technology Licensing Corp Graphics hardware acceleration method, computer program, and system
US6275225B1 (en) 1997-10-24 2001-08-14 Sun Microsystems, Inc. Method, apparatus, system and computer program product for a user-configurable graphical user interface
CA2243816C (en) 1998-07-23 2005-11-01 Corel Corporation Method and system for rendering brush strokes with multiple nibs
US7391422B1 (en) 1999-12-22 2008-06-24 Adobe Systems Incorporated Method and apparatus for painting groups of objects
US7228525B2 (en) * 2003-02-14 2007-06-05 Sap Ag Generic rendering framework
US8885208B2 (en) * 2006-07-21 2014-11-11 Adobe Systems Incorporated Progressive refinement of an edited image using secondary high resolution image processing
US8487963B1 (en) 2008-05-30 2013-07-16 Adobe Systems Incorporated Preview representation of pixels effected by a brush tip area
US9953270B2 (en) * 2013-05-07 2018-04-24 Wise Io, Inc. Scalable, memory-efficient machine learning and prediction for ensembles of decision trees for homogeneous and heterogeneous datasets

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4821220A (en) * 1986-07-25 1989-04-11 Tektronix, Inc. System for animating program operation and displaying time-based relationships
US4885717A (en) * 1986-09-25 1989-12-05 Tektronix, Inc. System for graphically representing operation of object-oriented programs
US4891630A (en) * 1988-04-22 1990-01-02 Friedman Mark B Computer vision system with improved object orientation technique
US4953080A (en) * 1988-04-25 1990-08-28 Hewlett-Packard Company Object management facility for maintaining data in a computer system
EP0347162A3 (en) * 1988-06-14 1990-09-12 Tektronix, Inc. Apparatus and methods for controlling data flow processes by generated instruction sequences
US5041992A (en) * 1988-10-24 1991-08-20 University Of Pittsburgh Interactive method of developing software interfaces
US5133075A (en) * 1988-12-19 1992-07-21 Hewlett-Packard Company Method of monitoring changes in attribute values of object in an object-oriented database
US5050090A (en) * 1989-03-30 1991-09-17 R. J. Reynolds Tobacco Company Object placement method and apparatus
US5060276A (en) * 1989-05-31 1991-10-22 At&T Bell Laboratories Technique for object orientation detection using a feed-forward neural network
US5125091A (en) * 1989-06-08 1992-06-23 Hazox Corporation Object oriented control of real-time processing
US5181162A (en) * 1989-12-06 1993-01-19 Eastman Kodak Company Document management and production system
US5093914A (en) * 1989-12-15 1992-03-03 At&T Bell Laboratories Method of controlling the execution of object-oriented programs
US5075848A (en) * 1989-12-22 1991-12-24 Intel Corporation Object lifetime control in an object-oriented memory protection mechanism
US5151987A (en) * 1990-10-23 1992-09-29 International Business Machines Corporation Recovery objects in an object oriented computing environment
US5119475A (en) * 1991-03-13 1992-06-02 Schlumberger Technology Corporation Object-oriented framework for menu definition
US5347620A (en) * 1991-09-05 1994-09-13 Zimmer Mark A System and method for digital rendering of images and printed articulation

Also Published As

Publication number Publication date
CA2169627A1 (en) 1995-05-11
AU6019294A (en) 1995-05-23
US5428722A (en) 1995-06-27
DE69404469D1 (de) 1997-09-04
WO1995012865A1 (en) 1995-05-11
EP0717868B1 (en) 1997-07-23
DE69404469T2 (de) 1998-02-26
EP0717868A1 (en) 1996-06-26

Similar Documents

Publication Publication Date Title
JPH09504895A (ja) オブジェクト指向ペインタ・メーカ
JP3544666B2 (ja) オブジェクト指向ディスプレイ・システム
US5555368A (en) Object-oriented multi-tasking view framework
AU2013368503B2 (en) Sprite graphics rendering system
US5973702A (en) Oriented view system having a common window manager for defining application window areas in a screen buffer and application specific view objects for writing into the screen buffer
US4928247A (en) Method and apparatus for the continuous and asynchronous traversal and processing of graphics data structures
EP3111318B1 (en) Cross-platform rendering engine
US5544301A (en) Object-oriented view layout system
US7126606B2 (en) Visual and scene graph interfaces
EP0329771B1 (en) High performance graphics workstation and method of operating therefor
US5251322A (en) Method of operating a computer graphics system including asynchronously traversing its nodes
US5097411A (en) Graphics workstation for creating graphics data structure which are stored retrieved and displayed by a graphics subsystem for competing programs
JP4796499B2 (ja) 映像およびシーングラフインターフェイス
EP0734552B1 (en) Object-oriented task security framework
US5615326A (en) Object-oriented viewing framework having view grouping
US5737559A (en) Object-oriented view hierarchy framework
US20180144437A1 (en) Graphics processing systems
US5524199A (en) Object-oriented view system with background processing of update request
US5524200A (en) Object-oriented non-rectilinear viewing framework
EP0607136A1 (en) Graphics output system with bounded updating
JPH03139781A (ja) プリミテイブ描出方法、ポリゴン・シエーデイング方法、及びデイスプレイ・プロセツサ
US5796969A (en) Object-oriented view coordinate space system
Angebranndt et al. Definition of the porting layer for the X v11 sample server
JPH0528276A (ja) マルチプロセツサシステムにおける図形描画方式
JPH087783B2 (ja) マルチプロセッサ・グラフィック・システム