プラグイン/スクリプト開発用ファイル/Shade 12 Plugin SDK
概要 †
Shade 12 SDKに対応するための変更点を記載しています。
Shade11からの違い †
ヘッダの検索パス指定 †
SDKのディレクトリを「SDK」と仮定する。
Shade11では、
SDK/include
を検索パスとして追加。
必要に応じてboostのディレクトリを検索パスに加える(なくてもよい)。
Shade12では、
SDK/include SDK/boost_1_43_0 SDK/include/openexr-1.6.1 SDK/include/opengl
を検索パスとして追加。boostも必須になった。ないとビルドが通らない。
プリプロセッサ指定(Win環境の場合) †
Shade11の場合、
SXWINDOWS SXWIN32 DEMO_PLUGIN=0 NDEBUG sxdebug=0 WIN32 _WINDOWS Windows=1 PLUGIN=1 STDCALL=__stdcall DLLEXPORT=__declspec(dllexport) NOMINMAX for=if(true)for _CRT_SECURE_NO_DEPRECATE
Shade12の場合「NOMINMAX」を削除。これがあると、GdiplusTypes.hにてmin/maxがないということでエラーになる。これ以外に以下を追加。
SXPLUGIN=1 _SECURE_SCL=0 PLUGIN_EXPORTS SXCORE= SXMODEL=
プリプロセッサ指定(Mac環境の場合) †
「xcconfig/config.plugins.xcconfig」ファイルにて以下の記述を行う。
ARCHS = x86_64 i386 ppc MACOSX_DEPLOYMENT_TARGET[arch=x86_64] = 10.6 MACOSX_DEPLOYMENT_TARGET[arch=i386] = 10.4 MACOSX_DEPLOYMENT_TARGET[arch=ppc] = 10.4 SDKROOT[arch=x86_64] = macosx10.6 SDKROOT[arch=i386] = macosx10.5 SDKROOT[arch=ppc] = macosx10.5 GCC_VERSION = 4.2 GCC_FAST_MATH = YES GCC_SYMBOLS_PRIVATE_EXTERN = YES GCC_ENABLE_SSE3_EXTENSIONS = YES GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = NO MACROS = SXMACOSX SXDARWIN SXPOSIX __ASSERTMACROS__SXEXPORT= SXCOREFOUNDATION=1 SXCOCOA=1 __stdcall= DLLEXPORT= STDCALL= __PROJECT_BUILDER__=1 SXCONFIGURATION=$(CONFIGURATION) SXCORE= DEBUGMACROS = RELEASEMACROS = NDEBUG BOOSTPATH = ../../../../boost_1_43_0 INCLUDEPATH = ../../../../include //OTHER_CFLAGS = -force_cpusubtype_ALL -ftree-vectorize -fvisibility=hidden OTHER_CFLAGS = -force_cpusubtype_ALL -fno-stack-protector OTHER_CPLUSPLUSFLAGS = $(OTHER_CFLAGS) -ffor-scope -Wno-invalid-offsetof PER_ARCH_CFLAGS_x86_64 = -mfpmath=sse PER_ARCH_CFLAGS_i386 = -mfpmath=sse -DSXCARBON=1 CONFIGURATION_BUILD_DIR = ./build/$(CONFIGURATION) USER_HEADER_SEARCH_PATHS = $(BOOSTPATH) $(INCLUDEPATH) $(INCLUDEPATH)/openexr-1.6.1/macos $(INCLUDEPATH)/openexr-1.6.1/**
複数行に分けている部分は1行にて記述のこと。このファイルは、SDKの
「sample/macosx/xcconfig/config.plugins.xcconfig」をそのまま持ってくるとよい。
「BOOSTPATH」「INCLUDEPATH」は環境によってパスの記述を変更のこと。
- これを、ターゲットプロジェクトの情報ウィンドウにて割り当てる。
「ビルド」タブを選択した状態で、ウィンドウ右下の「ベース」のところで「config.plugins」を選ぶ。 - C/C++コンパイラのバージョンが「GCC 4.2」となっているのを確認。
「GCC 4.2 - プリプロセス」の「プリプロセッサマクロ」にて「$(MACROS) $(RELEASEMACROS)」を指定する。 - 「GCC 4.2 - 言語」の「コンパイルでのソースの解釈」にて「Objective C++」を指定する。
上記3つがないとビルド時に大量のエラーが出たので、コンパイル/ビルドオプションについて注意する必要がある。
Macの場合は、細かいオプション変更があるようで サンプルプロジェクトをコピーして独自プロジェクトに変換していくほうが早い
ヘッダ指定 †
Shade11では
#include "shadebuildnumber.h" #include "plugininterface.h" #include "shadeinterface.h" #include "pluginids.h" #include "sceneinterface.h"
のような指定があったがこれが不要になり、Shade12では代わりに
#include "sxsdk.cxx"
を記載する。
プロジェクトに追加する既存ファイル †
Shade11では
include/com.cpp include/vectors.cpp
をプロジェクトに追加していたが、
Shade12では
include/sx/core/com.cpp include/sx/core/vectors.cpp include/sx/core/debug.cpp
をプロジェクトに加えておく。
interfaceの指定 †
plugin_interfaceなどの指定はすべて「sxsdk::plugin_interface」のように「sxsdk::」をつける。
ただし、例外的に「unknown_interface」はそのまま。
classの指定 †
shape_classなどの指定はすべて「sxsdk::shape_class」のように「sxsdk::」をつける。
ベクトルや行列の型 †
vec2 vec3 mat4
などは、Shade12では
sxsdk::vec2 sxsdk::vec3 sxsdk::mat4
に変更。ベクトルは、以下を置き換えているものになる。
sx::vec<float,2> ← vec2 sx::vec<float,3> ← vec3
enums †
「sxsdk::enums::polygon_mesh」などのように「sxsdk::」をつける。
また、マルチパスのネームスペースが変更されていた。
multipath::parameter::z_depth → sxsdk::multipass::parameter::z_depth
sxsdk::rgb_classの要素 †
Shade11まではrgb_classの要素は(x, y, z)だったが、 Shade12では「sxsdk::rgb_class」は(red, green, blue)の要素を持つ。
同様に、 sxsdk::rgba_classの要素は(red, green, blue, alpha)。
rgb_classでの色の定数 †
「rgb_class col = rgb_class::white」のような色の定数表記は、
「sxsdk::vec3 sxsdk::color3::white」に変更。
ただし、型が異なるため実質ダイレクトにrgb_classに定数を格納できない。
sxsdk::vec3 vcol = sxsdk::color3::white; sxsdk::rgb_class col = sxsdk::rgb_class(vcol.x, vcol.y, vcol.z);
としないといけない。
sxsdk::rgb_class col = *(sxsdk::rgb_class *)&vcol;
でもOK。
このrgb_classとvec3変換部分は結構大変なため、Shade11からのプラグイン移行時は
rgb_classをsxsdk::vec3に変換し、アクセス関数でsxsdk::rgb_classを使用する場合だけ変換して渡すのが手っ取り早い。
sx::rectangle_class †
「sx::rectangle_class」の要素はShade11までは、(left, top) - (right, bottom)だったが、
Shade12ではsx::bounds<sx::vec<int,2> >にtypedefされている。
そのため、要素は(min.x, min.y) - (max.x, max.y)になる。