X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。
| Revision | 260 (tree) |
|---|---|
| Time | 2021-02-13 20:34:00 |
| Author | |
DirectX 9.0のシェーダーを実装(オプション)、コンソールのverコマンドの表示を修正
| @@ -31,7 +31,7 @@ | ||
| 31 | 31 | |
| 32 | 32 | #include "d3dgraphics.h" |
| 33 | 33 | |
| 34 | -#if GRAPHIC_ENGINE == 0 | |
| 34 | +#if (GRAPHIC_ENGINE == 0)||(GRAPHIC_ENGINE == 1) | |
| 35 | 35 | |
| 36 | 36 | //! @brief コンストラクタ |
| 37 | 37 | D3DGraphics::D3DGraphics() |
| @@ -47,6 +47,18 @@ | ||
| 47 | 47 | ptextures[i] = NULL; |
| 48 | 48 | } |
| 49 | 49 | |
| 50 | +#if GRAPHIC_ENGINE == 1 | |
| 51 | + hVertexShader = NULL; | |
| 52 | + hVSConstantTable = NULL; | |
| 53 | + hVSWorldVertexPos = NULL; | |
| 54 | + hVSWorldViewPos = NULL; | |
| 55 | + hVSWorldViewProj = NULL; | |
| 56 | + hVSDiffuse = NULL; | |
| 57 | + pPixelShader = NULL; | |
| 58 | + pPSConstantTable = NULL; | |
| 59 | + hPSEnableTexture = NULL; | |
| 60 | +#endif | |
| 61 | + | |
| 50 | 62 | blockdata = NULL; |
| 51 | 63 | for(int i=0; i<TOTAL_BLOCKTEXTURE; i++){ |
| 52 | 64 | mapTextureID[i] = -1; |
| @@ -158,6 +170,46 @@ | ||
| 158 | 170 | } |
| 159 | 171 | |
| 160 | 172 | |
| 173 | +#if GRAPHIC_ENGINE == 1 | |
| 174 | + HRESULT hr; | |
| 175 | + LPD3DXBUFFER pCode; | |
| 176 | + | |
| 177 | + //頂点シェーダー初期化 | |
| 178 | + //hr = D3DXCompileShaderFromFile("DirectX_Shader01.fx", NULL, NULL, "VertexShader_Main", "vs_2_0", 0, &pCode, NULL, &hVSConstantTable); | |
| 179 | + hr = D3DXCompileShaderFromResource(NULL, MAKEINTRESOURCE(HLSLFILE), NULL, NULL, "VertexShader_Main", "vs_2_0", 0, &pCode, NULL, &hVSConstantTable); | |
| 180 | + if( FAILED(hr) ){ return 1; } | |
| 181 | + hr = pd3dDevice->CreateVertexShader((DWORD*)pCode->GetBufferPointer(), &hVertexShader); | |
| 182 | + pCode->Release(); | |
| 183 | + if( FAILED(hr) ){ return 1; } | |
| 184 | + | |
| 185 | + //頂点シェーダーの関連変数 | |
| 186 | + hVSWorldVertexPos = hVSConstantTable->GetConstantByName(NULL, "WorldVertexPos"); | |
| 187 | + if( hVSWorldVertexPos == NULL ){ return 1; } | |
| 188 | + hVSWorldViewPos = hVSConstantTable->GetConstantByName(NULL, "WorldViewPos"); | |
| 189 | + if( hVSWorldViewPos == NULL ){ return 1; } | |
| 190 | + hVSWorldViewProj = hVSConstantTable->GetConstantByName(NULL, "WorldViewProj"); | |
| 191 | + if( hVSWorldViewProj == NULL ){ return 1; } | |
| 192 | + hVSDiffuse = hVSConstantTable->GetConstantByName(NULL, "Diffuse"); | |
| 193 | + if( hVSDiffuse == NULL ){ return 1; } | |
| 194 | + | |
| 195 | + //ピクセルシェーダー初期化 | |
| 196 | + //hr = D3DXCompileShaderFromFile("DirectX_Shader01.fx", NULL, NULL, "PixelShader_Main", "ps_2_0", 0, &pCode, NULL, &pPSConstantTable); | |
| 197 | + hr = D3DXCompileShaderFromResource(NULL, MAKEINTRESOURCE(HLSLFILE), NULL, NULL, "PixelShader_Main", "ps_2_0", 0, &pCode, NULL, &pPSConstantTable); | |
| 198 | + if( FAILED(hr) ){ return 1; } | |
| 199 | + hr = pd3dDevice->CreatePixelShader((DWORD*)pCode->GetBufferPointer(), &pPixelShader); | |
| 200 | + pCode->Release(); | |
| 201 | + if( FAILED(hr) ){ return 1; } | |
| 202 | + | |
| 203 | + //ピクセルシェーダーの関連変数 | |
| 204 | + hPSEnableTexture = pPSConstantTable->GetConstantByName(NULL, "EnableTexture"); | |
| 205 | + if( hPSEnableTexture == NULL ){ return 1; } | |
| 206 | + | |
| 207 | + D3DXMatrixIdentity(&VSWorldPosMatrix); | |
| 208 | + D3DXMatrixIdentity(&VSViewPosMatrix); | |
| 209 | + D3DXMatrixIdentity(&VSViewProjMatrix); | |
| 210 | +#endif | |
| 211 | + | |
| 212 | + | |
| 161 | 213 | //アスペクト比を設定 |
| 162 | 214 | aspect = (float)rec.right / (float)rec.bottom; |
| 163 | 215 |
| @@ -273,6 +325,25 @@ | ||
| 273 | 325 | //リソース解放 |
| 274 | 326 | CleanupD3Dresource(); |
| 275 | 327 | |
| 328 | +#if GRAPHIC_ENGINE == 1 | |
| 329 | + if( pPSConstantTable != NULL ){ | |
| 330 | + pPSConstantTable->Release(); | |
| 331 | + pPSConstantTable = NULL; | |
| 332 | + } | |
| 333 | + if( pPixelShader != NULL ){ | |
| 334 | + pPixelShader->Release(); | |
| 335 | + pPixelShader = NULL; | |
| 336 | + } | |
| 337 | + if( hVSConstantTable != NULL ){ | |
| 338 | + hVSConstantTable->Release(); | |
| 339 | + hVSConstantTable = NULL; | |
| 340 | + } | |
| 341 | + if( hVertexShader != NULL ){ | |
| 342 | + hVertexShader->Release(); | |
| 343 | + hVertexShader = NULL; | |
| 344 | + } | |
| 345 | +#endif | |
| 346 | + | |
| 276 | 347 | if( pd3dDevice != NULL ){ |
| 277 | 348 | pd3dDevice->Release(); |
| 278 | 349 | pd3dDevice = NULL; |
| @@ -819,6 +890,12 @@ | ||
| 819 | 890 | //Zバッファ初期化 |
| 820 | 891 | pd3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE); |
| 821 | 892 | |
| 893 | +#if GRAPHIC_ENGINE == 1 | |
| 894 | + //頂点シェーダーとピクセルシェーダー設定 | |
| 895 | + pd3dDevice->SetVertexShader(hVertexShader); | |
| 896 | + pd3dDevice->SetPixelShader(pPixelShader); | |
| 897 | +#endif | |
| 898 | + | |
| 822 | 899 | //座標ゼロ地点にワールド変換行列 |
| 823 | 900 | ResetWorldTransform(); |
| 824 | 901 |
| @@ -865,7 +942,12 @@ | ||
| 865 | 942 | { |
| 866 | 943 | D3DXMATRIX matWorld; |
| 867 | 944 | D3DXMatrixIdentity(&matWorld); |
| 945 | +#if GRAPHIC_ENGINE == 0 | |
| 868 | 946 | pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld); |
| 947 | +#else | |
| 948 | + hVSConstantTable->SetMatrix(pd3dDevice, hVSWorldVertexPos, &matWorld); | |
| 949 | + VSWorldPosMatrix = matWorld; | |
| 950 | +#endif | |
| 869 | 951 | } |
| 870 | 952 | |
| 871 | 953 | //! @brief ワールド空間の座標・角度・拡大率を設定 |
| @@ -904,7 +986,12 @@ | ||
| 904 | 986 | matWorld = matWorld5 * matWorld4 * matWorld3 * matWorld2 * matWorld1; |
| 905 | 987 | |
| 906 | 988 | //適用 |
| 907 | - pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld ); | |
| 989 | +#if GRAPHIC_ENGINE == 0 | |
| 990 | + pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld); | |
| 991 | +#else | |
| 992 | + hVSConstantTable->SetMatrix(pd3dDevice, hVSWorldVertexPos, &matWorld); | |
| 993 | + VSWorldPosMatrix = matWorld; | |
| 994 | +#endif | |
| 908 | 995 | } |
| 909 | 996 | |
| 910 | 997 | //! @brief ワールド空間の座標・角度・拡大率を設定(エフェクト用) |
| @@ -931,7 +1018,12 @@ | ||
| 931 | 1018 | matWorld = matWorld5 * matWorld4 * matWorld3 * matWorld2 * matWorld1; |
| 932 | 1019 | |
| 933 | 1020 | //適用 |
| 934 | - pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld ); | |
| 1021 | +#if GRAPHIC_ENGINE == 0 | |
| 1022 | + pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld); | |
| 1023 | +#else | |
| 1024 | + hVSConstantTable->SetMatrix(pd3dDevice, hVSWorldVertexPos, &matWorld); | |
| 1025 | + VSWorldPosMatrix = matWorld; | |
| 1026 | +#endif | |
| 935 | 1027 | } |
| 936 | 1028 | |
| 937 | 1029 | //! @brief ワールド空間を人が武器を持つ場所に設定 |
| @@ -960,7 +1052,12 @@ | ||
| 960 | 1052 | matWorld = matWorld5 * matWorld4 * matWorld3 * matWorld2 * matWorld1; |
| 961 | 1053 | |
| 962 | 1054 | //適用 |
| 963 | - pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld ); | |
| 1055 | +#if GRAPHIC_ENGINE == 0 | |
| 1056 | + pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld); | |
| 1057 | +#else | |
| 1058 | + hVSConstantTable->SetMatrix(pd3dDevice, hVSWorldVertexPos, &matWorld); | |
| 1059 | + VSWorldPosMatrix = matWorld; | |
| 1060 | +#endif | |
| 964 | 1061 | } |
| 965 | 1062 | |
| 966 | 1063 | //! @brief ワールド空間を所持している武器を描画する場所に設定 |
| @@ -989,12 +1086,20 @@ | ||
| 989 | 1086 | |
| 990 | 1087 | pd3dDevice->GetViewport(&pViewport); |
| 991 | 1088 | |
| 1089 | +#if GRAPHIC_ENGINE == 0 | |
| 992 | 1090 | //カメラ座標 |
| 993 | 1091 | pd3dDevice->GetTransform(D3DTS_VIEW, &matWorldV); |
| 994 | 1092 | |
| 995 | 1093 | //カメラ設定(射影変換行列)viewangle |
| 996 | 1094 | pd3dDevice->GetTransform(D3DTS_PROJECTION, &matProj); |
| 1095 | +#else | |
| 1096 | + //カメラ座標 | |
| 1097 | + matWorldV = VSViewPosMatrix; | |
| 997 | 1098 | |
| 1099 | + //カメラ設定(射影変換行列)viewangle | |
| 1100 | + matProj = VSViewProjMatrix; | |
| 1101 | +#endif | |
| 1102 | + | |
| 998 | 1103 | D3DXMatrixIdentity(&matWorld); |
| 999 | 1104 | |
| 1000 | 1105 | //スクリーン空間からオブジェクト空間にベクトルを射影 |
| @@ -1018,7 +1123,12 @@ | ||
| 1018 | 1123 | matWorld = matWorld6 * matWorld5 * matWorld3 * matWorld2 * matWorld1; |
| 1019 | 1124 | |
| 1020 | 1125 | //適用 |
| 1021 | - pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld ); | |
| 1126 | +#if GRAPHIC_ENGINE == 0 | |
| 1127 | + pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld); | |
| 1128 | +#else | |
| 1129 | + hVSConstantTable->SetMatrix(pd3dDevice, hVSWorldVertexPos, &matWorld); | |
| 1130 | + VSWorldPosMatrix = matWorld; | |
| 1131 | +#endif | |
| 1022 | 1132 | } |
| 1023 | 1133 | |
| 1024 | 1134 | //! @brief ワールド空間の座標を取得 |
| @@ -1028,7 +1138,11 @@ | ||
| 1028 | 1138 | void D3DGraphics::GetWorldTransformPos(float *x, float *y, float *z) |
| 1029 | 1139 | { |
| 1030 | 1140 | D3DXMATRIX matWorld; |
| 1031 | - pd3dDevice->GetTransform( D3DTS_WORLD, &matWorld ); | |
| 1141 | +#if GRAPHIC_ENGINE == 0 | |
| 1142 | + pd3dDevice->GetTransform(D3DTS_WORLD, &matWorld); | |
| 1143 | +#else | |
| 1144 | + matWorld = VSWorldPosMatrix; | |
| 1145 | +#endif | |
| 1032 | 1146 | *x = matWorld._41; |
| 1033 | 1147 | *y = matWorld._42; |
| 1034 | 1148 | *z = matWorld._43; |
| @@ -1101,7 +1215,12 @@ | ||
| 1101 | 1215 | } |
| 1102 | 1216 | |
| 1103 | 1217 | D3DXMatrixIdentity(&matWorld); |
| 1218 | +#if GRAPHIC_ENGINE == 0 | |
| 1104 | 1219 | pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld); |
| 1220 | +#else | |
| 1221 | + hVSConstantTable->SetMatrix(pd3dDevice, hVSWorldVertexPos, &matWorld); | |
| 1222 | + VSWorldPosMatrix = matWorld; | |
| 1223 | +#endif | |
| 1105 | 1224 | |
| 1106 | 1225 | //カメラ座標 |
| 1107 | 1226 | D3DXVECTOR3 vEyePt( camera_x, camera_y, camera_z ); |
| @@ -1108,12 +1227,22 @@ | ||
| 1108 | 1227 | D3DXVECTOR3 vLookatPt( cos(camera_rx)*cos(camera_ry) + camera_x, sin(camera_ry) + camera_y, sin(camera_rx)*cos(camera_ry) + camera_z ); |
| 1109 | 1228 | D3DXVECTOR3 vUpVec( 0.0f, vUpVecF, 0.0f ); |
| 1110 | 1229 | D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec ); |
| 1111 | - pd3dDevice->SetTransform( D3DTS_VIEW, &matView ); | |
| 1230 | +#if GRAPHIC_ENGINE == 0 | |
| 1231 | + pd3dDevice->SetTransform(D3DTS_VIEW, &matView); | |
| 1232 | +#else | |
| 1233 | + hVSConstantTable->SetMatrix(pd3dDevice, hVSWorldViewPos, &matView); | |
| 1234 | + VSViewPosMatrix = matView; | |
| 1235 | +#endif | |
| 1112 | 1236 | |
| 1113 | 1237 | //カメラ設定(射影変換行列)viewangle |
| 1114 | 1238 | D3DXMATRIXA16 matProj; |
| 1115 | 1239 | D3DXMatrixPerspectiveFovLH( &matProj, viewangle, aspect, CLIPPINGPLANE_NEAR, CLIPPINGPLANE_FAR); |
| 1240 | +#if GRAPHIC_ENGINE == 0 | |
| 1116 | 1241 | pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj); |
| 1242 | +#else | |
| 1243 | + hVSConstantTable->SetMatrix(pd3dDevice, hVSWorldViewProj, &matProj); | |
| 1244 | + VSViewProjMatrix = matProj; | |
| 1245 | +#endif | |
| 1117 | 1246 | } |
| 1118 | 1247 | |
| 1119 | 1248 | //! @brief マップデータを取り込む |
| @@ -1274,6 +1403,7 @@ | ||
| 1274 | 1403 | |
| 1275 | 1404 | for(textureID=0; textureID<TOTAL_BLOCKTEXTURE; textureID++){ |
| 1276 | 1405 | //テクスチャが正常に読み込めていなければ設定 |
| 1406 | +#if GRAPHIC_ENGINE == 0 | |
| 1277 | 1407 | if( mapTextureID[textureID] == -1 ){ |
| 1278 | 1408 | pd3dDevice->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE); |
| 1279 | 1409 | pd3dDevice->SetTexture(0, NULL); |
| @@ -1286,6 +1416,23 @@ | ||
| 1286 | 1416 | pd3dDevice->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1); |
| 1287 | 1417 | pd3dDevice->SetTexture(0, ptextures[mapTextureID[textureID]] ); |
| 1288 | 1418 | } |
| 1419 | +#else | |
| 1420 | + if( mapTextureID[textureID] == -1 ){ | |
| 1421 | + pd3dDevice->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE); | |
| 1422 | + pPSConstantTable->SetBool(pd3dDevice, hPSEnableTexture, false); | |
| 1423 | + pd3dDevice->SetTexture(0, NULL); | |
| 1424 | + } | |
| 1425 | + else if( ptextures[ mapTextureID[textureID] ] == NULL ){ | |
| 1426 | + pd3dDevice->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE); | |
| 1427 | + pPSConstantTable->SetBool(pd3dDevice, hPSEnableTexture, false); | |
| 1428 | + pd3dDevice->SetTexture(0, NULL); | |
| 1429 | + } | |
| 1430 | + else{ | |
| 1431 | + pd3dDevice->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1); | |
| 1432 | + pPSConstantTable->SetBool(pd3dDevice, hPSEnableTexture, true); | |
| 1433 | + pd3dDevice->SetTexture(0, ptextures[mapTextureID[textureID]] ); | |
| 1434 | + } | |
| 1435 | +#endif | |
| 1289 | 1436 | |
| 1290 | 1437 | for(int i=0; i<bs; i++){ |
| 1291 | 1438 | //データ取得 |
| @@ -1308,6 +1455,7 @@ | ||
| 1308 | 1455 | |
| 1309 | 1456 | for(textureID=0; textureID<TOTAL_BLOCKTEXTURE; textureID++){ |
| 1310 | 1457 | //テクスチャが正常に読み込めていなければ設定 |
| 1458 | +#if GRAPHIC_ENGINE == 0 | |
| 1311 | 1459 | if( mapTextureID[textureID] == -1 ){ |
| 1312 | 1460 | pd3dDevice->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE); |
| 1313 | 1461 | pd3dDevice->SetTexture(0, NULL); |
| @@ -1320,6 +1468,23 @@ | ||
| 1320 | 1468 | pd3dDevice->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1); |
| 1321 | 1469 | pd3dDevice->SetTexture(0, ptextures[mapTextureID[textureID]] ); |
| 1322 | 1470 | } |
| 1471 | +#else | |
| 1472 | + if( mapTextureID[textureID] == -1 ){ | |
| 1473 | + pd3dDevice->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE); | |
| 1474 | + pPSConstantTable->SetBool(pd3dDevice, hPSEnableTexture, false); | |
| 1475 | + pd3dDevice->SetTexture(0, NULL); | |
| 1476 | + } | |
| 1477 | + else if( ptextures[ mapTextureID[textureID] ] == NULL ){ | |
| 1478 | + pd3dDevice->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE); | |
| 1479 | + pPSConstantTable->SetBool(pd3dDevice, hPSEnableTexture, false); | |
| 1480 | + pd3dDevice->SetTexture(0, NULL); | |
| 1481 | + } | |
| 1482 | + else{ | |
| 1483 | + pd3dDevice->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1); | |
| 1484 | + pPSConstantTable->SetBool(pd3dDevice, hPSEnableTexture, true); | |
| 1485 | + pd3dDevice->SetTexture(0, ptextures[mapTextureID[textureID]] ); | |
| 1486 | + } | |
| 1487 | +#endif | |
| 1323 | 1488 | |
| 1324 | 1489 | for(int i=0; i<bs; i++){ |
| 1325 | 1490 | //データ取得 |
| @@ -1415,12 +1580,18 @@ | ||
| 1415 | 1580 | pd3dDevice->SetRenderState(D3DRS_LIGHTING, TRUE); |
| 1416 | 1581 | |
| 1417 | 1582 | //色合い設定 |
| 1583 | +#if GRAPHIC_ENGINE == 0 | |
| 1418 | 1584 | D3DMATERIAL9 mtrl; |
| 1419 | 1585 | ZeroMemory(&mtrl, sizeof(mtrl)); |
| 1420 | 1586 | mtrl.Emissive = D3DXCOLOR(Brightness, Brightness, Brightness, 1.0f); |
| 1421 | 1587 | pd3dDevice->SetMaterial(&mtrl); |
| 1588 | +#else | |
| 1589 | + float DiffuseColor[4] = {Brightness, Brightness, Brightness, 1.0f}; | |
| 1590 | + hVSConstantTable->SetFloatArray(pd3dDevice, hVSDiffuse, DiffuseColor, 4); | |
| 1591 | +#endif | |
| 1422 | 1592 | |
| 1423 | 1593 | //テクスチャ設定 |
| 1594 | +#if GRAPHIC_ENGINE == 0 | |
| 1424 | 1595 | if( id_texture == -1 ){ |
| 1425 | 1596 | pd3dDevice->SetTexture(0, NULL); |
| 1426 | 1597 | } |
| @@ -1430,6 +1601,20 @@ | ||
| 1430 | 1601 | else{ |
| 1431 | 1602 | pd3dDevice->SetTexture( 0, ptextures[id_texture] ); |
| 1432 | 1603 | } |
| 1604 | +#else | |
| 1605 | + if( id_texture == -1 ){ | |
| 1606 | + pPSConstantTable->SetBool(pd3dDevice, hPSEnableTexture, false); | |
| 1607 | + pd3dDevice->SetTexture(0, NULL); | |
| 1608 | + } | |
| 1609 | + else if( ptextures[id_texture] == NULL ){ | |
| 1610 | + pPSConstantTable->SetBool(pd3dDevice, hPSEnableTexture, false); | |
| 1611 | + pd3dDevice->SetTexture(0, NULL); | |
| 1612 | + } | |
| 1613 | + else{ | |
| 1614 | + pPSConstantTable->SetBool(pd3dDevice, hPSEnableTexture, true); | |
| 1615 | + pd3dDevice->SetTexture( 0, ptextures[id_texture] ); | |
| 1616 | + } | |
| 1617 | +#endif | |
| 1433 | 1618 | |
| 1434 | 1619 | //描画 |
| 1435 | 1620 | for(int i=0; i<(signed)nummaterials[id_model]; i=i+1){ |
| @@ -1436,6 +1621,12 @@ | ||
| 1436 | 1621 | pmesh[id_model]->DrawSubset(i); |
| 1437 | 1622 | } |
| 1438 | 1623 | |
| 1624 | +#if GRAPHIC_ENGINE == 1 | |
| 1625 | + //色合い再設定 | |
| 1626 | + float DiffuseColor2[4] = {0.0f, 0.0f, 0.0f, 0.0f}; | |
| 1627 | + hVSConstantTable->SetFloatArray(pd3dDevice, hVSDiffuse, DiffuseColor2, 4); | |
| 1628 | +#endif | |
| 1629 | + | |
| 1439 | 1630 | //ライティング無効化 |
| 1440 | 1631 | pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE); |
| 1441 | 1632 | } |
| @@ -1482,6 +1673,9 @@ | ||
| 1482 | 1673 | pd3dDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE); |
| 1483 | 1674 | |
| 1484 | 1675 | //テクスチャとデータ形式を設定し描画 |
| 1676 | +#if GRAPHIC_ENGINE == 1 | |
| 1677 | + pPSConstantTable->SetBool(pd3dDevice, hPSEnableTexture, true); | |
| 1678 | +#endif | |
| 1485 | 1679 | pd3dDevice->SetTexture(0, ptextures[id_texture]); |
| 1486 | 1680 | pd3dDevice->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1); |
| 1487 | 1681 | pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, BoardVertices, sizeof(VERTEXTXTA)); |
| @@ -1541,6 +1735,9 @@ | ||
| 1541 | 1735 | mv[i].tv = 0.0f; |
| 1542 | 1736 | } |
| 1543 | 1737 | |
| 1738 | +#if GRAPHIC_ENGINE == 1 | |
| 1739 | + pPSConstantTable->SetBool(pd3dDevice, hPSEnableTexture, false); | |
| 1740 | +#endif | |
| 1544 | 1741 | pd3dDevice->SetTexture(0, NULL); |
| 1545 | 1742 | pd3dDevice->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1); |
| 1546 | 1743 | pd3dDevice->DrawPrimitiveUP(D3DPT_LINELIST, 1, mv, sizeof(VERTEXTXTA)); |
| @@ -1686,6 +1883,9 @@ | ||
| 1686 | 1883 | ResetWorldTransform(); |
| 1687 | 1884 | |
| 1688 | 1885 | //テクスチャをフォントテクスチャに設定 |
| 1886 | +#if GRAPHIC_ENGINE == 1 | |
| 1887 | + pPSConstantTable->SetBool(pd3dDevice, hPSEnableTexture, true); | |
| 1888 | +#endif | |
| 1689 | 1889 | pd3dDevice->SetTexture( 0, ptextures[TextureFont] ); |
| 1690 | 1890 | |
| 1691 | 1891 | //データ形式を設定 |
| @@ -1780,6 +1980,9 @@ | ||
| 1780 | 1980 | ResetWorldTransform(); |
| 1781 | 1981 | |
| 1782 | 1982 | //テクスチャをフォントテクスチャに設定 |
| 1983 | +#if GRAPHIC_ENGINE == 1 | |
| 1984 | + pPSConstantTable->SetBool(pd3dDevice, hPSEnableTexture, true); | |
| 1985 | +#endif | |
| 1783 | 1986 | pd3dDevice->SetTexture( 0, ptextures[TextureDebugFont] ); |
| 1784 | 1987 | |
| 1785 | 1988 | //データ形式を設定 |
| @@ -1859,6 +2062,9 @@ | ||
| 1859 | 2062 | pLineVertices[i].tv = 0.0f; |
| 1860 | 2063 | } |
| 1861 | 2064 | |
| 2065 | +#if GRAPHIC_ENGINE == 1 | |
| 2066 | + pPSConstantTable->SetBool(pd3dDevice, hPSEnableTexture, false); | |
| 2067 | +#endif | |
| 1862 | 2068 | pd3dDevice->SetTexture(0, NULL); |
| 1863 | 2069 | |
| 1864 | 2070 | //データ形式を設定し、描画。 |
| @@ -1896,6 +2102,9 @@ | ||
| 1896 | 2102 | pLineVertices[i].tv = 0.0f; |
| 1897 | 2103 | } |
| 1898 | 2104 | |
| 2105 | +#if GRAPHIC_ENGINE == 1 | |
| 2106 | + pPSConstantTable->SetBool(pd3dDevice, hPSEnableTexture, false); | |
| 2107 | +#endif | |
| 1899 | 2108 | pd3dDevice->SetTexture(0, NULL); |
| 1900 | 2109 | |
| 1901 | 2110 | //データ形式を設定し、描画。 |
| @@ -1939,6 +2148,9 @@ | ||
| 1939 | 2148 | pBoxVertices[i].tv = 0.0f; |
| 1940 | 2149 | } |
| 1941 | 2150 | |
| 2151 | +#if GRAPHIC_ENGINE == 1 | |
| 2152 | + pPSConstantTable->SetBool(pd3dDevice, hPSEnableTexture, false); | |
| 2153 | +#endif | |
| 1942 | 2154 | pd3dDevice->SetTexture(0, NULL); |
| 1943 | 2155 | |
| 1944 | 2156 | //データ形式を設定し、描画。 |
| @@ -1993,6 +2205,9 @@ | ||
| 1993 | 2205 | } |
| 1994 | 2206 | |
| 1995 | 2207 | //テクスチャとデータ形式を設定し、描画 |
| 2208 | +#if GRAPHIC_ENGINE == 1 | |
| 2209 | + pPSConstantTable->SetBool(pd3dDevice, hPSEnableTexture, true); | |
| 2210 | +#endif | |
| 1996 | 2211 | pd3dDevice->SetTexture( 0, ptextures[id] ); |
| 1997 | 2212 | pd3dDevice->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1); |
| 1998 | 2213 | pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, pBoxVertices, sizeof(TLVERTX)); |
| @@ -57,9 +57,9 @@ | ||
| 57 | 57 | #endif |
| 58 | 58 | #include "main.h" |
| 59 | 59 | |
| 60 | -#define GRAPHIC_ENGINE 0 //!< @brief 使用するグラフィックスコアの選択 @details DirectX 9.0c:0 OpenGL 1.1:8 | |
| 60 | +#define GRAPHIC_ENGINE 0 //!< @brief 使用するグラフィックスコアの選択 @details DirectX 9.0c(固定パイプライン):0 DirectX 9.0c(シェーダー):1 OpenGL 1.1:8 | |
| 61 | 61 | |
| 62 | -#if GRAPHIC_ENGINE == 0 | |
| 62 | +#if (GRAPHIC_ENGINE == 0)||(GRAPHIC_ENGINE == 1) | |
| 63 | 63 | |
| 64 | 64 | #define BLOCKDATA_GPUMEMORY //!< @brief ブロックデータを格納するメモリーを選択 @details 定数宣言有効:GPUメモリー 定数宣言無効(コメント化):メインメモリー |
| 65 | 65 |
| @@ -70,7 +70,12 @@ | ||
| 70 | 70 | #pragma comment(lib, "d3d9.lib") |
| 71 | 71 | #pragma comment(lib, "d3dx9.lib") |
| 72 | 72 | |
| 73 | -#define GRAPHICS_CORE "DirectX 9.0" //!< バージョン表示用情報 | |
| 73 | +#if GRAPHIC_ENGINE == 0 | |
| 74 | + #define GRAPHICS_CORE "DirectX 9.0" //!< バージョン表示用情報 | |
| 75 | +#else | |
| 76 | + #define GRAPHICS_CORE "DirectX 9.0 (Shader)" //!< バージョン表示用情報 | |
| 77 | + #define HLSLFILE 201 //!< リソース内のHLSLファイル | |
| 78 | +#endif | |
| 74 | 79 | |
| 75 | 80 | #elif GRAPHIC_ENGINE == 8 |
| 76 | 81 |
| @@ -93,7 +98,7 @@ | ||
| 93 | 98 | |
| 94 | 99 | #endif //GRAPHIC_ENGINE |
| 95 | 100 | |
| 96 | -#if GRAPHIC_ENGINE == 0 | |
| 101 | +#if (GRAPHIC_ENGINE == 0)||(GRAPHIC_ENGINE == 1) | |
| 97 | 102 | |
| 98 | 103 | //! 3Dポリゴン描画用構造体 |
| 99 | 104 | struct VERTEXTXTA |
| @@ -157,7 +162,7 @@ | ||
| 157 | 162 | class D3DGraphics |
| 158 | 163 | { |
| 159 | 164 | |
| 160 | -#if GRAPHIC_ENGINE == 0 | |
| 165 | +#if (GRAPHIC_ENGINE == 0)||(GRAPHIC_ENGINE == 1) | |
| 161 | 166 | |
| 162 | 167 | LPDIRECT3D9 pD3D; //!< DIRECT3D9のポインタ |
| 163 | 168 | LPDIRECT3DDEVICE9 pd3dDevice; //!< DIRECT3DDEVICE9のポインタ |
| @@ -167,6 +172,21 @@ | ||
| 167 | 172 | DWORD nummaterials[MAX_MODEL]; //!< (Xファイル用)マテリアル数 |
| 168 | 173 | LPDIRECT3DTEXTURE9 ptextures[MAX_TEXTURE]; //!< テクスチャを格納 |
| 169 | 174 | |
| 175 | +#if GRAPHIC_ENGINE == 1 | |
| 176 | + LPDIRECT3DVERTEXSHADER9 hVertexShader; //!< 頂点シェーダー | |
| 177 | + LPD3DXCONSTANTTABLE hVSConstantTable; //!< 頂点シェーダーの定数テーブル | |
| 178 | + D3DXHANDLE hVSWorldVertexPos; //!< 頂点シェーダーの変換行列 | |
| 179 | + D3DXHANDLE hVSWorldViewPos; //!< 頂点シェーダーの変換行列 | |
| 180 | + D3DXHANDLE hVSWorldViewProj; //!< 頂点シェーダーの変換行列 | |
| 181 | + D3DXHANDLE hVSDiffuse; //!< 頂点シェーダーのディフューズ色 | |
| 182 | + LPDIRECT3DPIXELSHADER9 pPixelShader; //!< ピクセルシェーダー | |
| 183 | + LPD3DXCONSTANTTABLE pPSConstantTable; //!< ピクセルシェーダーの定数テーブル | |
| 184 | + D3DXHANDLE hPSEnableTexture; //!< ピクセルシェーダーのテクスチャフラグ | |
| 185 | + D3DXMATRIX VSWorldPosMatrix; //!< 頂点シェーダーに与えた変換行列 | |
| 186 | + D3DXMATRIX VSViewPosMatrix; //!< 頂点シェーダーに与えた変換行列 | |
| 187 | + D3DXMATRIX VSViewProjMatrix; //!< 頂点シェーダーに与えた変換行列 | |
| 188 | +#endif | |
| 189 | + | |
| 170 | 190 | class BlockDataInterface* blockdata; //!< 読み込んだブロックデータを格納するクラスへのポインタ |
| 171 | 191 | int bs; //!< ブロック数 |
| 172 | 192 | int mapTextureID[TOTAL_BLOCKTEXTURE]; //!< テクスチャ番号 |
| @@ -1028,7 +1028,7 @@ | ||
| 1028 | 1028 | scrollbar_license.SetColor(d3dg->GetColorCode(0.5f,0.5f,0.5f,0.5f), d3dg->GetColorCode(0.6f,0.6f,0.25f,1.0f), d3dg->GetColorCode(0.8f,0.8f,0.25f,1.0f), |
| 1029 | 1029 | d3dg->GetColorCode(0.4f,0.67f,0.57f,1.0f), d3dg->GetColorCode(0.38f,0.77f,0.64f,1.0f), d3dg->GetColorCode(0.6f,0.3f,0.25f,1.0f), d3dg->GetColorCode(0.8f,0.3f,0.25f,1.0f)); |
| 1030 | 1030 | |
| 1031 | -#if GRAPHIC_ENGINE == 0 | |
| 1031 | +#if (GRAPHIC_ENGINE == 0)||(GRAPHIC_ENGINE == 1) | |
| 1032 | 1032 | //ライセンス文章 |
| 1033 | 1033 | licenseinfo[0] = ""; |
| 1034 | 1034 | licenseinfo[1] = "OpenXOPS"; |
| @@ -4380,8 +4380,12 @@ | ||
| 4380 | 4380 | if( strcmp(NewCommand, "ver") == 0 ){ |
| 4381 | 4381 | sprintf(str, "%s Version:%s", GAMENAME, GAMEVERSION); |
| 4382 | 4382 | AddInfoConsole(d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), str); |
| 4383 | - sprintf(str, " (Graphics:%s Sound:%s Input:%s)", GRAPHICS_CORE, SOUND_CORE, INPUT_CORE); | |
| 4383 | + sprintf(str, " Graphics : %s", GRAPHICS_CORE); | |
| 4384 | 4384 | AddInfoConsole(d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), str); |
| 4385 | + sprintf(str, " Sound : %s", SOUND_CORE); | |
| 4386 | + AddInfoConsole(d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), str); | |
| 4387 | + sprintf(str, " Input : %s", INPUT_CORE); | |
| 4388 | + AddInfoConsole(d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), str); | |
| 4385 | 4389 | } |
| 4386 | 4390 | |
| 4387 | 4391 | //ゲームの実行速度 |
| @@ -84,7 +84,7 @@ | ||
| 84 | 84 | #define OPTIONS_P3_X ((SCREEN_WIDTH - OPTIONS_P3_W)/2) //!< オプション画面 No.3 X座標 |
| 85 | 85 | #define OPTIONS_P3_Y (105 + (SCREEN_HEIGHT-105 - OPTIONS_P3_H)/2) //!< オプション画面 No.3 Y座標 |
| 86 | 86 | #define OPTIONS_P3_DATAS 1 //!< オプション画面 No.3 リンクテキストの数 |
| 87 | -#if GRAPHIC_ENGINE == 0 | |
| 87 | +#if (GRAPHIC_ENGINE == 0)||(GRAPHIC_ENGINE == 1) | |
| 88 | 88 | #define OPTIONS_LICENSELINE 26 //!< ライセンス文の行数 |
| 89 | 89 | #elif GRAPHIC_ENGINE == 8 |
| 90 | 90 | #define OPTIONS_LICENSELINE 6 //!< ライセンス文の行数 |