ご返答ありがとうございます
手元で vs2015_x64_MT を使用して試してみましたが、やはり問題なく Specular を使用できていました…
こちらでテストに使用したファイルをアップしましたので、よろしければダウンロードしてください m(_ _)m
https://dxlib.xsrv.jp/temp/UseSpecluarShaderTest.zip
( zipファイルの中の UseSpecularShaderTest.exe を実行すると画面左上に黄色い四角が描画されます )
テストで使用したピクセルシェーダーのコードは以下のようになっていますので、ひるねみさんが試された
コードと差異が無いか確認してみてください m(_ _)m
// ピクセルシェーダーの入力
struct PS_INPUT
{
float4 Position : SV_POSITION ;
float4 Diffuse : COLOR0 ;
float4 Specular : COLOR1 ;
float2 TexCoords0 : TEXCOORD0 ;
float2 TexCoords1 : TEXCOORD1 ;
} ;
// ピクセルシェーダーの出力
struct PS_OUTPUT
{
float4 Color0 : SV_TARGET0 ;
} ;
// main関数
PS_OUTPUT main( PS_INPUT PSInput )
{
PS_OUTPUT PSOutput ;
PSOutput.Color0 = PSInput.Diffuse + PSInput.Specular ;
return PSOutput ;
}
上記のように Diffuse( COLOR0 ) と Specular( COLOR1 ) を足してそのまま出力カラーとしています
そして、C++ のコードは以下のようになっていて
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 )
{
return -1 ;
}
int pshandle = LoadPixelShader( "PixelShader.pso" ) ;
SetDrawScreen( DX_SCREEN_BACK ) ;
SetUsePixelShader( pshandle ) ;
VERTEX2DSHADER Vert[ 6 ] ;
Vert[ 0 ].pos = VGet( 0.0f, 0.0f, 0.0f ) ;
Vert[ 0 ].rhw = 1.0f ;
Vert[ 0 ].dif = GetColorU8( 255, 0, 0,255 ) ;
Vert[ 0 ].spc = GetColorU8( 0, 255, 0, 0 ) ;
Vert[ 0 ].u = 0.0f ;
Vert[ 0 ].v = 0.0f ;
Vert[ 0 ].su = 0.0f ;
Vert[ 0 ].sv = 0.0f ;
Vert[ 1 ].pos = VGet( 128.0f, 0.0f, 0.0f ) ;
Vert[ 1 ].rhw = 1.0f ;
Vert[ 1 ].dif = GetColorU8( 255, 0, 0,255 ) ;
Vert[ 1 ].spc = GetColorU8( 0, 255, 0, 0 ) ;
Vert[ 1 ].u = 0.0f ;
Vert[ 1 ].v = 0.0f ;
Vert[ 1 ].su = 0.0f ;
Vert[ 1 ].sv = 0.0f ;
Vert[ 2 ].pos = VGet( 0.0f, 128.0f, 0.0f ) ;
Vert[ 2 ].rhw = 1.0f ;
Vert[ 2 ].dif = GetColorU8( 255, 0, 0,255 ) ;
Vert[ 2 ].spc = GetColorU8( 0, 255, 0, 0 ) ;
Vert[ 2 ].u = 0.0f ;
Vert[ 2 ].v = 0.0f ;
Vert[ 2 ].su = 0.0f ;
Vert[ 2 ].sv = 0.0f ;
Vert[ 3 ].pos = VGet( 128.0f, 128.0f, 0.0f ) ;
Vert[ 3 ].rhw = 1.0f ;
Vert[ 3 ].dif = GetColorU8( 255, 0, 0,255 ) ;
Vert[ 3 ].spc = GetColorU8( 0, 255, 0, 0 ) ;
Vert[ 3 ].u = 0.0f ;
Vert[ 3 ].v = 0.0f ;
Vert[ 3 ].su = 0.0f ;
Vert[ 3 ].sv = 0.0f ;
Vert[ 4 ] = Vert[ 2 ];
Vert[ 5 ] = Vert[ 1 ];
DrawPolygon2DToShader( Vert, 2 ) ;
ScreenFlip() ;
WaitKey() ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
dif に R=255 G=0 B=0
spc に R=0 G=255 B=0 を代入してポリゴンを描画していて
sif と spc が足されないと黄色( R=255 G=255 B=0 )にならないので
描画される四角形が黄色になるかどうかで spc が問題なく使用できているかを判断しています