QuickDraw

QuickDraw（クイックドロー）とは、かつてAppleのClassic Mac OSで使われていた画像描画API の一種である。 macOSでは後継のQuartz 2Dを利用する。従来との互換維持のためQuickDrawもMac OS X v10.4で非推奨となったが、移行期間としてOS X Mountain Lionまで残されていた。 QuickDrawの最初のバージョンはビル・アトキンソンほぼ一人により書かれた。元々はLisa用の描画関数群としてLisaGrafという名前で開発されていたが、Macintoshにも搭載されることが決まりQuickDrawと改称された。 1979年にApple社員がXEROXの研究所PARCを見学した際、Altoで動くSmalltalkシステムを見せられた。当時のSmalltalk GUIでのウインドウは単純な矩形の組み合わせで描画され、また、他のウインドウに隠れて一部分しか見えていないウインドウの表示内容の更新もおこなわれていなかった。しかし、Altoのハードウェア機能（描画に必要なビット転送ルーチンであるBitBLTのマイクロコード化など）を介した比較的高速な描画を見て、不定形クリッピング描画が実現されていると誤った思い込みをしてしまったビル・アトキンソンは、その認識のまま遂に“リージョン”の描画や演算処理を比較的高速に扱えるLisaGrafやQuickDrawを完成させてしまった。後に、QuickDrawの功績により彼はAppleフェローの地位を与えられた。 QuickDrawは直線、矩形、正円及び楕円などの図形描画を当時のマシンとしては高速に行うだけでなく、Macintoshを特徴付けるウインドウの重ね合わせの際に必須の不定形クリッピング描画を可能とし、その後のソフトウエアに大きな影響を与えた。 QuickDrawは、Apple Lisaの開発の一環としてLisa Grafとしてスタートした。Macintoshでは、当初は簡略化されていたが、後に拡張された。当初、QuickDraw GrafPortsはビット深度1、つまり1ピクセルあたり1ビット、つまり白黒のみをサポートしていた。これは、512×342ピクセルという固定サイズの初期Macintoshの内蔵スクリーンに適していた。QuickDrawは粗い平面モデルを使って限定的なカラーをサポートし、多色リボンを使用するタイプのドットマトリクスプリンタを駆動することができたが、この機能をサポートするアプリケーションはごくわずかであった。 1987年、Macintosh IIが開発・発売され、コンピュータ、モニタ、キーボードが分離した、よりオーソドックスな3ボックスのデザインになった。モニタが独立し、初代Macよりも大きくなったため、ビデオアーキテクチャも必然的に変更しなければならなかった。さらに、Macintosh IIはフルカラー化を可能にした。この時、Appleは業界で初めて、複数のモニタにまたがるシームレスなデスクトップをサポートすることを決定した。こうして、オリジナルのQuickDrawを大幅に拡張したColor QuickDrawが誕生した。オリジナルのアーキテクチャは拡張性に乏しかったが、Appleの開発者たちは一連のハッキングを駆使して、カラーの追加と新しいビデオアーキテクチャを、開発者とエンドユーザの双方にとって実質的にシームレスにすることに成功したのである。 Color QuickDrawは、接続された各ビデオカード/モニタを表すGDevices、色を扱う新しいカラーGrafPort（CGrafPort）構造体、さらに1ピクセルあたり複数ビットの画像用にBitMapの代わりにPixMapなどの新しいデータ構造を導入している。ここで使われた互換性のためのハックの1つは、新しい構造体が古い構造体とまったく同じサイズで、ほとんどのデータメンバが同じ場所にあるが、BitMapフィールドの代わりにカラー構造体のハンドルとポインタが追加されている。rowBytesフィールドの上位 2 ビットは、GrafPort と CGrafPort を区別するためのフラグとして使用された（旧式の GrafPort では常に0だが、これはBitMapがこれらのビットを設定するほど広くなり得なかったためだ）。なぜなら、32ビットのPixMapの最大行幅はわずか4,095であり、高解像度のグラフィック作業では問題となったからだった。後の開発版（Carbon）ではこの制限はなくなったが、完全な後方互換性はなかった。Color QuickDrawでは、インデックス付きビデオデバイスの色の調停を管理するパレットマネージャも追加された。ほとんどのグラフィックスプリミティブの操作は変更されず（ただしカラーで動作）、あるいは白黒のAPIの新しいカラーバージョンが追加された。 当初、Color QuickDrawは1、2、4、8ビットのビデオカードでのみ動作可能であった。その後24ビットのビデオカードが登場し（いわゆるトゥルーカラー）、QuickDrawは再び更新され、1ピクセルあたり32ビット（実際には24ビット、未使用は8ビット）のカラーデータまでサポートするようになった（「32-Bit QuickDraw」）。しかし、アーキテクチャは既にこれを許容していたので、新しいAPIは必要なかった。色データ構造自体は、1、2、4、8、15、24ビットの色深度を許容し、それぞれ2、4、16、256、32768、1677216色、または4、16、256スケールのグレーを生成した。QuickDrawは、実際のビデオハードウェアの利用可能な色深度への色の再サンプリングや、オフスクリーン画像バッファ間の転送を管理し、オプションで画像を低深度にディザリングして画質を向上させることも行った。また、カラーサンプリングユーティリティも追加され、プログラマはインデックス付きのビデオデバイスで使用するために最適なカラーパレットを生成することができるようになった。 QuickDrawのアーキテクチャは、常にGrafPortとそれに関連するBitMapまたはPixMapを「オフスクリーン」で作成することを可能にしていた。ピクセルは、QuickDrawのブリット機能であるCopyBitsを使って、これらのオフスクリーンポートとスクリーン間で転送することができた。このようなオフスクリーン合成は、ゲームやグラフィックスを多用するアプリケーションの主力となるものである。しかし、32ビットQuickDrawが登場するまでは、このようなオフスクリーンワールドは、プログラマがアプリケーション内で手作業で作成・設定する必要があった。これは、3つ以上の別々のかなり複雑なデータ構造（CGrafPort、PixMap、GDevice、インデックス付きデバイスの場合は、カラールックアップテーブルとその逆）を含むため、エラーが起こりやすい可能性があった。32ビットQuickDrawでは、これを処理するためのOSサポートが追加され、「オフスクリーン・グラフィック・ワールド」（GWorld）が用意された。GWorldのビデオバッファ（PixMap）は、メインメモリに格納されるか、またはビデオRAMの未使用部分に格納され、画面へのコピーは、メインメモリバス上で大量のピクセルデータを転送する必要性を回避し、速度を最適化することができた。 QuickTimeの登場により、QuickDrawはJPEGのような圧縮されたラスターデータを扱う能力を獲得した。QuickTimeの画像圧縮マネージャはQuickDrawと密接に統合され、特に画像の解凍コールは本格的なQuickDrawの描画コールであり、画像が記録されている場合、圧縮データは画像の一部として保存され、後で画像を描画する際に表示される。また、画像圧縮マネージャでは、ColorSyncカラーマッチングとの連携も追加された。 この後、新しいプロセッサアーキテクチャ（PowerPC）に最適化するためのバックエンドの変更を除けば、QuickDrawはクラシックMac OSの残りの期間中、ほとんど変更されることなく存続した。QuickDraw GXとQuickDraw 3Dは、QuickDrawの名前を共有し、QuickDraw PixMapと画像データ構造を相互運用することができたが、それ以外の機能では完全に別個のもので互換性がなかった。 Mac OS Xでは、QuickDrawはCarbon APIの一部となった。2005年、Mac OS X v10.4のリリースに伴い、QuickDrawは公式に非推奨とされた。 2010年、MacPaint 1.3のソースコードがコンピュータ歴史博物館から公開され、QuickDrawの歴史的なソースコードも利用可能になった。 [脚注の使い方] ^ “Apple Developer Documentation”. developer.apple.com. 2022年1月24日閲覧。 ^ “MacPaint and QuickDraw Source Code” (英語). CHM (2010年7月18日). 2022年1月24日閲覧。 ^ “🕞 👨🏽‍🎤 🚮 博物館に送られたMacPaintおよびQuickDrawのソース 🌏 👨🏻‍🌾 ⏏️”. tech-in-japan.github.io. 2022年1月24日閲覧。 ATSUI Core Image MacPaint and Quickdraw source code - ソースコードがコンピュータ歴史博物館において公開されている