Shade online フォーラム
ログイン
ユーザ名:

パスワード:

IDとパスワードを記憶

パスワード紛失

プラグイン/スクリプト開発用ファイル/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」は環境によってパスの記述を変更のこと。

  1. これを、ターゲットプロジェクトの情報ウィンドウにて割り当てる。
    「ビルド」タブを選択した状態で、ウィンドウ右下の「ベース」のところで「config.plugins」を選ぶ。
  2. C/C++コンパイラのバージョンが「GCC 4.2」となっているのを確認。
    「GCC 4.2 - プリプロセス」の「プリプロセッサマクロ」にて「$(MACROS) $(RELEASEMACROS)」を指定する。
  3. 「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)になる。