GLSL と HLSL の対応を示すリファレンスGLSL-to-HLSL reference

グラフィックス アーキテクチャを OpenGL ES 2.0 から Direct3D 11 に移植してユニバーサル Windows プラットフォーム (UWP) 向けのゲームを作成する際は、OpenGL シェーダー言語 (GLSL) コードを Microsoft 上位レベル シェーダー言語 (HLSL) コードに移植します。You port your OpenGL Shader Language (GLSL) code to Microsoft High Level Shader Language (HLSL) code when you port your graphics architecture from OpenGL ES 2.0 to Direct3D 11 to create a game for Universal Windows Platform (UWP). ここで参照される GLSL は OpenGL ES 2.0 とは互換性がありません。HLSL は Direct3D 11 と互換性があります。The GLSL that is referred to herein is compatible with OpenGL ES 2.0; the HLSL is compatible with Direct3D 11. Direct3D 11 と以前のバージョンの Direct3D の違いについては、「機能のマッピング」をご覧ください。For info about the differences between Direct3D 11 and previous versions of Direct3D, see Feature mapping.

OpenGL ES 2.0 と Direct3D 11 の比較Comparing OpenGL ES 2.0 with Direct3D 11

OpenGL ES 2.0 と Direct3D 11 には多くの類似点があります。OpenGL ES 2.0 and Direct3D 11 have many similarities. どちらも、類似したレンダリング パイプラインとグラフィックス機能があります。They both have similar rendering pipelines and graphics features. ただし、Direct3D 11 はレンダリングの実装と API であり、仕様ではありません。OpenGL ES 2.0 はレンダリングの仕様と API であり、実装ではありません。But Direct3D 11 is a rendering implementation and API, not a specification; OpenGL ES 2.0 is a rendering specification and API, not an implementation. Direct3D 11 と OpenGL ES 2.0 は通常、次の点で異なります。Direct3D 11 and OpenGL ES 2.0 generally differ in these ways:

OpenGL ES 2.0OpenGL ES 2.0 Direct3D 11Direct3D 11
ハードウェアやオペレーティング システムにとらわれない仕様とベンダーが提供する実装Hardware and operating system agnostic specification with vendor provided implementations Windows プラットフォームのハードウェア アブストラクションと認定の Microsoft 実装Microsoft implementation of hardware abstraction and certification on Windows platforms
多様なハードウェア向けに抽象化、ランタイムがほとんどのリソースを管理Abstracted for hardware diversity, runtime manages most resources ハードウェアのレイアウトに直接アクセス。アプリがリソースと処理を管理できるDirect access to hardware layout; app can manage resources and processing
サード パーティのライブラリ (たとえば、Simple DirectMedia Layer (SDL)) によって高レベルのモジュールを提供Provides higher-level modules via third-party libraries (for example, Simple DirectMedia Layer (SDL)) Direct2D などの高レベルのモジュールは下位モジュールに基づいて構築されるため、Windows アプリの開発が簡略化Higher-level modules, like Direct2D, are built upon lower modules to simplify development for Windows apps
ハードウェア ベンダーは拡張子によって区別Hardware vendors differentiate via extensions Microsoft は、汎用的な方法で API にオプション機能を追加するため、特定のハードウェア ベンダーに限定されないMicrosoft adds optional features to the API in a generic way so they aren't specific to any particular hardware vendor

 

GLSL と HLSL は一般に次の点で異なります。GLSL and HLSL generally differ in these ways:

GLSLGLSL HLSLHLSL
手続き型、ステップ中心 (C など)Procedural, step-centric (C like) オブジェクト指向、データ中心 (C++ など)Object oriented, data-centric (C++ like)
グラフィックス API に統合されたシェーダー コンパイルShader compilation integrated into the graphics API HLSL コンパイラが中間バイナリ表現にシェーダーをコンパイルし、その後で Direct3D がそれをドライバーに渡します。The HLSL compiler compiles the shader to an intermediate binary representation before Direct3D passes it to the driver.
  このバイナリ表現はハードウェアに依存しません。 Note  This binary representation is hardware independent. 通常はアプリの実行時ではなくアプリのビルド時にコンパイルされます。It's typically compiled at app build time, rather than at app run time.
 
変数ストレージ修飾子Variable storage modifiers 入力レイアウトの宣言による定数バッファーとデータ転送Constant buffers and data transfers via input layout declarations

Types

一般的なベクター型: vec2/3/4Typical vector type: vec2/3/4

lowp、mediump、highplowp, mediump, highp

一般的なベクター型: float2/3/4Typical vector type: float2/3/4

min10float、min16floatmin10float, min16float

texture2D [Function]texture2D [Function] texture.Sample [datatype.Function]texture.Sample [datatype.Function]
sampler2D [datatype]sampler2D [datatype] Texture2D [datatype]Texture2D [datatype]
行優先マトリックス (既定)Row-major matrices (default) 列優先マトリックス (既定)Column-major matrices (default)
  使用、 row_major型修飾子で 1 つの変数のレイアウトを変更します。 Note   Use the row_major type-modifier to change the layout for one variable. 詳しくは、「変数の構文」をご覧ください。For more info, see Variable Syntax. コンパイラ フラグまたはプラグマを指定してグローバルな既定値を変更することもできます。You can also specify a compiler flag or a pragma to change the global default.
 
フラグメント シェーダーFragment shader ピクセル シェーダーPixel shader

 

  HLSL がテクスチャおよびサンプラーとして 2 つのオブジェクト。Note  HLSL has textures and samplers as two separate objects. GLSL では、Direct3D 9 と同様に、テクスチャのバインドはサンプラーの状態の一部です。In GLSL, like Direct3D 9, the texture binding is part of the sampler state.

 

GLSL では、事前定義されたグローバル変数として OpenGL の状態の多くを示します。In GLSL, you present much of the OpenGL state as pre-defined global variables. たとえば、GLSL でを使用する、 gl_位置頂点の位置を指定する変数とgl_FragColorフラグメントの色を指定する変数。For example, with GLSL, you use the gl_Position variable to specify vertex position and the gl_FragColor variable to specify fragment color. HLSL では、アプリ コードからシェーダーに Direct3D の状態を明示的に渡します。In HLSL, you pass Direct3D state explicitly from the app code to the shader. たとえば、Direct3D と HLSL を使う場合は、頂点シェーダーへの入力が頂点バッファーのデータ形式に一致し、アプリ コードの定数バッファーの構造がシェーダー コードの定数バッファー (cbuffer) の構造と一致する必要があります。For example, with Direct3D and HLSL, the input to the vertex shader must match the data format in the vertex buffer, and the structure of a constant buffer in the app code must match the structure of a constant buffer (cbuffer) in shader code.

HLSL への GLSL 変数の移植Porting GLSL variables to HLSL

GLSL では、グローバル シェーダーの変数の宣言に修飾子を適用し、その変数にシェーダーの特定の動作を割り当てます。In GLSL, you apply modifiers (qualifiers) to a global shader variable declaration to give that variable a specific behavior in your shaders. HLSL では、シェーダーとやり取りする引数を使ってシェーダーのフローを定義するため、これらの修飾子は必要ではありません。In HLSL, you don’t need these modifiers because you define the flow of the shader with the arguments that you pass to your shader and that you return from your shader.

GLSL の変数の動作GLSL variable behavior 相当する HLSL の要素HLSL equivalent

uniformuniform

アプリ コードから uniform 変数を頂点シェーダーとフラグメント シェーダーのどちらか一方または両方に渡します。You pass a uniform variable from the app code into either or both vertex and fragment shaders. これらのシェーダーを使って三角形を描画する前にすべての uniform の値を設定する必要があります。三角形のメッシュの描画中に値が変わらないようにするためです。You must set the values of all uniforms before you draw any triangles with those shaders so their values stay the same throughout the drawing of a triangle mesh. これらの値は変化しません。These values are uniform. フレーム全体に対して設定される uniform もあれば、特定の頂点ピクセル シェーダーのペアに対してのみ設定される uniform もあります。Some uniforms are set for the entire frame and others uniquely to one particular vertex-pixel shader pair.

uniform 変数はポリゴン単位の変数です。Uniform variables are per-polygon variables.

定数バッファーを使います。Use constant buffer.

定数バッファーを作成シェーダー定数します。See How to: Create a Constant Buffer and Shader Constants.

さまざまなvarying

頂点シェーダー内で varying 変数を初期化し、フラグメント シェーダーの同じ名前の varying 変数に渡します。You initialize a varying variable inside the vertex shader and pass it through to an identically named varying variable in the fragment shader. 頂点シェーダーは各頂点でのみさまざまな変数の値を設定するため、ラスタライザーはその値を (透視補正の方法で) 補間し、フラグメント単位の値を生成してフラグメント シェーダーに渡します。Because the vertex shader only sets the value of the varying variables at each vertex, the rasterizer interpolates those values (in a perspective-correct manner) to generate per fragment values to pass into the fragment shader. これらの変数は各三角形で異なります。These variables vary across each triangle.

頂点シェーダーから取得した構造をピクセル シェーダーへの入力として使います。Use the structure that you return from your vertex shader as the input to your pixel shader. セマンティック値が一致することを確かめてください。Make sure the semantic values match.

attributeattribute

属性は、アプリ コードから頂点シェーダーだけに渡す頂点の記述の一部です。An attribute is a part of the description of a vertex that you pass from the app code to the vertex shader alone. uniform とは異なり、頂点ごとに各属性の値を設定します。それにより、各頂点が異なる値を持つことができるようになります。Unlike a uniform, you set each attribute’s value for each vertex, which, in turn, allows each vertex to have a different value. 属性変数は頂点単位の変数です。Attribute variables are per-vertex variables.

Direct3D アプリ コードで頂点バッファーを定義し、頂点シェーダーで定義されている頂点の入力と一致させます。Define a vertex buffer in your Direct3D app code and match it to the vertex input defined in the vertex shader. 必要に応じてインデックス バッファーを定義します。Optionally, define an index buffer. 頂点バッファーを作成方法。インデックス バッファーを作成です。See How to: Create a Vertex Buffer and How to: Create an Index Buffer.

Direct3D アプリ コードで入力レイアウトを作成し、セマンティック値を頂点の入力の値と一致させます。Create an input layout in your Direct3D app code and match semantic values with those in the vertex input. 入力レイアウトの作成」をご覧ください。See Create the input layout.

constconst

シェーダーにコンパイルされ、変更されない定数。Constants that are compiled into the shader and never change.

static const を使用します。Use a static const. static は、値が定数バッファーに公開されないことを表し、const は、シェーダーが値を変更できないことを表します。static means the value isn't exposed to constant buffers, const means the shader can't change the value. そのため、値は初期化子に基づいてコンパイル時に把握されます。So, the value is known at compile time based on its initializer.

 

GLSL では、修飾子のない変数は、各シェーダーに対してプライベートな通常のグローバル変数に過ぎません。In GLSL, variables without modifiers are just ordinary global variables that are private to each shader.

テクスチャ (HLSL での Texture2D) と関連のサンプラー (HLSL での SamplerState) にデータを渡すときに、通常は、ピクセル シェーダーのグローバル変数としてこれらを宣言します。When you pass data to textures (Texture2D in HLSL) and their associated samplers (SamplerState in HLSL), you typically declare them as global variables in the pixel shader.

HLSL への GLSL の型の移植Porting GLSL types to HLSL

HLSL に GLSL の型を移植する場合は、次の表を参考にしてください。Use this table to port your GLSL types to HLSL.

GLSL の型GLSL type HLSL の型HLSL type
スカラー型: float、int、boolscalar types: float, int, bool

スカラー型: float、int、boolscalar types: float, int, bool

また、uint、doublealso, uint, double

詳しくは、「スカラー型」をご覧ください。For more info, see Scalar Types.

ベクター型vector type

  • 浮動小数点ベクター: vec2、vec3、vec4floating-point vector: vec2, vec3, vec4
  • ブール ベクター: bvec2、bvec3、bvec4Boolean vector: bvec2, bvec3, bvec4
  • 符号付き整数ベクター: ivec2、ivec3、ivec4signed integer vector: ivec2, ivec3, ivec4

ベクター型vector type

  • float2、float3、float4、float1float2, float3, float4, and float1
  • bool2、bool3、bool4、bool1bool2, bool3, bool4, and bool1
  • int2、int3、int4、int1int2, int3, int4, and int1
  • これらの型には、float、bool、int に似たベクター拡張もあります。These types also have vector expansions similar to float, bool, and int:

    • uintuint
    • min10float、min16floatmin10float, min16float
    • min12int、min16intmin12int, min16int
    • min16uintmin16uint

詳しくは、「ベクター型」と「キーワード」をご覧ください。For more info, see Vector Type and Keywords.

vector は、float4 として定義される型でもあります (typedef vector <float, 4> vector;)。vector is also type defined as float4 (typedef vector <float, 4> vector;). 詳しくは、「ユーザー定義型」をご覧ください。For more info, see User-Defined Type.

マトリックス型matrix type

  • mat2:float の 2 × 2 の行列mat2: 2x2 float matrix
  • mat3:float の 3 x 3 行列mat3: 3x3 float matrix
  • mat4:4 x 4 float マトリックスmat4: 4x4 float matrix

マトリックス型matrix type

  • float2x2float2x2
  • float3x3float3x3
  • float4x4float4x4
  • また、float1x1、float1x2、float1x3、float1x4、float2x1、float2x3、float2x4、float3x1、float3x2、float3x4、float4x1、float4x2、float4x3also, float1x1, float1x2, float1x3, float1x4, float2x1, float2x3, float2x4, float3x1, float3x2, float3x4, float4x1, float4x2, float4x3
  • これらの型には、float に似たマトリックス拡張もあります。These types also have matrix expansions similar to float:

    • int、uint、boolint, uint, bool
    • min10float、min16floatmin10float, min16float
    • min12int、min16intmin12int, min16int
    • min16uintmin16uint

また、マトリックスの定義にマトリックス型を使うこともできます。You can also use the matrix type to define a matrix.

例: matrix <float, 2, 2> fMatrix = {0.0f, 0.1, 2.1f, 2.2f};For example: matrix <float, 2, 2> fMatrix = {0.0f, 0.1, 2.1f, 2.2f};

matrix は、float4x4 として定義される型でもあります (typedef matrix <float, 4, 4> matrix;)。matrix is also type defined as float4x4 (typedef matrix <float, 4, 4> matrix;). 詳しくは、「ユーザー定義型」をご覧ください。For more info, see User-Defined Type.

float、int、sampler の有効桁数修飾子precision qualifiers for float, int, sampler

  • highphighp

    この修飾子は min16float によって指定されるものより大きく、完全な 32 ビット float より小さい最小有効桁数要件を指定します。This qualifier provides minimum precision requirements that are greater than that provided by min16float and less than a full 32-bit float. 相当する HLSL の要素:Equivalent in HLSL is:

    highp float -> floathighp float -> float

    highp int -> inthighp int -> int

  • mediumpmediump

    float と int に適用されるこの修飾子は、HLSL の min16float と min12int に相当します。This qualifier applied to float and int is equivalent to min16float and min12int in HLSL. mantissa の最小 10 ビット。min10float とは異なります。Minimum 10 bits of mantissa, not like min10float.

  • lowplowp

    float に適用されるこの修飾子は、-2 ~ 2 の浮動小数点の範囲を指定します。This qualifier applied to float provides a floating point range of -2 to 2. HLSL での min10float に相当します。Equivalent to min10float in HLSL.

有効桁数の型precision types

  • min16float: 16 ビットの最小浮動小数点値min16float: minimum 16-bit floating point value
  • min10floatmin10float

    最小の符号付き固定小数点 2.8 ビット値 (整数部は 2 ビット、小数部は 8 ビット)。Minimum fixed-point signed 2.8 bit value (2 bits of whole number and 8 bits fractional component). 8 ビットの小数部には 1 を含めることができます。また、-2 ~ 2 の範囲の両端を含めることができます。The 8-bit fractional component can be inclusive of 1 instead of exclusive to give it the full inclusive range of -2 to 2.

  • min16int: 16 ビットの最小符号付き整数min16int: minimum 16-bit signed integer
  • min12int: 12 ビットの最小符号付き整数min12int: minimum 12-bit signed integer

    この型は 10Level9 (9_x の機能レベル) 向けであり、整数は浮動小数点数で表されます。This type is for 10Level9 (9_x feature levels) in which integers are represented by floating point numbers. これは、16 ビットの浮動小数点数で整数をエミュレートするときに取得できる有効桁数です。This is the precision you can get when you emulate an integer with a 16-bit floating point number.

  • min16int: 16 ビットの最小符号なし整数min16uint: minimum 16-bit unsigned integer

詳しくは、「スカラー型」と「HLSL の最小精度の使用」をご覧ください。For more info, see Scalar Types and Using HLSL minimum precision.

sampler2Dsampler2D Texture2DTexture2D
samplerCubesamplerCube TextureCubeTextureCube

 

HLSL への GLSL の定義済みグローバル変数の移植Porting GLSL pre-defined global variables to HLSL

GLSL の定義済みグローバル変数を HLSL に移植する場合は、次の表を参考にしてください。Use this table to port GLSL pre-defined global variables to HLSL.

GLSL の定義済みグローバル変数GLSL pre-defined global variable HLSL セマンティクスHLSL semantics

gl_Positiongl_Position

この変数は vec4 型です。This variable is type vec4.

頂点の位置Vertex position

例: gl_Position = position;for example - gl_Position = position;

SV_PositionSV_Position

Direct3D 9 の POSITIONPOSITION in Direct3D 9

このセマンティックは float4 型です。This semantic is type float4.

頂点シェーダーの出力Vertex shader output

頂点の位置Vertex position

たとえば、float4 vPosition:SV_Position;for example - float4 vPosition : SV_Position;

gl_PointSizegl_PointSize

この変数は float 型です。This variable is type float.

ポイントのサイズPoint size

PSIZEPSIZE

Direct3D 9 を対象としない場合、意味はありませんNo meaning unless you target Direct3D 9

このセマンティックは float 型です。This semantic is type float.

頂点シェーダーの出力Vertex shader output

ポイントのサイズPoint size

gl_FragColorgl_FragColor

この変数は vec4 型です。This variable is type vec4.

フラグメント色Fragment color

例: gl_FragColor = vec4(colorVarying, 1.0);for example - gl_FragColor = vec4(colorVarying, 1.0);

SV_TargetSV_Target

Direct3D 9 の COLORCOLOR in Direct3D 9

このセマンティックは float4 型です。This semantic is type float4.

ピクセル シェーダーの出力Pixel shader output

ピクセルの色Pixel color

例 - float4 色 [4]。SV_Target;for example - float4 Color[4] : SV_Target;

gl_FragData[n]gl_FragData[n]

この変数は vec4 型です。This variable is type vec4.

カラー アタッチメント n のフラグメント色Fragment color for color attachment n

SV_Target[n]SV_Target[n]

このセマンティックは float4 型です。This semantic is type float4.

n レンダー ターゲットに格納されるピクセル シェーダーの出力値 (0 <= n <= 7)。Pixel shader output value that is stored in n render target, where 0 <= n <= 7.

gl_FragCoordgl_FragCoord

この変数は vec4 型です。This variable is type vec4.

フレーム バッファー内のフラグメントの位置Fragment position within frame buffer

SV_PositionSV_Position

Direct3D 9 では使用できませんNot available in Direct3D 9

このセマンティックは float4 型です。This semantic is type float4.

ピクセル シェーダーの入力Pixel shader input

画面領域の座標Screen space coordinates

例 - float4 スクリーン空間。SV_Positionfor example - float4 screenSpace : SV_Position

gl_FrontFacinggl_FrontFacing

この変数は bool 型です。This variable is type bool.

フラグメントが前向きのプリミティブに属しているかどうかを決定します。Determines whether fragment belongs to a front-facing primitive.

SV_IsFrontFaceSV_IsFrontFace

Direct3D 9 の VFACEVFACE in Direct3D 9

SV_IsFrontFace は bool 型です。SV_IsFrontFace is type bool.

VFACE は float 型です。VFACE is type float.

ピクセル シェーダーの入力Pixel shader input

プリミティブの向きPrimitive facing

gl_PointCoordgl_PointCoord

この変数は vec2 型です。This variable is type vec2.

ポイント内のフラグメントの位置 (ポイントのラスター化のみ)Fragment position within a point (point rasterization only)

SV_PositionSV_Position

Direct3D 9 の VPOSVPOS in Direct3D 9

SV_Position は float4 型です。SV_Position is type float4.

VPOS は float2 型です。VPOS is type float2.

ピクセル シェーダーの入力Pixel shader input

画面領域のピクセルまたはサンプルの位置The pixel or sample position in screen space

たとえば、float4 pos:SV_Positionfor example - float4 pos : SV_Position

gl_FragDepthgl_FragDepth

この変数は float 型です。This variable is type float.

深度バッファーのデータDepth buffer data

SV_DepthSV_Depth

Direct3D 9 の DEPTHDEPTH in Direct3D 9

SV_Depth は float 型です。SV_Depth is type float.

ピクセル シェーダーの出力Pixel shader output

深度バッファーのデータDepth buffer data

 

頂点シェーダーの入力とピクセル シェーダーの入力に位置や色などを指定するには、セマンティクスを使います。You use semantics to specify position, color, and so on for vertex shader input and pixel shader input. 入力レイアウトのセマンティクス値と頂点シェーダーの入力を一致させる必要があります。You must match the semantics values in the input layout with the vertex shader input. 例については、「HLSL への GLSL 変数の移植の例」をご覧ください。For examples, see Examples of porting GLSL variables to HLSL. HLSL セマンティクスについて詳しくは、「セマンティクス」をご覧ください。For more info about the HLSL semantics, see Semantics.

HLSL への GLSL 変数の移植の例Examples of porting GLSL variables to HLSL

ここでは、OpenGL/GLSL コードの GLSL 変数の使用例と、Direct3D/HLSL コードでの相当する例を紹介します。Here we show examples of using GLSL variables in OpenGL/GLSL code and then the equivalent example in Direct3D/HLSL code.

GLSL での uniform、attribute、および varyingUniform, attribute, and varying in GLSL

OpenGL のアプリ コードOpenGL app code

// Uniform values can be set in app code and then processed in the shader code.
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;

// Incoming position of vertex
attribute vec4 position;
 
// Incoming color for the vertex
attribute vec3 color;
 
// The varying variable tells the shader pipeline to pass it  
// on to the fragment shader.
varying vec3 colorVarying;

GLSL の頂点シェーダー コードGLSL vertex shader code

//The shader entry point is the main method.
void main()
{
colorVarying = color; //Use the varying variable to pass the color to the fragment shader
gl_Position = position; //Copy the position to the gl_Position pre-defined global variable
}

GLSL のフラグメント シェーダー コードGLSL fragment shader code

void main()
{
//Pad the colorVarying vec3 with a 1.0 for alpha to create a vec4 color
//and assign that color to the gl_FragColor pre-defined global variable
//This color then becomes the fragment's color.
gl_FragColor = vec4(colorVarying, 1.0);
}

HLSL での定数バッファーとデータ転送Constant buffers and data transfers in HLSL

データを HLSL の頂点シェーダーに渡し、それがピクセル シェーダーに渡されるしくみの例を示します。Here is an example of how you pass data to the HLSL vertex shader that then flows through to the pixel shader. アプリ コードでは、頂点と定数バッファーを定義します。In your app code, define a vertex and a constant buffer. 次に、頂点シェーダー コードで、定数バッファーを cbuffer として定義し、頂点単位のデータとピクセル シェーダーの入力データを格納します。Then, in your vertex shader code, define the constant buffer as a cbuffer and store the per-vertex data and the pixel shader input data. ここでは、VertexShaderInput および PixelShaderInput と呼ばれる構造を使います。Here we use structures called VertexShaderInput and PixelShaderInput.

Direct3D のアプリ コードDirect3D app code

struct ConstantBuffer
{
    XMFLOAT4X4 model;
    XMFLOAT4X4 view;
    XMFLOAT4X4 projection;
};
struct SimpleCubeVertex
{
    XMFLOAT3 pos;   // position
    XMFLOAT3 color; // color
};

 // Create an input layout that matches the layout defined in the vertex shader code.
 const D3D11_INPUT_ELEMENT_DESC basicVertexLayoutDesc[] =
 {
     { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0,  0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
     { "COLOR",    0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
 };

// Create vertex and index buffers that define a geometry.

HLSL の頂点シェーダー コードHLSL vertex shader code

cbuffer ModelViewProjectionCB : register( b0 )
{
    matrix model; 
    matrix view;
    matrix projection;
};
// The POSITION and COLOR semantics must match the semantics in the input layout Direct3D app code.
struct VertexShaderInput
{
    float3 pos : POSITION; // Incoming position of vertex 
    float3 color : COLOR; // Incoming color for the vertex
};

struct PixelShaderInput
{
    float4 pos : SV_Position; // Copy the vertex position.
    float4 color : COLOR; // Pass the color to the pixel shader.
};

PixelShaderInput main(VertexShaderInput input)
{
    PixelShaderInput vertexShaderOutput;

    // shader source code

    return vertexShaderOutput;
}

HLSL のピクセル シェーダー コードHLSL pixel shader code

// Collect input from the vertex shader. 
// The COLOR semantic must match the semantic in the vertex shader code.
struct PixelShaderInput
{
    float4 pos : SV_Position;
    float4 color : COLOR; // Color for the pixel
};

// Set the pixel color value for the renter target. 
float4 main(PixelShaderInput input) : SV_Target
{
    return input.color;
}

Direct3D への OpenGL のレンダリング コードの移植例Examples of porting OpenGL rendering code to Direct3D

ここでは、OpenGL ES 2.0 コードのレンダリングの例と、Direct3D 11 コードでの相当する例を紹介します。Here we show an example of rendering in OpenGL ES 2.0 code and then the equivalent example in Direct3D 11 code.

OpenGL のレンダリング コードOpenGL rendering code

// Bind shaders to the pipeline. 
// Both vertex shader and fragment shader are in a program.
glUseProgram(m_shader->getProgram());
 
// Input asssembly 
// Get the position and color attributes of the vertex.

m_positionLocation = glGetAttribLocation(m_shader->getProgram(), "position");
glEnableVertexAttribArray(m_positionLocation);

m_colorLocation = glGetAttribColor(m_shader->getProgram(), "color");
glEnableVertexAttribArray(m_colorLocation);
 
// Bind the vertex buffer object to the input assembler.
glBindBuffer(GL_ARRAY_BUFFER, m_geometryBuffer);
glVertexAttribPointer(m_positionLocation, 4, GL_FLOAT, GL_FALSE, 0, NULL);
glBindBuffer(GL_ARRAY_BUFFER, m_colorBuffer);
glVertexAttribPointer(m_colorLocation, 3, GL_FLOAT, GL_FALSE, 0, NULL);
 
// Draw a triangle with 3 vertices.
glDrawArray(GL_TRIANGLES, 0, 3);

Direct3D のレンダリング コードDirect3D rendering code

// Bind the vertex shader and pixel shader to the pipeline.
m_d3dDeviceContext->VSSetShader(vertexShader.Get(),nullptr,0);
m_d3dDeviceContext->PSSetShader(pixelShader.Get(),nullptr,0);
 
// Declare the inputs that the shaders expect.
m_d3dDeviceContext->IASetInputLayout(inputLayout.Get());
m_d3dDeviceContext->IASetVertexBuffers(0, 1, vertexBuffer.GetAddressOf(), &stride, &offset);

// Set the primitive's topology.
m_d3dDeviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);

// Draw a triangle with 3 vertices. triangleVertices is an array of 3 vertices.
m_d3dDeviceContext->Draw(ARRAYSIZE(triangleVertices),0);