fc2ブログ

GLFun(14)~Texture2Dクラス(3)

2012. 01. 01
4)initializeメソッド

initializeメソッドはTexture2Dクラスの初期化メソッドで、クラスを利用する際に暗黙的に呼ばれるため明示的に呼び出す必要はありません。
(『詳解 Objective-C 2.0』(最新版『詳解 Objective-C 2.0 第3版』)の『04-05 クラスオブジェクト』にある項目『クラスオブジェクトの初期化』参照)

ここではテクスチャライズに必須な項目、
・テクスチャ画像と貼り付けるプリミティブの合成方法
・テクスチャ座標配列の有効化
を行っています。

//------------------------------------------------------------------------------
// BEGIN CHANGES - From here to END CHANGES are not part of the original
// Apple sample code, modification made as allowed by license
// JDL - August 1, 2008 JDL
//
// This code is necessary if this class is being used in a program that has
// drawing done both with and without textures. This code needs tog get called
// once before any texture is drawn, but if you attempt to draw without a
// texture after these have been called and before any drawing with a texture
// happens, it crashes.
//------------------------------------------------------------------------------
+ (void) initialize {

    // These calls need to get called once for the class to work, but if they are called before OpenGL knows about any textures, it crashes,
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
}
//------------------------------------------------------------------------------
// END CHANGES
//------------------------------------------------------------------------------

このメソッドはApple社による元のサンプルコードには無く、後から追加されたものとの説明があります。

initializeメソッドはオリジナルのAppleのサンプルコードの一部ではなく、JDLによって許可された変更です。
このコードは、このクラスを使用するプログラム上で、描画にテクスチャを利用するかしないか両方に対応する場合に必要になります。
このコードはテクスチャを描画する前に一度だけ呼び出す必要がありますが、これらを呼び出した後でテクスチャを付加した描画を行う前にテクスチャ無しの描画を試みるとクラッシュします。


これらの呼び出しは、作業するクラスで一度だけ呼び出す必要がありますが、OpenGLのテクスチャについて知る前に呼び出すとクラッシュします。

テクスチャ画像と貼り付けるプリミティブの合成方法)

glTexEnvでテクスチャ環境(テクスチャと貼り付けるプリミティブの表面属性との合成方法)を設定します。
(『可視化技法 2011/8 テクスチャマッピング』参照)

第一引数targetはテクスチャ環境で、GL_TEXTURE_ENVかGL_POINT_SPRITE_OESを指定します。
今回は通常のテクスチャの貼付けなので、GL_TEXTURE_ENVを指定します。

GL_POINT_SPRITE_OESはポイントスプライト、つまりGL_POINTSで描画する点にテクスチャを貼る場合に指定します。
(『床井研究室/第3回 テクスチャの合成』、『床井研究室/Point Sprite を使ってみる』参照)

第二引数pnameはテクスチャ環境パラメータのシンボリック名で、GL_TEXTURE_ENV_MODEがデフォルトになっています。

第三引数paramは単一のシンボリック定数で、pnameがGL_TEXTURE_ENV_MODEの場合、paramはGL_ADD、GL_MODULATE、GL_DECAL、GL_BLEND、GL_REPLACE、GL_COMBINEのいずれかになります。

GL_REPLACEはプリミティブの表面属性を無視してテクスチャの色に置換されます。
(『青空の果て/読み物/【プログラム】OpenGL ~テクスチャα~ (2004.07.15)』)

テクスチャ座標配列の有効化)

glEnableClientStateでクライアント側の機能を有効にします。

GL_TEXTURE_COORD_ARRAYはテクスチャ座標配列の書き込みを有効にするもので、glDrawArrayが呼び出された時にレンダリングで使用されます。

これが有効になっていないとテクスチャ座標が未定義となり、テクスチャを貼ることができません。

glTexEnv

void glTexEnvf(GLenum target, GLenum pname, GLfloat param);

void glTexEnvi(GLenum target, GLenum pname, GLint param);

void glTexEnvx(GLenum target, GLenum pname, GLfixed param);

target
テクスチャ環境を指定します。
GL_TEXTURE_ENVまたはGL_POINT_SPRITE_OESになります。

pname
単一の値となるテクスチャ環境パラメータのシンボリック名を指定します。
GL_TEXTURE_ENV_MODE、GL_COMBINE_RGB、GL_COMBINE_ALPHA、GL_SRC0_RGB、GL_SRC1_RGB、GL_SRC2_RGB、GL_SRC0_ALPHA、GL_SRC1_ALPHA、GL_SRC2_ALPHA、GL_OPERAND0_RGB、GL_OPERAND1_RGB、GL_OPERAND2_RGB、GL_OPERAND0_ALPHA、GL_OPERAND1_ALPHA、GL_OPERAND2_ALPHA、GL_RGB_SCALE、GL_ALPHA_SCALE、GL_COORD_REPLACE_OESのいずれかになります。

param
単一のシンボリック定数を指定します。
GL_ADD、GL_ADD_SIGNED、GL_DOT3_RGB、GL_DOT3_RGBA、GL_INTERPOLATE、GL_MODULATE、GL_DECAL、GL_BLEND、GL_REPLACE、GL_SUBTRACT、GL_COMBINE、GL_TEXTURE、GL_CONSTANT、GL_PRIMARY_COLOR、GL_PREVIOUS、GL_SRC_COLOR、GL_ONE_MINUS_SRC_COLOR、GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA、ポイントスプライトのテクスチャ座標の代わりとして単一のブール値、あるいはGL_RGB_SCALEまたはGL_ALPHA_SCALEが指定された時には1.0、2.0、4.0のいずれか一つになります。

void glTexEnvfv(GLenum target, GLenum pname, const GLfloat * params);

void glTexEnviv(GLenum target, GLenum pname, const GLint * params);

void glTexEnvxv(GLenum target, GLenum pname, const GLfixed * params);

target
テクスチャ環境を指定します。
GL_TEXTURE_ENVまたはGL_POINT_SPRITE_OESになります。

pname
単一の値となるテクスチャ環境パラメータのシンボリック名を指定します。
GL_TEXTURE_ENV_MODE、GL_TEXTURE_ENV_COLOR、GL_COMBINE_RGB、GL_COMBINE_ALPHA、GL_SRC0_RGB、GL_SRC1_RGB、GL_SRC2_RGB、GL_SRC0_ALPHA、GL_SRC1_ALPHA、GL_SRC2_ALPHA、GL_OPERAND0_RGB、GL_OPERAND1_RGB、GL_OPERAND2_RGB、GL_OPERAND0_ALPHA、GL_OPERAND1_ALPHA、GL_OPERAND2_ALPHA、GL_RGB_SCALE、GL_ALPHA_SCALE、GL_COORD_REPLACE_OESのいずれかになります。

params
RGBAカラーを含むパラメータ配列へのポインタか、単一のシンボリック定数を指定します。
GL_ADD、GL_ADD_SIGNED、GL_DOT3_RGB、GL_DOT3_RGBA、GL_INTERPOLATE、GL_MODULATE、GL_DECAL、GL_BLEND、GL_REPLACE、GL_SUBTRACT、GL_COMBINE、GL_TEXTURE、GL_CONSTANT、GL_PRIMARY_COLOR、GL_PREVIOUS、GL_SRC_COLOR、GL_ONE_MINUS_SRC_COLOR、GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA、ポイントスプライトのテクスチャ座標の代わりとして単一のブール値、あるいはGL_RGB_SCALEまたはGL_ALPHA_SCALEが指定された時には1.0、2.0、4.0のいずれか一つになります。 

テクスチャ環境のパラメータを設定します。

テクスチャ環境はフラグメントがテクスチャの時にテクスチャ値がどのように解釈されるかを指定します。

targetがGL_POINT_SPLITE_OESの時、pnameはGL_COORD_REPLACE_OESにする必要があります。

targetがGL_TEXTURE_ENVの時、pnameはGL_TEXTURE_ENV_MODE、GL_TEXTURE_ENV_COLOR、GL_COMBINE_RGB、GL_COMBINE_ALPHA、GL_RGB_SCALE、GL_ALPHA_SCALE、GL_OPERAND0_RGB、GL_OPERAND1_RGB、GL_OPERAND2_RGB、GL_OPERAND0_ALPHA、GL_OPERAND1_ALPHA、GL_OPERAND2_ALPHA、GL_SRC0_RGB、GL_SRC1_RGB、GL_SRC2_RGB、GL_SRC0_ALPHA、GL_SRC1_ALPHA、GL_SRC2_ALPHAのいずれかにすることができます。

pnameがGL_TEXTURE_ENV_MODEの時、paramsはテクスチャ関数のシンボル名(またはポインタ)で、GL_ADD、GL_MODULATE、GL_DECAL、GL_BLEND、GL_REPLACE、GL_COMBINEの6つのテクスチャ関数のいずれかになります。

以下の表でテクスチャのソースコンポーネントへのフィルタリングされたテクスチャ値RtGtBtAtLtの対応を示します。

CsAsは、後述するテクスチャ関数によって使用されます。

Texture Base Internal FormatCsAs
GL_ALPHA(0, 0, 0)At
GL_LUMINANCE(LtLtLt)1
GL_LUMINANCE_ALPHA(LtLtLt)At
GL_RGB(RtGtBt)1
GL_RGBA(RtGtBt)At

テクスチャ関数は、フラグメントに適用するテクスチャ画像の値を使用して(glTexParameter参照)フラグメントのRGBAカラーを生成し、フラグメントのテクスチャを決定します。

以下の表は、最初に選択することができる5つのテクスチャ関数が、それぞれどのようにRGBAカラーを生成するかを示しています。

Cは3つのカラー値(RGB)で、Aは関連するアルファ値です。

テクスチャ画像から抽出されたRGBA値の範囲は[0, 1]です。

添字のpは以前のテクスチャステージ(またはテクスチャステージ0の処理の場合は受信フラグメント)から計算される色を、添字sはテクスチャの元の色を、添字cはテクスチャの環境色を、添字vはテクスチャ関数によって生成される値を示します。

Texture Base 
Internal
Format
ValueGL_
REPLACE
Function
GL_
MODULATE
Function
GL_DECAL
Function
GL_BLEND
Function
GL_ADD
Function
GL_ALPHACv =CpCpundefinedCpCp
 Av =AsApAs Av = ApAsApAs
GL_LUMINANCECv =CsCpCsundefinedCp(1 - Cs) + CcCsCp + Cs
(or 1)Av =ApAp ApAp
GL_LUMINANCE
_ALPHA
Cv =CsCpCsundefinedCp(1 - Cs) + CcCsCp + Cs
(or 2)Av =AsApAs ApAsApAs
GL_RGBCv =CsCpCsCsCp(1 - Cs) + CcCsCp + Cs
(or 3)Av =ApApApApAp
GL_RGBACv =CsCpCsCp(1 - As) + CsAsCp(1 - Cs) + CcCsCp + Cs
(or 4)Av =AsApAsApApAsApAs

pnameがGL_TEXTURE_ENV_MODEで、paramsがGL_COMBINEの場合、テクスチャ関数の形式はGL_COMBINE_RGBとGL_COMBINE_ALPHAの値に依存します。

以下にGL_SRC0_RGB、GL_SRC1_RGB、GL_SRC2_RGB、GL_SRC0_ALPHA、GL_SRC1_ALPHA、そしてGL_SRC2_ALPHAによって指定されたテクスチャのソースが、どのように最終的なテクスチャ色を生成する際に結合されるかを説明します。

以下の表では、GL_SRC0_cをArg0、GL_SRC1_cをArg1、そしてGL_SRC2_cをArg2と表します。

GL_COMBINE_RGBは、GL_REPLACE、GL_MODULATE、GL_ADD、GL_ADD_SIGNED、GL_INTERPOLATE、GL_SUBTRACT、GL_DOT3_RGB、GL_DOT3_RGBAのいずれかになります。

GL_COMBINE_RGBTexture Function
GL_REPLACEArg0
GL_MODULATEArg0 × Arg1
GL_ADDArg0 + Arg1
GL_ADD_SIGNEDArg0 + Arg1 - 0.5
GL_INTERPOLATEArg0 × Arg2 + Arg1 × (1 - Arg2)
GL_SUBTRACTArg0 - Arg1
GL_DOT3_RGB
or
GL_DOT3_RGBA
4 × ((((Arg0r) - 0.5) × ((Arg1r) - 0.5)) + (((Arg0g) - 0.5) × 
((Arg1g) - 0.5)) + (((Arg0b) - 0.5) × ((Arg1b) - 0.5)))

GL_DOT3_RGBとGL_DOT3_RGBAのスカラ結果は、出力の3つ(RGB)または4つ(RGBA)の各要素に置かれます。

同様にGL_COMBINE_ALFAは、GL_REPLACE、GL_MODULATE、GL_ADD、GL_ADD_SIGNED、GL_INTERPOLATE、GL_SUBTRACTのいずれかになります。

以下の表では、どのようにアルファ値が結合されるかを説明します。

GL_COMBINE_ALPHATexture Function
GL_REPLACEArg0
GL_MODULATEArg0 × Arg1
GL_ADDArg0 + Arg1
GL_ADD_SIGNEDArg0 + Arg1 - 0.5
GL_INTERPOLATEArg0 × Arg2 + Arg1 × (1 - Arg2)
GL_SUBTRACTArg0 - Arg1

以下の表では、値Csは現在バインドされているテクスチャからサンプリングされた色を、Ccは定数のテクスチャ環境色を、Cfは受信フラグメントの元の色を、そしてCpは以前のテクスチャステージから計算された色、またはテクスチャステージ0の処理の場合はCfを表します。

同様に、AsAcAf、そしてApはそれぞれのアルファ値を表します。

以下の表では、RGBのソースとオペランドに基づいて、Arg0Arg1Arg2に割り当てられる値を説明します。

GL_SRCn_RGBGL_OPERANDn_RGBArgument Value
GL_TEXTUREGL_SRC_COLOR(Cs)
 GL_ONE_MINUS_SRC_COLOR1 - (Cs)
 GL_SRC_ALPHA(As)
 GL_ONE_MINUS_SRC_ALPHA1 - (As)
GL_TEXTUREnGL_SRC_COLOR(Cs)
 GL_ONE_MINUS_SRC_COLOR1 - (Cs)
 GL_SRC_ALPHA(As)
 GL_ONE_MINUS_SRC_ALPHA1 - (As)
GL_CONSTANTGL_SRC_COLOR(Cc)
 GL_ONE_MINUS_SRC_COLOR1 - (Cc)
 GL_SRC_ALPHA(Ac)
 GL_ONE_MINUS_SRC_ALPHA1 - (Ac)
GL_PRIMARY_COLORGL_SRC_COLOR(Cf)
 GL_ONE_MINUS_SRC_COLOR1 - (Cf)
 GL_SRC_ALPHA(Af)
 GL_ONE_MINUS_SRC_ALPHA1 - (Af)
GL_PREVIOUSGL_SRC_COLOR(Cp)
 GL_ONE_MINUS_SRC_COLOR1 - (Cp)
 GL_SRC_ALPHA(Ap)
 GL_ONE_MINUS_SRC_ALPHA1 - (Ap)

GL_TEXTUREnのソースの色とアルファはCsAsで表され、それぞれテクスチャステージnから生成されます。

以下の表では、アルファのソースとオペランドに基づいて、Arg0Arg1Arg2に割り当てられる値を説明します。

GL_SRCn_ALPHAGL_OPERANDn_ALPHAArgument Value
GL_TEXTUREGL_SRC_ALPHA(As)
 GL_ONE_MINUS_SRC_ALPHA1 - (As)
GL_TEXTUREnGL_SRC_ALPHA(As)
 GL_ONE_MINUS_SRC_ALPHA1 - (As)
GL_CONSTANTGL_SRC_ALPHA(Ac)
 GL_ONE_MINUS_SRC_ALPHA1 - (Ac)
GL_PRIMARY_COLORGL_SRC_ALPHA(Af)
 GL_ONE_MINUS_SRC_ALPHA1 - (Af)
GL_PREVIOUSGL_SRC_ALPHA(Ap)
 GL_ONE_MINUS_SRC_ALPHA1 - (Ap)

テクスチャ関数のRGBとアルファの結果は、GL_RGB_SCALEとGL_ALPHA_SCALE値によってそれぞれ増加し、[0, 1]の範囲にクランプされます。

pnameがGL_TEXTURE_ENV_COLORの場合、paramsは4つの値で構成されるRGBAカラーを保持する配列へのポインタです。

整数の色成分は、正の整数の最大値が1.0、負の整数の最小値が-1.0になるよう、線形にマップされます。

それらは指定された時に[0, 1]の範囲にクランプされます。

Ccはこれら4つの値をとります。

GL_TEXTURE_ENV_MODEはデフォルトでGLMODULATEに、GL_TEXTURE_ENV_COLORはデフォルトで(0, 0, 0, 0)になっています。

targetがGL_POINT_SPRITE_OESで、pnameがGL_COORD_REPLACE_OESの場合、指定されたブール値はポイントスプライトのテクスチャ座標の置換を有効または無効にするために使用されます。

デフォルト値はGL_FALSEです。

glTexEnvは、glActiveTextureで選択された現在のアクティブなテクスチャユニットのためのテクスチャ環境を制御します。

GL_POINT_SPRITE_OESとGL_COORD_REPLACE_OESは、OpenGL ESのバージョン1.1以降で使用することができます。

GL_INVALID_ENUMは、targetまたはpnameが定義されている有効な値でない場合、またはparamsが必要とする(pnameの値に基づく)定義された定数値を持たない場合に発生します。

GL_INVALID_VALUEは、GL_RGB_SCALEまたはGL_ALPHA_SCALEのためのparamsの値が1.0、2.0、4.0のいずれかでない場合に発生します。



参考文献

iOS OpenGL ESプログラミングガイド

OpenGL ES 1.1 Reference Pages

可視化技法 2011/8 テクスチャマッピング

床井研究室/第3回 テクスチャの合成

床井研究室/Point Spriteを使ってみる

青空の果て/読み物/【プログラム】OpenGL ~テクスチャα~ (2004.07.15)

詳解 Objective-C 2.0 第3版詳解 Objective-C 2.0 第3版
(2011/12/28)
荻原 剛志

商品詳細を見る

はじめてのiPhone3プログラミングはじめてのiPhone3プログラミング
(2009/12/17)
Dave Mark、Jeff LaMarche 他

商品詳細を見る

Beginning Ios 6 Development: Exploring the Ios SdkBeginning Ios 6 Development: Exploring the Ios Sdk
(2012/12/26)
David Mark、Jack Nutting 他

商品詳細を見る

Calendar
12 | 2012/01 | 02
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
Recent Articles
Wish List
iOS/iPadOS Devices
Twine
Twine Reference
1. 序章
2. はじめに
2.1. Twineのインストール
2.2. 基本コンセプト
2.3. Twineを使いこなす
2.4. Twineのアップデート
2.5. Twineのアンインストール
2.6. Twineの古いバージョンを使う
3. ストーリーライブラリを使う
3.1. ストーリーの表示
3.2. ストーリーの作成、コピー、インポート
3.3. ストーリーの編集
3.4. ストーリー名の変更
3.5. ストーリーのアーカイブとエクスポート
3.6. ストーリーの削除
3.7. ストーリーへのタグ付け
3.8. ライブラリの場所を変更する
4. ストーリーの編集
4.1. ストーリーマップのナビゲーション
4.2. 取り消しとやり直し
4.3. パッセージの選択と移動
4.4. パッセージの編集
4.5. パッセージのリンク
4.6. パッセージの削除
4.7. パッセージのタグ付け
4.8. テキストの検索と置換
4.9. ストーリー名の変更
4.10. ストーリーフォーマットの変更
4.11. ストーリーの統計の表示
4.12. ストーリーのJavaScriptとCSSを編集する
5. 作品の公開出力
5.1. ストーリーのテスト
5.2. ストーリーの校正
5.3. ストーリーのプレイ
5.4. ストーリーの公開出力
5.5. スクラッチフォルダ
6. ストーリーフォーマットの管理
6.1. ストーリーフォーマットの表示
6.2. デフォルトのストーリーフォーマットの変更
6.3. 校正フォーマットの変更
6.4. ストーリーフォーマットの追加
6.5. ストーリーフォーマットの削除
6.6. ストーリーフォーマットの拡張機能を無効にする
6.7. Twineがストーリーフォーマットのバージョンを管理する方法
7. Twineのカスタマイズ
7.1. 環境設定の設定
7.2. コマンドラインスイッチ
7.3. 高度なカスタマイズ
8. 制限事項
8.1. 大きなストーリー
8.2. ストーリーの組み合わせ
8.3. ストーリーの共同編集
8.4. 画像とマルチメディアの使用
8.5. ソースコントロールでの作業
9. 問題のトラブルシューティング
9.1. バックアップ
9.2. ローカルストレージの直接表示
9.3. 編集中にエラーメッセージが表示される場合
9.4. Twineが起動しない場合
9.5. Twineがあなたのストーリーを失ったら
9.6. ストーリーが破損している場合
9.7. Twineの外観に不具合がある場合
10. リリースノート
10.1. バージョン 2.8
10.2. バージョン 2.7
10.3. バージョン 2.6
10.4. バージョン 2.5
10.5. バージョン 2.4
10.6. バージョン 2.3
10.7. バージョン 2.2
10.8. バージョン 2.1
10.9. バージョン 2.0
10.10. バージョン 1.0
10.11. Tweebox バージョン

Twine Cookbook
詳解Swift
詳解Swift第5版(01)〜Swiftでプログラミング
詳解Swift第5版(02)〜関数
詳解Swift第5版(03)〜構造体
詳解Swift第5版(04)〜オプショナル
詳解Swift第5版(05)〜プロトコル
詳解Swift第5版(06)〜基本的なデータ型
詳解Swift第5版(07)〜パターン
詳解Swift第5版(08)〜クラスと継承
詳解Swift第5版(09)〜メモリ管理
詳解Swift第5版(10)〜拡張
詳解Swift第5版(11)〜エラー処理
詳解Swift第5版(12)〜クロージャ
詳解Swift第5版(13)〜ジェネリクス
詳解Swift第5版(14)〜メモリへのアクセスとポインタ
詳解Swift第5版(15)〜カスタム属性とDSL記法
詳解Swift第5版(16)〜GUI との連携

詳解Swift第4版(01)〜Swiftでプログラミング
詳解Swift第4版(02)〜関数
詳解Swift第4版(03)〜構造体
詳解Swift第4版(06)〜基本的なデータ型
詳解Swift第4版(07)〜パターン
詳解Swift第4版(08)〜クラスと継承
詳解Swift第4版(09)〜メモリ管理
詳解Swift第4版(10)〜拡張
詳解Swift第4版(11)〜エラー処理
詳解Swift第4版(12)〜クロージャ
詳解Swift第4版(13)〜ジェネリクス

詳解Swift第3版(01)〜Swiftでプログラミング
詳解Swift第3版(02)〜関数
詳解Swift第3版(03)〜構造体
詳解Swift第3版(05)〜基本的なデータ型
詳解Swift第3版(06)〜パターン
詳解Swift第3版(07)〜演算子
詳解Swift第3版(08)〜クラスと継承
詳解Swift第3版(09)〜メモリ管理
詳解Swift第3版(10)〜プロトコル
詳解Swift第3版(11)〜拡張
詳解Swift第3版(12)〜エラー処理
詳解Swift第3版(13)〜クロージャ
詳解Swift第3版(14)〜ジェネリクス

詳解Swift改訂版(01)〜Swiftでプログラミング
詳解Swift改訂版(02)〜関数
詳解Swift改訂版(03)〜構造体
詳解Swift改訂版(04)〜オプショナル
詳解Swift改訂版(05)〜基本的なデータ型
詳解Swift改訂版(06)〜パターン
詳解Swift改訂版(07)〜演算子
詳解Swift改訂版(08)〜クラスと継承
詳解Swift改訂版(09)〜メモリ管理
詳解Swift改訂版(10)〜プロトコル
詳解Swift改訂版(11)〜拡張
詳解Swift改訂版(12)〜エラー処理
詳解Swift改訂版(13)〜クロージャ
詳解Swift改訂版(14)〜ジェネリクス

詳解Swift(1)〜Swiftでプログラミング
詳解Swift(2)〜関数
詳解Swift(3)〜構造体
詳解Swift(4)〜オプショナル
詳解Swift(5)〜基本的なデータ型
詳解Swift(6)〜パターン
詳解Swift(7)〜演算子
詳解Swift(8)〜クラスと継承
詳解Swift(9)〜メモリ管理
詳解Swift(10)〜プロトコル
詳解Swift(11)〜拡張
詳解Swift(12)〜クロージャ
詳解Swift(13)〜ジェネリクス
詳解Swift(14)〜C/Objective-Cとのデータ受け渡し
Swift
Site Map
Apple Music


Categories
Tips
ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
QR Code
QR
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ

Visitors