
	spComponentEx

はじめに
--------

spComponentExは，C言語で書かれたマルチプラットホームGUIツールキット
spComponentの拡張セットです．コンパイルに必要な外部ライブラリが
多いものなどをspComponentから分離しています．

現在は，OpenGLをサポートするための関数群のみが用意されています．
OpenGLは，コアな描画部分は共通APIになっていますが，環境依存の部分も
それなりに存在することが知られています．また，OpenGLにはメニューや
ボタンなどのGUIパーツを提供するAPIは存在していません．
本ライブラリを用いることにより，マルチプラットホーム（Windows, 
Mac(Cocoa/Carbon)，Linux(GTK+/Motif)，Android，iOS）でspComponentによる
GUIとOpenGLを併用することができるようになります．
また，OpenGLで文字列を描画する場合も環境依存のやり方しか存在しませんが，
本ライブラリの日本語文字列を含む文字列描画のためのオブジェクトである
spGLStringとそれに関する関数群を用いれば，機能は限定されていますが，
マルチプラットホームで簡単に文字列を扱うことが可能になります．
さらに，バージョン0.5以降では，OpenGL 2以降で提供されるシェーダーも
使用できるようになっています．

なお，spComponentEx専用のライブラリファイル（.aファイル等）は
存在せず，spComponentのライブラリファイルに組み込まれている環境が
あります（Android版，iOS版，macOS Cocoa版が該当します）．


Android版，iOS版について
------------------------

Android版，iOS版では，使用されているOpenGLがOpenGL ESですので，通常の
OpenGLのコードはそのままではまず動きません。
そこで，これまでのOpenGLのサンプルコードがそのままである程度動くように
互換関数の実装（glBeginやglEndの実装）やヘッダファイルで型や関数の
読み替え等（GLdouble→GLfloatなど）を行っています。ただし，この互換機能は
完全対応はかなり困難ですので，そのうちこの機能をなくす可能性もあります．

Android版ではコンパイルにAndroid 2.3以降のNDK環境が必要になります．


対応状況
--------

- OpenGL 2以降のシェーダーはバージョン0.5以降でサポートされるようになりました
  （example/glsltest.c参照）．いくつかの環境では，GLEWライブラリ等が必要です．

- マルチサンプリングはバージョン0.5以降でサポートされるようになりました．
  spCreateGLVisual呼び出し時に，spGLAttributeに以下のコードを追加して下さい（4点の場合）．
	SP_GL_SAMPLE_BUFFERS, 1,
	SP_GL_SAMPLES, 4,

- インデックスカラーはサポートされていません．

- GTK+バージョン1.Xはサポートされていません．gtkglextでGTK+バージョン1.Xが
  正常に動作しないためです．

- GTK+バージョン3.Xの環境下では，spGL 0.5.2において，GTK+バージョン3.1.16以降で
  提供されるGtkGLAreaを使用して動作するようになりました．ただし，GtkGLArea は，
  私が試した限りではOpenGL Core Profile 3.2以降のコードでないと正しく動作しない
  ようです．そのため，Vertex Array Objectなどが必須となっています．この関係で，
  GTK+バージョン3.Xの環境下ではサンプルがglsltest，glslxfont，glpmspecgramなどの
  限られたものしか動作しませんのでご注意下さい．
  なお，マルチサンプリングは，現在の所，GtkGLAreaに対応するAPIが存在しませんので，
  サポートされていません．


バグ
----

GTK+2環境では，OpenGL 2以降のシェーダーが様々な環境で正しく使えるかは不明です
（GTK+環境で内部で使用しているgtkglextでは，コンテキストに対してバージョンを
指定できるAPIが存在していないため）．同様に，Mac OS X Carbon版も
正しく使えるかは不明です．

Mac OS X Carbon版では，1つのウィンドウ内に複数のOpenGL用キャンバスが
存在する場合に描画が正しく行われないというバグがあります．例えば，
example/multicanvas.c は，本来，2つのキャンバスに描画が行われますが，
左側のみに行われます．この問題はCarbonのOpenGLの仕様とも関係しますので，
解決は無理そうです．


データ型
--------

spGLContext
spGLVisual
spGLString


関数
----

spIsGLCanvas
spIsGLDrawableComponent
spIsGLDrawable

spCreateGLVisual
spDestroyGLVisual
spCreateGLContext
spDestroyGLContext
spCreateGLCanvas
spSetGLContext
spGetGLContext

spGLSwapBuffers
spGLFlush
spGLWaitGLDrawing
spGLWaitSystemDrawing

spGLUseFont

spCreateGLString
spDestroyGLString
spSetGLStringParams
spGetGLStringExtent
spSetGLStringPos3f
spDrawGLString


ライセンス
----------

LICENSE.txt を見て下さい．Windows版，Motif版，GTK+版，Mac OS（Carbon）版は
オープンソースで，いわゆるX11ライセンスになっています．ほとんど制限はありません．
商用に利用することもできます．なお，macOS Cocoa版，iOS版，Android版は，
現在の所，オープンソースにはしておらず，ライセンスも未定です．未定では
ありますが，教育・研究用には無償で使用できるライセンスにする予定です．


坂野秀樹（Banno Hideki）
