From 44252c74d2119bf6c65c316a2281d059a019bf69 Mon Sep 17 00:00:00 2001 From: DxLib Update Bot Date: Sun, 14 May 2023 13:55:20 +0900 Subject: [PATCH 1/5] [Bot] Create Patch of 3.24b (Platform-Independent) --- ...4\305\202\311\202\302\202\242\202\304.txt" | 5 + DxASyncLoad.cpp | 2 +- DxASyncLoad.h | 2 +- DxArchive_.cpp | 17 +- DxArchive_.h | 6 +- DxBaseFunc.cpp | 2 +- DxBaseFunc.h | 2 +- DxBaseImage.cpp | 588 +++- DxBaseImage.h | 5 +- DxChar.cpp | 67 +- DxChar.h | 2 +- DxCharCodeTable.cpp | 2 +- DxCompileConfig.h | 21 +- DxDataType.h | 2 +- DxDataTypeAndroid.h | 10 +- DxDataTypeWin.h | 2 +- DxDataTypeiOS.h | 2 +- DxFile.cpp | 51 +- DxFile.h | 2 +- DxFont.cpp | 670 ++++- DxFont.h | 71 +- DxFunctionAndroid.h | 17 +- DxFunctionWin.h | 8 +- DxFunctioniOS.h | 2 +- DxGateway.cpp | 824 +++++- DxGraphics.cpp | 1062 ++++++- DxGraphics.h | 73 +- DxGraphicsFilter.cpp | 67 +- DxGraphicsFilter.h | 16 +- DxHandle.cpp | 73 +- DxHandle.h | 30 +- DxHeap.cpp | 2 +- DxHeap.h | 2 +- DxInput.cpp | 108 +- DxInput.h | 12 +- DxInputString.cpp | 413 ++- DxInputString.h | 7 +- DxLib.h | 305 +- DxLib.txt | 2 +- DxLive2DCubism4.cpp | 190 +- DxLive2DCubism4.h | 29 +- DxLog.cpp | 59 +- DxLog.h | 7 +- DxLog.txt | 243 +- DxMask.cpp | 4 +- DxMask.h | 2 +- DxMath.cpp | 2 +- DxMath.h | 2 +- DxMemImg.cpp | 2 +- DxMemImg.h | 3 +- DxMemImgDrawFunction0.cpp | 2 +- DxMemImgDrawFunction1.cpp | 2 +- DxMemImgDrawFunction2.cpp | 2 +- DxMemImgDrawFunction3.cpp | 22 +- DxMemory.cpp | 2 +- DxMemory.h | 2 +- DxModel.cpp | 726 +++-- DxModel.h | 20 +- DxModelFile.h | 2 +- DxModelLoader0.cpp | 2 +- DxModelLoader1.cpp | 114 +- DxModelLoader2.cpp | 2 +- DxModelLoader3.cpp | 14 +- DxModelLoader3.h | 2 +- DxModelLoader4.cpp | 149 +- DxModelLoader4.h | 2 +- DxModelLoaderVMD.cpp | 2 +- DxModelLoaderVMD.h | 2 +- DxModelRead.cpp | 8 +- DxModelRead.h | 2 +- DxMovie.cpp | 10 +- DxMovie.h | 2 +- DxNetwork.cpp | 4 +- DxNetwork.h | 2 +- DxRingBuffer.cpp | 2 +- DxRingBuffer.h | 2 +- DxSoftImage.cpp | 130 +- DxSoftImage.h | 2 +- DxSound.cpp | 539 +++- DxSound.h | 13 +- DxSoundConvert.cpp | 2 +- DxSoundConvert.h | 2 +- DxStatic.h | 179 +- DxSystem.cpp | 14 +- DxSystem.h | 2 +- DxThread.cpp | 2 +- DxThread.h | 2 +- ...3\212\202\311\202\302\202\242\202\304.txt" | 99 + DxUseCLib.cpp | 2626 ++++++++++++++++- DxUseCLib.h | 5 +- DxUseCLibLive2DCubism4.cpp | 59 +- DxUseCLibLive2DCubism4.h | 10 +- DxUseCLibOgg.cpp | 2 +- DxUseCLibOgg.h | 2 +- DxUseCLibPhysics.cpp | 2 +- 95 files changed, 8831 insertions(+), 1059 deletions(-) create mode 100644 "Borland C++ \224\305\202\311\202\302\202\242\202\304.txt" create mode 100644 "DxUseCLib \203X\203^\203e\203B\203b\203N\203\212\203\223\203N\203\211\203C\203u\203\211\203\212\202\311\202\302\202\242\202\304.txt" diff --git "a/Borland C++ \224\305\202\311\202\302\202\242\202\304.txt" "b/Borland C++ \224\305\202\311\202\302\202\242\202\304.txt" new file mode 100644 index 0000000..e5b1926 --- /dev/null +++ "b/Borland C++ \224\305\202\311\202\302\202\242\202\304.txt" @@ -0,0 +1,5 @@ +・Borland C++ 版のコンパイルについて + +  Borland C++ 版の DxLib.lib をコンパイルするには C++ BuilderX Personal に + 入っている bcc32.exe か、それ以上のバージョンのコンパイラが必要です。 + (Borland C++ Compiler 5.5 ではコンパイル出来ません) diff --git a/DxASyncLoad.cpp b/DxASyncLoad.cpp index 0469d9a..41077fe 100644 --- a/DxASyncLoad.cpp +++ b/DxASyncLoad.cpp @@ -2,7 +2,7 @@ // // DXライブラリ 非同期読み込み処理プログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxASyncLoad.h b/DxASyncLoad.h index 3f2e7f0..e554148 100644 --- a/DxASyncLoad.h +++ b/DxASyncLoad.h @@ -2,7 +2,7 @@ // // DXライブラリ 非同期読み込み処理プログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxArchive_.cpp b/DxArchive_.cpp index d4e739e..2c5d7b6 100644 --- a/DxArchive_.cpp +++ b/DxArchive_.cpp @@ -2,7 +2,7 @@ // // DXライブラリ アーカイブ制御プログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -69,6 +69,8 @@ struct DXA_FINDDATA DWORD ObjectCount; // 次に渡すディレクトリ内オブジェクトのインデックス } ; +#endif // DX_NON_DXA + // 数値ごとの出現数や算出されたエンコード後のビット列や、結合部分の情報等の構造体 struct HUFFMAN_NODE { @@ -100,6 +102,7 @@ struct BIT_STREAM // (C)bit 数値ごとの出現頻度の差分値 // ↑これが256個ある +#ifndef DX_NON_DXA // 内部大域変数宣言 -------------------------------------------------------------- @@ -130,7 +133,7 @@ DXARC_DIR DX_ArchiveDirData ; static int DXA_DIR_OpenArchive( const wchar_t *FilePath, void *FileImage = NULL, int FileSize = -1, int FileImageCopyFlag = FALSE, int FileImageReadOnly = FALSE, int ArchiveIndex = -1, int OnMemory = FALSE, int ASyncThread = FALSE ) ; // アーカイブファイルを開く static int DXA_DIR_GetArchive( const wchar_t *FilePath, void *FileImage = NULL ) ; // 既に開かれているアーカイブのハンドルを取得する( 戻り値: -1=無かった 0以上:ハンドル ) static int DXA_DIR_CloseArchive( int ArchiveHandle ) ; // アーカイブファイルを閉じる -static void DXA_DIR_CloseWaitArchive( void ) ; // 使用されるのを待っているアーカイブファイルを全て閉じる +static void DXA_DIR_CloseWaitArchive( int AlwaysClose = FALSE ) ; // 使用されるのを待っているアーカイブファイルを全て閉じる static int DXA_DIR_ConvertFullPath( const wchar_t *Src, wchar_t *Dest, size_t BufferBytes, int CharUp = 1 ) ; // 全ての英字小文字を大文字にしながら、フルパスに変換する static int DXA_DIR_AnalysisFileNameAndDirPath( DXARC *DXA, const BYTE *Src, BYTE *FileName = 0, size_t FileNameBytes = 0, BYTE *DirPath = 0, size_t DirPathBytes = 0 ) ; // ファイル名も一緒になっていると分かっているパス中からファイル名とディレクトリパスを分割する。フルパスである必要は無い、ファイル名だけでも良い、DirPath の終端に ¥ マークは付かない static int DXA_DIR_FileNameCmp( DXARC *DXA, const BYTE *Src, const BYTE *CmpStr ); // CmpStr の条件に Src が適合するかどうかを調べる( 0:適合する -1:適合しない ) @@ -138,6 +141,8 @@ DXARC_DIR DX_ArchiveDirData ; static int DXA_DirectoryKeyConv( DXARC *DXA, DXARC_DIRECTORY *Dir, char *KeyStringBuffer ) ; // 指定のディレクトリデータの暗号化を解除する( 丸ごとメモリに読み込んだ場合用 ) +#endif // DX_NON_DXA + static void BitStream_Init( BIT_STREAM *BitStream, void *Buffer, bool IsRead ) ; // ビット単位入出力の初期化 static void BitStream_Write( BIT_STREAM *BitStream, BYTE BitNum, ULONGLONG OutputData ) ; // ビット単位の数値の書き込みを行う static ULONGLONG BitStream_Read( BIT_STREAM *BitStream, BYTE BitNum ) ; // ビット単位の数値の読み込みを行う @@ -215,6 +220,8 @@ ULONGLONG BitStream_GetBytes( BIT_STREAM *BitStream ) return BitStream->Bytes + ( BitStream->Bits != 0 ? 1 : 0 ) ; } +#ifndef DX_NON_DXA + // ファイルの情報を得る static DXARC_FILEHEAD *DXA_GetFileHeader( DXARC *DXA, const BYTE *FilePath, DXARC_DIRECTORY **DirectoryP ) { @@ -3640,7 +3647,7 @@ static int DXA_DIR_CloseArchive( int ArchiveHandle ) } // 使用されるのを待っているアーカイブファイルを全て閉じる -static void DXA_DIR_CloseWaitArchive( void ) +static void DXA_DIR_CloseWaitArchive( int AlwaysClose ) { int i, Num, index ; DXARC_DIR_ARCHIVE *arc ; @@ -3657,7 +3664,7 @@ static void DXA_DIR_CloseWaitArchive( void ) arc = DXARCD.Archive[index] ; // 使われていたら解放しない - if( arc->UseCounter > 0 ) + if( arc->UseCounter > 0 && AlwaysClose == FALSE ) { continue ; } @@ -3709,7 +3716,7 @@ extern int DXA_DIR_Terminate( void ) } // 使用されていないアーカイブファイルを解放する - DXA_DIR_CloseWaitArchive() ; + DXA_DIR_CloseWaitArchive( TRUE ) ; // クリティカルセクションの後始末 CriticalSection_Delete( &DXARCD.CriticalSection ) ; diff --git a/DxArchive_.h b/DxArchive_.h index 465d899..abfccc8 100644 --- a/DxArchive_.h +++ b/DxArchive_.h @@ -2,12 +2,12 @@ // // DXライブラリ 通信プログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- -#ifndef DXARCHIVE_H -#define DXARCHIVE_H +#ifndef DX_ARCHIVE_H +#define DX_ARCHIVE_H // インクルード ------------------------------------------------------------------- #include "DxCompileConfig.h" diff --git a/DxBaseFunc.cpp b/DxBaseFunc.cpp index 8382970..96a2a63 100644 --- a/DxBaseFunc.cpp +++ b/DxBaseFunc.cpp @@ -2,7 +2,7 @@ // // DXライブラリ 標準関数の互換関数プログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxBaseFunc.h b/DxBaseFunc.h index 5426a8e..4f91dc7 100644 --- a/DxBaseFunc.h +++ b/DxBaseFunc.h @@ -2,7 +2,7 @@ // // DXライブラリ 標準関数の互換関数プログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxBaseImage.cpp b/DxBaseImage.cpp index d975b37..92b5746 100644 --- a/DxBaseImage.cpp +++ b/DxBaseImage.cpp @@ -2,7 +2,7 @@ // // DXライブラリ BaseImageプログラム // -// Ver 3.23 +// Ver 3.24b // // ---------------------------------------------------------------------------- @@ -205,7 +205,7 @@ struct DDSCOLORTABLE static int LoadTargaImage( STREAMDATA *Src, BASEIMAGE *BaseImage, int GetFormatOnly ) ; // TGA画像の読みこみ #endif -static int LoadDDSImage( STREAMDATA *Src, BASEIMAGE *BaseImage, int GetFormatOnly ) ; // DDS画像の読みこみ + int LoadDDSImage( STREAMDATA *Src, BASEIMAGE *BaseImage, int GetFormatOnly ) ; // DDS画像の読みこみ // アルファマスク用のファイルパスを作成する static int CreateAlphaMaskFilePath( const wchar_t *Path, wchar_t *Dest, size_t BufferBytes ) ; @@ -226,6 +226,7 @@ int ( *DefaultImageLoadFunc[] )( STREAMDATA *Src, BASEIMAGE *BaseImage, int GetF LoadJpegImage , #endif #ifndef DX_NON_PNGREAD + LoadPngImage_Fast , LoadPngImage , #endif #ifndef DX_NON_TGA @@ -274,6 +275,7 @@ extern void InitLoadBaseImageGParam( LOADBASEIMAGE_GPARAM *GParam, int GetFormat GParam->FileStreamDataShred = *GetFileStreamDataShredStruct() ; GParam->MemStreamDataShred = *GetMemStreamDataShredStruct() ; GParam->ConvertPremultipliedAlpha = BASEIM.ConvertPremultipliedAlpha ; + GParam->ConvertNormalFormat = BASEIM.ConvertNormalFormat ; GParam->AlphaTestImageCreateFlag = BASEIM.AlphaTestImageCreateFlag ; GParam->TransColor = BASEIM.TransColor ; } @@ -863,6 +865,49 @@ extern int SaveBaseImageToDds_WCHAR_T( const wchar_t *FilePath, const BASEIMAGE } } else + // 整数型で1チャンネルのビット数が8の場合は処理を分岐 + if( BaseImage->ColorData.ChannelBitDepth == 8 ) + { + // フラグをセット + DDSHead.dwPfFlags = BI_DDPF_RGB ; + + // タイプに合ったピクセルフォーマットをセットする + switch( BaseImage->ColorData.ChannelNum ) + { + case 1 : + DDSHead.dwRGBBitCount = 8 ; + DDSHead.dwRBitMask = 0xff ; + DDSHead.dwGBitMask = 0 ; + DDSHead.dwBBitMask = 0 ; + DDSHead.dwRGBAlphaBitMask = 0 ; + break ; + + case 2 : + DDSHead.dwRGBBitCount = 16 ; + DDSHead.dwRBitMask = 0xff00 ; + DDSHead.dwGBitMask = 0x00ff ; + DDSHead.dwBBitMask = 0 ; + DDSHead.dwRGBAlphaBitMask = 0 ; + break ; + + case 3 : + DDSHead.dwRGBBitCount = 24 ; + DDSHead.dwRBitMask = 0xff0000 ; + DDSHead.dwGBitMask = 0x00ff00 ; + DDSHead.dwBBitMask = 0x0000ff ; + DDSHead.dwRGBAlphaBitMask = 0 ; + break ; + + case 4 : + DDSHead.dwRGBBitCount = 32 ; + DDSHead.dwRBitMask = 0x00ff0000 ; + DDSHead.dwGBitMask = 0x0000ff00 ; + DDSHead.dwBBitMask = 0x000000ff ; + DDSHead.dwRGBAlphaBitMask = 0xff000000 ; + break ; + } + } + else { // 通常型( 整数型タイプの場合 ) @@ -1073,15 +1118,15 @@ extern int CreateGraphImageOrDIBGraph_UseGParam( GParam->StreamDataShred2.Seek( fp, 0, SEEK_END ) ; FileBytes = GParam->StreamDataShred2.Tell( fp ) ; GParam->StreamDataShred2.Seek( fp, 0, SEEK_SET ) ; - FileImage = DXALLOC( FileBytes ) ; + FileImage = DXALLOC( ( size_t )FileBytes ) ; if( FileImage == NULL ) { return -1 ; } - GParam->StreamDataShred2.Read( FileImage, FileBytes, 1, fp ) ; + GParam->StreamDataShred2.Read( FileImage, ( size_t )FileBytes, 1, fp ) ; GParam->StreamDataShred2.Close( fp ) ; - Src.DataPoint = MemStreamOpen( FileImage, FileBytes ) ; + Src.DataPoint = MemStreamOpen( FileImage, ( size_t )FileBytes ) ; if( Src.DataPoint == NULL ) { return -1 ; @@ -1099,6 +1144,12 @@ extern int CreateGraphImageOrDIBGraph_UseGParam( } else { + // データがない場合はエラー + if( DataImage == NULL ) + { + return -1 ; + } + Src.DataPoint = MemStreamOpen( DataImage, DataImageSize ) ; if( Src.DataPoint == NULL ) { @@ -1113,7 +1164,10 @@ extern int CreateGraphImageOrDIBGraph_UseGParam( if( hr == 0 ) { // if( DataImageType != LOADIMAGE_TYPE_FILE ) + { STCLOSE( &Src ) ; + Src.DataPoint = NULL ; + } goto END ; } } @@ -1138,6 +1192,12 @@ END : NS_ReverseGraphImage( &GraphI ) ; } + // もし ConvertNormalFormatBaseImage フラグが立っていたら変換する + if( GParam->ConvertNormalFormat ) + { + NS_ConvertNormalFormatBaseImage( &GraphI, TRUE ) ; + } + // もし乗算済みアルファ画像への変換のフラグが立っていたら変換する if( GParam->ConvertPremultipliedAlpha ) { @@ -1189,7 +1249,11 @@ END : else { // αチャンネルが普通に在る場合は普通にコンバート - NS_ConvertPremulAlphaBaseImage( &GraphI ) ; + if( NS_ConvertPremulAlphaBaseImage( &GraphI ) < 0 ) + { + DXFREE( GraphI.GraphData ) ; + goto ERR ; + } } } @@ -1197,6 +1261,7 @@ END : if( BmpFlag != FALSE ) { #ifndef WINDOWS_DESKTOP_OS + DXFREE( GraphI.GraphData ) ; goto ERR ; #else // BMPデータ を欲しかった場合は GraphImage データを BMP データに変換する @@ -1476,29 +1541,58 @@ extern int CreateGraphImageType2_UseGParam( CREATEBASEIMAGETYPE2_GPARAM *GParam, return 0 ; } - // 環境依存のデフォルト関数を噛ませる - for( i = 0 ; DefaultImageLoadFunc_PF[ i ] != NULL ; i ++ ) + if( BASEIM.PlatformLoadFunctionAfterFlag == FALSE ) + { + // 環境依存のデフォルト関数を噛ませる + for( i = 0 ; DefaultImageLoadFunc_PF[ i ] != NULL ; i ++ ) + { + STSEEK( Src, 0, STREAM_SEEKTYPE_SET ) ; + _MEMSET( Dest, 0, sizeof( BASEIMAGE ) ) ; + if( DefaultImageLoadFunc_PF[ i ]( Src, Dest, GParam->GetFormatOnly ) == 0 ) break ; + } + // 読み込めていたら終了 + if( DefaultImageLoadFunc_PF[ i ] != NULL ) + { + return 0 ; + } + } + + // 次にデフォルト関数を噛ませる + for( i = 0 ; DefaultImageLoadFunc[i] != NULL ; i ++ ) { STSEEK( Src, 0, STREAM_SEEKTYPE_SET ) ; _MEMSET( Dest, 0, sizeof( BASEIMAGE ) ) ; - if( DefaultImageLoadFunc_PF[ i ]( Src, Dest, GParam->GetFormatOnly ) == 0 ) break ; + if( DefaultImageLoadFunc[i]( Src, Dest, GParam->GetFormatOnly ) == 0 ) break ; } // 読み込めていたら終了 - if( DefaultImageLoadFunc_PF[ i ] != NULL ) + if( DefaultImageLoadFunc[ i ] != NULL ) { return 0 ; } - // 次にデフォルト関数を噛ませる - for( i = 0 ; DefaultImageLoadFunc[i] != NULL ; i ++ ) + // 環境依存のデフォルト関数を後から実行する設定ではなかった場合はここで終了 + if( BASEIM.PlatformLoadFunctionAfterFlag == FALSE ) { - STSEEK( Src, 0, STREAM_SEEKTYPE_SET ) ; - _MEMSET( Dest, 0, sizeof( BASEIMAGE ) ) ; - if( DefaultImageLoadFunc[i]( Src, Dest, GParam->GetFormatOnly ) == 0 ) break ; + return -1 ; } + else + { + // 後から環境依存のデフォルト関数を噛ませる + for( i = 0 ; DefaultImageLoadFunc_PF[ i ] != NULL ; i ++ ) + { + STSEEK( Src, 0, STREAM_SEEKTYPE_SET ) ; + _MEMSET( Dest, 0, sizeof( BASEIMAGE ) ) ; + if( DefaultImageLoadFunc_PF[ i ]( Src, Dest, GParam->GetFormatOnly ) == 0 ) break ; + } + // 読み込めていたら終了 + if( DefaultImageLoadFunc_PF[ i ] != NULL ) + { + return 0 ; + } - // 終了 - return DefaultImageLoadFunc[i] == NULL ? -1 : 0 ; + // 終了 + return DefaultImageLoadFunc_PF[i] == NULL ? -1 : 0 ; + } } // 汎用読み込み処理によるグラフィックイメージ構築関数( 0:成功 -1:失敗 ) @@ -3975,7 +4069,7 @@ static int LoadDxLibBaseImage( STREAMDATA *Stream, BASEIMAGE *BaseImage, int Get { return -1 ; } - if( sstr->Read( BaseImage->GraphData, ImageBytes, 1, sp ) <= 0 ) + if( sstr->Read( BaseImage->GraphData, ( size_t )ImageBytes, 1, sp ) <= 0 ) { DXFREE( BaseImage->GraphData ) ; BaseImage->GraphData = NULL ; @@ -4964,7 +5058,7 @@ static DDSCOLORTABLE _DDSColorTable[] = } ; // DDS画像の読みこみ -static int LoadDDSImage( STREAMDATA *Src, BASEIMAGE *BaseImage, int GetFormatOnly ) +int LoadDDSImage( STREAMDATA *Src, BASEIMAGE *BaseImage, int GetFormatOnly ) { DWORD_PTR sp ; STREAMDATASHRED *sstr ; @@ -5117,8 +5211,22 @@ static int LoadDDSImage( STREAMDATA *Src, BASEIMAGE *BaseImage, int GetFormatOnl ( ( head.dwPfFlags & BI_DDPF_RGB ) == BI_DDPF_RGB ) ) { // カラーフォーマットのセット - NS_CreateColorData( &BaseImage->ColorData, ( int )head.dwRGBBitCount, - head.dwRBitMask, head.dwGBitMask, head.dwBBitMask, head.dwRGBAlphaBitMask, 0, 0, FALSE ) ; + if( head.dwRGBBitCount == 8 && head.dwRBitMask == 0xff ) + { + NS_CreateColorData( &BaseImage->ColorData, ( int )head.dwRGBBitCount, + head.dwRBitMask, head.dwGBitMask, head.dwBBitMask, head.dwRGBAlphaBitMask, 1, 8, FALSE ) ; + } + else + if( head.dwRGBBitCount == 16 && head.dwRBitMask == 0xff00 && head.dwGBitMask == 0x00ff ) + { + NS_CreateColorData( &BaseImage->ColorData, ( int )head.dwRGBBitCount, + head.dwRBitMask, head.dwGBitMask, head.dwBBitMask, head.dwRGBAlphaBitMask, 2, 8, FALSE ) ; + } + else + { + NS_CreateColorData( &BaseImage->ColorData, ( int )head.dwRGBBitCount, + head.dwRBitMask, head.dwGBitMask, head.dwBBitMask, head.dwRGBAlphaBitMask, 0, 0, FALSE ) ; + } formatget = 1 ; } @@ -5875,13 +5983,23 @@ extern int NS_ConvertNormalFormatBaseImage( BASEIMAGE *BaseImage, int ReleaseOri if( BaseImage->ColorData.Format == DX_BASEIMAGE_FORMAT_NORMAL ) return 0 ; + // 非対応の圧縮形式の場合はエラー + if( BaseImage->ColorData.Format != DX_BASEIMAGE_FORMAT_DXT1 && + BaseImage->ColorData.Format != DX_BASEIMAGE_FORMAT_DXT2 && + BaseImage->ColorData.Format != DX_BASEIMAGE_FORMAT_DXT3 && + BaseImage->ColorData.Format != DX_BASEIMAGE_FORMAT_DXT4 && + BaseImage->ColorData.Format != DX_BASEIMAGE_FORMAT_DXT5 ) + { + return -1 ; + } + // データの数をセット GraphNum = ( DWORD )( BaseImage->GraphDataCount == 0 ? 1 : 6 ) ; // 新しいデータを格納するメモリ領域の確保 NewPixelByte = 4 ; - NewPitch = BaseImage->Width * NewPixelByte ; - NewImageSize = NewPitch * BaseImage->Height ; + NewPitch = ( BaseImage->Width + 3 ) / 4 * 4 * NewPixelByte ; + NewImageSize = ( BaseImage->Height + 3 ) / 4 * 4 * NewPitch ; NewBuffer = DXALLOC( NewImageSize * GraphNum ) ; if( NewBuffer == NULL ) { @@ -5890,8 +6008,8 @@ extern int NS_ConvertNormalFormatBaseImage( BASEIMAGE *BaseImage, int ReleaseOri } // フォーマットによって処理を分岐 - pw = ( DWORD )( BaseImage->Width / 4 ) ; - ph = ( DWORD )( BaseImage->Height / 4 ) ; + pw = ( DWORD )( ( BaseImage->Width + 3 ) / 4 ) ; + ph = ( DWORD )( ( BaseImage->Height + 3 ) / 4 ) ; for( k = 0 ; k < GraphNum ; k ++ ) { bdstb = ( BYTE * )NewBuffer + NewImageSize * k ; @@ -8055,12 +8173,6 @@ extern int NS_DrawLineBaseImage( BASEIMAGE *BaseImage, int x1, int y1, int x2, i {\ x2 = Dx + x ; x1 = -Dx + x ; y1 = Dy + y ;\ DRAWCIRCLEMEMIMG_FILL_SHRED_ND( DRAW, DESTADDNUM )\ -\ - x2 = Dy + x ; x1 = -Dy + x ; y1 = Dx + y ;\ - DRAWCIRCLEMEMIMG_FILL_SHRED_ND( DRAW, DESTADDNUM )\ -\ - x2 = Dy + x ; x1 = -Dy + x ; y1 = -Dx + y;\ - DRAWCIRCLEMEMIMG_FILL_SHRED_ND( DRAW, DESTADDNUM )\ \ if( F >= 0 )\ {\ @@ -11767,6 +11879,102 @@ extern int NS_GraphColorMatchBltVer2( void *DestGraphData, int DestPitch, #endif return 0 ; } + else + if( DColor.ColorBitDepth == 32 && + DColor.AlphaMask == 0xff000000 && + DColor.RedMask == 0x000000ff && + DColor.GreenMask == 0x0000ff00 && + DColor.BlueMask == 0x00ff0000 ) + { + if( SColor.AlphaWidth == 0 ) + { + do + { + w = BltWidth ; + do + { + BYTE *Pal = ( BYTE * )&Palette[ *Src ] ; + Dest[ 0 ] = Pal[ 2 ] ; + Dest[ 1 ] = Pal[ 1 ] ; + Dest[ 2 ] = Pal[ 0 ] ; + Dest[ 3 ] = 255 ; + Dest += 4 ; + Src ++ ; + }while( -- w ) ; + Dest += DestAddPitch ; + Src += SrcAddPitch ; + }while( -- BltHeight ) ; + } + else + { + do + { + w = BltWidth ; + do + { + BYTE *Pal = ( BYTE * )&Palette[ *Src ] ; + Dest[ 0 ] = Pal[ 2 ] ; + Dest[ 1 ] = Pal[ 1 ] ; + Dest[ 2 ] = Pal[ 0 ] ; + Dest[ 3 ] = Pal[ 3 ] ; + Dest += 4 ; + Src ++ ; + }while( -- w ) ; + Dest += DestAddPitch ; + Src += SrcAddPitch ; + }while( -- BltHeight ) ; + } + + return 0 ; + } + else + if( DColor.ColorBitDepth == 32 && + DColor.AlphaMask == 0xff000000 && + DColor.RedMask == 0x00ff0000 && + DColor.GreenMask == 0x0000ff00 && + DColor.BlueMask == 0x000000ff ) + { + if( SColor.AlphaWidth == 0 ) + { + do + { + w = BltWidth ; + do + { + BYTE *Pal = ( BYTE * )&Palette[ *Src ] ; + Dest[ 0 ] = Pal[ 0 ] ; + Dest[ 1 ] = Pal[ 1 ] ; + Dest[ 2 ] = Pal[ 2 ] ; + Dest[ 3 ] = 255 ; + Dest += 4 ; + Src ++ ; + }while( -- w ) ; + Dest += DestAddPitch ; + Src += SrcAddPitch ; + }while( -- BltHeight ) ; + } + else + { + do + { + w = BltWidth ; + do + { + BYTE *Pal = ( BYTE * )&Palette[ *Src ] ; + Dest[ 0 ] = Pal[ 0 ] ; + Dest[ 1 ] = Pal[ 1 ] ; + Dest[ 2 ] = Pal[ 2 ] ; + Dest[ 3 ] = Pal[ 3 ] ; + Dest += 4 ; + Src ++ ; + }while( -- w ) ; + Dest += DestAddPitch ; + Src += SrcAddPitch ; + }while( -- BltHeight ) ; + } + + return 0 ; + } } else if( TransColorAlphaTestFlag == TRUE && @@ -12218,6 +12426,120 @@ extern int NS_GraphColorMatchBltVer2( void *DestGraphData, int DestPitch, } } else + if( TransColorAlphaTestFlag == FALSE && + SColor.ColorBitDepth == 24 && + SColor.RedMask == 0x0000ff && + SColor.GreenMask == 0x00ff00 && + SColor.BlueMask == 0xff0000 ) + { + BYTE *Dest ; + BYTE *Src ; + int DestAddPitch, SrcAddPitch ; + int w ; + + DestAddPitch = DestPitch - BltWidth * DColor.PixelByte ; + SrcAddPitch = SrcPitch - BltWidth * SColor.PixelByte ; + + Dest = ( BYTE * )DestGraphData + DestPoint.y * DestPitch + DestPoint.x * DColor.PixelByte ; + Src = ( BYTE * )SrcGraphData + SrcRect->top * SrcPitch + SrcRect->left * SColor.PixelByte ; + + if( DColor.ColorBitDepth == 16 && + DColor.AlphaMask == 0x00000000 && + DColor.RedMask == 0x0000f800 && + DColor.GreenMask == 0x000007e0 && + DColor.BlueMask == 0x0000001f ) + { + do + { + w = BltWidth ; + do + { + *((WORD *)Dest) = ( WORD )( + ((Src[2] >> 3) ) | + ((Src[1] >> 2) << 5) | + ((Src[0] >> 3) << 11) ) ; + Dest += 2 ; + Src += 3 ; + }while( -- w ) ; + Dest += DestAddPitch ; + Src += SrcAddPitch ; + }while( -- BltHeight ) ; + return 0 ; + } + else + if( DColor.ColorBitDepth == 16 && +// DColor.AlphaMask == 0x00000000 && + DColor.RedMask == 0x00007c00 && + DColor.GreenMask == 0x000003e0 && + DColor.BlueMask == 0x0000001f ) + { + do + { + w = BltWidth ; + do + { + *((WORD *)Dest) = ( WORD )( + ((Src[2] >> 3) ) | + ((Src[1] >> 3) << 5) | + ((Src[0] >> 3) << 10) | 0x8000 ) ; + Dest += 2 ; + Src += 3 ; + }while( -- w ) ; + Dest += DestAddPitch ; + Src += SrcAddPitch ; + }while( -- BltHeight ) ; + return 0 ; + } + else + if( DColor.ColorBitDepth == 32 && +// DColor.AlphaMask == 0x00000000 && + DColor.RedMask == 0x00ff0000 && + DColor.GreenMask == 0x0000ff00 && + DColor.BlueMask == 0x000000ff ) + { + do + { + w = BltWidth ; + do + { + Dest[ 0 ] = Src[ 2 ] ; + Dest[ 1 ] = Src[ 1 ] ; + Dest[ 2 ] = Src[ 0 ] ; + Dest[ 3 ] = 0xff ; + Dest += 4 ; + Src += 3 ; + }while( -- w ) ; + Dest += DestAddPitch ; + Src += SrcAddPitch ; + }while( -- BltHeight ) ; + return 0 ; + } + else + if( DColor.ColorBitDepth == 32 && +// DColor.AlphaMask == 0x00000000 && + DColor.RedMask == 0x000000ff && + DColor.GreenMask == 0x0000ff00 && + DColor.BlueMask == 0x00ff0000 ) + { + do + { + w = BltWidth ; + do + { + Dest[ 0 ] = Src[ 0 ] ; + Dest[ 1 ] = Src[ 1 ] ; + Dest[ 2 ] = Src[ 2 ] ; + Dest[ 3 ] = 0xff ; + Dest += 4 ; + Src += 3 ; + }while( -- w ) ; + Dest += DestAddPitch ; + Src += SrcAddPitch ; + }while( -- BltHeight ) ; + return 0 ; + } + } + else if( TransColorAlphaTestFlag == TRUE && SColor.ColorBitDepth == 24 && SColor.RedMask == 0xff0000 && @@ -12408,6 +12730,107 @@ extern int NS_GraphColorMatchBltVer2( void *DestGraphData, int DestPitch, } } else + if( TransColorAlphaTestFlag == TRUE && + SColor.ColorBitDepth == 24 && + SColor.RedMask == 0x0000ff && + SColor.GreenMask == 0x00ff00 && + SColor.BlueMask == 0xff0000 ) + { + BYTE *Dest ; + BYTE *Src ; + int DestAddPitch, SrcAddPitch ; + int w, Alpha ; + union + { + unsigned int dword ; + unsigned char byte[4] ; + } SrcColor ; + + DestAddPitch = DestPitch - BltWidth * DColor.PixelByte ; + SrcAddPitch = SrcPitch - BltWidth * SColor.PixelByte ; + + Dest = ( BYTE * )DestGraphData + DestPoint.y * DestPitch + DestPoint.x * DColor.PixelByte ; + Src = ( BYTE * )SrcGraphData + SrcRect->top * SrcPitch + SrcRect->left * SColor.PixelByte ; + + if( DColor.ColorBitDepth == 16 && + DColor.AlphaMask == 0x00008000 && + DColor.RedMask == 0x00007c00 && + DColor.GreenMask == 0x000003e0 && + DColor.BlueMask == 0x0000001f ) + { + do + { + w = BltWidth ; + do + { + SrcColor.dword = ( unsigned int )( ( Src[0] << 16 ) | ( Src[ 1 ] << 8 ) | ( Src[ 2 ] ) ) ; + Alpha = 0x8000 ; + if( SrcColor.dword == TransColor ) Alpha = 0 ; + *((WORD *)Dest) = ( WORD )( + ((SrcColor.byte[2] >> 3) << 10) | + ((SrcColor.byte[1] >> 3) << 5) | + ((SrcColor.byte[0] >> 3) ) | + Alpha ) ; + Dest += 2 ; + Src += 3 ; + }while( -- w ) ; + Dest += DestAddPitch ; + Src += SrcAddPitch ; + }while( -- BltHeight ) ; + return 0 ; + } + else + if( DColor.ColorBitDepth == 32 && + DColor.AlphaMask == 0xff000000 && + DColor.RedMask == 0x00ff0000 && + DColor.GreenMask == 0x0000ff00 && + DColor.BlueMask == 0x000000ff ) + { + do + { + w = BltWidth ; + do + { + SrcColor.dword = ( unsigned int )( ( Src[0] << 16 ) | ( Src[ 1 ] << 8 ) | ( Src[ 2 ] ) ) ; + Alpha = 0xff000000 ; + if( SrcColor.dword == TransColor ) Alpha = 0 ; + *((DWORD *)Dest) = SrcColor.dword | Alpha ; + Dest += 4 ; + Src += 3 ; + }while( -- w ) ; + Dest += DestAddPitch ; + Src += SrcAddPitch ; + }while( -- BltHeight ) ; + return 0 ; + } + else + if( DColor.ColorBitDepth == 32 && + DColor.AlphaMask == 0xff000000 && + DColor.RedMask == 0x000000ff && + DColor.GreenMask == 0x0000ff00 && + DColor.BlueMask == 0x00ff0000 ) + { + do + { + w = BltWidth ; + do + { + SrcColor.dword = ( unsigned int )( ( Src[0] << 16 ) | ( Src[ 1 ] << 8 ) | ( Src[ 2 ] ) ) ; + Dest[ 0 ] = Src[ 0 ] ; + Dest[ 1 ] = Src[ 1 ] ; + Dest[ 2 ] = Src[ 2 ] ; + Dest[ 3 ] = SrcColor.dword == TransColor ? 0 : 0xff ; + Dest += 4 ; + Src += 3 ; + }while( -- w ) ; + Dest += DestAddPitch ; + Src += SrcAddPitch ; + }while( -- BltHeight ) ; + + return 0 ; + } + } + else if( TransColorAlphaTestFlag == FALSE && AlphaFlag == FALSE && SColor.ColorBitDepth == 32 && @@ -14715,6 +15138,30 @@ extern int NS_GetColor2( unsigned int Color, int *Red, int *Green, int *Blue ) // 指定のピクセルフォーマットに対応したカラー値を得る extern unsigned int NS_GetColor3( const COLORDATA * ColorData, int Red, int Green, int Blue, int Alpha ) { + if( ColorData->ChannelNum == 1 && + ColorData->ChannelBitDepth == 8 ) + { + return ( unsigned int )Red ; + } + else + if( ColorData->ChannelNum == 2 && + ColorData->ChannelBitDepth == 8 ) + { + return ( unsigned int )Red | ( unsigned int )( Green << 8 ) ; + } + else + if( ColorData->ChannelNum == 3 && + ColorData->ChannelBitDepth == 8 ) + { + return ( unsigned int )Red | ( unsigned int )( Green << 8 ) | ( unsigned int )( Blue << 16 ) ; + } + else + if( ColorData->ChannelNum == 4 && + ColorData->ChannelBitDepth == 8 ) + { + return ( unsigned int )Red | ( unsigned int )( Green << 8 ) | ( unsigned int )( Blue << 16 ) | ( unsigned int )( Alpha << 24 ) ; + } + else // 8ビットカラーの場合はパレットから一番近い色を探す if( ColorData->PixelByte == 1 ) { @@ -15130,6 +15577,41 @@ extern int NS_CreateBGRA8ColorData( COLORDATA *ColorDataBuf ) return 0 ; } +// BGR8カラーのカラーフォーマットを構築する +extern int NS_CreateBGR8ColorData( COLORDATA *ColorDataBuf ) +{ + ColorDataBuf->Format = DX_BASEIMAGE_FORMAT_NORMAL ; + ColorDataBuf->ChannelNum = 0 ; + ColorDataBuf->ChannelBitDepth = 0 ; + ColorDataBuf->FloatTypeFlag = FALSE ; + ColorDataBuf->ColorBitDepth = 24 ; + ColorDataBuf->PixelByte = 3 ; + ColorDataBuf->MaxPaletteNo = 0 ; + + ColorDataBuf->NoneLoc = 0 ; + ColorDataBuf->NoneMask = 0x00000000 ; + ColorDataBuf->NoneWidth = 0 ; + + ColorDataBuf->AlphaLoc = 0 ; + ColorDataBuf->AlphaMask = 0x00000000 ; + ColorDataBuf->AlphaWidth = 0 ; + + ColorDataBuf->RedLoc = 0 ; + ColorDataBuf->RedMask = 0x000000ff ; + ColorDataBuf->RedWidth = 8 ; + + ColorDataBuf->GreenLoc = 8 ; + ColorDataBuf->GreenMask = 0x0000ff00 ; + ColorDataBuf->GreenWidth = 8 ; + + ColorDataBuf->BlueLoc = 16 ; + ColorDataBuf->BlueMask = 0x00ff0000 ; + ColorDataBuf->BlueWidth = 8 ; + + // 終了 + return 0 ; +} + // ARGB4カラーのカラー情報を構築する extern int NS_CreateARGB4ColorData( COLORDATA * ColorDataBuf ) { @@ -15413,12 +15895,25 @@ extern int NS_CreatePal8ColorData( COLORDATA * ColorDataBuf, int UseAlpha ) ColorDataBuf->BlueMask = 0x000000ff ; ColorDataBuf->BlueWidth = 8 ; - for( i = 0 ; i < 256 ; i ++ ) + if( UseAlpha ) { - ColorDataBuf->Palette[i].Red = ( BYTE )( ( ( i >> 0 ) & 7 ) * 255 / 7 ) ; - ColorDataBuf->Palette[i].Green = ( BYTE )( ( ( i >> 3 ) & 7 ) * 255 / 7 ) ; - ColorDataBuf->Palette[i].Blue = ( BYTE )( ( ( i >> 5 ) & 3 ) * 255 / 3 ) ; - ColorDataBuf->Palette[i].Alpha = 0 ; + for( i = 0 ; i < 256 ; i ++ ) + { + ColorDataBuf->Palette[i].Red = ( BYTE )( ( ( i >> 0 ) & 7 ) * 255 / 7 ) ; + ColorDataBuf->Palette[i].Green = ( BYTE )( ( ( i >> 3 ) & 7 ) * 255 / 7 ) ; + ColorDataBuf->Palette[i].Blue = ( BYTE )( ( ( i >> 5 ) & 3 ) * 255 / 3 ) ; + ColorDataBuf->Palette[i].Alpha = 255 ; + } + } + else + { + for( i = 0 ; i < 256 ; i ++ ) + { + ColorDataBuf->Palette[i].Red = ( BYTE )( ( ( i >> 0 ) & 7 ) * 255 / 7 ) ; + ColorDataBuf->Palette[i].Green = ( BYTE )( ( ( i >> 3 ) & 7 ) * 255 / 7 ) ; + ColorDataBuf->Palette[i].Blue = ( BYTE )( ( ( i >> 5 ) & 3 ) * 255 / 3 ) ; + ColorDataBuf->Palette[i].Alpha = 0 ; + } } // 終了 @@ -15608,6 +16103,27 @@ extern int NS_SetUsePremulAlphaConvertLoad( int UseFlag ) return 0 ; } +// 画像ファイル読み込み時に乗算済みアルファ画像に変換するかどうかを取得する( TRUE:変換処理を行う FALSE:変換処理を行わない( デフォルト ) ) +extern int NS_GetUsePremulAlphaConvertLoad( void ) +{ + return BASEIM.ConvertPremultipliedAlpha ; +} + +// 画像ファイル読み込み時に DX_BASEIMAGE_FORMAT_NORMAL 以外の形式のイメージを DX_BASEIMAGE_FORMAT_NORMAL 形式のイメージに変換するかどうかを設定する( TRUE:変換処理を行う FALSE:変換処理を行なわない( デフォルト ) ) +extern int NS_SetUseConvertNormalFormatLoad( int UseFlag ) +{ + BASEIM.ConvertNormalFormat = UseFlag ; + + // 終了 + return 0 ; +} + +// 画像ファイル読み込み時に DX_BASEIMAGE_FORMAT_NORMAL 以外の形式のイメージを DX_BASEIMAGE_FORMAT_NORMAL 形式のイメージに変換するかどうかを取得する( TRUE:変換処理を行う FALSE:変換処理を行なわない( デフォルト ) ) +extern int NS_GetUseConvertNormalFormatLoad( void ) +{ + return BASEIM.ConvertNormalFormat ; +} + #ifndef DX_NON_NAMESPACE } diff --git a/DxBaseImage.h b/DxBaseImage.h index 6ba6a8f..037dc39 100644 --- a/DxBaseImage.h +++ b/DxBaseImage.h @@ -2,7 +2,7 @@ // // DXライブラリ BaseImageプログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -56,6 +56,7 @@ struct LOADBASEIMAGE_GPARAM STREAMDATASHRED MemStreamDataShred ; // メモリデータアクセス用関数 int ConvertPremultipliedAlpha ; // 読み込み処理後に乗算済みアルファの画像に変換するかどうかのフラグ( TRUE:変換処理を行う FALSE:変換処理を行わない ) + int ConvertNormalFormat ; // 読み込み処理後に DX_BASEIMAGE_FORMAT_NORMAL 以外の形式のイメージを DX_BASEIMAGE_FORMAT_NORMAL 形式のイメージに変換するかどうかのフラグ( TRUE:変換処理を行う FALSE:変換処理を行なわない ) int AlphaTestImageCreateFlag ; // アルファテストを使用するグラフィックを作成するかどうかのフラグ( TRUE:αテストを使用する FALSE:αテストは使用しない ) DWORD TransColor ; // 透過色( AlphaTestImageCreateFlag が TRUE の場合用 ) } ; @@ -83,6 +84,8 @@ struct BASEIMAGEMANAGE int LowLoadFlag ; // グラフィックの低速読み込みを行うかフラグ int ImageShavedMode ; // 減色時の拡散パターン int ConvertPremultipliedAlpha ; // 読み込み処理後に乗算済みアルファの画像に変換するかどうかのフラグ( TRUE:変換処理を行う FALSE:変換処理を行わない ) + int ConvertNormalFormat ; // 読み込み処理後に DX_BASEIMAGE_FORMAT_NORMAL 以外の形式のイメージを DX_BASEIMAGE_FORMAT_NORMAL 形式のイメージに変換するかどうかのフラグ( TRUE:変換処理を行う FALSE:変換処理を行なわない ) + int PlatformLoadFunctionAfterFlag ; // 環境依存の読み込み関数を後に実行するかどうか( TRUE:後に実行する FALSE:先に実行する ) int AlphaTestImageCreateFlag ; // アルファテストを使用するグラフィックを作成するかどうかのフラグ( TRUE:αテストを使用する FALSE:αテストは使用しない ) DWORD TransColor ; // 透過色( AlphaTestImageCreateFlag が TRUE の場合用 ) diff --git a/DxChar.cpp b/DxChar.cpp index 4a67626..e4826ec 100644 --- a/DxChar.cpp +++ b/DxChar.cpp @@ -2,7 +2,7 @@ // // DXライブラリ 文字コード関係プログラム // -// Ver 3.23 +// Ver 3.24b // // ---------------------------------------------------------------------------- @@ -1926,6 +1926,11 @@ __inline void ConvString_DestCode_SHIFTJIS( BYTE *&DestStr, DWORD &DestCode, siz DestSize += 2 ; } else + if( CharCode == 0 && DestCode != 0 ) + { + // 変換元の文字コードが変換先の文字フォーマットに存在しなかった場合は何もしない + } + else { if( DestStr != NULL ) { @@ -3171,6 +3176,12 @@ extern int ConvString( const char *Src, int SrcStrLength, int SrcCharCodeFormat, DestCode = ConvCharCode_inline( SrcCode, SrcCharCodeFormat, DestCharCodeFormat ) ; + // 変換元の文字コードが変換先の文字フォーマットに存在しなかった場合は何もせず次のループに移行 + if( DestCode == 0 && SrcCode != 0 ) + { + continue ; + } + WriteBytes = PutCharCode_BufferBytes_inline( DestCode, DestCharCodeFormat, ( char * )DestStr, BufferBytes - DestSize ) ; if( WriteBytes == 0 || ( DestStr != NULL && BufferBytes - DestSize < WriteBytes + NulWriteBytes ) ) { @@ -4715,7 +4726,7 @@ extern const char *CL_strchr( int CharCodeFormat, const char *Str, DWORD CharCod switch( GetCharCodeFormatUnitSize_inline( CharCodeFormat ) ) { case 1 : - for( i = 0 ; ( ( BYTE * )Str )[ i ] != 0 ; i ++ ) + for( i = 0 ; ( ( BYTE * )Str )[ i ] != 0 ; ) { StrCharCode = GetCharCode_inline( ( const char * )&( ( BYTE * )Str )[ i ], CharCodeFormat, &CodeBytes, j ) ; if( StrCharCode == CharCode ) @@ -4723,15 +4734,19 @@ extern const char *CL_strchr( int CharCodeFormat, const char *Str, DWORD CharCod return ( const char * )&( ( BYTE * )Str )[ i ] ; } - if( CodeBytes > 1 ) + if( CodeBytes == 0 ) { i ++ ; } + else + { + i += CodeBytes; + } } return NULL ; case 2 : - for( i = 0 ; ( ( WORD * )Str )[ i ] != 0 ; i ++ ) + for( i = 0 ; ( ( WORD * )Str )[ i ] != 0 ; ) { StrCharCode = GetCharCode_inline( ( const char * )&( ( WORD * )Str )[ i ], CharCodeFormat, &CodeBytes, j ) ; if( StrCharCode == CharCode ) @@ -4739,21 +4754,34 @@ extern const char *CL_strchr( int CharCodeFormat, const char *Str, DWORD CharCod return ( const char * )&( ( WORD * )Str )[ i ] ; } - if( CodeBytes > 2 ) + if( CodeBytes <= 2 ) { i ++ ; } + else + { + i += CodeBytes / 2 ; + } } return NULL ; case 4 : - for( i = 0 ; ( ( DWORD * )Str )[ i ] != 0 ; i ++ ) + for( i = 0 ; ( ( DWORD * )Str )[ i ] != 0 ; ) { StrCharCode = GetCharCode_inline( ( const char * )&( ( DWORD * )Str )[ i ], CharCodeFormat, &CodeBytes, j ) ; if( StrCharCode == CharCode ) { return ( const char * )&( ( DWORD * )Str )[ i ] ; } + + if( CodeBytes <= 4 ) + { + i ++ ; + } + else + { + i += CodeBytes / 4 ; + } } return NULL ; } @@ -4828,7 +4856,7 @@ extern const char *CL_strrchr( int CharCodeFormat, const char *Str, DWORD CharCo switch( GetCharCodeFormatUnitSize_inline( CharCodeFormat ) ) { case 1 : - for( i = 0 ; ( ( BYTE * )Str )[ i ] != 0 ; i ++ ) + for( i = 0 ; ( ( BYTE * )Str )[ i ] != 0 ; ) { StrCharCode = GetCharCode_inline( ( const char * )&( ( BYTE * )Str )[ i ], CharCodeFormat, &CodeBytes, j ) ; if( StrCharCode == CharCode ) @@ -4836,15 +4864,19 @@ extern const char *CL_strrchr( int CharCodeFormat, const char *Str, DWORD CharCo lastp = ( const char * )&( ( BYTE * )Str )[ i ] ; } - if( CodeBytes > 1 ) + if( CodeBytes == 0 ) { i ++ ; } + else + { + i += CodeBytes; + } } break ; case 2 : - for( i = 0 ; ( ( WORD * )Str )[ i ] != 0 ; i ++ ) + for( i = 0 ; ( ( WORD * )Str )[ i ] != 0 ; ) { StrCharCode = GetCharCode_inline( ( const char * )&( ( WORD * )Str )[ i ], CharCodeFormat, &CodeBytes, j ) ; if( StrCharCode == CharCode ) @@ -4852,21 +4884,34 @@ extern const char *CL_strrchr( int CharCodeFormat, const char *Str, DWORD CharCo lastp = ( const char * )&( ( WORD * )Str )[ i ] ; } - if( CodeBytes > 2 ) + if( CodeBytes <= 2 ) { i ++ ; } + else + { + i += CodeBytes / 2 ; + } } break ; case 4 : - for( i = 0 ; ( ( DWORD * )Str )[ i ] != 0 ; i ++ ) + for( i = 0 ; ( ( DWORD * )Str )[ i ] != 0 ; ) { StrCharCode = GetCharCode_inline( ( const char * )&( ( DWORD * )Str )[ i ], CharCodeFormat, &CodeBytes, j ) ; if( StrCharCode == CharCode ) { lastp = ( const char * )&( ( DWORD * )Str )[ i ] ; } + + if( CodeBytes <= 4 ) + { + i ++ ; + } + else + { + i += CodeBytes / 4 ; + } } break ; } diff --git a/DxChar.h b/DxChar.h index f1882f5..4e66b7a 100644 --- a/DxChar.h +++ b/DxChar.h @@ -2,7 +2,7 @@ // // DXライブラリ 文字コード関係プログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxCharCodeTable.cpp b/DxCharCodeTable.cpp index de89d99..7bfeba5 100644 --- a/DxCharCodeTable.cpp +++ b/DxCharCodeTable.cpp @@ -2,7 +2,7 @@ // // DXライブラリ キャラクタコードテーブル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxCompileConfig.h b/DxCompileConfig.h index feefb98..9705fe4 100644 --- a/DxCompileConfig.h +++ b/DxCompileConfig.h @@ -2,7 +2,7 @@ // // DXライブラリ コンパイルコンフィグヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ---------------------------------------------------------------------------- @@ -192,6 +192,9 @@ // Live2D Cubism 4 関連の機能を使用しない場合は次のコメントを外してください #define DX_NON_LIVE2D_CUBISM4 +// ウィンドウを作成しない場合は次のコメントを外してください +//#define DX_NON_WINDOW + #ifndef __cplusplus #ifndef DX_COMPILE_TYPE_C_LANGUAGE #define DX_COMPILE_TYPE_C_LANGUAGE @@ -272,8 +275,24 @@ #define DX_NON_OPUS #define DX_NON_MODEL #define DX_NON_SHADERCODE_BINARY +#define DX_NON_INPUTSTRING #endif +#ifdef DX_NON_WINDOW + #ifndef DX_NON_GRAPHICS + #define DX_NON_GRAPHICS + #endif + #ifndef DX_NON_SOUND + #define DX_NON_SOUND + #endif + #ifndef DX_NON_INPUT + #define DX_NON_INPUT + #endif + #ifndef DX_NON_NETWORK + #define DX_NON_NETWORK + #endif +#endif // DX_NON_WINDOW + #ifdef DX_NON_GRAPHICS #ifndef DX_NON_FONT #define DX_NON_FONT diff --git a/DxDataType.h b/DxDataType.h index a966517..9f31c51 100644 --- a/DxDataType.h +++ b/DxDataType.h @@ -2,7 +2,7 @@ // // DXライブラリ データタイプ定義ヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxDataTypeAndroid.h b/DxDataTypeAndroid.h index 91321aa..cefc1b6 100644 --- a/DxDataTypeAndroid.h +++ b/DxDataTypeAndroid.h @@ -1,13 +1,13 @@ // ------------------------------------------------------------------------------- // -// DXライブラリ Nintendo Switch用データタイプ定義ヘッダファイル +// DXライブラリ Android用データタイプ定義ヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- -#ifndef DX_DATATYPENSW_H -#define DX_DATATYPENSW_H +#ifndef DX_DATATYPEANDR_H +#define DX_DATATYPEANDR_H // インクルード ------------------------------------------------------------------ #include "DxCompileConfig.h" @@ -228,4 +228,4 @@ typedef struct tagBITMAPINFO // // #endif // DX_NON_NAMESPACE -#endif // DX_DATATYPENSW_H +#endif // DX_DATATYPEANDR_H diff --git a/DxDataTypeWin.h b/DxDataTypeWin.h index f8acd56..98320da 100644 --- a/DxDataTypeWin.h +++ b/DxDataTypeWin.h @@ -2,7 +2,7 @@ // // DXライブラリ Windows用データタイプ定義ヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxDataTypeiOS.h b/DxDataTypeiOS.h index cd88580..430fe4b 100644 --- a/DxDataTypeiOS.h +++ b/DxDataTypeiOS.h @@ -2,7 +2,7 @@ // // DXライブラリ iOS用データタイプ定義ヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxFile.cpp b/DxFile.cpp index 2a00a68..6946744 100644 --- a/DxFile.cpp +++ b/DxFile.cpp @@ -2,7 +2,7 @@ // // DXライブラリ ファイルアクセスプログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -95,6 +95,7 @@ int NotUseDXArchive ; // ファイルハンドル関数 static int InitializeFileHandle( HANDLEINFO *HandleInfo ) ; // ファイルアクセスハンドルを初期化する static int TerminateFileHandle( HANDLEINFO *HandleInfo ) ; // ファイルアクセスハンドルの後始末を行う +static int DumpInfoFileHandle( HANDLEINFO *HandleInfo ) ; // ファイルアクセスハンドルの情報出力 // メモリに置かれたデータをファイルのデータに例えてつかうための関数 static LONGLONG MemStreamTell( DWORD_PTR StreamDataPoint ) ; @@ -202,7 +203,7 @@ extern int InitializeFile( void ) DXST_LOGFILE_ADDUTF16LE( "\xd5\x30\xa1\x30\xa4\x30\xeb\x30\xa2\x30\xaf\x30\xbb\x30\xb9\x30\xe6\x51\x06\x74\x6e\x30\x1d\x52\x1f\x67\x16\x53\x2e\x00\x2e\x00\x2e\x00\x00"/*@ L"ファイルアクセス処理の初期化..." @*/ ) ; // ファイル読み込みハンドル管理情報を初期化する - InitializeHandleManage( DX_HANDLETYPE_FILE, sizeof( FILEACCESSINFO ), MAX_FILE_NUM, InitializeFileHandle, TerminateFileHandle, L"File" ) ; + InitializeHandleManage( DX_HANDLETYPE_FILE, sizeof( FILEACCESSINFO ), MAX_FILE_NUM, InitializeFileHandle, TerminateFileHandle, DumpInfoFileHandle, L"File" ) ; // ストリームデータ読みこみ制御用ポインタ配列のデフォルト値をセット { @@ -744,6 +745,34 @@ static int TerminateFileHandle( HANDLEINFO *HandleInfo ) return 0 ; } +// ファイルアクセスハンドルの情報出力 +static int DumpInfoFileHandle( HANDLEINFO *HandleInfo ) +{ + FILEACCESSINFO *FileInfo = ( FILEACCESSINFO * )HandleInfo ; + + // ハンドルのタイプによって処理を分岐 + switch( FileInfo->HandleType ) + { + case FILEHANDLETYPE_NORMAL : + { + LONGLONG Pos = FileInfo->StreamData.ReadShred.Tell( FileInfo->StreamData.DataPoint ) ; + LONGLONG Size = 0 ; + FileInfo->StreamData.ReadShred.Seek( FileInfo->StreamData.DataPoint, 0, SEEK_END ) ; + Size = FileInfo->StreamData.ReadShred.Tell( FileInfo->StreamData.DataPoint ) ; + FileInfo->StreamData.ReadShred.Seek( FileInfo->StreamData.DataPoint, Pos, SEEK_SET ) ; + DXST_LOGFILEFMT_ADDW(( L"Handle:0x%08x Type:Normal FileSize:%lld CurrentPos:%lld", HandleInfo->Handle, Size, Pos )) ; + } + break ; + + case FILEHANDLETYPE_FULLYLOAD : + DXST_LOGFILEFMT_ADDW(( L"Handle:0x%08x Type:FullyLoad FileSize:%lld CurrentPos:%lld", HandleInfo->Handle, FileInfo->FileSize, FileInfo->StreamData.ReadShred.Tell( FileInfo->StreamData.DataPoint ) )) ; + break ; + } + + // 終了 + return 0 ; +} + // メモリに展開されたファイルを開く extern int NS_FileRead_open_mem( const void *FileImage, size_t FileImageSize ) { @@ -1030,6 +1059,24 @@ extern LONGLONG NS_FileRead_size_WithStrLen( const TCHAR *FilePath, size_t FileP return Result ; } +// ファイルのサイズを取得する( ファイルハンドル使用版 ) +extern LONGLONG NS_FileRead_size_handle( int FileHandle ) +{ + FILEACCESSINFO *FileInfo ; + LONGLONG NowPoint ; + LONGLONG FileSize ; + + if( FILEHCHK( FileHandle, FileInfo ) ) + return -1 ; + + NowPoint = FileInfo->StreamData.ReadShred.Tell( FileInfo->StreamData.DataPoint ) ; + FileInfo->StreamData.ReadShred.Seek( FileInfo->StreamData.DataPoint, 0, SEEK_END ) ; + FileSize = FileInfo->StreamData.ReadShred.Tell( FileInfo->StreamData.DataPoint ) ; + FileInfo->StreamData.ReadShred.Seek( FileInfo->StreamData.DataPoint, NowPoint, SEEK_SET ) ; + + return FileSize ; +} + extern int NS_FileRead_close( int FileHandle ) { return SubHandle( FileHandle ) ; diff --git a/DxFile.h b/DxFile.h index b7e5518..f53e5ca 100644 --- a/DxFile.h +++ b/DxFile.h @@ -2,7 +2,7 @@ // // DXライブラリ ファイルアクセスプログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxFont.cpp b/DxFont.cpp index f831975..22ac316 100644 --- a/DxFont.cpp +++ b/DxFont.cpp @@ -2,7 +2,7 @@ // // DXライブラリ DirectDraw制御プログラム // -// Ver 3.23 +// Ver 3.24b // // ---------------------------------------------------------------------------- @@ -595,7 +595,7 @@ static int DrawStringHardware( int xi, int yi, float xf, float yf, int PosIntFla NULL, 0, NULL, - 0 + FSYS.OnlyDrawType ) ; return 0 ; } @@ -639,7 +639,7 @@ static int DrawExtendStringHardware( int xi, int yi, float xf, float yf, int Pos NULL, 0, NULL, - 0 + FSYS.OnlyDrawType ) ; return 0 ; } @@ -686,7 +686,7 @@ static int DrawRotaStringHardware( int xi, int yi, float xf, float yf, int PosIn NULL, 0, NULL, - 0 + FSYS.OnlyDrawType ) ; return 0 ; } @@ -736,7 +736,7 @@ static int DrawModiStringHardware( int x1i, int y1i, int x2i, int y2i, int x3i, } if( NS_GetGraphSize( UseTempScreenHandle[ 0 ], &TempScreenWidth, &TempScreenHeight ) < 0 || - DrawWidth < TempScreenWidth || DrawHeight < TempScreenHeight ) + DrawWidth > TempScreenWidth || DrawHeight > TempScreenHeight ) { SETUP_GRAPHHANDLE_GPARAM GParam ; @@ -795,96 +795,108 @@ static int DrawModiStringHardware( int x1i, int y1i, int x2i, int y2i, int x3i, } else { - NS_SetDrawScreen( UseTempScreenHandle[ 0 ] ) ; - NS_SetBackgroundColor( 0, 0, 0, 0 ) ; - NS_ClearDrawScreen( NULL ) ; - NS_SetDrawBlendMode( DX_BLENDMODE_SRCCOLOR, 255 ) ; - FontCacheStringDrawToHandleST( - TRUE, - 0, - 0, - 0.0f, - 0.0f, - TRUE, - FALSE, - 1.0, - 1.0, - FALSE, 0.0f, 0.0f, 0.0, - String, - Color, - NULL, - &GSYS.DrawSetting.DrawArea, - TRUE, - Font, - EdgeColor, - ( int )StringLength, - VerticalFlag, - NULL, - NULL, - NULL, - 0, - NULL, - 2 - ) ; + if( FSYS.OnlyDrawType == 0 || FSYS.OnlyDrawType == 2 ) + { + NS_SetDrawScreen( UseTempScreenHandle[ 0 ] ) ; + NS_SetBackgroundColor( 0, 0, 0, 0 ) ; + NS_ClearDrawScreen( NULL ) ; + NS_SetDrawBlendMode( DX_BLENDMODE_SRCCOLOR, 255 ) ; + FontCacheStringDrawToHandleST( + TRUE, + 0, + 0, + 0.0f, + 0.0f, + TRUE, + FALSE, + 1.0, + 1.0, + FALSE, 0.0f, 0.0f, 0.0, + String, + Color, + NULL, + &GSYS.DrawSetting.DrawArea, + TRUE, + Font, + EdgeColor, + ( int )StringLength, + VerticalFlag, + NULL, + NULL, + NULL, + 0, + NULL, + 2 + ) ; + } - NS_SetDrawScreen( UseTempScreenHandle[ 1 ] ) ; - NS_SetBackgroundColor( 0, 0, 0, 0 ) ; - NS_ClearDrawScreen( NULL ) ; - NS_SetDrawBlendMode( DX_BLENDMODE_SRCCOLOR, 255 ) ; - FontCacheStringDrawToHandleST( - TRUE, - 0, - 0, - 0.0f, - 0.0f, - TRUE, - FALSE, - 1.0, - 1.0, - FALSE, 0.0f, 0.0f, 0.0, - String, - Color, - NULL, - &GSYS.DrawSetting.DrawArea, - TRUE, - Font, - EdgeColor, - ( int )StringLength, - VerticalFlag, - NULL, - NULL, - NULL, - 0, - NULL, - 1 - ) ; + if( FSYS.OnlyDrawType == 0 || FSYS.OnlyDrawType == 1 ) + { + NS_SetDrawScreen( UseTempScreenHandle[ 1 ] ) ; + NS_SetBackgroundColor( 0, 0, 0, 0 ) ; + NS_ClearDrawScreen( NULL ) ; + NS_SetDrawBlendMode( DX_BLENDMODE_SRCCOLOR, 255 ) ; + FontCacheStringDrawToHandleST( + TRUE, + 0, + 0, + 0.0f, + 0.0f, + TRUE, + FALSE, + 1.0, + 1.0, + FALSE, 0.0f, 0.0f, 0.0, + String, + Color, + NULL, + &GSYS.DrawSetting.DrawArea, + TRUE, + Font, + EdgeColor, + ( int )StringLength, + VerticalFlag, + NULL, + NULL, + NULL, + 0, + NULL, + 1 + ) ; + } NS_SetDrawScreen( ScreenDrawSettingInfo.DrawScreen ) ; - DrawTempScreenHandle[ 0 ] = NS_DerivationGraph( 0, 0, DrawWidth, DrawHeight, UseTempScreenHandle[ 0 ] ) ; - DrawTempScreenHandle[ 1 ] = NS_DerivationGraph( 0, 0, DrawWidth, DrawHeight, UseTempScreenHandle[ 1 ] ) ; + if( FSYS.OnlyDrawType == 0 || FSYS.OnlyDrawType == 2 ) + { + DrawTempScreenHandle[ 0 ] = NS_DerivationGraph( 0, 0, DrawWidth, DrawHeight, UseTempScreenHandle[ 0 ] ) ; + } + if( FSYS.OnlyDrawType == 0 || FSYS.OnlyDrawType == 1 ) + { + DrawTempScreenHandle[ 1 ] = NS_DerivationGraph( 0, 0, DrawWidth, DrawHeight, UseTempScreenHandle[ 1 ] ) ; + } } // 描画矩形を元に戻す NS_SetDrawArea( ScreenDrawSettingInfo.DrawRect.left, ScreenDrawSettingInfo.DrawRect.top, ScreenDrawSettingInfo.DrawRect.right, ScreenDrawSettingInfo.DrawRect.bottom ) ; - if( DrawTempScreenHandle[ 0 ] < 0 ) - { -// Result = -1 ; - } - else +// if( DrawTempScreenHandle[ 0 ] < 0 ) +// { +//// Result = -1 ; +// } +// else { NS_SetDrawBlendMode( ScreenDrawSettingInfo.DrawBlendMode, ScreenDrawSettingInfo.DrawBlendParam ) ; if( PosIntFlag ) { - if( DrawTempScreenHandle[ 0 ] >= 0 ) + if( DrawTempScreenHandle[ 0 ] >= 0 && ( FSYS.OnlyDrawType == 0 || FSYS.OnlyDrawType == 2 ) ) { NS_DrawModiGraph( x1i, y1i, x2i, y2i, x3i, y3i, x4i, y4i, DrawTempScreenHandle[ 0 ], TRUE ) ; NS_DeleteGraph( DrawTempScreenHandle[ 0 ], FALSE ) ; DrawTempScreenHandle[ 0 ] = -1 ; } - if( DrawTempScreenHandle[ 1 ] >= 0 ) + if( DrawTempScreenHandle[ 1 ] >= 0 && ( FSYS.OnlyDrawType == 0 || FSYS.OnlyDrawType == 1 ) ) { NS_DrawModiGraph( x1i, y1i, x2i, y2i, x3i, y3i, x4i, y4i, DrawTempScreenHandle[ 1 ], TRUE ) ; NS_DeleteGraph( DrawTempScreenHandle[ 1 ], FALSE ) ; @@ -893,14 +905,14 @@ static int DrawModiStringHardware( int x1i, int y1i, int x2i, int y2i, int x3i, } else { - if( DrawTempScreenHandle[ 0 ] > 0 ) + if( DrawTempScreenHandle[ 0 ] > 0 && ( FSYS.OnlyDrawType == 0 || FSYS.OnlyDrawType == 2 ) ) { NS_DrawModiGraphF( x1f, y1f, x2f, y2f, x3f, y3f, x4f, y4f, DrawTempScreenHandle[ 0 ], TRUE ) ; NS_DeleteGraph( DrawTempScreenHandle[ 0 ], FALSE ) ; DrawTempScreenHandle[ 0 ] = -1 ; } - if( DrawTempScreenHandle[ 1 ] > 0 ) + if( DrawTempScreenHandle[ 1 ] > 0 && ( FSYS.OnlyDrawType == 0 || FSYS.OnlyDrawType == 1 ) ) { NS_DrawModiGraphF( x1f, y1f, x2f, y2f, x3f, y3f, x4f, y4f, DrawTempScreenHandle[ 1 ], TRUE ) ; NS_DeleteGraph( DrawTempScreenHandle[ 1 ], FALSE ) ; @@ -964,7 +976,7 @@ static int SetupSoftwareStringImage( NULL, 0, NULL, - 0 + FSYS.OnlyDrawType ) ; // 使用する仮スクリーンの決定 @@ -1042,7 +1054,7 @@ static int SetupSoftwareStringImage( NULL, 0, NULL, - 0 + FSYS.OnlyDrawType ) ; // 描画色を白に変更 @@ -1088,7 +1100,7 @@ static int DrawStringSoftware( int x, int y, const wchar_t *String, size_t Strin NULL, 0, NULL, - 0 + FSYS.OnlyDrawType ) ; // ブレンドモードによって処理を分岐 @@ -1175,7 +1187,7 @@ static int DrawStringSoftware( int x, int y, const wchar_t *String, size_t Strin NULL, 0, NULL, - 0 + FSYS.OnlyDrawType ) ; // 本描画先に描画 @@ -1228,7 +1240,7 @@ static int DrawStringSoftware( int x, int y, const wchar_t *String, size_t Strin NULL, 0, NULL, - 0 + FSYS.OnlyDrawType ) ; // 終了 @@ -1406,7 +1418,7 @@ extern int InitFontManage( void ) FSYS.InitializeFlag = TRUE ; // フォントハンドル管理情報を初期化する - InitializeHandleManage( DX_HANDLETYPE_FONT, sizeof( FONTMANAGE ) + sizeof( FONTMANAGE_PF ), MAX_FONT_NUM, InitializeFontHandle, TerminateFontHandle, L"Font" ) ; + InitializeHandleManage( DX_HANDLETYPE_FONT, sizeof( FONTMANAGE ) + sizeof( FONTMANAGE_PF ), MAX_FONT_NUM, InitializeFontHandle, TerminateFontHandle, DumpInfoFontHandle, L"Font" ) ; // 全角スペースの wchar_t コードを準備 { @@ -1697,6 +1709,7 @@ extern int RefreshFontDrawResourceToHandle( FONTMANAGE *ManageData, int ASyncThr int Use3D, w ; int UsePaletteFlag ; int PaletteBitDepth ; + int InitGraphDelete ; SETUP_GRAPHHANDLE_GPARAM GParam ; ManageData->TextureCacheLostFlag = FALSE ; @@ -1734,13 +1747,17 @@ extern int RefreshFontDrawResourceToHandle( FONTMANAGE *ManageData, int ASyncThr Use3D = NS_GetUse3DFlag() ; NS_SetUse3DFlag( TRUE ) ; + // InitGraph では削除されないグラフィックハンドルにする + InitGraphDelete = NS_GetCreateGraphInitGraphDelete() ; + NS_SetCreateGraphInitGraphDelete( FALSE ) ; + // エッジつきの場合は横幅を倍にする w = ( ManageData->FontType & DX_FONTTYPE_EDGE ) != 0 ? ManageData->CacheImageSize.cx * 2 : ManageData->CacheImageSize.cx ; GParam.NotInitGraphDelete = TRUE ; GParam.UseLinearMapTextureFlag = TRUE ; ManageData->TextureCache = Graphics_Image_MakeGraph_UseGParam( &GParam, w, ManageData->CacheImageSize.cy, FALSE, UsePaletteFlag, PaletteBitDepth, FALSE, ASyncThread ) ; ManageData->TextureCacheSub = -1 ; - + // エッジ付きの場合は派生させる if( ( ManageData->FontType & DX_FONTTYPE_EDGE ) != 0 ) { @@ -1755,6 +1772,9 @@ extern int RefreshFontDrawResourceToHandle( FONTMANAGE *ManageData, int ASyncThr ) ; } + // 設定を元に戻す + NS_SetCreateGraphInitGraphDelete( InitGraphDelete ) ; + NS_SetUse3DFlag( Use3D ) ; // エラーチェック @@ -1920,11 +1940,15 @@ extern int RefreshDefaultFont( void ) int TransRed ; int TransGreen ; int TransBlue ; + int InitGraphDelete = NS_GetCreateGraphInitGraphDelete() ; // 透過色を紫色に変更 NS_GetTransColor( &TransRed, &TransGreen, &TransBlue ) ; NS_SetTransColor( 255,0,255 ) ; + // InitGraph では削除されないグラフィックハンドルにする + NS_SetCreateGraphInitGraphDelete( FALSE ) ; + // グラフィックハンドルの作成 NS_CreateDivGraphFromMem( FSYS.DefaultFontImage, DXA_Decode( DefaultFontImage, NULL ), 128, 16, 8, 8, 16, FSYS.DefaultFontImageGraphHandle[ 0 ], TRUE, FALSE, NULL, 0 ) ; @@ -1939,6 +1963,9 @@ extern int RefreshDefaultFont( void ) NS_SetDeleteHandleFlag( FSYS.DefaultFontImageGraphHandle[ i ][ j ], &FSYS.DefaultFontImageGraphHandle[ i ][ j ] ) ; } } + + // 設定を元に戻す + NS_SetCreateGraphInitGraphDelete( InitGraphDelete ) ; } #endif // DX_NON_GRAPHICS @@ -3613,6 +3640,8 @@ extern int FontCacheCharImageBltToHandle( int EdgeSize ; int DestPitch ; unsigned char ( *EdgePat )[ FONTEDGE_PATTERN_NUM * 2 + 1 ] ; + BYTE *CircleImage ; + int CircleImagePitch ; Width = ( int )CharData->SizeX ; Height = ( int )CharData->SizeY ; @@ -3620,6 +3649,9 @@ extern int FontCacheCharImageBltToHandle( Src = ( BYTE * )ImageBuffer ; EdgeSize = ManageData->EdgeSize ; EdgePat = _FontEdgePattern[ EdgeSize - 1 ] ; + + CircleImage = ( BYTE * )ManageData->EdgeCircleImage.GraphData ; + CircleImagePitch = ManageData->EdgeCircleImage.Pitch ; if( ManageData->TextureCacheFlag == FALSE ) { @@ -3696,17 +3728,19 @@ extern int FontCacheCharImageBltToHandle( if( dat & 0x80 ) { Dest[j] = 1 ; - for( l = -EdgeSize ; l < EdgeSize + 1 ; l ++ ) + for( n = 0, l = -EdgeSize ; l < EdgeSize + 1 ; n ++, l ++ ) { - for( m = -EdgeSize ; m < EdgeSize + 1 ; m ++ ) + for( o = 0, m = -EdgeSize ; m < EdgeSize + 1 ; o ++, m ++ ) { - DestT = Dest + j + m + l * DestPitch ; + if( CircleImage[ o + CircleImagePitch * n ] == 0 ) continue ; + + DestT = ( Dest + j + m ) + ( l * DestPitch ) ; if( *DestT != 1 ) *DestT = 2 ; } } } } - + Src += ImagePitch ; Dest += DestPitch ; } @@ -3770,10 +3804,12 @@ extern int FontCacheCharImageBltToHandle( if( Src[ j ] != 0 ) { Dest[j] = 1 ; - for( l = -EdgeSize ; l < EdgeSize + 1 ; l ++ ) + for( n = 0, l = -EdgeSize ; l < EdgeSize + 1 ; l ++, n ++ ) { - for( m = -EdgeSize ; m < EdgeSize + 1 ; m ++ ) + for( o = 0, m = -EdgeSize ; m < EdgeSize + 1 ; m ++, o ++ ) { + if( CircleImage[ o + CircleImagePitch * n ] == 0 ) continue ; + DestT = Dest + j + m + l * DestPitch ; if( *DestT != 1 ) *DestT = 2 ; } @@ -3866,10 +3902,12 @@ extern int FontCacheCharImageBltToHandle( d = Src[j] - 1 ; Dest[j] |= d ; d <<= 4 ; - for( l = -EdgeSize ; l < EdgeSize + 1 ; l ++ ) + for( n = 0, l = -EdgeSize ; l < EdgeSize + 1 ; l ++, n ++ ) { - for( m = -EdgeSize ; m < EdgeSize + 1 ; m ++ ) + for( o = 0, m = -EdgeSize ; m < EdgeSize + 1 ; m ++, o ++ ) { + if( CircleImage[ o + CircleImagePitch * n ] == 0 ) continue ; + DestT = Dest + j + l * DestPitch + m ; if( ( *DestT & 0xf0 ) < d ) *DestT = ( BYTE )( ( *DestT & 0x0f ) | d ) ; } @@ -4084,10 +4122,12 @@ extern int FontCacheCharImageBltToHandle( if( datB & 0x80 ) { DB0 = 1 ; - for( l = -EdgeSize ; l < EdgeSize + 1 ; l ++ ) + for( n = 0, l = -EdgeSize ; l < EdgeSize + 1 ; l ++, n++ ) { - for( m = -EdgeSize ; m < EdgeSize + 1 ; m ++ ) + for( o = 0, m = -EdgeSize ; m < EdgeSize + 1 ; m ++, o++ ) { + if( CircleImage[ o + CircleImagePitch * n ] == 0 ) continue ; + pb = dp + ( j + m + adp ) + ( l * DestPitch ) ; if( *pb == 0 ) *pb = 1 ; } @@ -4109,10 +4149,12 @@ extern int FontCacheCharImageBltToHandle( if( datB & 0x80 ) { D0 = 1 ; - for( l = -EdgeSize ; l < EdgeSize + 1 ; l ++ ) + for( n = 0, l = -EdgeSize ; l < EdgeSize + 1 ; l ++, n ++ ) { - for( m = -EdgeSize ; m < EdgeSize + 1 ; m ++ ) + for( o = 0, m = -EdgeSize ; m < EdgeSize + 1 ; m ++, o ++ ) { + if( CircleImage[ o + CircleImagePitch * n ] == 0 ) continue ; + p = (WORD *)( dp + (j + m + adp) * 2 + (l * DestPitch) ) ; if( *p == 0 ) *p = 1 ; } @@ -4342,10 +4384,12 @@ extern int FontCacheCharImageBltToHandle( if( sp[ j ] != 0 ) { DB0 = 1 ; - for( l = -EdgeSize ; l < EdgeSize + 1 ; l ++ ) + for( n = 0, l = -EdgeSize ; l < EdgeSize + 1 ; l ++, n ++ ) { - for( m = -EdgeSize ; m < EdgeSize + 1 ; m ++ ) + for( o = 0, m = -EdgeSize ; m < EdgeSize + 1 ; m ++, o ++ ) { + if( CircleImage[ o + CircleImagePitch * n ] == 0 ) continue ; + pb = dp + ( j + m + adp ) + ( l * DestPitch ) ; if( *pb == 0 ) *pb = 1 ; } @@ -4366,10 +4410,12 @@ extern int FontCacheCharImageBltToHandle( if( sp[ j ] != 0 ) { D0 = 1 ; - for( l = -EdgeSize ; l < EdgeSize + 1 ; l ++ ) + for( n = 0, l = -EdgeSize ; l < EdgeSize + 1 ; l ++, n ++ ) { - for( m = -EdgeSize ; m < EdgeSize + 1 ; m ++ ) + for( o = 0, m = -EdgeSize ; m < EdgeSize + 1 ; m ++, o ++ ) { + if( CircleImage[ o + CircleImagePitch * n ] == 0 ) continue ; + p = (WORD *)( dp + (j + m + adp) * 2 + (l * DestPitch) ) ; if( *p == 0 ) *p = 1 ; } @@ -4609,10 +4655,12 @@ extern int FontCacheCharImageBltToHandle( if( s > 0 ) { DB0 = (BYTE)s ; - for( l = -EdgeSize ; l < EdgeSize + 1 ; l ++ ) + for( n = 0, l = -EdgeSize ; l < EdgeSize + 1 ; l ++, n ++ ) { - for( m = -EdgeSize ; m < EdgeSize + 1 ; m ++ ) + for( o = 0, m = -EdgeSize ; m < EdgeSize + 1 ; m ++, o ++ ) { + if( CircleImage[ o + CircleImagePitch * n ] == 0 ) continue ; + pb = (BYTE *)( dp + (j + m + adp) + (l * DestPitch) ) ; *pb = (BYTE)( ( 0x100 - ( ( 0x10 - *pb ) * ( 0x10 - s ) ) ) >> 4 ) ; } @@ -4634,10 +4682,12 @@ extern int FontCacheCharImageBltToHandle( if( s > 0 ) { D0 = (WORD)s ; - for( l = -EdgeSize ; l < EdgeSize + 1 ; l ++ ) + for( n = 0, l = -EdgeSize ; l < EdgeSize + 1 ; l ++, n ++ ) { - for( m = -EdgeSize ; m < EdgeSize + 1 ; m ++ ) + for( o = 0, m = -EdgeSize ; m < EdgeSize + 1 ; m ++, o ++ ) { + if( CircleImage[ o + CircleImagePitch * n ] == 0 ) continue ; + p = (WORD *)( dp + (j + m + adp) * 2 + (l * DestPitch) ) ; *p = (WORD)( ( 0x100 - ( ( 0x10 - *p ) * ( 0x10 - s ) ) ) >> 4 ) ; } @@ -4941,10 +4991,12 @@ extern int FontCacheCharImageBltToHandle( if( s > 0 ) { DB0 = (BYTE)s ; - for( l = -EdgeSize ; l < EdgeSize + 1 ; l ++ ) + for( n = 0, l = -EdgeSize ; l < EdgeSize + 1 ; l ++, n ++ ) { - for( m = -EdgeSize ; m < EdgeSize + 1 ; m ++ ) + for( o = 0, m = -EdgeSize ; m < EdgeSize + 1 ; m ++, o ++ ) { + if( CircleImage[ o + CircleImagePitch * n ] == 0 ) continue ; + pb = (BYTE *)( dp + (j + m + adp) + (l * DestPitch) ) ; *pb = (BYTE)( *pb + ( ( ( 0x40 - *pb ) * s ) >> 6 ) ) ; } @@ -4966,10 +5018,12 @@ extern int FontCacheCharImageBltToHandle( if( s > 0 ) { DD0 = (DWORD)s ; - for( l = -EdgeSize ; l < EdgeSize + 1 ; l ++ ) + for( n = 0, l = -EdgeSize ; l < EdgeSize + 1 ; l ++, n ++ ) { - for( m = -EdgeSize ; m < EdgeSize + 1 ; m ++ ) + for( o = 0, m = -EdgeSize ; m < EdgeSize + 1 ; m ++, o ++ ) { + if( CircleImage[ o + CircleImagePitch * n ] == 0 ) continue ; + pd = (DWORD *)( dp + (j + m + adp) * 4 + (l * DestPitch) ) ; *pd = (DWORD)( *pd + ( ( ( 0x40 - *pd ) * s ) >> 6 ) ) ; } @@ -5257,10 +5311,12 @@ extern int FontCacheCharImageBltToHandle( if( s > 0 ) { DB0 = (BYTE)s ; - for( l = -EdgeSize ; l < EdgeSize + 1 ; l ++ ) + for( n = 0, l = -EdgeSize ; l < EdgeSize + 1 ; l ++, n ++ ) { - for( m = -EdgeSize ; m < EdgeSize + 1 ; m ++ ) + for( o = 0, m = -EdgeSize ; m < EdgeSize + 1 ; m ++, o ++ ) { + if( CircleImage[ o + CircleImagePitch * n ] == 0 ) continue ; + pb = (BYTE *)( dp + (j + m + adp) + (l * DestPitch) ) ; *pb = (BYTE)( *pb + ( ( ( 0xff - *pb ) * s ) >> 8 ) ) ; } @@ -5282,10 +5338,12 @@ extern int FontCacheCharImageBltToHandle( if( s > 0 ) { DD0 = (DWORD)s ; - for( l = -EdgeSize ; l < EdgeSize + 1 ; l ++ ) + for( n = 0, l = -EdgeSize ; l < EdgeSize + 1 ; l ++, n ++ ) { - for( m = -EdgeSize ; m < EdgeSize + 1 ; m ++ ) + for( o = 0, m = -EdgeSize ; m < EdgeSize + 1 ; m ++, o ++ ) { + if( CircleImage[ o + CircleImagePitch * n ] == 0 ) continue ; + pd = (DWORD *)( dp + (j + m + adp) * 4 + (l * DestPitch) ) ; *pd = (DWORD)( *pd + ( ( ( 0xff - *pd ) * s ) >> 8 ) ) ; } @@ -6427,6 +6485,12 @@ extern int TerminateFontHandle( HANDLEINFO *HandleInfo ) ManageData->FontDataFile.FileBuffer = NULL ; } + // エッジのサイズが一定以上の場合はエッジの円用の画像を削除する + if( ManageData->EdgeSize > FONTEDGE_PATTERN_NUM ) + { + NS_ReleaseBaseImage( &ManageData->EdgeCircleImage ) ; + } + // ロストフラグが設定されている場合は TRUE にする if( ManageData->LostFlag != NULL ) { @@ -6437,6 +6501,48 @@ extern int TerminateFontHandle( HANDLEINFO *HandleInfo ) return 0 ; } +// フォントハンドルの情報出力 +extern int DumpInfoFontHandle( HANDLEINFO *HandleInfo ) +{ + FONTMANAGE * ManageData = ( FONTMANAGE * )HandleInfo ; + + if( ManageData->UseFontDataFile ) + { + DXST_LOGFILEFMT_ADDW(( L"Handle:0x%08x IsFontFile:true FontName:%s FontType:%s Size:%d Thickness:%d Height:%d", HandleInfo->Handle, ManageData->FontDataFile.Header->Press.FontName, + ManageData->FontType == DX_FONTTYPE_NORMAL ? L"DX_FONTTYPE_NORMAL" : + ( ManageData->FontType == DX_FONTTYPE_EDGE ? L"DX_FONTTYPE_EDGE" : + ( ManageData->FontType == DX_FONTTYPE_ANTIALIASING ? L"DX_FONTTYPE_ANTIALIASING" : + ( ManageData->FontType == DX_FONTTYPE_ANTIALIASING_4X4 ? L"DX_FONTTYPE_ANTIALIASING_4X4" : + ( ManageData->FontType == DX_FONTTYPE_ANTIALIASING_8X8 ? L"DX_FONTTYPE_ANTIALIASING_8X8" : + ( ManageData->FontType == DX_FONTTYPE_ANTIALIASING_16X16 ? L"DX_FONTTYPE_ANTIALIASING_16X16" : + ( ManageData->FontType == DX_FONTTYPE_ANTIALIASING_EDGE ? L"DX_FONTTYPE_ANTIALIASING_EDGE" : + ( ManageData->FontType == DX_FONTTYPE_ANTIALIASING_EDGE_4X4 ? L"DX_FONTTYPE_ANTIALIASING_EDGE_4X4" : + ( ManageData->FontType == DX_FONTTYPE_ANTIALIASING_EDGE_8X8 ? L"DX_FONTTYPE_ANTIALIASING_EDGE_8X8" : + ( ManageData->FontType == DX_FONTTYPE_ANTIALIASING_EDGE_16X16 ? L"DX_FONTTYPE_ANTIALIASING_EDGE_16X16" : L"Null" + ))))))))), + ManageData->FontDataFile.Header->Press.BaseInfo.FontSize, ManageData->FontDataFile.Header->Press.BaseInfo.FontHeight )) ; + } + else + { + DXST_LOGFILEFMT_ADDW(( L"Handle:0x%08x IsFontFile:false FontName:%s FontType:%s Size:%d Thickness:%d Height:%d", HandleInfo->Handle, ManageData->FontName, + ManageData->FontType == DX_FONTTYPE_NORMAL ? L"DX_FONTTYPE_NORMAL" : + ( ManageData->FontType == DX_FONTTYPE_EDGE ? L"DX_FONTTYPE_EDGE" : + ( ManageData->FontType == DX_FONTTYPE_ANTIALIASING ? L"DX_FONTTYPE_ANTIALIASING" : + ( ManageData->FontType == DX_FONTTYPE_ANTIALIASING_4X4 ? L"DX_FONTTYPE_ANTIALIASING_4X4" : + ( ManageData->FontType == DX_FONTTYPE_ANTIALIASING_8X8 ? L"DX_FONTTYPE_ANTIALIASING_8X8" : + ( ManageData->FontType == DX_FONTTYPE_ANTIALIASING_16X16 ? L"DX_FONTTYPE_ANTIALIASING_16X16" : + ( ManageData->FontType == DX_FONTTYPE_ANTIALIASING_EDGE ? L"DX_FONTTYPE_ANTIALIASING_EDGE" : + ( ManageData->FontType == DX_FONTTYPE_ANTIALIASING_EDGE_4X4 ? L"DX_FONTTYPE_ANTIALIASING_EDGE_4X4" : + ( ManageData->FontType == DX_FONTTYPE_ANTIALIASING_EDGE_8X8 ? L"DX_FONTTYPE_ANTIALIASING_EDGE_8X8" : + ( ManageData->FontType == DX_FONTTYPE_ANTIALIASING_EDGE_16X16 ? L"DX_FONTTYPE_ANTIALIASING_EDGE_16X16" : L"Null" + ))))))))), + ManageData->BaseInfo.FontSize, ManageData->BaseInfo.FontThickness, ManageData->BaseInfo.FontHeight )) ; + } + + // 終了 + return 0 ; +} + // CREATEFONTTOHANDLE_GPARAM のデータをセットする extern void InitCreateFontToHandleGParam( CREATEFONTTOHANDLE_GPARAM *GParam ) { @@ -6545,6 +6651,22 @@ static int CreateFontToHandle_Static( _WCSCPY_S( ManageData->FontName, sizeof( ManageData->FontName ), FontName ) ; } + // エッジのサイズが一定以上の場合はエッジの円用の画像を作成する + if( EdgeSize > FONTEDGE_PATTERN_NUM ) + { + if( NS_CreatePAL8ColorBaseImage( EdgeSize * 2 + 1, EdgeSize * 2 + 1, &ManageData->EdgeCircleImage, FALSE ) < 0 ) + { + return -1 ; + } + _MEMSET( ManageData->EdgeCircleImage.ColorData.Palette, 0, sizeof( ManageData->EdgeCircleImage.ColorData.Palette ) ) ; + ManageData->EdgeCircleImage.ColorData.Palette[ 1 ].Red = 255 ; + ManageData->EdgeCircleImage.ColorData.Palette[ 1 ].Green = 255 ; + ManageData->EdgeCircleImage.ColorData.Palette[ 1 ].Blue = 255 ; + ManageData->EdgeCircleImage.ColorData.Palette[ 1 ].Alpha = 0 ; + NS_FillBaseImage( &ManageData->EdgeCircleImage, 0, 0, 0, 0 ) ; + NS_DrawCircleBaseImage( &ManageData->EdgeCircleImage, EdgeSize, EdgeSize, EdgeSize, 255, 255, 255, 0, TRUE ) ; + } + // 環境依存処理 if( CreateFontToHandle_PF( GParam, ManageData, DefaultCharSet ) != 0 ) { @@ -6885,6 +7007,22 @@ static int LoadFontDataFromMemToHandle_UseGParam_Static( // ロストフラグへのポインタを NULL にしておく ManageData->LostFlag = NULL ; + // エッジのサイズが一定以上の場合はエッジの円用の画像を作成する + if( EdgeSize > FONTEDGE_PATTERN_NUM ) + { + if( NS_CreatePAL8ColorBaseImage( EdgeSize * 2 + 1, EdgeSize * 2 + 1, &ManageData->EdgeCircleImage, FALSE ) < 0 ) + { + return -1 ; + } + _MEMSET( ManageData->EdgeCircleImage.ColorData.Palette, 0, sizeof( ManageData->EdgeCircleImage.ColorData.Palette ) ) ; + ManageData->EdgeCircleImage.ColorData.Palette[ 1 ].Red = 255 ; + ManageData->EdgeCircleImage.ColorData.Palette[ 1 ].Green = 255 ; + ManageData->EdgeCircleImage.ColorData.Palette[ 1 ].Blue = 255 ; + ManageData->EdgeCircleImage.ColorData.Palette[ 1 ].Alpha = 0 ; + NS_FillBaseImage( &ManageData->EdgeCircleImage, 0, 0, 0, 0 ) ; + NS_DrawCircleBaseImage( &ManageData->EdgeCircleImage, EdgeSize, EdgeSize, EdgeSize, 255, 255, 255, 0, TRUE ) ; + } + // 環境依存処理 if( CreateFontToHandle_PF( GParam, ManageData, FALSE ) != 0 ) { @@ -7946,6 +8084,16 @@ extern int NS_ChangeFontWithStrLen( const TCHAR *FontName, size_t FontNameLength return Result ; } +// デフォルトフォントハンドルとして使用するフォントハンドルを変更する +extern int NS_ChangeFontFromHandle( int FontHandle ) +{ + // フォントハンドルを保存 + FSYS.UserDefaultFontHandle = FontHandle ; + + // 終了 + return 0 ; +} + // フォントタイプの変更 extern int NS_ChangeFontType( int FontType ) { @@ -13567,11 +13715,11 @@ extern int NS_GetDrawStringSizeToHandle( int *SizeX, int *SizeY, int *LineCount, return GetDrawStringSizeToHandle_WCHAR_T( SizeX, SizeY, LineCount, String, 0, StrLen, FontHandle, VerticalFlag ) ; #else int Result ; - FONTHANDLE_TCHAR_TO_WCHAR_T_STRING_BEGIN( String, -1 ) + FONTHANDLE_TCHAR_WITH_STRLEN_TO_WCHAR_T_STRING_BEGIN( String, StrLen, -1 ) Result = GetDrawStringSizeToHandle_WCHAR_T( SizeX, SizeY, LineCount, UseStringBuffer, 0, StrLen, FontHandle, VerticalFlag ) ; - FONTHANDLE_TCHAR_TO_WCHAR_T_STRING_END + FONTHANDLE_TCHAR_WITH_STRLEN_TO_WCHAR_T_STRING_END return Result ; #endif @@ -14217,7 +14365,11 @@ extern int GetFontStateToHandle_WCHAR_T( wchar_t *FontName, int *Size, int *Thic // デフォルトのフォントのハンドルを得る extern int NS_GetDefaultFontHandle( void ) { - return FSYS.DefaultFontHandle ; + int FontHandle = DX_DEFAULT_FONT_HANDLE ; + + DEFAULT_FONT_HANDLE_SETUP + + return FontHandle ; } // 指定のフォントがテクスチャキャッシュを使用しているかどうかを得る @@ -14413,6 +14565,20 @@ extern int NS_GetFontUseAdjustSizeFlag( void ) return FSYS.DisableAdjustFontSize == FALSE ? TRUE : FALSE ; } +// フォントの描画で縁のみ、又は本体のみ描画を行うかどうかを設定する( OnlyType 0:通常描画 1:本体のみ描画 2:縁のみ描画 ) +extern int NS_SetFontOnlyDrawType( int OnlyType ) +{ + FSYS.OnlyDrawType = OnlyType ; + + return 0 ; +} + +// フォントの描画で縁のみ、又は本体のみ描画を行うかどうかを取得する( 戻り値 0:通常描画 1:本体のみ描画 2:縁のみ描画 ) +extern int NS_GetFontOnlyDrawType( void ) +{ + return FSYS.OnlyDrawType ; +} + // 文字列を描画する extern int NS_DrawString( int x, int y, const TCHAR *String, unsigned int Color, unsigned int EdgeColor ) { @@ -14490,14 +14656,14 @@ extern int DrawVStringF_WCHAR_T( float x, float y, const wchar_t *String, size_t if( VerticalFlag )\ {\ x += font->BaseInfo.FontAddHeight / 2;\ - SETRECT( DrawRect, x, y, x + NS_GetFontSizeToHandle( FontHandle ) + font->BaseInfo.FontAddHeight / 2 + 3, GSYS.DrawSetting.DrawArea.bottom ) ;\ + SETRECT( DrawRect, x, y, x + font->BaseInfo.FontHeight + font->BaseInfo.FontAddHeight / 2 + 3, GSYS.DrawSetting.DrawArea.bottom ) ;\ if( DrawRect.left >= GSYS.DrawSetting.DrawArea.right ) return 0 ;\ x -= font->BaseInfo.FontAddHeight / 2;\ }\ else\ {\ y -= font->BaseInfo.FontAddHeight / 2 ;\ - SETRECT( DrawRect, x, y, GSYS.DrawSetting.DrawArea.right, y + NS_GetFontSizeToHandle( FontHandle ) + font->BaseInfo.FontAddHeight / 2 + 3 ) ;\ + SETRECT( DrawRect, x, y, GSYS.DrawSetting.DrawArea.right, y + font->BaseInfo.FontHeight + font->BaseInfo.FontAddHeight / 2 + 3 ) ;\ if( DrawRect.left >= GSYS.DrawSetting.DrawArea.right ) return 0 ;\ y += font->BaseInfo.FontAddHeight / 2 ;\ }\ @@ -14589,14 +14755,14 @@ extern int DrawStringToHandle_WCHAR_T( int x, int y, const wchar_t *String, size if( VerticalFlag )\ {\ x += ( float )font->BaseInfo.FontAddHeight / 2;\ - SETRECT( DrawRect, _FTOL( x ), _FTOL( y ), _FTOL( x ) + NS_GetFontSizeToHandle( FontHandle ) + 3, GSYS.DrawSetting.DrawArea.bottom ) ;\ + SETRECT( DrawRect, _FTOL( x ), _FTOL( y ), _FTOL( x ) + font->BaseInfo.FontHeight + 3, GSYS.DrawSetting.DrawArea.bottom ) ;\ if( DrawRect.left >= GSYS.DrawSetting.DrawArea.right ) return 0 ;\ x -= ( float )font->BaseInfo.FontAddHeight / 2;\ }\ else\ {\ y -= ( float )font->BaseInfo.FontAddHeight / 2 ;\ - SETRECT( DrawRect, _FTOL( x ), _FTOL( y ), GSYS.DrawSetting.DrawArea.right, _FTOL( y ) + NS_GetFontSizeToHandle( FontHandle ) + 3 ) ;\ + SETRECT( DrawRect, _FTOL( x ), _FTOL( y ), GSYS.DrawSetting.DrawArea.right, _FTOL( y ) + font->BaseInfo.FontHeight + 3 ) ;\ if( DrawRect.left >= GSYS.DrawSetting.DrawArea.right ) return 0 ;\ y += ( float )font->BaseInfo.FontAddHeight / 2 ;\ }\ @@ -14729,6 +14895,14 @@ extern int NS_DrawFormatString( int x, int y, unsigned int Color, const TCHAR *F return NS_DrawStringToHandle( x, y, String, Color, DX_DEFAULT_FONT_HANDLE, 0, FALSE ) ; } +extern int NS_DrawFormatString2( int x, int y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) +{ + int FontHandle = DX_DEFAULT_FONT_HANDLE ; + + TCHAR_FONTHANDLE_FORMATSTRING_SETUP( -1 ) + + return NS_DrawStringToHandle( x, y, String, Color, DX_DEFAULT_FONT_HANDLE, EdgeColor, FALSE ) ; +} // 書式指定文字列を描画する extern int DrawFormatString_WCHAR_T( int x, int y, unsigned int Color, const wchar_t *FormatString, ... ) @@ -14747,6 +14921,14 @@ extern int NS_DrawFormatStringF( float x, float y, unsigned int Color, const TCH return NS_DrawStringFToHandle( x, y, String, Color, DX_DEFAULT_FONT_HANDLE, 0, FALSE ) ; } +extern int NS_DrawFormatString2F( float x, float y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) +{ + int FontHandle = DX_DEFAULT_FONT_HANDLE ; + + TCHAR_FONTHANDLE_FORMATSTRING_SETUP( -1 ) + + return NS_DrawStringFToHandle( x, y, String, Color, DX_DEFAULT_FONT_HANDLE, EdgeColor, FALSE ) ; +} // 書式指定文字列を描画する extern int DrawFormatStringF_WCHAR_T( float x, float y, unsigned int Color, const wchar_t *FormatString, ... ) @@ -14763,7 +14945,15 @@ extern int NS_DrawFormatVString( int x, int y, unsigned int Color, const TCHAR * TCHAR_FONTHANDLE_FORMATSTRING_SETUP( -1 ) - return NS_DrawStringToHandle( x, y, String, Color, DX_DEFAULT_FONT_HANDLE, Color, TRUE ) ; + return NS_DrawStringToHandle( x, y, String, Color, DX_DEFAULT_FONT_HANDLE, 0, TRUE ) ; +} +extern int NS_DrawFormatVString2( int x, int y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) +{ + int FontHandle = DX_DEFAULT_FONT_HANDLE ; + + TCHAR_FONTHANDLE_FORMATSTRING_SETUP( -1 ) + + return NS_DrawStringToHandle( x, y, String, Color, DX_DEFAULT_FONT_HANDLE, EdgeColor, TRUE ) ; } // 書式指定文字列を描画する @@ -14781,7 +14971,15 @@ extern int NS_DrawFormatVStringF( float x, float y, unsigned int Color, const TC TCHAR_FONTHANDLE_FORMATSTRING_SETUP( -1 ) - return NS_DrawStringFToHandle( x, y, String, Color, DX_DEFAULT_FONT_HANDLE, Color, TRUE ) ; + return NS_DrawStringFToHandle( x, y, String, Color, DX_DEFAULT_FONT_HANDLE, 0, TRUE ) ; +} +extern int NS_DrawFormatVString2F( float x, float y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) +{ + int FontHandle = DX_DEFAULT_FONT_HANDLE ; + + TCHAR_FONTHANDLE_FORMATSTRING_SETUP( -1 ) + + return NS_DrawStringFToHandle( x, y, String, Color, DX_DEFAULT_FONT_HANDLE, EdgeColor, TRUE ) ; } // 書式指定文字列を描画する @@ -14800,6 +14998,13 @@ extern int NS_DrawFormatStringToHandle( int x, int y, unsigned int Color, int Fo // 描画する return NS_DrawStringToHandle( x, y, String, Color, FontHandle, 0, FALSE ) ; } +extern int NS_DrawFormatString2ToHandle( int x, int y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) +{ + TCHAR_FONTHANDLE_FORMATSTRING_SETUP( -1 ) + + // 描画する + return NS_DrawStringToHandle( x, y, String, Color, FontHandle, EdgeColor, FALSE ) ; +} // 書式指定文字列を描画する extern int DrawFormatStringToHandle_WCHAR_T( int x, int y, unsigned int Color, int FontHandle, const wchar_t *FormatString, ... ) @@ -14818,6 +15023,13 @@ extern int NS_DrawFormatStringFToHandle( float x, float y, unsigned int Color, i // 描画する return NS_DrawStringFToHandle( x, y, String, Color, FontHandle, 0, FALSE ) ; } +extern int NS_DrawFormatString2FToHandle( float x, float y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) +{ + TCHAR_FONTHANDLE_FORMATSTRING_SETUP( -1 ) + + // 描画する + return NS_DrawStringFToHandle( x, y, String, Color, FontHandle, EdgeColor, FALSE ) ; +} // 書式指定文字列を描画する extern int DrawFormatStringFToHandle_WCHAR_T( float x, float y, unsigned int Color, int FontHandle, const wchar_t *FormatString, ... ) @@ -14836,6 +15048,13 @@ extern int NS_DrawFormatVStringToHandle( int x, int y, unsigned int Color, int F // 描画する return NS_DrawStringToHandle( x, y, String, Color, FontHandle, 0, TRUE ) ; } +extern int NS_DrawFormatVString2ToHandle( int x, int y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) +{ + TCHAR_FONTHANDLE_FORMATSTRING_SETUP( -1 ) + + // 描画する + return NS_DrawStringToHandle( x, y, String, Color, FontHandle, EdgeColor, TRUE ) ; +} // 書式指定文字列を描画する extern int DrawFormatVStringToHandle_WCHAR_T( int x, int y, unsigned int Color, int FontHandle, const wchar_t *FormatString, ... ) @@ -14854,6 +15073,13 @@ extern int NS_DrawFormatVStringFToHandle( float x, float y, unsigned int Color, // 描画する return NS_DrawStringFToHandle( x, y, String, Color, FontHandle, 0, TRUE ) ; } +extern int NS_DrawFormatVString2FToHandle( float x, float y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) +{ + TCHAR_FONTHANDLE_FORMATSTRING_SETUP( -1 ) + + // 描画する + return NS_DrawStringFToHandle( x, y, String, Color, FontHandle, EdgeColor, TRUE ) ; +} // 書式指定文字列を描画する extern int DrawFormatVStringFToHandle_WCHAR_T( float x, float y, unsigned int Color, int FontHandle, const wchar_t *FormatString, ... ) @@ -14941,12 +15167,12 @@ extern int DrawExtendVStringF_WCHAR_T( float x, float y, double ExRateX, double #define SETDRAWRECTCODE\ if( VerticalFlag )\ {\ - SETRECT( DrawRect, x, y, x + _DTOL( NS_GetFontSizeToHandle( FontHandle ) * ExRateY ) + 3, GSYS.DrawSetting.DrawArea.bottom ) ;\ + SETRECT( DrawRect, x, y, x + _DTOL( font->BaseInfo.FontHeight * ExRateY ) + 3, GSYS.DrawSetting.DrawArea.bottom ) ;\ if( DrawRect.left >= GSYS.DrawSetting.DrawArea.right ) return 0 ;\ }\ else\ {\ - SETRECT( DrawRect, x, y, GSYS.DrawSetting.DrawArea.right, y + _DTOL( NS_GetFontSizeToHandle( FontHandle ) * ExRateY ) + 3 ) ;\ + SETRECT( DrawRect, x, y, GSYS.DrawSetting.DrawArea.right, y + _DTOL( font->BaseInfo.FontHeight * ExRateY ) + 3 ) ;\ if( DrawRect.left >= GSYS.DrawSetting.DrawArea.right ) return 0 ;\ } @@ -15035,12 +15261,12 @@ extern int DrawExtendStringToHandle_WCHAR_T( int x, int y, double ExRateX, doubl #define SETDRAWRECTCODE\ if( VerticalFlag )\ {\ - SETRECT( DrawRect, _FTOL( x ), _FTOL( y ), _FTOL( x ) + _DTOL( NS_GetFontSizeToHandle( FontHandle ) * ExRateY ) + 3, GSYS.DrawSetting.DrawArea.bottom ) ;\ + SETRECT( DrawRect, _FTOL( x ), _FTOL( y ), _FTOL( x ) + _DTOL( font->BaseInfo.FontHeight * ExRateY ) + 3, GSYS.DrawSetting.DrawArea.bottom ) ;\ if( DrawRect.left >= GSYS.DrawSetting.DrawArea.right ) return 0 ;\ }\ else\ {\ - SETRECT( DrawRect, _FTOL( x ), _FTOL( y ), GSYS.DrawSetting.DrawArea.right, _FTOL( y ) + _DTOL( NS_GetFontSizeToHandle( FontHandle ) * ExRateY ) + 3 ) ;\ + SETRECT( DrawRect, _FTOL( x ), _FTOL( y ), GSYS.DrawSetting.DrawArea.right, _FTOL( y ) + _DTOL( font->BaseInfo.FontHeight * ExRateY ) + 3 ) ;\ if( DrawRect.left >= GSYS.DrawSetting.DrawArea.right ) return 0 ;\ } @@ -15170,6 +15396,14 @@ extern int NS_DrawExtendFormatString( int x, int y, double ExRateX, double ExRat return NS_DrawExtendStringToHandle( x, y, ExRateX, ExRateY, String, Color, DX_DEFAULT_FONT_HANDLE, 0, FALSE ) ; } +extern int NS_DrawExtendFormatString2( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) +{ + int FontHandle = DX_DEFAULT_FONT_HANDLE ; + + TCHAR_FONTHANDLE_FORMATSTRING_SETUP( -1 ) + + return NS_DrawExtendStringToHandle( x, y, ExRateX, ExRateY, String, Color, DX_DEFAULT_FONT_HANDLE, EdgeColor, FALSE ) ; +} // 書式指定文字列を拡大描画する extern int DrawExtendFormatString_WCHAR_T( int x, int y, double ExRateX, double ExRateY, unsigned int Color, const wchar_t *FormatString, ... ) @@ -15188,6 +15422,14 @@ extern int NS_DrawExtendFormatStringF( float x, float y, double ExRateX, double return NS_DrawExtendStringFToHandle( x, y, ExRateX, ExRateY, String, Color, DX_DEFAULT_FONT_HANDLE, 0, FALSE ) ; } +extern int NS_DrawExtendFormatString2F( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) +{ + int FontHandle = DX_DEFAULT_FONT_HANDLE ; + + TCHAR_FONTHANDLE_FORMATSTRING_SETUP( -1 ) + + return NS_DrawExtendStringFToHandle( x, y, ExRateX, ExRateY, String, Color, DX_DEFAULT_FONT_HANDLE, EdgeColor, FALSE ) ; +} // 書式指定文字列を拡大描画する extern int DrawExtendFormatStringF_WCHAR_T( float x, float y, double ExRateX, double ExRateY, unsigned int Color, const wchar_t *FormatString, ... ) @@ -15204,7 +15446,15 @@ extern int NS_DrawExtendFormatVString( int x, int y, double ExRateX, double ExRa TCHAR_FONTHANDLE_FORMATSTRING_SETUP( -1 ) - return NS_DrawExtendStringToHandle( x, y, ExRateX, ExRateY, String, Color, DX_DEFAULT_FONT_HANDLE, Color, TRUE ) ; + return NS_DrawExtendStringToHandle( x, y, ExRateX, ExRateY, String, Color, DX_DEFAULT_FONT_HANDLE, 0, TRUE ) ; +} +extern int NS_DrawExtendFormatVString2( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) +{ + int FontHandle = DX_DEFAULT_FONT_HANDLE ; + + TCHAR_FONTHANDLE_FORMATSTRING_SETUP( -1 ) + + return NS_DrawExtendStringToHandle( x, y, ExRateX, ExRateY, String, Color, DX_DEFAULT_FONT_HANDLE, EdgeColor, TRUE ) ; } // 書式指定文字列を拡大描画する @@ -15222,7 +15472,15 @@ extern int NS_DrawExtendFormatVStringF( float x, float y, double ExRateX, double TCHAR_FONTHANDLE_FORMATSTRING_SETUP( -1 ) - return NS_DrawExtendStringFToHandle( x, y, ExRateX, ExRateY, String, Color, DX_DEFAULT_FONT_HANDLE, Color, TRUE ) ; + return NS_DrawExtendStringFToHandle( x, y, ExRateX, ExRateY, String, Color, DX_DEFAULT_FONT_HANDLE, 0, TRUE ) ; +} +extern int NS_DrawExtendFormatVString2F( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) +{ + int FontHandle = DX_DEFAULT_FONT_HANDLE ; + + TCHAR_FONTHANDLE_FORMATSTRING_SETUP( -1 ) + + return NS_DrawExtendStringFToHandle( x, y, ExRateX, ExRateY, String, Color, DX_DEFAULT_FONT_HANDLE, EdgeColor, TRUE ) ; } // 書式指定文字列を拡大描画する @@ -15241,6 +15499,13 @@ extern int NS_DrawExtendFormatStringToHandle( int x, int y, double ExRateX, doub // 描画する return NS_DrawExtendStringToHandle( x, y, ExRateX, ExRateY, String, Color, FontHandle, 0, FALSE ) ; } +extern int NS_DrawExtendFormatString2ToHandle( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) +{ + TCHAR_FONTHANDLE_FORMATSTRING_SETUP( -1 ) + + // 描画する + return NS_DrawExtendStringToHandle( x, y, ExRateX, ExRateY, String, Color, FontHandle, EdgeColor, FALSE ) ; +} // 書式指定文字列を拡大描画する extern int DrawExtendFormatStringToHandle_WCHAR_T( int x, int y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const wchar_t *FormatString, ... ) @@ -15259,6 +15524,13 @@ extern int NS_DrawExtendFormatStringFToHandle( float x, float y, double ExRateX, // 描画する return NS_DrawExtendStringFToHandle( x, y, ExRateX, ExRateY, String, Color, FontHandle, 0, FALSE ) ; } +extern int NS_DrawExtendFormatString2FToHandle( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) +{ + TCHAR_FONTHANDLE_FORMATSTRING_SETUP( -1 ) + + // 描画する + return NS_DrawExtendStringFToHandle( x, y, ExRateX, ExRateY, String, Color, FontHandle, EdgeColor, FALSE ) ; +} // 書式指定文字列を拡大描画する extern int DrawExtendFormatStringFToHandle_WCHAR_T( float x, float y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const wchar_t *FormatString, ... ) @@ -15277,6 +15549,13 @@ extern int NS_DrawExtendFormatVStringToHandle( int x, int y, double ExRateX, dou // 描画する return NS_DrawExtendStringToHandle( x, y, ExRateX, ExRateY, String, Color, FontHandle, 0, TRUE ) ; } +extern int NS_DrawExtendFormatVString2ToHandle( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) +{ + TCHAR_FONTHANDLE_FORMATSTRING_SETUP( -1 ) + + // 描画する + return NS_DrawExtendStringToHandle( x, y, ExRateX, ExRateY, String, Color, FontHandle, EdgeColor, TRUE ) ; +} // 書式指定文字列を拡大描画する extern int DrawExtendFormatVStringToHandle_WCHAR_T( int x, int y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const wchar_t *FormatString, ... ) @@ -15295,6 +15574,13 @@ extern int NS_DrawExtendFormatVStringFToHandle( float x, float y, double ExRateX // 描画する return NS_DrawExtendStringFToHandle( x, y, ExRateX, ExRateY, String, Color, FontHandle, 0, TRUE ) ; } +extern int NS_DrawExtendFormatVString2FToHandle( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) +{ + TCHAR_FONTHANDLE_FORMATSTRING_SETUP( -1 ) + + // 描画する + return NS_DrawExtendStringFToHandle( x, y, ExRateX, ExRateY, String, Color, FontHandle, EdgeColor, TRUE ) ; +} // 書式指定文字列を拡大描画する extern int DrawExtendFormatVStringFToHandle_WCHAR_T( float x, float y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const wchar_t *FormatString, ... ) @@ -16157,6 +16443,14 @@ extern int DrawFormatString_VaList( int x, int y, unsigned int Color, const TCHA return NS_DrawStringToHandle( x, y, String, Color, DX_DEFAULT_FONT_HANDLE, 0, FALSE ) ; } +extern int DrawFormatString2_VaList( int x, int y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, va_list VaList ) +{ + int FontHandle = DX_DEFAULT_FONT_HANDLE ; + + TCHAR_FONTHANDLE_FORMATSTRING_VALIST_SETUP( -1 ) + + return NS_DrawStringToHandle( x, y, String, Color, DX_DEFAULT_FONT_HANDLE, EdgeColor, FALSE ) ; +} // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縦書き ) extern int DrawFormatVString_VaList( int x, int y, unsigned int Color, const TCHAR *FormatString, va_list VaList ) @@ -16165,7 +16459,15 @@ extern int DrawFormatVString_VaList( int x, int y, unsigned int Color, const TCH TCHAR_FONTHANDLE_FORMATSTRING_VALIST_SETUP( -1 ) - return NS_DrawStringToHandle( x, y, String, Color, DX_DEFAULT_FONT_HANDLE, Color, TRUE ) ; + return NS_DrawStringToHandle( x, y, String, Color, DX_DEFAULT_FONT_HANDLE, 0, TRUE ) ; +} +extern int DrawFormatVString2_VaList( int x, int y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, va_list VaList ) +{ + int FontHandle = DX_DEFAULT_FONT_HANDLE ; + + TCHAR_FONTHANDLE_FORMATSTRING_VALIST_SETUP( -1 ) + + return NS_DrawStringToHandle( x, y, String, Color, DX_DEFAULT_FONT_HANDLE, EdgeColor, TRUE ) ; } // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する @@ -16177,6 +16479,14 @@ extern int DrawExtendFormatString_VaList( int x, int y, double ExRateX, double E return NS_DrawExtendStringToHandle( x, y, ExRateX, ExRateY, String, Color, DX_DEFAULT_FONT_HANDLE, 0, FALSE ) ; } +extern int DrawExtendFormatString2_VaList( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, va_list VaList ) +{ + int FontHandle = DX_DEFAULT_FONT_HANDLE ; + + TCHAR_FONTHANDLE_FORMATSTRING_VALIST_SETUP( -1 ) + + return NS_DrawExtendStringToHandle( x, y, ExRateX, ExRateY, String, Color, DX_DEFAULT_FONT_HANDLE, EdgeColor, FALSE ) ; +} // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き ) extern int DrawExtendFormatVString_VaList( int x, int y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, va_list VaList ) @@ -16185,7 +16495,15 @@ extern int DrawExtendFormatVString_VaList( int x, int y, double ExRateX, double TCHAR_FONTHANDLE_FORMATSTRING_VALIST_SETUP( -1 ) - return NS_DrawExtendStringToHandle( x, y, ExRateX, ExRateY, String, Color, DX_DEFAULT_FONT_HANDLE, Color, TRUE ) ; + return NS_DrawExtendStringToHandle( x, y, ExRateX, ExRateY, String, Color, DX_DEFAULT_FONT_HANDLE, 0, TRUE ) ; +} +extern int DrawExtendFormatVString2_VaList( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, va_list VaList ) +{ + int FontHandle = DX_DEFAULT_FONT_HANDLE ; + + TCHAR_FONTHANDLE_FORMATSTRING_VALIST_SETUP( -1 ) + + return NS_DrawExtendStringToHandle( x, y, ExRateX, ExRateY, String, Color, DX_DEFAULT_FONT_HANDLE, EdgeColor, TRUE ) ; } // デフォルトフォントハンドルを使用して書式指定文字列を回転描画する @@ -16217,6 +16535,14 @@ extern int DrawFormatStringF_VaList( float x, float y, unsigned int Color, const return NS_DrawStringFToHandle( x, y, String, Color, DX_DEFAULT_FONT_HANDLE, 0, FALSE ) ; } +extern int DrawFormatString2F_VaList( float x, float y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, va_list VaList ) +{ + int FontHandle = DX_DEFAULT_FONT_HANDLE ; + + TCHAR_FONTHANDLE_FORMATSTRING_VALIST_SETUP( -1 ) + + return NS_DrawStringFToHandle( x, y, String, Color, DX_DEFAULT_FONT_HANDLE, EdgeColor, FALSE ) ; +} // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縦書き )( 座標指定が float 版 ) extern int DrawFormatVStringF_VaList( float x, float y, unsigned int Color, const TCHAR *FormatString, va_list VaList ) @@ -16225,7 +16551,15 @@ extern int DrawFormatVStringF_VaList( float x, float y, unsigned int Color, cons TCHAR_FONTHANDLE_FORMATSTRING_VALIST_SETUP( -1 ) - return NS_DrawStringFToHandle( x, y, String, Color, DX_DEFAULT_FONT_HANDLE, Color, TRUE ) ; + return NS_DrawStringFToHandle( x, y, String, Color, DX_DEFAULT_FONT_HANDLE, 0, TRUE ) ; +} +extern int DrawFormatVString2F_VaList( float x, float y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, va_list VaList ) +{ + int FontHandle = DX_DEFAULT_FONT_HANDLE ; + + TCHAR_FONTHANDLE_FORMATSTRING_VALIST_SETUP( -1 ) + + return NS_DrawStringFToHandle( x, y, String, Color, DX_DEFAULT_FONT_HANDLE, EdgeColor, TRUE ) ; } // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 座標指定が float 版 ) @@ -16237,6 +16571,14 @@ extern int DrawExtendFormatStringF_VaList( float x, float y, double ExRateX, dou return NS_DrawExtendStringFToHandle( x, y, ExRateX, ExRateY, String, Color, DX_DEFAULT_FONT_HANDLE, 0, FALSE ) ; } +extern int DrawExtendFormatString2F_VaList( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, va_list VaList ) +{ + int FontHandle = DX_DEFAULT_FONT_HANDLE ; + + TCHAR_FONTHANDLE_FORMATSTRING_VALIST_SETUP( -1 ) + + return NS_DrawExtendStringFToHandle( x, y, ExRateX, ExRateY, String, Color, DX_DEFAULT_FONT_HANDLE, EdgeColor, FALSE ) ; +} // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き )( 座標指定が float 版 ) extern int DrawExtendFormatVStringF_VaList( float x, float y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, va_list VaList ) @@ -16245,7 +16587,15 @@ extern int DrawExtendFormatVStringF_VaList( float x, float y, double ExRateX, do TCHAR_FONTHANDLE_FORMATSTRING_VALIST_SETUP( -1 ) - return NS_DrawExtendStringFToHandle( x, y, ExRateX, ExRateY, String, Color, DX_DEFAULT_FONT_HANDLE, Color, TRUE ) ; + return NS_DrawExtendStringFToHandle( x, y, ExRateX, ExRateY, String, Color, DX_DEFAULT_FONT_HANDLE, 0, TRUE ) ; +} +extern int DrawExtendFormatVString2F_VaList( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, va_list VaList ) +{ + int FontHandle = DX_DEFAULT_FONT_HANDLE ; + + TCHAR_FONTHANDLE_FORMATSTRING_VALIST_SETUP( -1 ) + + return NS_DrawExtendStringFToHandle( x, y, ExRateX, ExRateY, String, Color, DX_DEFAULT_FONT_HANDLE, EdgeColor, TRUE ) ; } // デフォルトフォントハンドルを使用して書式指定文字列を回転描画する( 座標指定が float 版 ) @@ -16276,6 +16626,13 @@ extern int DrawFormatStringToHandle_VaList( int x, int y, unsigned int Color, in // 描画する return NS_DrawStringToHandle( x, y, String, Color, FontHandle, 0, FALSE ) ; } +extern int DrawFormatString2ToHandle_VaList( int x, int y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, va_list VaList ) +{ + TCHAR_FONTHANDLE_FORMATSTRING_VALIST_SETUP( -1 ) + + // 描画する + return NS_DrawStringToHandle( x, y, String, Color, FontHandle, EdgeColor, FALSE ) ; +} // フォントハンドルを使用して書式指定文字列を描画する( 縦書き ) extern int DrawFormatVStringToHandle_VaList( int x, int y, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) @@ -16285,6 +16642,13 @@ extern int DrawFormatVStringToHandle_VaList( int x, int y, unsigned int Color, i // 描画する return NS_DrawStringToHandle( x, y, String, Color, FontHandle, 0, TRUE ) ; } +extern int DrawFormatVString2ToHandle_VaList( int x, int y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, va_list VaList ) +{ + TCHAR_FONTHANDLE_FORMATSTRING_VALIST_SETUP( -1 ) + + // 描画する + return NS_DrawStringToHandle( x, y, String, Color, FontHandle, EdgeColor, TRUE ) ; +} // フォントハンドルを使用して書式指定文字列を拡大描画する extern int DrawExtendFormatStringToHandle_VaList( int x, int y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) @@ -16294,6 +16658,13 @@ extern int DrawExtendFormatStringToHandle_VaList( int x, int y, double ExRateX, // 描画する return NS_DrawExtendStringToHandle( x, y, ExRateX, ExRateY, String, Color, FontHandle, 0, FALSE ) ; } +extern int DrawExtendFormatString2ToHandle_VaList( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, va_list VaList ) +{ + TCHAR_FONTHANDLE_FORMATSTRING_VALIST_SETUP( -1 ) + + // 描画する + return NS_DrawExtendStringToHandle( x, y, ExRateX, ExRateY, String, Color, FontHandle, EdgeColor, FALSE ) ; +} // フォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き ) extern int DrawExtendFormatVStringToHandle_VaList( int x, int y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) @@ -16303,6 +16674,13 @@ extern int DrawExtendFormatVStringToHandle_VaList( int x, int y, double ExRateX, // 描画する return NS_DrawExtendStringToHandle( x, y, ExRateX, ExRateY, String, Color, FontHandle, 0, TRUE ) ; } +extern int DrawExtendFormatVString2ToHandle_VaList( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, va_list VaList ) +{ + TCHAR_FONTHANDLE_FORMATSTRING_VALIST_SETUP( -1 ) + + // 描画する + return NS_DrawExtendStringToHandle( x, y, ExRateX, ExRateY, String, Color, FontHandle, EdgeColor, TRUE ) ; +} // フォントハンドルを使用して書式指定文字列を回転描画する extern int DrawRotaFormatStringToHandle_VaList( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, const TCHAR *FormatString, va_list VaList ) @@ -16330,6 +16708,13 @@ extern int DrawFormatStringFToHandle_VaList( float x, float y, unsigned int Colo // 描画する return NS_DrawStringFToHandle( x, y, String, Color, FontHandle, 0, FALSE ) ; } +extern int DrawFormatString2FToHandle_VaList( float x, float y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, va_list VaList ) +{ + TCHAR_FONTHANDLE_FORMATSTRING_VALIST_SETUP( -1 ) + + // 描画する + return NS_DrawStringFToHandle( x, y, String, Color, FontHandle, EdgeColor, FALSE ) ; +} // フォントハンドルを使用して書式指定文字列を描画する( 縦書き )( 座標指定が float 版 ) extern int DrawFormatVStringFToHandle_VaList( float x, float y, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) @@ -16339,6 +16724,13 @@ extern int DrawFormatVStringFToHandle_VaList( float x, float y, unsigned int Col // 描画する return NS_DrawStringFToHandle( x, y, String, Color, FontHandle, 0, TRUE ) ; } +extern int DrawFormatVString2FToHandle_VaList( float x, float y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, va_list VaList ) +{ + TCHAR_FONTHANDLE_FORMATSTRING_VALIST_SETUP( -1 ) + + // 描画する + return NS_DrawStringFToHandle( x, y, String, Color, FontHandle, EdgeColor, TRUE ) ; +} // フォントハンドルを使用して書式指定文字列を拡大描画する( 座標指定が float 版 ) extern int DrawExtendFormatStringFToHandle_VaList( float x, float y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) @@ -16348,6 +16740,13 @@ extern int DrawExtendFormatStringFToHandle_VaList( float x, float y, double ExRa // 描画する return NS_DrawExtendStringFToHandle( x, y, ExRateX, ExRateY, String, Color, FontHandle, 0, FALSE ) ; } +extern int DrawExtendFormatString2FToHandle_VaList( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, va_list VaList ) +{ + TCHAR_FONTHANDLE_FORMATSTRING_VALIST_SETUP( -1 ) + + // 描画する + return NS_DrawExtendStringFToHandle( x, y, ExRateX, ExRateY, String, Color, FontHandle, EdgeColor, FALSE ) ; +} // フォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き )( 座標指定が float 版 ) extern int DrawExtendFormatVStringFToHandle_VaList( float x, float y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) @@ -16357,6 +16756,13 @@ extern int DrawExtendFormatVStringFToHandle_VaList( float x, float y, double ExR // 描画する return NS_DrawExtendStringFToHandle( x, y, ExRateX, ExRateY, String, Color, FontHandle, 0, TRUE ) ; } +extern int DrawExtendFormatVString2FToHandle_VaList( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, va_list VaList ) +{ + TCHAR_FONTHANDLE_FORMATSTRING_VALIST_SETUP( -1 ) + + // 描画する + return NS_DrawExtendStringFToHandle( x, y, ExRateX, ExRateY, String, Color, FontHandle, EdgeColor, TRUE ) ; +} // フォントハンドルを使用して書式指定文字列を回転描画する( 座標指定が float 版 ) extern int DrawRotaFormatStringFToHandle_VaList( float x, float y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, const TCHAR *FormatString, va_list VaList ) diff --git a/DxFont.h b/DxFont.h index 692addb..fda6ec5 100644 --- a/DxFont.h +++ b/DxFont.h @@ -2,7 +2,7 @@ // // DXライブラリ フォント処理用プログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -83,8 +83,15 @@ FONTDATAFILEHEADER #define DEFAULT_FONT_HANDLE_SETUP \ if( FontHandle == DX_DEFAULT_FONT_HANDLE )\ {\ - RefreshDefaultFont() ;\ - FontHandle = FSYS.DefaultFontHandle ;\ + if( FSYS.UserDefaultFontHandle > 0 )\ + {\ + FontHandle = FSYS.UserDefaultFontHandle ;\ + }\ + else\ + {\ + RefreshDefaultFont() ;\ + FontHandle = FSYS.DefaultFontHandle ;\ + }\ } // 構造体定義 -------------------------------------------------------------------- @@ -264,6 +271,7 @@ struct FONTMANAGE int LineSpace ; // 改行の際に座標に加算するドット数 int FontType ; // フォントのタイプ int EdgeSize ; // エッジの太さ + BASEIMAGE EdgeCircleImage ; // エッジの円画像 SIZE CacheImageSize ; // キャッシュ画像ののサイズ int LengthCharNum ; // キャッシュ画像の縦に並べられる文字の数 @@ -302,6 +310,7 @@ struct FONTSYSTEM int CacheCharNum ; // フォントキャッシュでキャッシュできる文字の数 int UsePremulAlphaFlag ; // 乗算済みαを使用するかどうかのフラグ( TRUE:使用する FALSE:使用しない ) int DisableAdjustFontSize ; // フォントサイズの補正を行わないかどうかのフラグ( TRUE:補正を行わない FALSE:補正を行う ) + int OnlyDrawType ; // フォントの描画で縁のみ、又は本体のみ描画を行うための設定( OnlyType 0:通常描画 1:本体のみ描画 2:縁のみ描画 ) BYTE BitCountTable[ 256 ] ; // ビットカウントテーブル BYTE MAX15ToMAX16[ 16 ] ; // 0〜15 の値を 0〜16 に変換するためのテーブル BYTE MAX255ToMAX16[ 256 ] ; // 0〜255 の値を 0〜16 に変換するためのテーブル @@ -315,6 +324,7 @@ struct FONTSYSTEM int DefaultFontImageGraphHandle[ 8 ][ 16 ] ; // デフォルトフォントイメージのグラフィックハンドル int DefaultFontHandle ; // デフォルトで使用するフォントのハンドル + int UserDefaultFontHandle ; // ユーザー指定のデフォルトのフォントハンドル int EnableInitDefaultFontName ; // デフォルトで使用するフォントの設定 wchar_t DefaultFontName[ 256 ] ; @@ -361,6 +371,7 @@ extern FONTSYSTEM FontSystem ; extern int InitializeFontHandle( HANDLEINFO *HandleInfo ) ; // フォントハンドルを初期化する extern int TerminateFontHandle( HANDLEINFO *HandleInfo ) ; // フォントハンドルの後始末をする +extern int DumpInfoFontHandle( HANDLEINFO *HandleInfo ) ; // フォントハンドルの情報出力 extern int RefreshFontDrawResourceToHandle( FONTMANAGE *ManageData, int ASyncThread = FALSE ) ; // フォントハンドルが使用する描画バッファやテクスチャキャッシュを再初期化する extern int SetAntialiasingFontOnlyFlag( int AntialiasingFontOnlyFlag ) ; // アンチエイリアスフォントのみ使用できるか、フラグをセットする @@ -524,16 +535,24 @@ extern FONTCHARDATA *GetFontCacheChar( FONTMANAGE *ManageData, DWORD CharCode, D extern int GetDrawFormatStringCharInfoToHandle_VaList( DRAWCHARINFO *InfoBuffer, size_t InfoBufferSize, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用した書式付き文字列の1文字毎の情報を取得する extern int GetDrawExtendFormatStringCharInfoToHandle_VaList( DRAWCHARINFO *InfoBuffer, size_t InfoBufferSize, double ExRateX, double ExRateY, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用した書式付き文字列の1文字毎の情報を取得する -extern int DrawFormatString_VaList( int x, int y, unsigned int Color, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する -extern int DrawFormatVString_VaList( int x, int y, unsigned int Color, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縦書き ) -extern int DrawExtendFormatString_VaList( int x, int y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する -extern int DrawExtendFormatVString_VaList( int x, int y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き ) +extern int DrawFormatString_VaList( int x, int y, unsigned int Color, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する +extern int DrawFormatVString_VaList( int x, int y, unsigned int Color, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縦書き ) +extern int DrawFormatString2_VaList( int x, int y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する +extern int DrawFormatVString2_VaList( int x, int y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縦書き ) +extern int DrawExtendFormatString_VaList( int x, int y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する +extern int DrawExtendFormatVString_VaList( int x, int y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き ) +extern int DrawExtendFormatString2_VaList( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する +extern int DrawExtendFormatVString2_VaList( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き ) extern int DrawRotaFormatString_VaList( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, unsigned int EdgeColor, int VerticalFlag, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を回転描画する -extern int DrawModiFormatString_VaList( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, unsigned int Color, unsigned int EdgeColor, int VerticalFlag, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を変形描画する -extern int DrawFormatStringF_VaList( float x, float y, unsigned int Color, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 座標指定が float 版 ) -extern int DrawFormatVStringF_VaList( float x, float y, unsigned int Color, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縦書き )( 座標指定が float 版 ) -extern int DrawExtendFormatStringF_VaList( float x, float y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 座標指定が float 版 ) -extern int DrawExtendFormatVStringF_VaList( float x, float y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き )( 座標指定が float 版 ) +extern int DrawModiFormatString_VaList( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, unsigned int Color, unsigned int EdgeColor, int VerticalFlag, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を変形描画する +extern int DrawFormatStringF_VaList( float x, float y, unsigned int Color, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 座標指定が float 版 ) +extern int DrawFormatVStringF_VaList( float x, float y, unsigned int Color, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縦書き )( 座標指定が float 版 ) +extern int DrawFormatString2F_VaList( float x, float y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 座標指定が float 版 ) +extern int DrawFormatVString2F_VaList( float x, float y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縦書き )( 座標指定が float 版 ) +extern int DrawExtendFormatStringF_VaList( float x, float y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 座標指定が float 版 ) +extern int DrawExtendFormatVStringF_VaList( float x, float y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き )( 座標指定が float 版 ) +extern int DrawExtendFormatString2F_VaList( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 座標指定が float 版 ) +extern int DrawExtendFormatVString2F_VaList( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き )( 座標指定が float 版 ) extern int DrawRotaFormatStringF_VaList( float x, float y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, unsigned int EdgeColor, int VerticalFlag, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を回転描画する( 座標指定が float 版 ) extern int DrawModiFormatStringF_VaList( float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, unsigned int Color, unsigned int EdgeColor, int VerticalFlag, const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用して書式指定文字列を変形描画する( 座標指定が float 版 ) extern int DrawFormatStringToZBuffer_VaList( int x, int y, int WriteZMode /* DX_ZWRITE_MASK 等 */ , const TCHAR *FormatString, va_list VaList ) ; // デフォルトフォントハンドルを使用してZバッファに対して書式指定文字列を描画する @@ -543,16 +562,24 @@ extern FONTCHARDATA *GetFontCacheChar( FONTMANAGE *ManageData, DWORD CharCode, D extern int DrawRotaFormatStringToZBuffer_VaList( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, int WriteZMode /* DX_ZWRITE_MASK 等 */ , int VerticalFlag , const TCHAR *FormatString , va_list VaList ) ; // デフォルトフォントハンドルを使用してZバッファに対して書式指定文字列を回転描画する extern int DrawModiFormatStringToZBuffer_VaList( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int WriteZMode /* DX_ZWRITE_MASK 等 */ , int VerticalFlag , const TCHAR *FormatString , va_list VaList ) ; // デフォルトフォントハンドルを使用してZバッファに対して書式指定文字列を変形描画する -extern int DrawFormatStringToHandle_VaList( int x, int y, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を描画する -extern int DrawFormatVStringToHandle_VaList( int x, int y, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を描画する( 縦書き ) -extern int DrawExtendFormatStringToHandle_VaList( int x, int y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する -extern int DrawExtendFormatVStringToHandle_VaList( int x, int y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き ) -extern int DrawRotaFormatStringToHandle_VaList( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を回転描画する -extern int DrawModiFormatStringToHandle_VaList( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を変形描画する -extern int DrawFormatStringFToHandle_VaList( float x, float y, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を描画する( 座標指定が float 版 ) -extern int DrawFormatVStringFToHandle_VaList( float x, float y, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を描画する( 縦書き )( 座標指定が float 版 ) -extern int DrawExtendFormatStringFToHandle_VaList( float x, float y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 座標指定が float 版 ) -extern int DrawExtendFormatVStringFToHandle_VaList( float x, float y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き )( 座標指定が float 版 ) +extern int DrawFormatStringToHandle_VaList( int x, int y, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を描画する +extern int DrawFormatVStringToHandle_VaList( int x, int y, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を描画する( 縦書き ) +extern int DrawFormatString2ToHandle_VaList( int x, int y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を描画する +extern int DrawFormatVString2ToHandle_VaList( int x, int y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を描画する( 縦書き ) +extern int DrawExtendFormatStringToHandle_VaList( int x, int y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する +extern int DrawExtendFormatVStringToHandle_VaList( int x, int y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き ) +extern int DrawExtendFormatString2ToHandle_VaList( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する +extern int DrawExtendFormatVString2ToHandle_VaList( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き ) +extern int DrawRotaFormatStringToHandle_VaList( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を回転描画する +extern int DrawModiFormatStringToHandle_VaList( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を変形描画する +extern int DrawFormatStringFToHandle_VaList( float x, float y, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を描画する( 座標指定が float 版 ) +extern int DrawFormatVStringFToHandle_VaList( float x, float y, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を描画する( 縦書き )( 座標指定が float 版 ) +extern int DrawFormatString2FToHandle_VaList( float x, float y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を描画する( 座標指定が float 版 ) +extern int DrawFormatVString2FToHandle_VaList( float x, float y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を描画する( 縦書き )( 座標指定が float 版 ) +extern int DrawExtendFormatStringFToHandle_VaList( float x, float y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 座標指定が float 版 ) +extern int DrawExtendFormatVStringFToHandle_VaList( float x, float y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き )( 座標指定が float 版 ) +extern int DrawExtendFormatString2FToHandle_VaList( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 座標指定が float 版 ) +extern int DrawExtendFormatVString2FToHandle_VaList( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き )( 座標指定が float 版 ) extern int DrawRotaFormatStringFToHandle_VaList( float x, float y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, const TCHAR *FormatString, va_list VaList ) ;// フォントハンドルを使用して書式指定文字列を回転描画する( 座標指定が float 版 ) extern int DrawModiFormatStringFToHandle_VaList( float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用して書式指定文字列を変形描画する( 座標指定が float 版 ) extern int DrawFormatStringToHandleToZBuffer_VaList( int x, int y, int FontHandle, int WriteZMode /* DX_ZWRITE_MASK 等 */ , const TCHAR *FormatString, va_list VaList ) ; // フォントハンドルを使用してZバッファに対して書式指定文字列を描画する diff --git a/DxFunctionAndroid.h b/DxFunctionAndroid.h index 2b11fdf..7af76f0 100644 --- a/DxFunctionAndroid.h +++ b/DxFunctionAndroid.h @@ -2,7 +2,7 @@ // // DXライブラリ Android専用関数プロトタイプ宣言用ヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -28,6 +28,15 @@ namespace DxLib // アプリで使用している NativeActivity を取得する extern const ANativeActivity *GetNativeActivity( void ) ; +// アプリの ANativeWindow を取得する +extern const ANativeWindow *GetNativeWindow( void ) ; + +// アプリの入力イベントをフックするコールバック関数を登録する +// CallbackFunction : 入力イベント発生時に呼ばれるコールバック関数、NULL を渡すと設定解除 +// InputEvent : 発生した入力イベントの AInputEvent +// Data : コールバック関数に渡すアドレス、不要な場合は NULL +extern int SetAndroidInputEventFookFunction( int32_t ( *CallbackFunction )( AInputEvent *InputEvent, void *Data ), void *Data ) ; + // Android の APIレベルを取得する extern int GetAndroidAPILevel( void ) ; @@ -62,6 +71,12 @@ extern int GetAndroidDisplayResolution( int *SizeX, int *SizeY ) ; // ディスプレイを本体設定に従って時間経過でスリープ状態になることを許可するかどうかを設定する( Flag TRUE = スリープ状態になることを許可しない FALSE = スリープ状態を許可する( デフォルト ) ) extern int SetKeepScreenOnFlag( int Flag ) ; +// ディスプレイカットアウト領域の数を取得する +extern int GetDisplayCutoutRectCount( void ) ; + +// ディスプレイカットアウト領域の矩形を取得する( 引数の No はカットアウト領域の番号 ) +extern RECT GetDisplayCutoutRect( int No ) ; + // 加速度センサーのベクトル値を取得する extern VECTOR GetAccelerometerVector( void ) ; diff --git a/DxFunctionWin.h b/DxFunctionWin.h index b1f939a..aa6c049 100644 --- a/DxFunctionWin.h +++ b/DxFunctionWin.h @@ -2,7 +2,7 @@ // // DXライブラリ Windows専用関数プロトタイプ宣言用ヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -120,6 +120,7 @@ namespace DxLib extern int SetValidMousePointerWindowOutClientAreaMoveFlag( int Flag ) ; // マウスポインタがウインドウのクライアントエリアの外にいけるかどうかを設定する( TRUE:いける( デフォルト設定 ) FALSE:いけない ) extern int SetUseBackBufferTransColorFlag( int Flag ) ; // バックバッファの透過色の部分を透過させるかどうかを設定する( TRUE:透過させる FALSE:透過させない( デフォルト ) ) extern int SetUseUpdateLayerdWindowFlag( int Flag ) ; // UpdateLayerdWindowForBaseImage や UpdateLayerdWindowForSoftImage を使用するかどうかを設定する( TRUE:使用する FALSE:使用しない ) +extern int SetUseMouseEventTransparentWindowFlag( int Flag ) ; // SetUseBackBufferTransColorFlag( TRUE ); 又は SetUseUpdateLayerdWindowFlag( TRUE ); を設定の際にマウス関係のイベントを背後のウィンドウに透過させるかを設定する( TRUE:透過する FALSE:透過しない( デフォルト ) ) extern int SetResourceModule( HMODULE ResourceModule ) ; // リソースを読み込む際に使用するモジュールを設定する( NULL を指定すると初期状態に戻ります、デフォルトでは NULL ) extern int SetUseDxLibWM_PAINTProcess( int Flag ) ; // WM_PAINT メッセージが来た際に『DXライブラリの WM_PAINTメッセージが来た際の処理』を行うかどうかを設定する( 別スレッドで描画処理を行う場合などで使用 ) extern int SetWindows10_WM_CHAR_CancelTime( int MilliSecond ) ; // Windows10 で WM_CHAR で短時間に連続して同じ文字が入力された場合の無効扱いにする時間を設定する( MilliSecond のミリ秒以内に連続して同じ文字が入力された場合に無効にする、MilliSecond の値をマイナスにするとデフォルトの設定に戻る ) @@ -325,6 +326,7 @@ namespace DxLib extern int SetScreenFlipTargetWindow( HWND TargetWindow, double ScaleX DEFAULTPARAM( = 1.0 ) , double ScaleY DEFAULTPARAM( = 1.0 ) ) ; // ScreenFlip で画像を転送する先のウインドウを設定する( NULL を指定すると設定解除 ) extern int GetDesktopScreenGraph( int x1, int y1, int x2, int y2, int GrHandle, int DestX DEFAULTPARAM( = 0 ) , int DestY DEFAULTPARAM( = 0 ) ) ; // デスクトップ画面から指定領域の画像情報をグラフィックハンドルに転送する extern void * GetDesktopScreenGraphMemImage( int x1, int y1, int x2, int y2, int *Width, int *Height, int *Stride, int ColorBitDepth DEFAULTPARAM( = 32 ) ) ; // デスクトップ画面から指定領域の画像のメモリイメージの先頭アドレスとイメージの幅・高さ・ストライドを取得する( イメージのフォーマットは ColorBitDepth = 32( バイト順で B8G8R8X8 の 32bitカラー ) ColorBitDepth = 24( バイト順で B8G8R8 の 24bitカラー ) ) +extern int GetOtherWindowGraph( HWND Window, int x1, int y1, int x2, int y2, int GrHandle, int DestX DEFAULTPARAM( = 0 ) , int DestY DEFAULTPARAM( = 0 ) ) ; // 指定のウィンドウの指定領域の画像情報をグラフィックハンドルに転送する // その他設定関係関数 extern int SetMultiThreadFlag( int Flag ) ; // DirectDraw や Direct3D の協調レベルをマルチスレッド対応にするかどうかをセットする( TRUE:マルチスレッド対応にする FALSE:マルチスレッド対応にしない( デフォルト ) ) @@ -338,6 +340,8 @@ namespace DxLib extern int GetUseDirect3DVersion( void ) ; // 使用している Direct3D のバージョンを取得する( DX_DIRECT3D_9 など ) extern int GetUseDirect3D11FeatureLevel( void ) ; // 使用している Direct3D11 の FeatureLevel ( DX_DIRECT3D_11_FEATURE_LEVEL_9_1 等 )を取得する( 戻り値 -1:エラー -1以外:Feature Level ) extern int SetUseDirect3D11AdapterIndex( int Index ) ; // 使用するグラフィックスデバイスのアダプターのインデックスを設定する +extern int SetUseDirect3D11BGRASupport( int Flag ) ; // D3D11Device 作成時に D3D11_CREATE_DEVICE_BGRA_SUPPORT を指定するかどうかを設定する( TRUE:指定する FALSE:指定しない( デフォルト ) ) +extern int GetUseDirect3D11BGRASupport( void ) ; // D3D11Device 作成時に D3D11_CREATE_DEVICE_BGRA_SUPPORT を指定するかどうかを取得する extern int SetUseDirectDrawFlag( int Flag ) ; // ( 同効果のSetUseSoftwareRenderModeFlag を使用して下さい )DirectDrawを使用するかどうかを設定する extern int SetUseGDIFlag( int Flag ) ; // GDI描画を使用するかどうかを設定する extern int GetUseGDIFlag( void ) ; // GDI描画を使用するかどうかを取得する @@ -480,7 +484,9 @@ namespace DxLib extern int SetEnableWASAPIFlag( int Flag, int IsExclusive DEFAULTPARAM( = TRUE ) , int DevicePeriod DEFAULTPARAM( = -1 ) , int SamplePerSec DEFAULTPARAM( = 44100 ) ) ; // サウンドの再生にWASAPIを使用するかどうかを設定する( Flag TRUE:使用する FALSE:使用しない( デフォルト ), IsExclusive TRUE:排他モードを使用する FALSE:排他モードを使用しない, DevicePeriod 再生遅延時間、100ナノ秒単位( 100000 で 10ミリ秒 )、-1でデフォルト値, SamplePerSec サンプリングレート ) #ifndef DX_NON_ASIO extern int SetEnableASIOFlag( int Flag, int BufferSize DEFAULTPARAM( = -1 ) , int SamplePerSec DEFAULTPARAM( = 44100 ) ) ; // サウンドの再生にASIOを使用するかどうかを設定する( Flag TRUE:使用する FALSE:使用しない( デフォルト ), BufferSize 再生バッファのサイズ、小さいほど遅延が少なくなりますが、処理が間に合わずにブツブツノイズが発生する可能性も高くなります( -1 でデフォルト値 ), SamplePerSec サンプリングレート ) +extern int SetUseASIODriverIndex( int Index ) ; // サウンドの再生に使用するASIOドライバーの番号を設定する( デフォルトでは 0 ) #endif // DX_NON_ASIO +extern int SetEnableMMEwaveOutFlag( int Flag, int BufferSamples DEFAULTPARAM( = -1 ) , int SamplePerSec DEFAULTPARAM( = 44100 ) ) ; // サウンドの再生にマルチメディアAPIの waveOut を使用するかどうかを設定する( Flag TRUE:使用する FALSE:使用しない( デフォルト ), BufferSamples 再生バッファのサイズ、小さいほど遅延が少なくなりますが、処理が間に合わずにブツブツノイズが発生する可能性も高くなります( -1 でデフォルト値 ), SamplePerSec サンプリングレート ) // 情報取得系関数 extern const void* GetDSoundObj( void ) ; /* 戻り値を IDirectSound * にキャストして下さい */ // DXライブラリが使用している DirectSound オブジェクトを取得する diff --git a/DxFunctioniOS.h b/DxFunctioniOS.h index badbddf..6e814f4 100644 --- a/DxFunctioniOS.h +++ b/DxFunctioniOS.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ iOS蟆ら畑髢「謨ー繝励Ο繝医ち繧、繝怜ョ」險逕ィ繝倥ャ繝繝輔ぃ繧、繝ォ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxGateway.cpp b/DxGateway.cpp index c81bf43..fb92bac 100644 --- a/DxGateway.cpp +++ b/DxGateway.cpp @@ -2,7 +2,7 @@ // // DXライブラリ 内部との出入り口プログラムファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -960,6 +960,14 @@ extern LONGLONG FileRead_size_WithStrLen( const TCHAR *FilePath, size_t FilePath DXFUNC_END return Result ; } +extern LONGLONG FileRead_size_handle( int FileHandle ) +{ + LONGLONG Result ; + DXFUNC_BEGIN + Result = NS_FileRead_size_handle( FileHandle ) ; + DXFUNC_END + return Result ; +} extern int FileRead_close( int FileHandle ) { int Result ; @@ -1614,6 +1622,14 @@ extern int SetOutApplicationLogValidFlag( int Flag ) DXFUNC_END return Result ; } +extern int SetOutApplicationSystemLogValidFlag( int Flag ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_SetOutApplicationSystemLogValidFlag( Flag ) ; + DXFUNC_END + return Result ; +} extern int SetApplicationLogFileName( const TCHAR *FileName ) { int Result ; @@ -2074,6 +2090,14 @@ extern int SetUseUpdateLayerdWindowFlag( int Flag ) DXFUNC_END return Result ; } +extern int SetUseMouseEventTransparentWindowFlag( int Flag ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_SetUseMouseEventTransparentWindowFlag( Flag ) ; + DXFUNC_END + return Result ; +} extern int SetResourceModule( HMODULE ResourceModule ) { int Result ; @@ -2191,6 +2215,30 @@ extern int SetDeleteHandleFlag( int Handle, int *DeleteFlag ) DXFUNC_END return Result ; } +extern int GetHandleNum( int HandleType ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_GetHandleNum( HandleType ) ; + DXFUNC_END + return Result ; +} +extern int GetMaxHandleNum( int HandleType ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_GetMaxHandleNum( HandleType ) ; + DXFUNC_END + return Result ; +} +extern int DumpHandleInfo( int HandleType ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_DumpHandleInfo( HandleType ) ; + DXFUNC_END + return Result ; +} extern int GetClipboardText( TCHAR *DestBuffer ) { @@ -2901,6 +2949,14 @@ extern int SetMouseDispFlag( int DispFlag ) DXFUNC_END return Result ; } +extern int SetMouseDispIgnoreMenuFlag( int IgnoreMenuFlag ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_SetMouseDispIgnoreMenuFlag( IgnoreMenuFlag ) ; + DXFUNC_END + return Result ; +} #ifndef DX_NON_INPUT extern int GetMousePoint( int *XBuf, int *YBuf ) { @@ -2987,11 +3043,11 @@ extern int GetTouchInputNum( void ) return Result ; } -extern int GetTouchInput( int InputNo, int *PositionX, int *PositionY, int *ID , int *Device ) +extern int GetTouchInput( int InputNo, int *PositionX, int *PositionY, int *ID , int *Device, float *Pressure ) { int Result ; DXFUNC_BEGIN - Result = NS_GetTouchInput( InputNo, PositionX, PositionY, ID , Device ) ; + Result = NS_GetTouchInput( InputNo, PositionX, PositionY, ID , Device, Pressure ) ; DXFUNC_END return Result ; } @@ -3252,6 +3308,14 @@ extern int SRand( int Seed ) return Result ; } #ifndef DX_NON_MERSENNE_TWISTER +extern DWORD GetMersenneTwisterRand( void ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_GetMersenneTwisterRand() ; + DXFUNC_END + return Result ; +} extern DWORD_PTR CreateRandHandle( int Seed ) { DWORD_PTR Result ; @@ -3284,6 +3348,15 @@ extern int GetRandHandle( DWORD_PTR RandHandle, int RandMax ) DXFUNC_END return Result ; } +extern DWORD GetMersenneTwisterRandHandle( DWORD_PTR RandHandle ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_GetMersenneTwisterRandHandle( RandHandle ) ; + DXFUNC_END + return Result ; +} + #endif // DX_NON_MERSENNE_TWISTER // バッテリー関連 @@ -3867,6 +3940,14 @@ extern int DrawIMEInputString( int x, int y, int SelectStringNum , int DrawCandi DXFUNC_END return Result ; } +extern int DrawIMEInputExtendString( int x, int y, double ExRateX, double ExRateY, int SelectStringNum , int DrawCandidateList ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_DrawIMEInputExtendString( x, y, ExRateX, ExRateY, SelectStringNum , DrawCandidateList ) ; + DXFUNC_END + return Result ; +} extern int SetUseIMEFlag( int UseFlag ) { int Result ; @@ -4059,6 +4140,24 @@ extern const IMEINPUTDATA *GetIMEInputData( void ) return Result ; } +extern int SetIMEInputString( const TCHAR *String ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_SetIMEInputString( String ) ; + DXFUNC_END + return Result ; +} + +extern int SetIMEInputStringWithStrLen( const TCHAR *String, size_t StringLength ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_SetIMEInputStringWithStrLen( String, StringLength ) ; + DXFUNC_END + return Result ; +} + extern int SetKeyInputStringColor( ULONGLONG NmlStr, ULONGLONG NmlCur, ULONGLONG IMEStrBack, ULONGLONG IMECur, ULONGLONG IMELine, ULONGLONG IMESelectStr, ULONGLONG IMEModeStr , ULONGLONG NmlStrE, ULONGLONG IMESelectStrE, ULONGLONG IMEModeStrE, ULONGLONG IMESelectWinE, ULONGLONG IMESelectWinF, ULONGLONG SelectStrBackColor , ULONGLONG SelectStrColor , ULONGLONG SelectStrEdgeColor, ULONGLONG IMEStr, ULONGLONG IMEStrE ) { int Result ; @@ -4185,6 +4284,14 @@ extern int DrawKeyInputString( int x, int y, int InputHandle , int DrawCandidate DXFUNC_END return Result ; } +extern int DrawKeyInputExtendString( int x, int y, double ExRateX, double ExRateY, int InputHandle , int DrawCandidateList ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_DrawKeyInputExtendString( x, y, ExRateX, ExRateY, InputHandle , DrawCandidateList ) ; + DXFUNC_END + return Result ; +} extern int SetKeyInputDrawArea( int x1, int y1, int x2, int y2, int InputHandle ) { int Result ; @@ -4487,6 +4594,22 @@ extern double GetJoypadDeadZone( int InputType ) DXFUNC_END return Result ; } +extern int SetJoypadDefaultDeadZoneAll( double Zone ) +{ + double Result ; + DXFUNC_BEGIN + Result = NS_SetJoypadDefaultDeadZoneAll( Zone ) ; + DXFUNC_END + return Result ; +} +extern double GetJoypadDefaultDeadZoneAll( void ) +{ + double Result ; + DXFUNC_BEGIN + Result = NS_GetJoypadDefaultDeadZoneAll() ; + DXFUNC_END + return Result ; +} extern int StartJoypadVibration( int InputType, int Power, int Time, int EffectIndex ) { int Result ; @@ -4519,6 +4642,14 @@ extern int ReSetupJoypad( void ) DXFUNC_END return Result ; } +extern int ReSetupInputSystem( void ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_ReSetupInputSystem(); + DXFUNC_END + return Result ; +} extern int SetUseJoypadVibrationFlag( int Flag ) { @@ -4750,6 +4881,14 @@ extern int GetVideoMemorySize( int *AllSize, int *FreeSize ) DXFUNC_END return Result ; } +extern int GetVideoMemorySizeEx( ULONGLONG *TotalSize, ULONGLONG *UseSize ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_GetVideoMemorySizeEx( TotalSize, UseSize ) ; + DXFUNC_END + return Result ; +} extern int GetRefreshRate( void ) { int Result ; @@ -4929,6 +5068,14 @@ extern int GetFullScreenResolutionMode( int *ResolutionMode, int *UseResolutionM DXFUNC_END return Result ; } +extern int GetUseFullScreenResolutionMode( void ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_GetUseFullScreenResolutionMode() ; + DXFUNC_END + return Result ; +} extern int SetFullScreenScalingMode( int ScalingMode , int FitScaling ) { int Result ; @@ -6166,6 +6313,14 @@ extern int DrawPolygonIndexed2D( const VERTEX2D *Vertex, int VertexNum, const un DXFUNC_END return Result ; } +extern int DrawPolygon32bitIndexed2D( const VERTEX2D *Vertex, int VertexNum, const unsigned int *Indices, int PolygonNum, int GrHandle, int TransFlag ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_DrawPolygon32bitIndexed2D( Vertex, VertexNum, Indices, PolygonNum, GrHandle, TransFlag ) ; + DXFUNC_END + return Result ; +} extern int DrawPolygonIndexed3D( const VERTEX3D *Vertex, int VertexNum, const unsigned short *Indices, int PolygonNum, int GrHandle, int TransFlag ) { int Result ; @@ -6174,6 +6329,14 @@ extern int DrawPolygonIndexed3D( const VERTEX3D *Vertex, int VertexNum, const un DXFUNC_END return Result ; } +extern int DrawPolygon32bitIndexed3D( const VERTEX3D *Vertex, int VertexNum, const unsigned int *Indices, int PolygonNum, int GrHandle, int TransFlag ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_DrawPolygon32bitIndexed3D( Vertex, VertexNum, Indices, PolygonNum, GrHandle, TransFlag ) ; + DXFUNC_END + return Result ; +} extern int DrawPolygonIndexed3DBase( const VERTEX_3D *Vertex, int VertexNum, const unsigned short *Indices, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) { int Result ; @@ -6182,6 +6345,14 @@ extern int DrawPolygonIndexed3D( const VERTEX3D *Vertex, int VertexNum, const un DXFUNC_END return Result ; } +extern int DrawPolygon32bitIndexed3DBase( const VERTEX_3D *Vertex, int VertexNum, const unsigned int *Indices, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_DrawPolygon32bitIndexed3DBase( Vertex, VertexNum, Indices, IndexNum, PrimitiveType, GrHandle, TransFlag ) ; + DXFUNC_END + return Result ; +} extern int DrawPolygon3DBase( const VERTEX_3D *Vertex, int VertexNum, int PrimitiveType, int GrHandle, int TransFlag ) { int Result ; @@ -6240,6 +6411,14 @@ extern int DrawPrimitiveIndexed2D( const VERTEX2D *Vertex, int VertexNum, const DXFUNC_END return Result ; } +extern int DrawPrimitive32bitIndexed2D( const VERTEX2D *Vertex, int VertexNum, const unsigned int *Indices, int IndexNum, int PrimitiveType, int GrHandle, int TransFlag ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_DrawPrimitive32bitIndexed2D( Vertex, VertexNum, Indices, IndexNum, PrimitiveType, GrHandle, TransFlag ) ; + DXFUNC_END + return Result ; +} extern int DrawPrimitiveIndexed3D( const VERTEX3D *Vertex, int VertexNum, const unsigned short *Indices, int IndexNum, int PrimitiveType, int GrHandle, int TransFlag ) { int Result ; @@ -6248,6 +6427,14 @@ extern int DrawPrimitiveIndexed3D( const VERTEX3D *Vertex, int VertexNum, const DXFUNC_END return Result ; } +extern int DrawPrimitive32bitIndexed3D( const VERTEX3D *Vertex, int VertexNum, const unsigned int *Indices, int IndexNum, int PrimitiveType, int GrHandle, int TransFlag ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_DrawPrimitive32bitIndexed3D( Vertex, VertexNum, Indices, IndexNum, PrimitiveType, GrHandle, TransFlag ) ; + DXFUNC_END + return Result ; +} extern int DrawPolygon3D_UseVertexBuffer( int VertexBufHandle, int GrHandle, int TransFlag ) { int Result ; @@ -6537,6 +6724,14 @@ extern int DrawLineSet( const LINEDATA *LineData, int Num ) DXFUNC_END return Result ; } +extern int DrawBoxSet( const RECTDATA *RectData, int Num ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_DrawBoxSet( RectData, Num ) ; + DXFUNC_END + return Result ; +} extern int DrawPixel3D( VECTOR Pos, unsigned int Color ) { int Result ; @@ -6720,6 +6915,35 @@ extern int DrawFormatVString( int x, int y, unsigned int Color, const TCHAR *For DXFUNC_END return Result ; } +extern int DrawFormatString2( int x, int y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) +{ + int Result ; + va_list VaList ; + TCHAR String[ 2048 ] ; + + va_start( VaList, FormatString ) ; + _TVSNPRINTF( String, sizeof( String ) / sizeof( TCHAR ), FormatString, VaList ) ; + va_end( VaList ) ; + + DXFUNC_BEGIN + Result = NS_DrawString( x, y, String, Color, EdgeColor ) ; + DXFUNC_END + return Result ; +} +extern int DrawFormatVString2( int x, int y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) +{ + int Result ; + va_list VaList ; + TCHAR String[ 2048 ] ; + + va_start( VaList, FormatString ) ; + _TVSNPRINTF( String, sizeof( String ) / sizeof( TCHAR ), FormatString, VaList ) ; + va_end( VaList ) ; + DXFUNC_BEGIN + Result = NS_DrawVString( x, y, String, Color, EdgeColor ) ; + DXFUNC_END + return Result ; +} extern int DrawExtendString( int x, int y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, unsigned int EdgeColor ) { int Result ; @@ -6781,6 +7005,35 @@ extern int DrawExtendFormatVString( int x, int y, double ExRateX, double ExRateY DXFUNC_END return Result ; } +extern int DrawExtendFormatString2( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) +{ + int Result ; + va_list VaList ; + TCHAR String[ 2048 ] ; + + va_start( VaList, FormatString ) ; + _TVSNPRINTF( String, sizeof( String ) / sizeof( TCHAR ), FormatString, VaList ) ; + va_end( VaList ) ; + + DXFUNC_BEGIN + Result = NS_DrawExtendString( x, y, ExRateX, ExRateY, String, Color, EdgeColor ) ; + DXFUNC_END + return Result ; +} +extern int DrawExtendFormatVString2( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) +{ + int Result ; + va_list VaList ; + TCHAR String[ 2048 ] ; + + va_start( VaList, FormatString ) ; + _TVSNPRINTF( String, sizeof( String ) / sizeof( TCHAR ), FormatString, VaList ) ; + va_end( VaList ) ; + DXFUNC_BEGIN + Result = NS_DrawExtendVString( x, y, ExRateX, ExRateY, String, Color, EdgeColor ) ; + DXFUNC_END + return Result ; +} extern int DrawRotaString( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, unsigned int EdgeColor, int VerticalFlag, const TCHAR *String ) { int Result ; @@ -6907,6 +7160,35 @@ extern int DrawFormatVStringF( float x, float y, unsigned int Color, const TCHAR DXFUNC_END return Result ; } +extern int DrawFormatString2F( float x, float y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) +{ + int Result ; + va_list VaList ; + TCHAR String[ 2048 ] ; + + va_start( VaList, FormatString ) ; + _TVSNPRINTF( String, sizeof( String ) / sizeof( TCHAR ), FormatString, VaList ) ; + va_end( VaList ) ; + + DXFUNC_BEGIN + Result = NS_DrawStringF( x, y, String, Color, EdgeColor ) ; + DXFUNC_END + return Result ; +} +extern int DrawFormatVString2F( float x, float y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) +{ + int Result ; + va_list VaList ; + TCHAR String[ 2048 ] ; + + va_start( VaList, FormatString ) ; + _TVSNPRINTF( String, sizeof( String ) / sizeof( TCHAR ), FormatString, VaList ) ; + va_end( VaList ) ; + DXFUNC_BEGIN + Result = NS_DrawVStringF( x, y, String, Color, EdgeColor ) ; + DXFUNC_END + return Result ; +} extern int DrawExtendStringF( float x, float y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, unsigned int EdgeColor ) { int Result ; @@ -6968,6 +7250,35 @@ extern int DrawExtendFormatVStringF( float x, float y, double ExRateX, double Ex DXFUNC_END return Result ; } +extern int DrawExtendFormatString2F( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) +{ + int Result ; + va_list VaList ; + TCHAR String[ 2048 ] ; + + va_start( VaList, FormatString ) ; + _TVSNPRINTF( String, sizeof( String ) / sizeof( TCHAR ), FormatString, VaList ) ; + va_end( VaList ) ; + + DXFUNC_BEGIN + Result = NS_DrawExtendStringF( x, y, ExRateX, ExRateY, String, Color, EdgeColor ) ; + DXFUNC_END + return Result ; +} +extern int DrawExtendFormatVString2F( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) +{ + int Result ; + va_list VaList ; + TCHAR String[ 2048 ] ; + + va_start( VaList, FormatString ) ; + _TVSNPRINTF( String, sizeof( String ) / sizeof( TCHAR ), FormatString, VaList ) ; + va_end( VaList ) ; + DXFUNC_BEGIN + Result = NS_DrawExtendVStringF( x, y, ExRateX, ExRateY, String, Color, EdgeColor ) ; + DXFUNC_END + return Result ; +} extern int DrawRotaStringF( float x, float y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, unsigned int EdgeColor , int VerticalFlag , const TCHAR *String ) { int Result ; @@ -7315,6 +7626,34 @@ extern int DrawFormatVStringToHandle( int x, int y, unsigned int Color, int Font DXFUNC_END return Result ; } +extern int DrawFormatString2ToHandle( int x, int y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) +{ + int Result ; + va_list VaList ; + TCHAR String[ 2048 ] ; + + va_start( VaList, FormatString ) ; + _TVSNPRINTF( String, sizeof( String ) / sizeof( TCHAR ), FormatString, VaList ) ; + va_end( VaList ) ; + DXFUNC_BEGIN + Result = NS_DrawStringToHandle( x, y, String, Color, EdgeColor, FontHandle ) ; + DXFUNC_END + return Result ; +} +extern int DrawFormatVString2ToHandle( int x, int y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) +{ + int Result ; + va_list VaList ; + TCHAR String[ 2048 ] ; + + va_start( VaList, FormatString ) ; + _TVSNPRINTF( String, sizeof( String ) / sizeof( TCHAR ), FormatString, VaList ) ; + va_end( VaList ) ; + DXFUNC_BEGIN + Result = NS_DrawVStringToHandle( x, y, String, Color, EdgeColor, FontHandle ) ; + DXFUNC_END + return Result ; +} extern int DrawExtendStringToHandle( int x, int y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag ) { int Result ; @@ -7376,6 +7715,35 @@ extern int DrawExtendFormatVStringToHandle( int x, int y, double ExRateX, double DXFUNC_END return Result ; } +extern int DrawExtendFormatString2ToHandle( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) +{ + int Result ; + va_list VaList ; + TCHAR String[ 2048 ] ; + + va_start( VaList, FormatString ) ; + _TVSNPRINTF( String, sizeof( String ) / sizeof( TCHAR ), FormatString, VaList ) ; + va_end( VaList ) ; + DXFUNC_BEGIN + Result = NS_DrawExtendStringToHandle( x, y, ExRateX, ExRateY, String, Color, EdgeColor, FontHandle ) ; + DXFUNC_END + return Result ; +} +extern int DrawExtendFormatVString2ToHandle( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) +{ + int Result ; + va_list VaList ; + TCHAR String[ 2048 ] ; + + va_start( VaList, FormatString ) ; + _TVSNPRINTF( String, sizeof( String ) / sizeof( TCHAR ), FormatString, VaList ) ; + va_end( VaList ) ; + + DXFUNC_BEGIN + Result = NS_DrawExtendVStringToHandle( x, y, ExRateX, ExRateY, String, Color, EdgeColor, FontHandle ) ; + DXFUNC_END + return Result ; +} extern int DrawRotaStringToHandle( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor , int VerticalFlag , const TCHAR *String ) { int Result ; @@ -7500,6 +7868,34 @@ extern int DrawFormatVStringFToHandle( float x, float y, unsigned int Color, int DXFUNC_END return Result ; } +extern int DrawFormatString2FToHandle( float x, float y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) +{ + int Result ; + va_list VaList ; + TCHAR String[ 2048 ] ; + + va_start( VaList, FormatString ) ; + _TVSNPRINTF( String, sizeof( String ) / sizeof( TCHAR ), FormatString, VaList ) ; + va_end( VaList ) ; + DXFUNC_BEGIN + Result = NS_DrawStringFToHandle( x, y, String, Color, FontHandle, EdgeColor ) ; + DXFUNC_END + return Result ; +} +extern int DrawFormatVString2FToHandle( float x, float y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) +{ + int Result ; + va_list VaList ; + TCHAR String[ 2048 ] ; + + va_start( VaList, FormatString ) ; + _TVSNPRINTF( String, sizeof( String ) / sizeof( TCHAR ), FormatString, VaList ) ; + va_end( VaList ) ; + DXFUNC_BEGIN + Result = NS_DrawVStringFToHandle( x, y, String, Color, FontHandle, EdgeColor ) ; + DXFUNC_END + return Result ; +} extern int DrawExtendStringFToHandle( float x, float y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag ) { int Result ; @@ -7561,6 +7957,35 @@ extern int DrawExtendFormatVStringFToHandle( float x, float y, double ExRateX, d DXFUNC_END return Result ; } +extern int DrawExtendFormatString2FToHandle( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) +{ + int Result ; + va_list VaList ; + TCHAR String[ 2048 ] ; + + va_start( VaList, FormatString ) ; + _TVSNPRINTF( String, sizeof( String ) / sizeof( TCHAR ), FormatString, VaList ) ; + va_end( VaList ) ; + DXFUNC_BEGIN + Result = NS_DrawExtendStringFToHandle( x, y, ExRateX, ExRateY, String, Color, FontHandle, EdgeColor ) ; + DXFUNC_END + return Result ; +} +extern int DrawExtendFormatVString2FToHandle( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) +{ + int Result ; + va_list VaList ; + TCHAR String[ 2048 ] ; + + va_start( VaList, FormatString ) ; + _TVSNPRINTF( String, sizeof( String ) / sizeof( TCHAR ), FormatString, VaList ) ; + va_end( VaList ) ; + + DXFUNC_BEGIN + Result = NS_DrawExtendVStringFToHandle( x, y, ExRateX, ExRateY, String, Color, FontHandle, EdgeColor ) ; + DXFUNC_END + return Result ; +} extern int DrawRotaStringFToHandle( float x, float y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor , int VerticalFlag , const TCHAR *String ) { int Result ; @@ -8450,6 +8875,14 @@ extern int CalcPolygonIndexedBinormalAndTangentsToShader( VERTEX3DSHADER *Vert DXFUNC_END return Result ; } +extern int CalcPolygon32bitIndexedBinormalAndTangentsToShader( VERTEX3DSHADER *Vertex, int VertexNum, const unsigned int *Indices, int PolygonNum ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_CalcPolygon32bitIndexedBinormalAndTangentsToShader( Vertex, VertexNum, Indices, PolygonNum ) ; + DXFUNC_END + return Result ; +} extern int DrawBillboard3DToShader( VECTOR Pos, float cx, float cy, float Size, float Angle, int GrHandle, int TransFlag, int ReverseXFlag, int ReverseYFlag ) { @@ -8484,6 +8917,14 @@ extern int DrawPolygonIndexed2DToShader( const VERTEX2DSHADER *Vertex, int Ver DXFUNC_END return Result ; } +extern int DrawPolygon32bitIndexed2DToShader( const VERTEX2DSHADER *Vertex, int VertexNum, const unsigned int *Indices, int PolygonNum ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_DrawPolygon32bitIndexed2DToShader( Vertex, VertexNum, Indices, PolygonNum ) ; + DXFUNC_END + return Result ; +} extern int DrawPolygonIndexed3DToShader( const VERTEX3DSHADER *Vertex, int VertexNum, const unsigned short *Indices, int PolygonNum ) { int Result ; @@ -8492,6 +8933,14 @@ extern int DrawPolygonIndexed3DToShader( const VERTEX3DSHADER *Vertex, int Ver DXFUNC_END return Result ; } +extern int DrawPolygon32bitIndexed3DToShader( const VERTEX3DSHADER *Vertex, int VertexNum, const unsigned int *Indices, int PolygonNum ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_DrawPolygon32bitIndexed3DToShader( Vertex, VertexNum, Indices, PolygonNum ) ; + DXFUNC_END + return Result ; +} extern int DrawPrimitive2DToShader( const VERTEX2DSHADER *Vertex, int VertexNum, int PrimitiveType ) { int Result ; @@ -8512,15 +8961,31 @@ extern int DrawPrimitiveIndexed2DToShader( const VERTEX2DSHADER *Vertex, int V { int Result ; DXFUNC_BEGIN - Result = NS_DrawPrimitiveIndexed2DToShader( Vertex, VertexNum, Indices, IndexNum, PrimitiveType ) ; + Result = NS_DrawPrimitiveIndexed2DToShader( Vertex, VertexNum, Indices, IndexNum, PrimitiveType ) ; + DXFUNC_END + return Result ; +} +extern int DrawPrimitive32bitIndexed2DToShader( const VERTEX2DSHADER *Vertex, int VertexNum, const unsigned int *Indices, int IndexNum, int PrimitiveType ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_DrawPrimitive32bitIndexed2DToShader( Vertex, VertexNum, Indices, IndexNum, PrimitiveType ) ; + DXFUNC_END + return Result ; +} +extern int DrawPrimitiveIndexed3DToShader( const VERTEX3DSHADER *Vertex, int VertexNum, const unsigned short *Indices, int IndexNum, int PrimitiveType ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_DrawPrimitiveIndexed3DToShader( Vertex, VertexNum, Indices, IndexNum, PrimitiveType ) ; DXFUNC_END return Result ; } -extern int DrawPrimitiveIndexed3DToShader( const VERTEX3DSHADER *Vertex, int VertexNum, const unsigned short *Indices, int IndexNum, int PrimitiveType ) +extern int DrawPrimitive32bitIndexed3DToShader( const VERTEX3DSHADER *Vertex, int VertexNum, const unsigned int *Indices, int IndexNum, int PrimitiveType ) { int Result ; DXFUNC_BEGIN - Result = NS_DrawPrimitiveIndexed3DToShader( Vertex, VertexNum, Indices, IndexNum, PrimitiveType ) ; + Result = NS_DrawPrimitive32bitIndexed3DToShader( Vertex, VertexNum, Indices, IndexNum, PrimitiveType ) ; DXFUNC_END return Result ; } @@ -8636,6 +9101,15 @@ extern int UpdateShaderConstantBuffer( int SConstBufHandle ) return Result ; } +extern int SetGraphBlendScalingFilterMode( int IsBilinearFilter ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_SetGraphBlendScalingFilterMode( IsBilinearFilter ) ; + DXFUNC_END + return Result ; +} + extern int GraphFilter( int GrHandle, int FilterType /* DX_BLTFILTER_GAUSS_H 等 */ , ... ) { int Result ; @@ -8648,7 +9122,7 @@ extern int UpdateShaderConstantBuffer( int SConstBufHandle ) NS_GetGraphSize( GrHandle, &W, &H ) ; - Result = GraphFilter_RectBltBase( FALSE, GrHandle, -1, GrHandle, 0, FilterType, 0, 0, W, H, 0, 0, FALSE, 0, 0, VaList ) ; + Result = GraphFilter_RectBltBase( FALSE, GrHandle, -1, GrHandle, 0, FilterType, 0, 0, W, H, 0, 0, FALSE, 0, 0, FALSE, 0, 0, VaList ) ; DXFUNC_END va_end( VaList ) ; @@ -8667,7 +9141,7 @@ extern int GraphFilterBlt( int SrcGrHandle, int DestGrHandle, int FilterType, NS_GetGraphSize( SrcGrHandle, &SrcW, &SrcH ) ; - Result = GraphFilter_RectBltBase( FALSE, SrcGrHandle, -1, DestGrHandle, 0, FilterType, 0, 0, SrcW, SrcH, 0, 0, FALSE, 0, 0, VaList ) ; + Result = GraphFilter_RectBltBase( FALSE, SrcGrHandle, -1, DestGrHandle, 0, FilterType, 0, 0, SrcW, SrcH, 0, 0, FALSE, 0, 0, FALSE, 0, 0, VaList ) ; DXFUNC_END va_end( VaList ) ; @@ -8682,7 +9156,7 @@ extern int GraphFilterRectBlt( int SrcGrHandle, int DestGrHandle, int SrcX1, i va_start( VaList, FilterType ) ; DXFUNC_BEGIN - Result = GraphFilter_RectBltBase( FALSE, SrcGrHandle, -1, DestGrHandle, 0, FilterType, SrcX1, SrcY1, SrcX2, SrcY2, 0, 0, TRUE, DestX, DestY, VaList ) ; + Result = GraphFilter_RectBltBase( FALSE, SrcGrHandle, -1, DestGrHandle, 0, FilterType, SrcX1, SrcY1, SrcX2, SrcY2, 0, 0, FALSE, 0, 0, FALSE, DestX, DestY, VaList ) ; DXFUNC_END va_end( VaList ) ; @@ -8702,7 +9176,7 @@ extern int GraphBlend( int GrHandle, int BlendGrHandle, int BlendRatio, int Bl NS_GetGraphSize( GrHandle, &W, &H ) ; - Result = GraphFilter_RectBltBase( TRUE, GrHandle, BlendGrHandle, GrHandle, BlendRatio, BlendType, 0, 0, W, H, 0, 0, FALSE, 0, 0, VaList ) ; + Result = GraphFilter_RectBltBase( TRUE, GrHandle, BlendGrHandle, GrHandle, BlendRatio, BlendType, 0, 0, W, H, 0, 0, FALSE, 0, 0, FALSE, 0, 0, VaList ) ; DXFUNC_END va_end( VaList ) ; @@ -8721,7 +9195,7 @@ extern int GraphBlendBlt( int SrcGrHandle, int BlendGrHandle, int DestGrHandle NS_GetGraphSize( SrcGrHandle, &SrcW, &SrcH ) ; - Result = GraphFilter_RectBltBase( TRUE, SrcGrHandle, BlendGrHandle, DestGrHandle, BlendRatio, BlendType, 0, 0, SrcW, SrcH, 0, 0, FALSE, 0, 0, VaList ) ; + Result = GraphFilter_RectBltBase( TRUE, SrcGrHandle, BlendGrHandle, DestGrHandle, BlendRatio, BlendType, 0, 0, SrcW, SrcH, 0, 0, FALSE, 0, 0, FALSE, 0, 0, VaList ) ; DXFUNC_END va_end( VaList ) ; @@ -8736,7 +9210,23 @@ extern int GraphBlendRectBlt( int SrcGrHandle, int BlendGrHandle, int DestGrHa va_start( VaList, BlendType ) ; DXFUNC_BEGIN - Result = GraphFilter_RectBltBase( TRUE, SrcGrHandle, BlendGrHandle, DestGrHandle, BlendRatio, BlendType, SrcX1, SrcY1, SrcX2, SrcY2, BlendX, BlendY, TRUE, DestX, DestY, VaList ) ; + Result = GraphFilter_RectBltBase( TRUE, SrcGrHandle, BlendGrHandle, DestGrHandle, BlendRatio, BlendType, SrcX1, SrcY1, SrcX2, SrcY2, BlendX, BlendY, TRUE, 0, 0, FALSE, DestX, DestY, VaList ) ; + DXFUNC_END + + va_end( VaList ) ; + + return Result ; +} + +extern int GraphBlendRectBlt2( int SrcGrHandle, int BlendGrHandle, int DestGrHandle, int SrcX1, int SrcY1, int SrcX2, int SrcY2, int BlendX1, int BlendY1, int BlendX2, int BlendY2, int DestX, int DestY, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , ... ) +{ + int Result ; + va_list VaList ; + + va_start( VaList, BlendType ) ; + + DXFUNC_BEGIN + Result = GraphFilter_RectBltBase( TRUE, SrcGrHandle, BlendGrHandle, DestGrHandle, BlendRatio, BlendType, SrcX1, SrcY1, SrcX2, SrcY2, BlendX1, BlendY1, TRUE, BlendX2, BlendY2, TRUE, DestX, DestY, VaList ) ; DXFUNC_END va_end( VaList ) ; @@ -9110,6 +9600,22 @@ extern int GetUseBackCulling( void ) DXFUNC_END return Result ; } +extern int SetUseRightHandClippingProcess( int Flag ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_SetUseRightHandClippingProcess( Flag ) ; + DXFUNC_END + return Result ; +} +extern int GetUseRightHandClippingProcess( void ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_GetUseRightHandClippingProcess() ; + DXFUNC_END + return Result ; +} extern int SetTextureAddressMode( int Mode, int Stage ) { int Result ; @@ -9602,7 +10108,14 @@ extern void *GetDesktopScreenGraphMemImage( int x1, int y1, int x2, int y2, int DXFUNC_END return Result ; } - +extern int GetOtherWindowGraph( HWND Window, int x1, int y1, int x2, int y2, int GrHandle, int DestX, int DestY ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_GetOtherWindowGraph( Window, x1, y1, x2, y2, GrHandle, DestX, DestY ) ; + DXFUNC_END + return Result ; +} extern int SetMultiThreadFlag( int Flag ) { int Result ; @@ -9691,6 +10204,22 @@ extern int SetUseDirect3D11AdapterIndex( int Index ) DXFUNC_END return Result ; } +extern int SetUseDirect3D11BGRASupport( int Flag ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_SetUseDirect3D11BGRASupport( Flag ) ; + DXFUNC_END + return Result ; +} +extern int GetUseDirect3D11BGRASupport( void ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_GetUseDirect3D11BGRASupport() ; + DXFUNC_END + return Result ; +} extern int SetUseDirectDrawFlag( int Flag ) { return NS_SetUseDirectDrawFlag( Flag ) ; @@ -11688,6 +12217,15 @@ extern int SetGlobalAmbientLight( COLOR_F Color ) return Result ; } +extern int SetUseLightAngleAttenuation( int UseFlag ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_SetUseLightAngleAttenuation( UseFlag ) ; + DXFUNC_END + return Result ; +} + extern int ChangeLightTypeDir( VECTOR Direction ) { int Result ; @@ -12174,6 +12712,38 @@ extern int GetCreateGraphInitGraphDelete( void ) DXFUNC_END return Result ; } +extern int SetCreateGraphHandle( int GrHandle ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_SetCreateGraphHandle( GrHandle ) ; + DXFUNC_END + return Result ; +} +extern int GetCreateGraphHandle( void ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_GetCreateGraphHandle() ; + DXFUNC_END + return Result ; +} +extern int SetCreateDivGraphHandle( const int *HandleArray, int HandleNum ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_SetCreateDivGraphHandle( HandleArray, HandleNum ) ; + DXFUNC_END + return Result ; +} +extern int GetCreateDivGraphHandle( int *HandleArray ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_GetCreateDivGraphHandle( HandleArray ) ; + DXFUNC_END + return Result ; +} extern int SetDrawValidGraphCreateFlag( int Flag ) { int Result ; @@ -12222,6 +12792,22 @@ extern int GetUseSystemMemGraphCreateFlag( void ) DXFUNC_END return Result ; } +extern int SetUseLoadDivGraphSizeCheckFlag( int Flag ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_SetUseLoadDivGraphSizeCheckFlag( Flag ) ; + DXFUNC_END + return Result ; +} +extern int GetUseLoadDivGraphSizeCheckFlag( void ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_GetUseLoadDivGraphSizeCheckFlag() ; + DXFUNC_END + return Result ; +} extern int SetUseBlendGraphCreateFlag( int Flag ) { int Result ; @@ -12622,6 +13208,22 @@ extern int GetDrawBlendMode( int *BlendMode, int *BlendParam ) DXFUNC_END return Result ; } +extern int SetDrawCustomBlendMode( int BlendEnable, int SrcBlendRGB /* DX_BLEND_SRC_COLOR 等 */, int DestBlendRGB /* DX_BLEND_SRC_COLOR 等 */, int BlendOpRGB /* DX_BLENDOP_ADD 等 */, int SrcBlendA /* DX_BLEND_SRC_COLOR 等 */, int DestBlendA /* DX_BLEND_SRC_COLOR 等 */, int BlendOpA /* DX_BLENDOP_ADD 等 */, int BlendParam ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_SetDrawCustomBlendMode( BlendEnable, SrcBlendRGB, DestBlendRGB, BlendOpRGB, SrcBlendA, DestBlendA, BlendOpA, BlendParam ) ; + DXFUNC_END + return Result ; +} +extern int GetDrawCustomBlendMode( int *BlendEnable, int *SrcBlendRGB, int *DestBlendRGB, int *BlendOpRGB, int *SrcBlendA, int *DestBlendA, int *BlendOpA, int *BlendParam ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_GetDrawCustomBlendMode( BlendEnable, SrcBlendRGB, DestBlendRGB, BlendOpRGB, SrcBlendA, DestBlendA, BlendOpA, BlendParam ) ; + DXFUNC_END + return Result ; +} extern int GetDrawMode( void ) { int Result ; @@ -13373,6 +13975,14 @@ extern int ChangeFontWithStrLen( const TCHAR *FontName, size_t FontNameLength, i DXFUNC_END return Result ; } +extern int ChangeFontFromHandle( int FontHandle ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_ChangeFontFromHandle( FontHandle ) ; + DXFUNC_END + return Result ; +} extern int ChangeFontType( int FontType ) { int Result ; @@ -14099,6 +14709,22 @@ extern int GetFontUseAdjustSizeFlag( void ) DXFUNC_END return Result ; } +extern int SetFontOnlyDrawType( int OnlyType ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_SetFontOnlyDrawType( OnlyType ) ; + DXFUNC_END + return Result ; +} +extern int GetFontOnlyDrawType( void ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_GetFontOnlyDrawType() ; + DXFUNC_END + return Result ; +} extern HANDLE AddFontFile( const TCHAR *FontFilePath ) { @@ -14372,6 +14998,31 @@ extern int SetUsePremulAlphaConvertLoad( int UseFlag ) DXFUNC_END return Result ; } +extern int GetUsePremulAlphaConvertLoad( void ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_GetUsePremulAlphaConvertLoad() ; + DXFUNC_END + return Result ; +} +extern int SetUseConvertNormalFormatLoad( int UseFlag ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_SetUseConvertNormalFormatLoad( UseFlag ) ; + DXFUNC_END + return Result ; +} +extern int GetUseConvertNormalFormatLoad( void ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_GetUseConvertNormalFormatLoad() ; + DXFUNC_END + return Result ; +} + // 基本イメージデータ機能公開用関数 @@ -15761,6 +16412,12 @@ extern int CreateBGRA8ColorData( COLORDATA *ColorDataBuf ) Result = NS_CreateBGRA8ColorData( ColorDataBuf ) ; return Result ; } +extern int CreateBGR8ColorData( COLORDATA *ColorDataBuf ) +{ + int Result ; + Result = NS_CreateBGR8ColorData( ColorDataBuf ) ; + return Result ; +} extern int CreateARGB4ColorData( COLORDATA * ColorDataBuf ) { int Result ; @@ -15965,11 +16622,11 @@ extern int CheckStreamSoundMem( int SoundHandle ) DXFUNC_END return Result ; } -extern int StopStreamSoundMem( int SoundHandle ) +extern int StopStreamSoundMem( int SoundHandle, int IsNextLoopEnd ) { int Result ; DXFUNC_BEGIN - Result = NS_StopStreamSoundMem( SoundHandle ) ; + Result = NS_StopStreamSoundMem( SoundHandle, IsNextLoopEnd ) ; DXFUNC_END return Result ; } @@ -16193,11 +16850,11 @@ extern int PlaySoundMem( int SoundHandle, int PlayType, int TopPositionFlag ) DXFUNC_END return Result ; } -extern int StopSoundMem( int SoundHandle ) +extern int StopSoundMem( int SoundHandle, int IsNextLoopEnd ) { int Result ; DXFUNC_BEGIN - Result = NS_StopSoundMem( SoundHandle ) ; + Result = NS_StopSoundMem( SoundHandle, IsNextLoopEnd ) ; DXFUNC_END return Result ; } @@ -16882,7 +17539,23 @@ extern int SetEnableASIOFlag( int Flag, int BufferSize, int SamplePerSec ) DXFUNC_END return Result ; } +extern int SetUseASIODriverIndex( int Index ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_SetUseASIODriverIndex( Index ) ; + DXFUNC_END + return Result ; +} #endif // DX_NON_ASIO +extern int SetEnableMMEwaveOutFlag( int Flag, int BufferSamples, int SamplePerSec ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_SetEnableMMEwaveOutFlag( Flag, BufferSamples, SamplePerSec ) ; + DXFUNC_END + return Result ; +} extern int SetUseOldVolumeCalcFlag( int Flag ) { int Result ; @@ -18110,6 +18783,24 @@ extern int MV1SetLoadModelTriangleListUseMaxBoneNum( int UseMaxBoneNum ) return Result ; } +extern int MV1SetLoadModelTextureLoad( int Flag ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_MV1SetLoadModelTextureLoad( Flag ) ; + DXFUNC_END + return Result ; +} + +extern int MV1SetLoadModelIgnoreIK( int IgnoreFlag ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_MV1SetLoadModelIgnoreIK( IgnoreFlag ) ; + DXFUNC_END + return Result ; +} + extern int MV1SaveModelToMV1File( int MHandle, const TCHAR *FileName, int SaveType, int AnimMHandle, int AnimNameCheck, int Normal8BitFlag, int Position16BitFlag, int Weight8BitFlag, int Anim16BitFlag ) { int Result ; @@ -18732,6 +19423,24 @@ extern float MV1GetAttachAnimBlendRateToFrame( int MHandle, int AttachIndex, int return Result ; } +extern int MV1SetAttachAnimTimeToFrame( int MHandle, int AttachIndex, int FrameIndex, float Time, int SetChild ) +{ + float Result ; + DXFUNC_BEGIN + Result = NS_MV1SetAttachAnimTimeToFrame( MHandle, AttachIndex, FrameIndex, Time, SetChild ) ; + DXFUNC_END + return Result ; +} + +extern float MV1GetAttachAnimTimeToFrame( int MHandle, int AttachIndex, int FrameIndex ) +{ + float Result ; + DXFUNC_BEGIN + Result = NS_MV1GetAttachAnimTimeToFrame( MHandle, AttachIndex, FrameIndex ) ; + DXFUNC_END + return Result ; +} + extern int MV1GetAttachAnim( int MHandle, int AttachIndex ) { int Result ; @@ -20967,6 +21676,51 @@ extern int Live2D_InitModel( void ) return Result ; } +extern int Live2D_SetUserShader( int TargetShader, int ShaderHandle ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_Live2D_SetUserShader( TargetShader, ShaderHandle ) ; + DXFUNC_END + return Result ; +} + +extern int Live2D_DrawCallback( void ( *Callback )( int Live2DModelHandle, int TextureIndex, void *UserData ), void *UserData ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_Live2D_DrawCallback( Callback, UserData ) ; + DXFUNC_END + return Result ; +} + +extern int Live2D_SetUseAutoScaling( int UseFlag ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_Live2D_SetUseAutoScaling( UseFlag ) ; + DXFUNC_END + return Result ; +} + +extern int Live2D_SetUseAutoCentering( int UseFlag ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_Live2D_SetUseAutoCentering( UseFlag ) ; + DXFUNC_END + return Result ; +} + +extern int Live2D_SetUseReverseYAxis( int UseFlag ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_Live2D_SetUseReverseYAxis( UseFlag ) ; + DXFUNC_END + return Result ; +} + extern int Live2D_Model_Update( int Live2DModelHandle, float DeltaTime ) { int Result ; @@ -21030,6 +21784,15 @@ extern int Live2D_Model_StartMotionWithStrLen( int Live2DModelHandle, const TCHA return Result ; } +extern int Live2D_Model_GetLastPlayMotionNo( int Live2DModelHandle ) +{ + int Result ; + DXFUNC_BEGIN + Result = NS_Live2D_Model_GetLastPlayMotionNo( Live2DModelHandle ) ; + DXFUNC_END + return Result ; +} + extern int Live2D_Model_IsMotionFinished( int Live2DModelHandle ) { int Result ; @@ -21039,6 +21802,15 @@ extern int Live2D_Model_IsMotionFinished( int Live2DModelHandle ) return Result ; } +extern float Live2D_Model_GetMotionPlayTime( int Live2DModelHandle ) +{ + float Result ; + DXFUNC_BEGIN + Result = NS_Live2D_Model_GetMotionPlayTime( Live2DModelHandle ) ; + DXFUNC_END + return Result ; +} + extern int Live2D_Model_SetExpression( int Live2DModelHandle, const TCHAR *expressionID ) { int Result ; @@ -21345,6 +22117,24 @@ extern const TCHAR *Live2D_Model_GetLipSyncParameterId( int Live2DModelHandle, i return Result ; } +extern float Live2D_Model_GetCanvasWidth( int Live2DModelHandle ) +{ + float Result ; + DXFUNC_BEGIN + Result = NS_Live2D_Model_GetCanvasWidth( Live2DModelHandle ) ; + DXFUNC_END + return Result ; +} + +extern float Live2D_Model_GetCanvasHeight( int Live2DModelHandle ) +{ + float Result ; + DXFUNC_BEGIN + Result = NS_Live2D_Model_GetCanvasHeight( Live2DModelHandle ) ; + DXFUNC_END + return Result ; +} + #endif // DX_NON_LIVE2D_CUBISM4 diff --git a/DxGraphics.cpp b/DxGraphics.cpp index 29d4102..02e977f 100644 --- a/DxGraphics.cpp +++ b/DxGraphics.cpp @@ -2,7 +2,7 @@ // // DXライブラリ 描画プログラム // -// Ver 3.23 +// Ver 3.24b // // ---------------------------------------------------------------------------- @@ -438,6 +438,7 @@ static int Graphics_Software_DrawPoly( DX_POINTDATA *p, static int Graphics_Software_DrawPixel( int x, int y, unsigned int Color ) ; // ソフトウエアレンダリング版 DrawPixel static int Graphics_Software_DrawPixelSet( const POINTDATA *PointData, int Num ) ; // ソフトウエアレンダリング版 DrawPixelSet static int Graphics_Software_DrawLineSet( const LINEDATA *LineData, int Num ) ; // ソフトウエアレンダリング版 DrawLineSet +static int Graphics_Software_DrawBoxSet( const RECTDATA *RectData, int Num ) ; // ソフトウエアレンダリング版 DrawBoxSet @@ -1909,6 +1910,14 @@ static int Graphics_Software_DrawLineSet( const LINEDATA *LineData, int Num ) return 0 ; } +// ソフトウエアレンダリング版 DrawBoxSet +static int Graphics_Software_DrawBoxSet( const RECTDATA *RectData, int Num ) +{ + DrawBoxSetMemImg( GSYS.SoftRender.TargetMemImg, RectData, Num ) ; + + // 終了 + return 0 ; +} @@ -3694,15 +3703,15 @@ extern int NS_CreateDXGraph( const BASEIMAGE *RgbBaseImage, const BASEIMAGE *Alp CheckActiveState() ; + Graphics_Image_InitSetupGraphHandleGParam( &GParam ) ; + // ハンドルの作成 - NewGraphHandle = Graphics_Image_AddHandle( FALSE ) ; + NewGraphHandle = Graphics_Image_AddHandle( GParam.CreateGraphHandle <= 0 ? -1 : GParam.CreateGraphHandle, FALSE ) ; if( NewGraphHandle == -1 ) { return -1 ; } - Graphics_Image_InitSetupGraphHandleGParam( &GParam ) ; - Result = Graphics_Image_CreateDXGraph_UseGParam( &GParam, NewGraphHandle, RgbBaseImage, AlphaBaseImage, TextureFlag ) ; if( Result < 0 ) { @@ -4553,6 +4562,62 @@ extern int NS_GetCreateGraphInitGraphDelete( void ) return GSYS.CreateImage.NotInitGraphDeleteUserFlag != FALSE ? FALSE : TRUE ; } +// 作成するグラフィックハンドルのハンドル値を設定する( 存在しないグラフィックハンドルの値の場合のみ有効 ) +extern int NS_SetCreateGraphHandle( int GrHandle ) +{ + // 値を保存する + GSYS.CreateImage.CreateGraphHandle = GrHandle ; + + // 終了 + return 0 ; +} + +// 作成するグラフィックハンドルのハンドル値を取得する +extern int NS_GetCreateGraphHandle( void ) +{ + // 値を返す + return GSYS.CreateImage.CreateGraphHandle ; +} + +// 作成するグラフィックハンドルのハンドル値を設定する、LoadDivGraph 等の分割画像読み込み用、HandleArray に NULL を渡すと設定解除( 存在しないグラフィックハンドルの値の場合のみ有効 ) +extern int NS_SetCreateDivGraphHandle( const int *HandleArray, int HandleNum ) +{ + if( GSYS.CreateImage.CreateDivGraphHandle != NULL ) + { + DXFREE( GSYS.CreateImage.CreateDivGraphHandle ) ; + GSYS.CreateImage.CreateDivGraphHandle = NULL ; + GSYS.CreateImage.CreateDivGraphHandleNum = 0 ; + } + + if( HandleArray != NULL && HandleNum > 0 ) + { + GSYS.CreateImage.CreateDivGraphHandle = ( int * )DXALLOC( sizeof( int ) * HandleNum ) ; + if( GSYS.CreateImage.CreateDivGraphHandle == NULL ) + { + DXST_LOGFILEFMT_ADDUTF16LE(( "\x53\x00\x65\x00\x74\x00\x43\x00\x72\x00\x65\x00\x61\x00\x74\x00\x65\x00\x44\x00\x69\x00\x76\x00\x47\x00\x72\x00\x61\x00\x70\x00\x68\x00\x48\x00\x61\x00\x6e\x00\x64\x00\x6c\x00\x65\x00\x20\x00\x6e\x30\x4d\x91\x17\x52\x24\x50\xdd\x4f\x58\x5b\x28\x75\xe1\x30\xe2\x30\xea\x30\x20\x00\x25\x00\x64\x00\x62\x00\x79\x00\x74\x00\x65\x00\x20\x00\x6e\x30\xba\x78\xdd\x4f\x6b\x30\x31\x59\x57\x65\x57\x30\x7e\x30\x57\x30\x5f\x30\x00"/*@ L"SetCreateDivGraphHandle の配列値保存用メモリ %dbyte の確保に失敗しました" @*/, sizeof( int ) * HandleNum )) ; + return -1 ; + } + + _MEMCPY( GSYS.CreateImage.CreateDivGraphHandle, HandleArray, sizeof( int ) * HandleNum ) ; + GSYS.CreateImage.CreateDivGraphHandleNum = HandleNum ; + } + + // 正常終了 + return 0 ; +} + +// 作成するグラフィックハンドルのハンドル値を取得する、LoadDivGraph 等の分割画像読み込み用、戻り値は SetCreateDivGraphHandle の引数 HandleNum に渡した値、HandleArray を NULL にすることが可能  +extern int NS_GetCreateDivGraphHandle( int *HandleArray ) +{ + if( HandleArray != NULL && GSYS.CreateImage.CreateDivGraphHandle != NULL && GSYS.CreateImage.CreateDivGraphHandleNum > 0 ) + { + _MEMCPY( HandleArray, GSYS.CreateImage.CreateDivGraphHandle, sizeof( int ) * GSYS.CreateImage.CreateDivGraphHandleNum ) ; + } + + // 設定されている数を返す + return GSYS.CreateImage.CreateDivGraphHandleNum ; +} + // 描画可能なグラフィックを作成するかどうかのフラグをセットする( TRUE:作成する FALSE:作成しない ) extern int NS_SetDrawValidGraphCreateFlag( int Flag ) { @@ -4975,6 +5040,23 @@ extern int NS_GetUseSystemMemGraphCreateFlag( void ) return FALSE ; } +// LoadDivGraph 系の分割画像読み込み関数でサイズのチェックを行うかどうかを設定する( Flag:TRUE( チェックを行う(デフォルト) ) FALSE:チェックを行わない ) +extern int NS_SetUseLoadDivGraphSizeCheckFlag( int Flag ) +{ + // フラグを保存 + GSYS.CreateImage.NotUseLoadDivGraphSizeCheck = Flag ? FALSE : TRUE ; + + // 終了 + return 0 ; +} + +// LoadDivGraph 系の分割画像読み込み関数でサイズのチェックを行うかどうかの設定を取得する +extern int NS_GetUseLoadDivGraphSizeCheckFlag( void ) +{ + // フラグを返す + return GSYS.CreateImage.NotUseLoadDivGraphSizeCheck ; +} + @@ -10317,6 +10399,40 @@ extern int NS_DrawLineSet( const LINEDATA *LineData, int Num ) } #undef SETDRAWRECTCODE +// 矩形の集合を描画する +#define SETDRAWRECTCODE\ + SETRECT( DrawRect, 0, 0, GSYS.DrawSetting.DrawSizeX, GSYS.DrawSetting.DrawSizeY )\ + DRAWRECT_DRAWAREA_CLIP +extern int NS_DrawBoxSet( const RECTDATA *RectData, int Num ) +{ + int Ret = -1 ; + int Flag ; + + if( /* GSYS.NotDrawFlag || */ GSYS.DrawSetting.NotDrawFlagInSetDrawArea ) + return 0 ; + + Flag = GSYS.Setting.ValidHardware && GSYS.Screen.UserScreenImagePixelFormatMatchSoftRenderMode == FALSE ; + + CheckActiveState() ; + + // 2D行列をハードウエアに反映する + if( GSYS.DrawSetting.MatchHardware_2DMatrix == FALSE && GSYS.Setting.ValidHardware && GSYS.Screen.UserScreenImagePixelFormatMatchSoftRenderMode == FALSE ) + Graphics_DrawSetting_ApplyLib2DMatrixToHardware() ; + + // 描画 + DRAW_DEF( + Graphics_Hardware_DrawBoxSet_PF( RectData, Num ), + Graphics_Software_DrawBoxSet( RectData, Num ), + SETDRAWRECTCODE, + Ret, + Flag + ) + + // 終了 + return Ret ; +} +#undef SETDRAWRECTCODE + // 3Dの点を描画する extern int NS_DrawPixel3D( VECTOR Pos, unsigned int Color ) { @@ -13253,7 +13369,7 @@ extern int NS_DrawChipMap2( int MapWidth, int MapHeight, const int *MapData, int // マップを描く Result = NS_DrawChipMap( ScreenX, ScreenY, MapDrawWidth, MapDrawHeight, - MapData + MapDrawPointX + MapDrawPointY * MapWidth, MapWidth, ChipTypeNum, ChipGrHandle, TransFlag ) ; + MapData + MapDrawPointX + MapDrawPointY * MapWidth, ChipTypeNum, MapWidth, ChipGrHandle, TransFlag ) ; return Result ; } @@ -13353,7 +13469,10 @@ extern int NS_DrawRectGraph( int DestX, int DestY, int SrcX, int SrcY, int Width // エラー判定 if( GRAPHCHK( GraphHandle, Image ) ) - return -1 ; + { + hr = -1 ; + goto END ; + } if( ReverseXFlag && ReverseYFlag ) { @@ -13375,6 +13494,8 @@ extern int NS_DrawRectGraph( int DestX, int DestY, int SrcX, int SrcY, int Width hr = NS_DrawGraph( DestX - SrcX, DestY - SrcY, GraphHandle, TransFlag ) ; } +END : + // 描画矩形を元に戻す #ifndef DX_NON_MASK if( MASKD.MaskValidFlag ) @@ -14733,12 +14854,24 @@ extern int NS_DrawPolygonIndexed2D( const VERTEX2D *Vertex, int VertexNum, cons return NS_DrawPrimitiveIndexed2D( Vertex, VertexNum, Indices, PolygonNum * 3, DX_PRIMTYPE_TRIANGLELIST, GrHandle, TransFlag ) ; } +// 2Dポリゴンを描画する( 頂点インデックスを使用 ) +extern int NS_DrawPolygon32bitIndexed2D( const VERTEX2D *Vertex, int VertexNum, const unsigned int *Indices, int PolygonNum, int GrHandle, int TransFlag ) +{ + return NS_DrawPrimitive32bitIndexed2D( Vertex, VertexNum, Indices, PolygonNum * 3, DX_PRIMTYPE_TRIANGLELIST, GrHandle, TransFlag ) ; +} + // 3Dポリゴンを描画する(インデックス) extern int NS_DrawPolygonIndexed3D( const VERTEX3D *Vertex, int VertexNum, const unsigned short *Indices, int PolygonNum, int GrHandle, int TransFlag ) { return NS_DrawPrimitiveIndexed3D( Vertex, VertexNum, Indices, PolygonNum * 3, DX_PRIMTYPE_TRIANGLELIST, GrHandle, TransFlag ) ; } +// 3Dポリゴンを描画する(インデックス) +extern int NS_DrawPolygon32bitIndexed3D( const VERTEX3D *Vertex, int VertexNum, const unsigned int *Indices, int PolygonNum, int GrHandle, int TransFlag ) +{ + return NS_DrawPrimitive32bitIndexed3D( Vertex, VertexNum, Indices, PolygonNum * 3, DX_PRIMTYPE_TRIANGLELIST, GrHandle, TransFlag ) ; +} + // 3Dポリゴンを描画する(インデックス) extern int NS_DrawPolygonIndexed3DBase( const VERTEX_3D *Vertex, int VertexNum, const unsigned short *Indices, int IndexNum, int PrimitiveType, int GrHandle, int TransFlag ) { @@ -14840,6 +14973,107 @@ extern int NS_DrawPolygonIndexed3DBase( const VERTEX_3D *Vertex, int VertexNum, return Ret ; } +// 3Dポリゴンを描画する(インデックス) +extern int NS_DrawPolygon32bitIndexed3DBase( const VERTEX_3D *Vertex, int VertexNum, const unsigned int *Indices, int IndexNum, int PrimitiveType, int GrHandle, int TransFlag ) +{ + IMAGEDATA *Image ; + int Ret, i, Flag ; + const VERTEX_3D *UseVertex ; + + Ret = -1; + + // ソフトが非アクティブの場合はアクティブになるまで待つ + CheckActiveState() ; + + // エラー判定 + Image = NULL ; + if( ( DWORD )GrHandle != DX_NONE_GRAPH ) + { + if( GRAPHCHK( GrHandle, Image ) ) + return -1 ; + Flag = Image->Orig->FormatDesc.TextureFlag ; + } + else + { + Flag = GSYS.Setting.ValidHardware && GSYS.Screen.UserScreenImagePixelFormatMatchSoftRenderMode == FALSE ; + } + +#ifndef DX_NON_MOVIE + if( ( DWORD )GrHandle != DX_NONE_GRAPH ) + { + if( Image->Orig->MovieHandle != -1 ) + UpdateMovie( Image->Orig->MovieHandle, FALSE ) ; + } +#endif + + // 3D行列をハードウエアに反映する + if( GSYS.DrawSetting.MatchHardware3DMatrix == FALSE && GSYS.Setting.ValidHardware && GSYS.Screen.UserScreenImagePixelFormatMatchSoftRenderMode == FALSE ) + Graphics_DrawSetting_ApplyLib3DMatrixToHardware() ; + + // 色の変換が必要な場合はここで処理する + if( GSYS.DrawSetting.DrawBright.Red != 255 || + GSYS.DrawSetting.DrawBright.Green != 255 || + GSYS.DrawSetting.DrawBright.Blue != 255 || + ( GSYS.DrawSetting.BlendMode != DX_BLENDMODE_NOBLEND && GSYS.DrawSetting.BlendParam != 255 ) ) + { + DWORD *RedTable, *GreenTable, *BlueTable, *AlphaTable ; + const VERTEX_3D *sv ; + VERTEX_3D *dv ; + unsigned int Size ; + + // テーブルを用意する + RedTable = MemImgManage.RateTable[GSYS.DrawSetting.DrawBright.Red] ; + GreenTable = MemImgManage.RateTable[GSYS.DrawSetting.DrawBright.Green] ; + BlueTable = MemImgManage.RateTable[GSYS.DrawSetting.DrawBright.Blue] ; + AlphaTable = MemImgManage.RateTable[GSYS.DrawSetting.BlendParam] ; + if( GSYS.DrawSetting.BlendMode == DX_BLENDMODE_NOBLEND ) AlphaTable = MemImgManage.RateTable[255] ; + + // 頂点データを格納するメモリ領域が足りない場合は確保する + Size = sizeof( VERTEX_3D ) * VertexNum ; + if( GSYS.Resource.TempVertexBufferSize < ( int )Size ) + { + if( GSYS.Resource.TempVertexBuffer ) + { + DXFREE( GSYS.Resource.TempVertexBuffer ) ; + GSYS.Resource.TempVertexBufferSize = 0 ; + } + GSYS.Resource.TempVertexBuffer = DXALLOC( Size ) ; + if( GSYS.Resource.TempVertexBuffer == NULL ) + return -1 ; + GSYS.Resource.TempVertexBufferSize = ( int )Size ; + } + + // 一時バッファに変換しながら転送 + sv = Vertex; + dv = ( VERTEX_3D * )GSYS.Resource.TempVertexBuffer ; + for( i = 0 ; i < VertexNum ; i ++, sv ++, dv ++ ) + { + dv->pos = sv->pos ; + dv->u = sv->u ; + dv->v = sv->v ; + dv->b = ( BYTE )BlueTable [ sv->b ] ; + dv->g = ( BYTE )GreenTable[ sv->g ] ; + dv->r = ( BYTE )RedTable [ sv->r ] ; + dv->a = ( BYTE )AlphaTable[ sv->a ] ; + } + UseVertex = ( VERTEX_3D * )GSYS.Resource.TempVertexBuffer ; + } + else + { + UseVertex = Vertex ; + } + + DRAW_DEF( + Graphics_Hardware_Draw32bitIndexedPrimitive_PF( UseVertex, VertexNum, ( DWORD * )Indices, IndexNum, PrimitiveType, Image, TransFlag ), + 0, + DrawRect = GSYS.DrawSetting.DrawArea ;, + Ret, + Flag + ) + + return Ret ; +} + // 3Dポリゴンを描画する extern int NS_DrawPolygon3DBase( const VERTEX_3D *Vertex, int VertexNum, int PrimitiveType, int GrHandle, int TransFlag ) { @@ -15455,6 +15689,112 @@ extern int NS_DrawPrimitiveIndexed2D( const VERTEX2D *Vertex, int VertexNum, con return Ret ; } +// 2Dプリミティブを描画する(インデックス) +extern int NS_DrawPrimitive32bitIndexed2D( const VERTEX2D *Vertex, int VertexNum, const unsigned int *Indices, int IndexNum, int PrimitiveType, int GrHandle, int TransFlag ) +{ + IMAGEDATA *Image ; + int Ret, i, Flag ; + const VERTEX2D *UseVertex ; + + Ret = -1; + + // ソフトが非アクティブの場合はアクティブになるまで待つ + CheckActiveState() ; + + // エラー判定 + Image = NULL ; + if( ( DWORD )GrHandle != DX_NONE_GRAPH ) + { + if( GRAPHCHK( GrHandle, Image ) ) + return -1 ; + Flag = Image->Orig->FormatDesc.TextureFlag ; + } + else + { + Flag = GSYS.Setting.ValidHardware && GSYS.Screen.UserScreenImagePixelFormatMatchSoftRenderMode == FALSE ; + } + +#ifndef DX_NON_MOVIE + if( ( DWORD )GrHandle != DX_NONE_GRAPH ) + { + if( Image->Orig->MovieHandle != -1 ) + UpdateMovie( Image->Orig->MovieHandle, FALSE ) ; + } +#endif + + // 3D行列をハードウエアに反映する + if( GSYS.DrawSetting.MatchHardware3DMatrix == FALSE && GSYS.Setting.ValidHardware && GSYS.Screen.UserScreenImagePixelFormatMatchSoftRenderMode == FALSE ) + Graphics_DrawSetting_ApplyLib3DMatrixToHardware() ; + + // 色の変換が必要な場合はここで処理する + if( GSYS.DrawSetting.DrawBright.Red != 255 || + GSYS.DrawSetting.DrawBright.Green != 255 || + GSYS.DrawSetting.DrawBright.Blue != 255 || + ( GSYS.DrawSetting.BlendMode != DX_BLENDMODE_NOBLEND && GSYS.DrawSetting.BlendParam != 255 ) ) + { + DWORD *RedTable, *GreenTable, *BlueTable, *AlphaTable ; + const VERTEX2D *sv ; + VERTEX2D *dv ; + unsigned int Size ; + + // テーブルを用意する + RedTable = MemImgManage.RateTable[GSYS.DrawSetting.DrawBright.Red] ; + GreenTable = MemImgManage.RateTable[GSYS.DrawSetting.DrawBright.Green] ; + BlueTable = MemImgManage.RateTable[GSYS.DrawSetting.DrawBright.Blue] ; + AlphaTable = MemImgManage.RateTable[GSYS.DrawSetting.BlendParam] ; + if( GSYS.DrawSetting.BlendMode == DX_BLENDMODE_NOBLEND ) AlphaTable = MemImgManage.RateTable[255] ; + + // 頂点データを格納するメモリ領域が足りない場合は確保する + Size = sizeof( VERTEX2D ) * VertexNum ; + if( GSYS.Resource.TempVertexBufferSize < ( int )Size ) + { + if( GSYS.Resource.TempVertexBuffer ) + { + DXFREE( GSYS.Resource.TempVertexBuffer ) ; + GSYS.Resource.TempVertexBufferSize = 0 ; + } + GSYS.Resource.TempVertexBuffer = DXALLOC( Size ) ; + if( GSYS.Resource.TempVertexBuffer == NULL ) + return -1 ; + GSYS.Resource.TempVertexBufferSize = ( int )Size ; + } + + // 一時バッファに変換しながら転送 + sv = Vertex; + dv = ( VERTEX2D * )GSYS.Resource.TempVertexBuffer ; + for( i = 0 ; i < VertexNum ; i ++, sv ++, dv ++ ) + { + dv->pos = sv->pos ; + dv->rhw = sv->rhw ; + dv->dif.b = ( BYTE )BlueTable [ sv->dif.b ] ; + dv->dif.g = ( BYTE )GreenTable[ sv->dif.g ] ; + dv->dif.r = ( BYTE )RedTable [ sv->dif.r ] ; + dv->dif.a = ( BYTE )AlphaTable[ sv->dif.a ] ; + dv->u = sv->u ; + dv->v = sv->v ; + } + UseVertex = ( VERTEX2D * )GSYS.Resource.TempVertexBuffer ; + } + else + { + UseVertex = Vertex ; + } + + // 2D行列をハードウエアに反映する + if( GSYS.DrawSetting.MatchHardware_2DMatrix == FALSE && GSYS.Setting.ValidHardware && GSYS.Screen.UserScreenImagePixelFormatMatchSoftRenderMode == FALSE ) + Graphics_DrawSetting_ApplyLib2DMatrixToHardware() ; + + DRAW_DEF( + Graphics_Hardware_Draw32bitIndexedPrimitive2DUser_PF( UseVertex, VertexNum, ( DWORD * )Indices, IndexNum, PrimitiveType, Image, TransFlag ), + 0, + DrawRect = GSYS.DrawSetting.DrawArea ;, + Ret, + Flag + ) + + return Ret ; +} + // 3Dポリゴンを描画する(インデックス) extern int NS_DrawPrimitiveIndexed3D( const VERTEX3D *Vertex, int VertexNum, const unsigned short *Indices, int IndexNum, int PrimitiveType, int GrHandle, int TransFlag ) { @@ -15563,6 +15903,114 @@ extern int NS_DrawPrimitiveIndexed3D( const VERTEX3D *Vertex, int VertexNum, con return Ret ; } +// 3Dポリゴンを描画する(インデックス) +extern int NS_DrawPrimitive32bitIndexed3D( const VERTEX3D *Vertex, int VertexNum, const unsigned int *Indices, int IndexNum, int PrimitiveType, int GrHandle, int TransFlag ) +{ + IMAGEDATA *Image ; + int Ret, i, Flag ; + const VERTEX3D *UseVertex ; + + Ret = -1; + + // ソフトが非アクティブの場合はアクティブになるまで待つ + CheckActiveState() ; + + // エラー判定 + Image = NULL ; + if( ( DWORD )GrHandle != DX_NONE_GRAPH ) + { + if( GRAPHCHK( GrHandle, Image ) ) + return -1 ; + Flag = Image->Orig->FormatDesc.TextureFlag ; + } + else + { + Flag = GSYS.Setting.ValidHardware && GSYS.Screen.UserScreenImagePixelFormatMatchSoftRenderMode == FALSE ; + } + +#ifndef DX_NON_MOVIE + if( ( DWORD )GrHandle != DX_NONE_GRAPH ) + { + if( Image->Orig->MovieHandle != -1 ) + UpdateMovie( Image->Orig->MovieHandle, FALSE ) ; + } +#endif + + // 3D行列をハードウエアに反映する + if( GSYS.DrawSetting.MatchHardware3DMatrix == FALSE && GSYS.Setting.ValidHardware && GSYS.Screen.UserScreenImagePixelFormatMatchSoftRenderMode == FALSE ) + Graphics_DrawSetting_ApplyLib3DMatrixToHardware() ; + + // 色の変換が必要な場合はここで処理する + if( GSYS.DrawSetting.DrawBright.Red != 255 || + GSYS.DrawSetting.DrawBright.Green != 255 || + GSYS.DrawSetting.DrawBright.Blue != 255 || + ( GSYS.DrawSetting.BlendMode != DX_BLENDMODE_NOBLEND && GSYS.DrawSetting.BlendParam != 255 ) ) + { + DWORD *RedTable, *GreenTable, *BlueTable, *AlphaTable ; + const VERTEX3D *sv ; + VERTEX3D *dv ; + unsigned int Size ; + + // テーブルを用意する + RedTable = MemImgManage.RateTable[GSYS.DrawSetting.DrawBright.Red] ; + GreenTable = MemImgManage.RateTable[GSYS.DrawSetting.DrawBright.Green] ; + BlueTable = MemImgManage.RateTable[GSYS.DrawSetting.DrawBright.Blue] ; + AlphaTable = MemImgManage.RateTable[GSYS.DrawSetting.BlendParam] ; + if( GSYS.DrawSetting.BlendMode == DX_BLENDMODE_NOBLEND ) AlphaTable = MemImgManage.RateTable[255] ; + + // 頂点データを格納するメモリ領域が足りない場合は確保する + Size = sizeof( VERTEX3D ) * VertexNum ; + if( GSYS.Resource.TempVertexBufferSize < ( int )Size ) + { + if( GSYS.Resource.TempVertexBuffer ) + { + DXFREE( GSYS.Resource.TempVertexBuffer ) ; + GSYS.Resource.TempVertexBufferSize = 0 ; + } + GSYS.Resource.TempVertexBuffer = DXALLOC( Size ) ; + if( GSYS.Resource.TempVertexBuffer == NULL ) + return -1 ; + GSYS.Resource.TempVertexBufferSize = ( int )Size ; + } + + // 一時バッファに変換しながら転送 + sv = Vertex; + dv = ( VERTEX3D * )GSYS.Resource.TempVertexBuffer ; + for( i = 0 ; i < VertexNum ; i ++, sv ++, dv ++ ) + { + dv->pos = sv->pos ; + dv->norm = sv->norm ; + dv->dif.b = ( BYTE )BlueTable [ sv->dif.b ] ; + dv->dif.g = ( BYTE )GreenTable[ sv->dif.g ] ; + dv->dif.r = ( BYTE )RedTable [ sv->dif.r ] ; + dv->dif.a = ( BYTE )AlphaTable[ sv->dif.a ] ; + dv->spc.b = ( BYTE )BlueTable [ sv->spc.b ] ; + dv->spc.g = ( BYTE )GreenTable[ sv->spc.g ] ; + dv->spc.r = ( BYTE )RedTable [ sv->spc.r ] ; + dv->spc.a = ( BYTE )AlphaTable[ sv->spc.a ] ; + dv->u = sv->u ; + dv->v = sv->v ; + dv->su = sv->su ; + dv->sv = sv->sv ; + } + UseVertex = ( VERTEX3D * )GSYS.Resource.TempVertexBuffer ; + } + else + { + UseVertex = Vertex ; + } + + DRAW_DEF( + Graphics_Hardware_Draw32bitIndexedPrimitiveLight_PF( UseVertex, VertexNum, ( DWORD * )Indices, IndexNum, PrimitiveType, Image, TransFlag ), + 0, + DrawRect = GSYS.DrawSetting.DrawArea ;, + Ret, + Flag + ) + + return Ret ; +} + // 頂点バッファを使用して3Dポリゴンを描画する extern int NS_DrawPolygon3D_UseVertexBuffer( int VertexBufHandle, int GrHandle, int TransFlag ) { @@ -16512,6 +16960,76 @@ extern int NS_GetDrawBlendMode( int *BlendMode, int *BlendParam ) return 0 ; } +// カスタムブレンドモードを設定する +extern int NS_SetDrawCustomBlendMode( int BlendEnable, int SrcBlendRGB /* DX_BLEND_SRC_COLOR 等 */, int DestBlendRGB /* DX_BLEND_SRC_COLOR 等 */, int BlendOpRGB /* DX_BLENDOP_ADD 等 */, int SrcBlendA /* DX_BLEND_SRC_COLOR 等 */, int DestBlendA /* DX_BLEND_SRC_COLOR 等 */, int BlendOpA /* DX_BLENDOP_ADD 等 */, int BlendParam ) +{ + if( GSYS.DrawSetting.BlendMode == DX_BLENDMODE_CUSTOM && + GSYS.DrawSetting.BlendEnable == BlendEnable && + GSYS.DrawSetting.BlendRGBSrc == SrcBlendRGB && + GSYS.DrawSetting.BlendRGBDest == DestBlendRGB && + GSYS.DrawSetting.BlendRGBOp == BlendOpRGB && + GSYS.DrawSetting.BlendASrc == SrcBlendA && + GSYS.DrawSetting.BlendADest == DestBlendA && + GSYS.DrawSetting.BlendAOp == BlendOpA && + GSYS.DrawSetting.BlendParam == BlendParam ) + { + return 0 ; + } + + // ソフトが非アクティブの場合はアクティブになるまで待つ + CheckActiveState() ; + + // ブレンドモードの保存 + if( GSYS.DrawSetting.BlendMode != DX_BLENDMODE_CUSTOM || + GSYS.DrawSetting.BlendEnable != BlendEnable || + GSYS.DrawSetting.BlendRGBSrc != SrcBlendRGB || + GSYS.DrawSetting.BlendRGBDest != DestBlendRGB || + GSYS.DrawSetting.BlendRGBOp != BlendOpRGB || + GSYS.DrawSetting.BlendASrc != SrcBlendA || + GSYS.DrawSetting.BlendADest != DestBlendA || + GSYS.DrawSetting.BlendAOp != BlendOpA ) + { + GSYS.DrawSetting.BlendMode = DX_BLENDMODE_CUSTOM ; + GSYS.DrawSetting.BlendEnable = BlendEnable ; + GSYS.DrawSetting.BlendRGBSrc = SrcBlendRGB ; + GSYS.DrawSetting.BlendRGBDest = DestBlendRGB ; + GSYS.DrawSetting.BlendRGBOp = BlendOpRGB ; + GSYS.DrawSetting.BlendASrc = SrcBlendA ; + GSYS.DrawSetting.BlendADest = DestBlendA ; + GSYS.DrawSetting.BlendAOp = BlendOpA ; + GSYS.ChangeSettingFlag = TRUE ; + } + + if( BlendParam > 255 ) BlendParam = 255 ; + if( BlendParam < 0 ) BlendParam = 0 ; + GSYS.DrawSetting.BlendParam = BlendParam ; + + // ハードウエアアクセラレーションの設定に反映 + if( GSYS.Setting.ValidHardware && GSYS.Screen.UserScreenImagePixelFormatMatchSoftRenderMode == FALSE ) + { + Graphics_Hardware_SetDrawCustomBlendMode_PF( BlendEnable, SrcBlendRGB, DestBlendRGB, BlendOpRGB, SrcBlendA, DestBlendA, BlendOpA, BlendParam ) ; + } + + // 終了 + return 0 ; +} + +// カスタムブレンドモードを取得する +extern int NS_GetDrawCustomBlendMode( int *BlendEnable, int *SrcBlendRGB, int *DestBlendRGB, int *BlendOpRGB, int *SrcBlendA, int *DestBlendA, int *BlendOpA, int *BlendParam ) +{ + if( BlendEnable != NULL ) *BlendEnable = GSYS.DrawSetting.BlendEnable ; + if( SrcBlendRGB != NULL ) *SrcBlendRGB = GSYS.DrawSetting.BlendRGBSrc ; + if( DestBlendRGB != NULL ) *DestBlendRGB = GSYS.DrawSetting.BlendRGBDest ; + if( BlendOpRGB != NULL ) *BlendOpRGB = GSYS.DrawSetting.BlendRGBOp ; + if( SrcBlendA != NULL ) *SrcBlendA = GSYS.DrawSetting.BlendASrc ; + if( DestBlendA != NULL ) *DestBlendA = GSYS.DrawSetting.BlendADest ; + if( BlendOpA != NULL ) *BlendOpA = GSYS.DrawSetting.BlendAOp ; + if( BlendParam != NULL ) *BlendParam = GSYS.DrawSetting.BlendParam ; + + // 終了 + return 0 ; +} + // 描画時のアルファテストの設定を行う( TestMode:DX_CMP_GREATER等( -1:デフォルト動作に戻す ) TestParam:描画アルファ値との比較に使用する値 ) extern int NS_SetDrawAlphaTest( int TestMode, int TestParam ) { @@ -17912,6 +18430,32 @@ extern int NS_GetUseBackCulling( void ) return GSYS.DrawSetting.CullMode ; } +// 右手座標系のクリッピング処理を行うかを設定する( TRUE:右手座標系のクリッピング処理を行う FALSE:左手座標系のクリッピング処理を行う( デフォルト ) ) +extern int NS_SetUseRightHandClippingProcess( int Flag ) +{ + Flag = Flag == FALSE ? FALSE : TRUE ; + + if( GSYS.DrawSetting.UseRightHandClippingProcess == Flag ) + { + return 0 ; + } + + // フラグを保存 + GSYS.DrawSetting.UseRightHandClippingProcess = Flag ; + + // クリッピング行列を更新 + Graphics_DrawSetting_RefreshBlend3DTransformMatrix() ; + + // 終了 + return 0 ; +} + +// 右手座標系のクリッピング処理を行うかを取得する( TRUE:右手座標系のクリッピング処理を行う FALSE:左手座標系のクリッピング処理を行う( デフォルト ) ) +extern int NS_GetUseRightHandClippingProcess( void ) +{ + return GSYS.DrawSetting.UseRightHandClippingProcess ; +} + // テクスチャアドレスモードを設定する extern int NS_SetTextureAddressMode( int Mode /* DX_TEXADDRESS_WRAP 等 */, int Stage ) @@ -19038,7 +19582,7 @@ extern int NS_SetGraphMode( int ScreenSizeX, int ScreenSizeY, int ColorBitDepth, RRate = GSYS.Screen.MainScreenRefreshRate ; // 画面モードを変更 - Graphics_Screen_ChangeMode( ScreenSizeX, ScreenSizeY, ColorBitDepth, FALSE, RefreshRate ) ; + Graphics_Screen_ChangeMode( ScreenSizeX, ScreenSizeY, ColorBitDepth, FALSE, RefreshRate, FALSE ) ; // 戻り値のセット if( ScreenSizeX == GSYS.Screen.MainScreenSizeX && @@ -19046,9 +19590,9 @@ extern int NS_SetGraphMode( int ScreenSizeX, int ScreenSizeY, int ColorBitDepth, #ifdef WINDOWS_DESKTOP_OS && ( - NS_GetWindowModeFlag() == FALSE || + ( NS_GetWindowModeFlag() == FALSE && NS_GetUseFullScreenResolutionMode() != DX_FSRESOLUTIONMODE_BORDERLESS_WINDOW ) || ( - NS_GetWindowModeFlag() == TRUE && + ( NS_GetWindowModeFlag() == TRUE || NS_GetUseFullScreenResolutionMode() == DX_FSRESOLUTIONMODE_BORDERLESS_WINDOW ) && ColorBitDepth == GSYS.Screen.MainScreenColorBitDepth && RefreshRate == GSYS.Screen.MainScreenRefreshRate ) @@ -19074,9 +19618,9 @@ extern int NS_SetGraphMode( int ScreenSizeX, int ScreenSizeY, int ColorBitDepth, #ifdef WINDOWS_DESKTOP_OS && ( - NS_GetWindowModeFlag() == FALSE || + ( NS_GetWindowModeFlag() == FALSE && NS_GetUseFullScreenResolutionMode() != DX_FSRESOLUTIONMODE_BORDERLESS_WINDOW ) || ( - NS_GetWindowModeFlag() == TRUE && + ( NS_GetWindowModeFlag() == TRUE || NS_GetUseFullScreenResolutionMode() == DX_FSRESOLUTIONMODE_BORDERLESS_WINDOW ) && GSYS.Screen.MainScreenColorBitDepth == DEFAULT_COLOR_BITDEPTH && GSYS.Screen.MainScreenRefreshRate == 0 ) @@ -19140,15 +19684,30 @@ extern int NS_SetGraphMode( int ScreenSizeX, int ScreenSizeY, int ColorBitDepth, extern int NS_SetFullScreenResolutionMode( int ResolutionMode /* DX_FSRESOLUTIONMODE_NATIVE 等 */ ) { // 初期後の場合は何もせず終了 - if( DxSysData.DxLib_InitializeFlag == TRUE ) +// if( DxSysData.DxLib_InitializeFlag == TRUE ) +// { +// return -1 ; +// } + + // 今までと設定が同じ場合は何もせず終了 + if( GSYS.Screen.FullScreenResolutionMode == ResolutionMode ) { - return -1 ; + return 0 ; } // フルスクリーン解像度モードを保存する GSYS.Screen.FullScreenResolutionMode = ResolutionMode ; GSYS.Screen.FullScreenResolutionModeAct = ResolutionMode ; +#ifdef WINDOWS_DESKTOP_OS + // フルスクリーンモードの場合は設定の変更を適用する + if( NS_GetWindowModeFlag() == FALSE ) + { + SetWindowStyle() ; + Graphics_Screen_ChangeMode( -1, -1, -1, FALSE, -1, TRUE ) ; + } +#endif // WINDOWS_DESKTOP_OS + // 終了 return 0 ; } @@ -19170,6 +19729,12 @@ extern int NS_GetFullScreenResolutionMode( int *ResolutionMode, int *UseResoluti return 0 ; } +// フルスクリーン解像度モードを取得する( GetFullScreenResolutionMode の UseResolutionMode で取得できる値を返す関数 ) +extern int NS_GetUseFullScreenResolutionMode( void ) +{ + return GSYS.Screen.FullScreenResolutionModeAct ; +} + // フルスクリーンモード時の画面拡大モードを設定する extern int NS_SetFullScreenScalingMode( int ScalingMode /* DX_FSSCALINGMODE_NEAREST 等 */ , int FitScaling ) { @@ -19332,20 +19897,44 @@ extern int NS_GetColorBitDepth( void ) } // 画面モードが変更されているかどうかのフラグを取得する -extern int NS_GetChangeDisplayFlag( void ) +extern int NS_GetChangeDisplayFlag( void ) { #ifdef WINDOWS_DESKTOP_OS // 終了 - return NS_GetWindowModeFlag() == FALSE ; + return NS_GetWindowModeFlag() == FALSE && NS_GetUseFullScreenResolutionMode() != DX_FSRESOLUTIONMODE_BORDERLESS_WINDOW ; #else // WINDOWS_DESKTOP_OS return FALSE ; #endif // WINDOWS_DESKTOP_OS } // ビデオメモリの容量を得る -extern int NS_GetVideoMemorySize( int *AllSize, int *FreeSize ) +extern int NS_GetVideoMemorySize( int *AllSize, int *FreeSize ) { - return Graphics_Hardware_GetVideoMemorySize_PF( AllSize, FreeSize ) ; + ULONGLONG TotalSize, UseSize ; + + if( Graphics_Hardware_GetVideoMemorySizeEx_PF( &TotalSize, &UseSize ) < 0 ) + { + return -1 ; + } + + if( AllSize != NULL ) + { + *AllSize = TotalSize > 0x7fffffff ? 0x7fffffff : ( int )TotalSize ; + } + + if( FreeSize != NULL ) + { + ULONGLONG FreeSizeLL = TotalSize - UseSize ; + *FreeSize = FreeSizeLL > 0x7fffffff ? 0x7fffffff : ( int )FreeSizeLL ; + } + + return 0 ; +} + +// ビデオメモリの容量を得る( 64bit版 ) +extern int NS_GetVideoMemorySizeEx( ULONGLONG *TotalSize, ULONGLONG *UseSize ) +{ + return Graphics_Hardware_GetVideoMemorySizeEx_PF( TotalSize, UseSize ) ; } // 現在の画面のリフレッシュレートを取得する @@ -21855,6 +22444,121 @@ extern int NS_CalcPolygonIndexedBinormalAndTangentsToShader( VERTEX3DSHADER *Ver return 0 ; } +// ポリゴンの頂点の接線と従法線をUV座標から計算してセットする(インデックス) +extern int NS_CalcPolygon32bitIndexedBinormalAndTangentsToShader( VERTEX3DSHADER *Vertex, int VertexNum, const unsigned int *Indices, int PolygonNum ) +{ + int i ; + VECTOR v1, v2, vt, du, dv, vb, vn ; + BYTE *UseFlag ; + const unsigned int *Index ; + int IndexNum ; + VERTEX3DSHADER *Vert[ 3 ] ; + + // 使用している頂点のテーブルを作成する + { + UseFlag = ( BYTE * )DXALLOC( sizeof( BYTE ) * VertexNum ) ; + if( UseFlag == NULL ) + { + DXST_LOGFILEFMT_ADDUTF16LE(( "\x02\x98\xb9\x70\x6e\x30\xa5\x63\xda\x7d\x68\x30\x93\x5f\xd5\x6c\xda\x7d\x6e\x30\x5c\x4f\x10\x62\x5c\x4f\x6d\x69\x6b\x30\xc5\x5f\x81\x89\x6a\x30\xe1\x30\xe2\x30\xea\x30\x18\x98\xdf\x57\x6e\x30\xba\x78\xdd\x4f\x6b\x30\x31\x59\x57\x65\x57\x30\x7e\x30\x57\x30\x5f\x30\x0a\x00\x00"/*@ L"頂点の接線と従法線の作成作業に必要なメモリ領域の確保に失敗しました\n" @*/ )) ; + return -1 ; + } + _MEMSET( UseFlag, 0, ( size_t )VertexNum ) ; + + IndexNum = PolygonNum * 3 ; + for( i = 0 ; i < IndexNum ; i ++ ) + { + UseFlag[ Indices[ i ] ] = 1 ; + } + } + + // 接線と従法線の初期化 + for( i = 0 ; i < VertexNum ; i ++ ) + { + if( UseFlag[ i ] == 0 ) continue ; + Vertex[ i ].binorm.x = 0.0f ; + Vertex[ i ].binorm.y = 0.0f ; + Vertex[ i ].binorm.z = 0.0f ; + Vertex[ i ].tan.x = 0.0f ; + Vertex[ i ].tan.y = 0.0f ; + Vertex[ i ].tan.z = 0.0f ; + } + + // 全ての面の数だけ繰り返し + Index = Indices ; + for( i = 0 ; i < PolygonNum ; i ++, Index += 3 ) + { + Vert[ 0 ] = &Vertex[ Index[ 0 ] ] ; + Vert[ 1 ] = &Vertex[ Index[ 1 ] ] ; + Vert[ 2 ] = &Vertex[ Index[ 2 ] ] ; + + v1.x = Vert[ 1 ]->pos.x - Vert[ 0 ]->pos.x ; + v1.y = Vert[ 1 ]->u - Vert[ 0 ]->u ; + v1.z = Vert[ 1 ]->v - Vert[ 0 ]->v ; + + v2.x = Vert[ 2 ]->pos.x - Vert[ 0 ]->pos.x ; + v2.y = Vert[ 2 ]->u - Vert[ 0 ]->u ; + v2.z = Vert[ 2 ]->v - Vert[ 0 ]->v ; + + vt = VCross( v1, v2 ) ; + du.x = 1.0f ; + if( VDot( vt, vt ) >= 0.0000001f ) + { + du.x = -vt.y / vt.x ; + dv.x = -vt.z / vt.x ; + } + + v1.x = Vert[ 1 ]->pos.y - Vert[ 0 ]->pos.y ; + v2.x = Vert[ 2 ]->pos.y - Vert[ 0 ]->pos.y ; + + vt = VCross( v1, v2 ) ; + du.y = 1.0f ; + if( VDot( vt, vt ) >= 0.0000001f ) + { + du.y = -vt.y / vt.x ; + dv.y = -vt.z / vt.x ; + } + + v1.x = Vert[ 1 ]->pos.z - Vert[ 0 ]->pos.z ; + v2.x = Vert[ 2 ]->pos.z - Vert[ 0 ]->pos.z ; + + vt = VCross( v1, v2 ) ; + du.z = 1.0f ; + if( VDot( vt, vt ) >= 0.0000001f ) + { + du.z = -vt.y / vt.x ; + dv.z = -vt.z / vt.x ; + } + + VectorAdd( &Vert[ 0 ]->tan, &Vert[ 0 ]->tan, &du ) ; + VectorAdd( &Vert[ 1 ]->tan, &Vert[ 1 ]->tan, &du ) ; + VectorAdd( &Vert[ 2 ]->tan, &Vert[ 2 ]->tan, &du ) ; + + VectorAdd( &Vert[ 0 ]->binorm, &Vert[ 0 ]->binorm, &dv ) ; + VectorAdd( &Vert[ 1 ]->binorm, &Vert[ 1 ]->binorm, &dv ) ; + VectorAdd( &Vert[ 2 ]->binorm, &Vert[ 2 ]->binorm, &dv ) ; + } + + // 法線の算出と正規化 + for( i = 0 ; i < VertexNum ; i ++ ) + { + if( UseFlag[ i ] == 0 ) continue ; + + vt = VNorm( Vertex[ i ].tan ) ; + vn = VNorm( VCross( vt, Vertex[ i ].binorm ) ) ; + vb = VNorm( VCross( vn, vt ) ) ; + + // 正規化 + Vertex[ i ].tan = vt ; + Vertex[ i ].binorm = vb ; + } + + // メモリの解放 + DXFREE( UseFlag ) ; + + // 終了 + return 0 ; +} + // シェーダーを使ってビルボードを描画する extern int NS_DrawBillboard3DToShader( VECTOR Pos, float cx, float cy, float Size, float Angle, int GrHandle, int /*TransFlag*/, int ReverseXFlag, int ReverseYFlag ) @@ -22121,12 +22825,24 @@ extern int NS_DrawPolygonIndexed2DToShader( const VERTEX2DSHADER *Vertex, int return NS_DrawPrimitiveIndexed2DToShader( Vertex, VertexNum, Indices, PolygonNum * 3, DX_PRIMTYPE_TRIANGLELIST ) ; } +// シェーダーを使って2Dポリゴンを描画する(インデックス) +extern int NS_DrawPolygon32bitIndexed2DToShader( const VERTEX2DSHADER *Vertex, int VertexNum, const unsigned int *Indices, int PolygonNum ) +{ + return NS_DrawPrimitive32bitIndexed2DToShader( Vertex, VertexNum, Indices, PolygonNum * 3, DX_PRIMTYPE_TRIANGLELIST ) ; +} + // シェーダーを使って3Dポリゴンを描画する(インデックス) extern int NS_DrawPolygonIndexed3DToShader( const VERTEX3DSHADER *Vertex, int VertexNum, const unsigned short *Indices, int PolygonNum ) { return NS_DrawPrimitiveIndexed3DToShader( Vertex, VertexNum, Indices, PolygonNum * 3, DX_PRIMTYPE_TRIANGLELIST ) ; } +// シェーダーを使って3Dポリゴンを描画する(インデックス) +extern int NS_DrawPolygon32bitIndexed3DToShader( const VERTEX3DSHADER *Vertex, int VertexNum, const unsigned int *Indices, int PolygonNum ) +{ + return NS_DrawPrimitive32bitIndexed3DToShader( Vertex, VertexNum, Indices, PolygonNum * 3, DX_PRIMTYPE_TRIANGLELIST ) ; +} + // シェーダーを使って2Dプリミティブを描画する extern int NS_DrawPrimitive2DToShader( const VERTEX2DSHADER *Vertex, int VertexNum, int PrimitiveType ) { @@ -22153,12 +22869,28 @@ extern int NS_DrawPrimitiveIndexed2DToShader( const VERTEX2DSHADER *Vertex, in return Graphics_Hardware_DrawPrimitiveIndexed2DToShader_PF( Vertex, VertexNum, Indices, IndexNum, PrimitiveType ) ; } +// シェーダーを使って2Dプリミティブを描画する(インデックス) +extern int NS_DrawPrimitive32bitIndexed2DToShader( const VERTEX2DSHADER *Vertex, int VertexNum, const unsigned int *Indices, int IndexNum, int PrimitiveType ) +{ + // 2D行列をハードウエアに反映する + if( GSYS.DrawSetting.MatchHardware_2DMatrix == FALSE && GSYS.Setting.ValidHardware && GSYS.Screen.UserScreenImagePixelFormatMatchSoftRenderMode == FALSE ) + Graphics_DrawSetting_ApplyLib2DMatrixToHardware() ; + + return Graphics_Hardware_DrawPrimitive32bitIndexed2DToShader_PF( Vertex, VertexNum, Indices, IndexNum, PrimitiveType ) ; +} + // シェーダーを使って3Dプリミティブを描画する(インデックス) extern int NS_DrawPrimitiveIndexed3DToShader( const VERTEX3DSHADER *Vertex, int VertexNum, const unsigned short *Indices, int IndexNum, int PrimitiveType ) { return Graphics_Hardware_DrawPrimitiveIndexed3DToShader_PF( Vertex, VertexNum, Indices, IndexNum, PrimitiveType ) ; } +// シェーダーを使って3Dプリミティブを描画する(インデックス) +extern int NS_DrawPrimitive32bitIndexed3DToShader( const VERTEX3DSHADER *Vertex, int VertexNum, const unsigned int *Indices, int IndexNum, int PrimitiveType ) +{ + return Graphics_Hardware_DrawPrimitive32bitIndexed3DToShader_PF( Vertex, VertexNum, Indices, IndexNum, PrimitiveType ) ; +} + // シェーダーを使って3Dポリゴンを描画する( 頂点バッファ使用版 ) extern int NS_DrawPolygon3DToShader_UseVertexBuffer( int VertexBufHandle ) { @@ -23614,6 +24346,26 @@ extern int NS_SetGlobalAmbientLight( COLOR_F Color ) return 0 ; } +// 3D描画のライティング計算で角度減衰を行うかどうかを設定する( TRUE:角度減衰を行う( デフォルト ) FALSE:角度減衰を行わない ) +extern int NS_SetUseLightAngleAttenuation( int UseFlag ) +{ + // 値が同じ場合は何もせず終了 + if( ( GSYS.Light.NoLightAngleAttenuation == FALSE && UseFlag == TRUE ) || + ( GSYS.Light.NoLightAngleAttenuation == TRUE && UseFlag == FALSE ) ) + { + return 0 ; + } + + // 値を保存 + GSYS.Light.NoLightAngleAttenuation = UseFlag ? FALSE : TRUE ; + + // ハードウェアに設定する + Graphics_Hardware_Light_SetNoAngleAttenuation_PF( GSYS.Light.NoLightAngleAttenuation ) ; + + // 終了 + return 0 ; +} + // ライトのタイプをディレクショナルライトにする extern int NS_ChangeLightTypeDir( VECTOR Direction ) { @@ -25744,22 +26496,22 @@ extern int Graphics_Initialize( void ) } // グラフィックハンドル管理情報の初期化 - InitializeHandleManage( DX_HANDLETYPE_GRAPH, sizeof( IMAGEDATA ), MAX_IMAGE_NUM, Graphics_Image_InitializeHandle, Graphics_Image_TerminateHandle, L"Graph" ) ; + InitializeHandleManage( DX_HANDLETYPE_GRAPH, sizeof( IMAGEDATA ), MAX_IMAGE_NUM, Graphics_Image_InitializeHandle, Graphics_Image_TerminateHandle, Graphics_Image_DumpInfoHandle, L"Graph" ) ; // シェーダーハンドル管理情報の初期化 - InitializeHandleManage( DX_HANDLETYPE_SHADER, sizeof( SHADERHANDLEDATA ) + sizeof( SHADERHANDLEDATA_PF ) , MAX_SHADER_NUM, Graphics_Shader_InitializeHandle, Graphics_Shader_TerminateHandle, L"Shader" ) ; + InitializeHandleManage( DX_HANDLETYPE_SHADER, sizeof( SHADERHANDLEDATA ) + sizeof( SHADERHANDLEDATA_PF ) , MAX_SHADER_NUM, Graphics_Shader_InitializeHandle, Graphics_Shader_TerminateHandle, NULL, L"Shader" ) ; // シェーダー用定数バッファハンドル管理情報の初期化 - InitializeHandleManage( DX_HANDLETYPE_SHADER_CONSTANT_BUFFER, sizeof( SHADERCONSTANTBUFFERHANDLEDATA ) + sizeof( SHADERCONSTANTBUFFERHANDLEDATA_PF ) , MAX_CONSTANT_BUFFER_NUM, Graphics_ShaderConstantBuffer_InitializeHandle, Graphics_ShaderConstantBuffer_TerminateHandle, L"ShaderConstantBuffer" ) ; + InitializeHandleManage( DX_HANDLETYPE_SHADER_CONSTANT_BUFFER, sizeof( SHADERCONSTANTBUFFERHANDLEDATA ) + sizeof( SHADERCONSTANTBUFFERHANDLEDATA_PF ) , MAX_CONSTANT_BUFFER_NUM, Graphics_ShaderConstantBuffer_InitializeHandle, Graphics_ShaderConstantBuffer_TerminateHandle, NULL, L"ShaderConstantBuffer" ) ; // 頂点バッファハンドル管理情報の初期化 - InitializeHandleManage( DX_HANDLETYPE_VERTEX_BUFFER, sizeof( VERTEXBUFFERHANDLEDATA ) + sizeof( VERTEXBUFFERHANDLEDATA_PF ), MAX_VERTEX_BUFFER_NUM, Graphics_VertexBuffer_InitializeHandle, Graphics_VertexBuffer_TerminateHandle, L"VertexBuffer" ) ; + InitializeHandleManage( DX_HANDLETYPE_VERTEX_BUFFER, sizeof( VERTEXBUFFERHANDLEDATA ) + sizeof( VERTEXBUFFERHANDLEDATA_PF ), MAX_VERTEX_BUFFER_NUM, Graphics_VertexBuffer_InitializeHandle, Graphics_VertexBuffer_TerminateHandle, NULL, L"VertexBuffer" ) ; // インデックスバッファハンドル管理情報の初期化 - InitializeHandleManage( DX_HANDLETYPE_INDEX_BUFFER, sizeof( INDEXBUFFERHANDLEDATA ) + sizeof( INDEXBUFFERHANDLEDATA_PF ), MAX_INDEX_BUFFER_NUM, Graphics_IndexBuffer_InitializeHandle, Graphics_IndexBuffer_TerminateHandle, L"IndexBuffer" ) ; + InitializeHandleManage( DX_HANDLETYPE_INDEX_BUFFER, sizeof( INDEXBUFFERHANDLEDATA ) + sizeof( INDEXBUFFERHANDLEDATA_PF ), MAX_INDEX_BUFFER_NUM, Graphics_IndexBuffer_InitializeHandle, Graphics_IndexBuffer_TerminateHandle, NULL, L"IndexBuffer" ) ; // シャドウマップハンドル管理情報の初期化 - InitializeHandleManage( DX_HANDLETYPE_SHADOWMAP, sizeof( SHADOWMAPDATA ) + sizeof( SHADOWMAPDATA_PF ), MAX_SHADOWMAP_NUM, Graphics_ShadowMap_InitializeHandle, Graphics_ShadowMap_TerminateHandle, L"ShadowMap" ) ; + InitializeHandleManage( DX_HANDLETYPE_SHADOWMAP, sizeof( SHADOWMAPDATA ) + sizeof( SHADOWMAPDATA_PF ), MAX_SHADOWMAP_NUM, Graphics_ShadowMap_InitializeHandle, Graphics_ShadowMap_TerminateHandle, NULL, L"ShadowMap" ) ; // 描画処理の環境依存部分の初期化その1 if( Graphics_Initialize_Timing0_PF() < 0 ) @@ -25921,6 +26673,14 @@ extern int Graphics_Terminate( void ) } } + // 作成する分割画像に割り当てるグラフィックハンドル用のメモリが確保されていたら解放 + if( GSYS.CreateImage.CreateDivGraphHandle != NULL ) + { + DXFREE( GSYS.CreateImage.CreateDivGraphHandle ) ; + GSYS.CreateImage.CreateDivGraphHandle = NULL ; + } + GSYS.CreateImage.CreateDivGraphHandleNum = 0 ; + // シャドウマップハンドル管理情報の後始末 TerminateHandleManage( DX_HANDLETYPE_SHADOWMAP ) ; @@ -26039,6 +26799,35 @@ extern int Graphics_Screen_SetupFullScreenModeInfo( void ) LABEL_FULLSCREENMODE_SWITCH : switch( GSYS.Screen.FullScreenResolutionModeAct ) { + case DX_FSRESOLUTIONMODE_BORDERLESS_WINDOW : +#ifdef WINDOWS_DESKTOP_OS + if( GSYS.Screen.DisplayInfo == NULL ) + { + if( Graphics_SetupDisplayInfo_PF() < 0 ) + { + HDC hdc ; + + hdc = WinAPIData.Win32Func.GetDCFunc( NULL ) ; + GSYS.Screen.FullScreenUseDispModeData.Width = WinAPIData.Win32Func.GetSystemMetricsFunc( SM_CXSCREEN ) ; + GSYS.Screen.FullScreenUseDispModeData.Height = WinAPIData.Win32Func.GetSystemMetricsFunc( SM_CYSCREEN ) ; + GSYS.Screen.FullScreenUseDispModeData.ColorBitDepth = WinAPIData.Win32Func.GetDeviceCapsFunc( hdc , PLANES ) * WinAPIData.Win32Func.GetDeviceCapsFunc( hdc , BITSPIXEL ) ; + GSYS.Screen.FullScreenUseDispModeData.RefreshRate = WinAPIData.Win32Func.GetDeviceCapsFunc( hdc , VREFRESH ) ; + WinAPIData.Win32Func.ReleaseDCFunc( NULL , hdc ) ; + break ; + } + } + + // デスクトップのサイズをセット + GSYS.Screen.FullScreenUseDispModeData.Width = GSYS.Screen.DisplayInfo[ UseDisplayIndex ].DesktopSizeX ; + GSYS.Screen.FullScreenUseDispModeData.Height = GSYS.Screen.DisplayInfo[ UseDisplayIndex ].DesktopSizeY ; + GSYS.Screen.FullScreenUseDispModeData.ColorBitDepth = GSYS.Screen.DisplayInfo[ UseDisplayIndex ].DesktopColorBitDepth ; + GSYS.Screen.FullScreenUseDispModeData.RefreshRate = GSYS.Screen.DisplayInfo[ UseDisplayIndex ].DesktopRefreshRate ; +#else + GSYS.Screen.FullScreenResolutionModeAct = DX_FSRESOLUTIONMODE_NATIVE ; + goto LABEL_FULLSCREENMODE_SWITCH ; +#endif + break ; + case DX_FSRESOLUTIONMODE_NATIVE : // 指定の画面モードに対応しているか調べる DispModeNum = NS_GetDisplayModeNum( UseDisplayIndex ) ; @@ -26250,6 +27039,7 @@ extern int Graphics_Screen_SetupFullScreenScalingDestRect( void ) case DX_FSRESOLUTIONMODE_MAXIMUM : case DX_FSRESOLUTIONMODE_DESKTOP : + case DX_FSRESOLUTIONMODE_BORDERLESS_WINDOW : // サブバックバッファの内容をピクセルの縦横比を1:1に保ちつつバックバッファに最大まで拡大して転送する矩形の算出 { int DestSizeX ; @@ -26264,18 +27054,30 @@ extern int Graphics_Screen_SetupFullScreenScalingDestRect( void ) static int MainScreenSizeYBackup = -1000 ; // 転送先のサイズをセット - if( GSYS.Screen.FullScreenResolutionModeAct == DX_FSRESOLUTIONMODE_DESKTOP ) + if( GSYS.Screen.FullScreenResolutionModeAct == DX_FSRESOLUTIONMODE_DESKTOP || + GSYS.Screen.FullScreenResolutionModeAct == DX_FSRESOLUTIONMODE_BORDERLESS_WINDOW ) { GRAPHICSSYS_DISPLAYINFO *DisplayInfo ; - if( GSYS.Screen.DisplayInfo == NULL ) + if( GSYS.Screen.DisplayInfo == NULL && Graphics_SetupDisplayInfo_PF() < 0 ) { +#ifdef WINDOWS_DESKTOP_OS + HDC hdc ; + + hdc = WinAPIData.Win32Func.GetDCFunc( NULL ) ; + DestSizeX = WinAPIData.Win32Func.GetSystemMetricsFunc( SM_CXSCREEN ) ; + DestSizeY = WinAPIData.Win32Func.GetSystemMetricsFunc( SM_CYSCREEN ) ; + WinAPIData.Win32Func.ReleaseDCFunc( NULL , hdc ) ; +#else return -1 ; +#endif + } + else + { + DisplayInfo = &GSYS.Screen.DisplayInfo[ GSYS.Screen.ValidUseDisplayIndex ? GSYS.Screen.UseDisplayIndex : GSYS.Screen.PrimaryDisplayIndex ] ; + DestSizeX = DisplayInfo->DesktopSizeX ; + DestSizeY = DisplayInfo->DesktopSizeY ; } - - DisplayInfo = &GSYS.Screen.DisplayInfo[ GSYS.Screen.ValidUseDisplayIndex ? GSYS.Screen.UseDisplayIndex : GSYS.Screen.PrimaryDisplayIndex ] ; - DestSizeX = DisplayInfo->DesktopSizeX ; - DestSizeY = DisplayInfo->DesktopSizeY ; if( DestSizeXBackup != DestSizeX || DestSizeYBackup != DestSizeY ) { @@ -26298,6 +27100,14 @@ extern int Graphics_Screen_SetupFullScreenScalingDestRect( void ) } // 転送後のサイズを決定 + if( GSYS.Screen.MainScreenSizeX == 0 ) + { + GSYS.Screen.MainScreenSizeX = DEFAULT_SCREEN_SIZE_X ; + } + if( GSYS.Screen.MainScreenSizeY == 0 ) + { + GSYS.Screen.MainScreenSizeY = DEFAULT_SCREEN_SIZE_Y ; + } ScalingSizeX = DestSizeY * GSYS.Screen.MainScreenSizeX / GSYS.Screen.MainScreenSizeY ; if( ScalingSizeX < DestSizeX ) { @@ -26358,6 +27168,7 @@ extern int Graphics_Screen_ScreenPosConvSubBackbufferPos( int ScreenPosX, int Sc case DX_FSRESOLUTIONMODE_MAXIMUM : case DX_FSRESOLUTIONMODE_DESKTOP : + case DX_FSRESOLUTIONMODE_BORDERLESS_WINDOW : if( Graphics_Screen_SetupFullScreenScalingDestRect() < 0 ) { return -1 ; @@ -26397,6 +27208,7 @@ extern int Graphics_Screen_SubBackbufferPosConvScreenPos( int BackBufferPosX, in case DX_FSRESOLUTIONMODE_MAXIMUM : case DX_FSRESOLUTIONMODE_DESKTOP : + case DX_FSRESOLUTIONMODE_BORDERLESS_WINDOW : if( Graphics_Screen_SetupFullScreenScalingDestRect() < 0 ) { return -1 ; @@ -26442,7 +27254,7 @@ extern void Graphics_Screen_SetMainScreenSize( int SizeX, int SizeY ) } // 画面モードの変更2 -extern int Graphics_Screen_ChangeMode( int ScreenSizeX, int ScreenSizeY, int ColorBitDepth, int ChangeWindowFlag, int RefreshRate ) +extern int Graphics_Screen_ChangeMode( int ScreenSizeX, int ScreenSizeY, int ColorBitDepth, int ChangeWindowFlag, int RefreshRate, int AlwaysRunFlag ) { int BackScSizeX, BackScSizeY, BackScColorBitDepth, BackRefreshRate ; int Ret = DX_CHANGESCREEN_OK ; @@ -26481,7 +27293,8 @@ extern int Graphics_Screen_ChangeMode( int ScreenSizeX, int ScreenSizeY, int Col ScreenSizeY == GSYS.Screen.MainScreenSizeY && ColorBitDepth == GSYS.Screen.MainScreenColorBitDepth && ChangeWindowFlag == FALSE && - RefreshRate == GSYS.Screen.MainScreenRefreshRate ) + RefreshRate == GSYS.Screen.MainScreenRefreshRate && + AlwaysRunFlag == FALSE ) { goto END ; } @@ -26522,7 +27335,7 @@ extern int Graphics_Screen_ChangeMode( int ScreenSizeX, int ScreenSizeY, int Col #ifdef WINDOWS_DESKTOP_OS // ウインドウモードの場合は指定の解像度がデスクトップのサイズを超えていないかどうかを調べる - if( NS_GetWindowModeFlag() == TRUE ) + if( NS_GetWindowModeFlag() == TRUE || NS_GetUseFullScreenResolutionMode() == DX_FSRESOLUTIONMODE_BORDERLESS_WINDOW ) { GRAPHICSSYS_DISPLAYINFO *DisplayInfo ; @@ -26585,7 +27398,7 @@ extern int Graphics_Screen_ChangeMode( int ScreenSizeX, int ScreenSizeY, int Col #ifdef WINDOWS_DESKTOP_OS // ウインドウスタイルセット - if( NS_GetWindowModeFlag() == TRUE ) + if( NS_GetWindowModeFlag() == TRUE || NS_GetUseFullScreenResolutionMode() == DX_FSRESOLUTIONMODE_BORDERLESS_WINDOW ) { SetWindowStyle() ; } @@ -26735,7 +27548,7 @@ extern int Graphics_Screen_ChangeMode( int ScreenSizeX, int ScreenSizeY, int Col #ifdef WINDOWS_DESKTOP_OS // ウインドウスタイルセット - if( NS_GetWindowModeFlag() == TRUE /*|| GSYS.Setting.ValidHardware == FALSE*/ ) + if( NS_GetWindowModeFlag() == TRUE || NS_GetUseFullScreenResolutionMode() == DX_FSRESOLUTIONMODE_BORDERLESS_WINDOW /*|| GSYS.Setting.ValidHardware == FALSE*/ ) { SetWindowStyle() ; } @@ -27186,9 +27999,9 @@ extern int Graphics_Image_CheckMultiSampleDrawValid( int GrHandle ) } // 新しいグラフィックハンドルを確保する -extern int Graphics_Image_AddHandle( int ASyncThread ) +extern int Graphics_Image_AddHandle( int GrHandle, int ASyncThread ) { - return AddHandle( DX_HANDLETYPE_GRAPH, ASyncThread, -1 ); + return AddHandle( DX_HANDLETYPE_GRAPH, ASyncThread, GrHandle ); } // グラフィックハンドルを初期化する @@ -27806,13 +28619,24 @@ extern int Graphics_Image_TerminateHandle( HANDLEINFO *HandleInfo ) return 0 ; } +// グラフィックハンドルの情報出力 +extern int Graphics_Image_DumpInfoHandle( HANDLEINFO *HandleInfo ) +{ + IMAGEDATA *Image = ( IMAGEDATA * )HandleInfo ; + + DXST_LOGFILEFMT_ADDW(( L"Handle:0x%08x Size:%dx%d UsePos:%d,%d File:%s", HandleInfo->Handle, Image->WidthI, Image->HeightI, Image->UseOrigXI, Image->UseOrigYI, Image->ReadBase != NULL && Image->ReadBase->FileName != NULL ? Image->ReadBase->FileName : L"None" )) ; + + // 終了 + return 0 ; +} + // 指定部分だけを抜き出したグラフィックハンドルを初期化する extern int Graphics_Image_InitializeDerivationHandle( int GrHandle, int IsFloat, int SrcXI, float SrcXF, int SrcYI, float SrcYF, int WidthI, float WidthF, int HeightI, float HeightF, int SrcGrHandle, int ASyncThread ) { IMAGEDATA *Image, *SrcImage ; IMAGEDATA_ORIG *Orig ; - // アドレスの取得 + // アドレスの取得s if( ASyncThread ) { if( GRAPHCHK_ASYNC( GrHandle, Image ) || @@ -28263,6 +29087,9 @@ extern int Graphics_Image_CreateDXGraph_UseGParam( // パレットテクスチャを使用するかどうかをセット UsePaletteFlag = RgbBaseImage->ColorData.PixelByte == 1 && + RgbBaseImage->ColorData.RedMask == 0x00ff0000 && + RgbBaseImage->ColorData.GreenMask == 0x0000ff00 && + RgbBaseImage->ColorData.BlueMask == 0x000000ff && ( ( GSYS.Setting.ValidHardware && GSYS.Screen.UserScreenImagePixelFormatMatchSoftRenderMode == FALSE ) || RgbBaseImage->ColorData.AlphaWidth == 0 ) && AlphaBaseImage == NULL && GParam->NotUsePaletteGraphFlag == FALSE ; @@ -28342,7 +29169,7 @@ extern int Graphics_Image_DerivationGraph_UseGParam( int Result ; // 新たなグラフィックデータの追加 - NewGraphHandle = Graphics_Image_AddHandle( ASyncThread ) ; + NewGraphHandle = Graphics_Image_AddHandle( GSYS.CreateImage.CreateGraphHandle <= 0 ? -1 : GSYS.CreateImage.CreateGraphHandle, ASyncThread ) ; if( NewGraphHandle == -1 ) { return -1 ; @@ -29371,7 +30198,7 @@ extern int Graphics_Image_BltBmpOrGraphImageToDivGraphBase( const BASEIMAGE *AlphaBaseImage, int AllNum, int XNum, - int /*YNum*/, + int YNum, int /*IsFloat*/, int WidthI, float WidthF, @@ -29396,6 +30223,12 @@ extern int Graphics_Image_BltBmpOrGraphImageToDivGraphBase( int x ; int y ; + // XNum, YNum の乗算値が AllNum に満たなかったらエラー + if( XNum * YNum < AllNum ) + { + return -1 ; + } + if( GSYS.InitializeFlag == FALSE ) { return -1 ; @@ -30174,7 +31007,7 @@ extern int Graphics_Image_GetWhiteTexHandle( void ) Graphics_Image_InitLoadGraphGParam( &GParam ) ; Graphics_Image_InitSetupGraphHandleGParam_Normal_NonDrawValid( &GParam.CreateGraphGParam.InitHandleGParam, 16, TRUE, FALSE ) ; GParam.CreateGraphGParam.InitHandleGParam.TransColor = ( BYTE )255 << 16 | ( BYTE )0 << 8 | ( BYTE )255 ; - GSYS.Resource.WhiteTexHandle = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, GSYS.Resource.WhiteTexHandle, &BaseImage, NULL ) ; + GSYS.Resource.WhiteTexHandle = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, -1, &BaseImage, NULL ) ; NS_SetDeleteHandleFlag( GSYS.Resource.WhiteTexHandle, &GSYS.Resource.WhiteTexHandle ) ; NS_SetDeviceLostDeleteGraphFlag( GSYS.Resource.WhiteTexHandle, TRUE ) ; @@ -30220,7 +31053,7 @@ extern int Graphics_Image_GetRandomKernelRotationTexHandle( void ) GParam.CreateGraphGParam.InitHandleGParam.FloatTypeGraphCreateFlag = TRUE ; GParam.CreateGraphGParam.InitHandleGParam.CreateImageChannelNum = 4 ; GParam.CreateGraphGParam.InitHandleGParam.CreateImageChannelBitDepth = 32 ; - GSYS.Resource.RandomKernelRotationTexHandle = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, GSYS.Resource.RandomKernelRotationTexHandle, &BaseImage, NULL ) ; + GSYS.Resource.RandomKernelRotationTexHandle = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, -1, &BaseImage, NULL ) ; NS_SetDeleteHandleFlag( GSYS.Resource.RandomKernelRotationTexHandle, &GSYS.Resource.RandomKernelRotationTexHandle ) ; NS_SetDeviceLostDeleteGraphFlag( GSYS.Resource.RandomKernelRotationTexHandle, TRUE ) ; @@ -30263,7 +31096,7 @@ extern int Graphics_Image_GetLineTexHandle( int IsPMA ) Graphics_Image_InitLoadGraphGParam( &GParam ) ; Graphics_Image_InitSetupGraphHandleGParam_Normal_NonDrawValid( &GParam.CreateGraphGParam.InitHandleGParam, 16, TRUE, FALSE ) ; GParam.CreateGraphGParam.InitHandleGParam.TransColor = ( BYTE )255 << 16 | ( BYTE )0 << 8 | ( BYTE )255 ; - GSYS.Resource.LineTexHandle_PMA = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, GSYS.Resource.LineTexHandle_PMA, &BaseImage, NULL ) ; + GSYS.Resource.LineTexHandle_PMA = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, -1, &BaseImage, NULL ) ; NS_SetDeleteHandleFlag( GSYS.Resource.LineTexHandle_PMA, &GSYS.Resource.LineTexHandle_PMA ) ; NS_SetDeviceLostDeleteGraphFlag( GSYS.Resource.LineTexHandle_PMA, TRUE ) ; @@ -30302,7 +31135,7 @@ extern int Graphics_Image_GetLineTexHandle( int IsPMA ) Graphics_Image_InitLoadGraphGParam( &GParam ) ; Graphics_Image_InitSetupGraphHandleGParam_Normal_NonDrawValid( &GParam.CreateGraphGParam.InitHandleGParam, 16, TRUE, FALSE ) ; GParam.CreateGraphGParam.InitHandleGParam.TransColor = ( BYTE )255 << 16 | ( BYTE )0 << 8 | ( BYTE )255 ; - GSYS.Resource.LineTexHandle = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, GSYS.Resource.LineTexHandle, &BaseImage, NULL ) ; + GSYS.Resource.LineTexHandle = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, -1, &BaseImage, NULL ) ; NS_SetDeleteHandleFlag( GSYS.Resource.LineTexHandle, &GSYS.Resource.LineTexHandle ) ; NS_SetDeviceLostDeleteGraphFlag( GSYS.Resource.LineTexHandle, TRUE ) ; @@ -30346,7 +31179,7 @@ extern int Graphics_Image_GetLineOneThicknessTexHandle( int IsPMA ) Graphics_Image_InitLoadGraphGParam( &GParam ) ; Graphics_Image_InitSetupGraphHandleGParam_Normal_NonDrawValid( &GParam.CreateGraphGParam.InitHandleGParam, 16, TRUE, FALSE ) ; GParam.CreateGraphGParam.InitHandleGParam.TransColor = ( BYTE )255 << 16 | ( BYTE )0 << 8 | ( BYTE )255 ; - GSYS.Resource.LineOneThicknessTexHandle_PMA = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, GSYS.Resource.LineOneThicknessTexHandle_PMA, &BaseImage, NULL ) ; + GSYS.Resource.LineOneThicknessTexHandle_PMA = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, -1, &BaseImage, NULL ) ; NS_SetDeleteHandleFlag( GSYS.Resource.LineOneThicknessTexHandle_PMA, &GSYS.Resource.LineOneThicknessTexHandle_PMA ) ; NS_SetDeviceLostDeleteGraphFlag( GSYS.Resource.LineOneThicknessTexHandle_PMA, TRUE ) ; @@ -30385,7 +31218,7 @@ extern int Graphics_Image_GetLineOneThicknessTexHandle( int IsPMA ) Graphics_Image_InitLoadGraphGParam( &GParam ) ; Graphics_Image_InitSetupGraphHandleGParam_Normal_NonDrawValid( &GParam.CreateGraphGParam.InitHandleGParam, 16, TRUE, FALSE ) ; GParam.CreateGraphGParam.InitHandleGParam.TransColor = ( BYTE )255 << 16 | ( BYTE )0 << 8 | ( BYTE )255 ; - GSYS.Resource.LineOneThicknessTexHandle = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, GSYS.Resource.LineOneThicknessTexHandle, &BaseImage, NULL ) ; + GSYS.Resource.LineOneThicknessTexHandle = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, -1, &BaseImage, NULL ) ; NS_SetDeleteHandleFlag( GSYS.Resource.LineOneThicknessTexHandle, &GSYS.Resource.LineOneThicknessTexHandle ) ; NS_SetDeviceLostDeleteGraphFlag( GSYS.Resource.LineOneThicknessTexHandle, TRUE ) ; @@ -30429,7 +31262,7 @@ extern int Graphics_Image_GetLineBoxTexHandle( int IsPMA ) Graphics_Image_InitLoadGraphGParam( &GParam ) ; Graphics_Image_InitSetupGraphHandleGParam_Normal_NonDrawValid( &GParam.CreateGraphGParam.InitHandleGParam, 16, TRUE, FALSE ) ; GParam.CreateGraphGParam.InitHandleGParam.TransColor = ( BYTE )255 << 16 | ( BYTE )0 << 8 | ( BYTE )255 ; - GSYS.Resource.LineBoxTexHandle_PMA = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, GSYS.Resource.LineBoxTexHandle_PMA, &BaseImage, NULL ) ; + GSYS.Resource.LineBoxTexHandle_PMA = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, -1, &BaseImage, NULL ) ; NS_SetDeleteHandleFlag( GSYS.Resource.LineBoxTexHandle_PMA, &GSYS.Resource.LineBoxTexHandle_PMA ) ; NS_SetDeviceLostDeleteGraphFlag( GSYS.Resource.LineBoxTexHandle_PMA, TRUE ) ; @@ -30468,7 +31301,7 @@ extern int Graphics_Image_GetLineBoxTexHandle( int IsPMA ) Graphics_Image_InitLoadGraphGParam( &GParam ) ; Graphics_Image_InitSetupGraphHandleGParam_Normal_NonDrawValid( &GParam.CreateGraphGParam.InitHandleGParam, 16, TRUE, FALSE ) ; GParam.CreateGraphGParam.InitHandleGParam.TransColor = ( BYTE )255 << 16 | ( BYTE )0 << 8 | ( BYTE )255 ; - GSYS.Resource.LineBoxTexHandle = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, GSYS.Resource.LineBoxTexHandle, &BaseImage, NULL ) ; + GSYS.Resource.LineBoxTexHandle = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, -1, &BaseImage, NULL ) ; NS_SetDeleteHandleFlag( GSYS.Resource.LineBoxTexHandle, &GSYS.Resource.LineBoxTexHandle ) ; NS_SetDeviceLostDeleteGraphFlag( GSYS.Resource.LineBoxTexHandle, TRUE ) ; @@ -30512,7 +31345,7 @@ extern int Graphics_Image_GetLineBoxOneThicknessTexHandle( int IsPMA ) Graphics_Image_InitLoadGraphGParam( &GParam ) ; Graphics_Image_InitSetupGraphHandleGParam_Normal_NonDrawValid( &GParam.CreateGraphGParam.InitHandleGParam, 16, TRUE, FALSE ) ; GParam.CreateGraphGParam.InitHandleGParam.TransColor = ( BYTE )255 << 16 | ( BYTE )0 << 8 | ( BYTE )255 ; - GSYS.Resource.LineBoxOneThicknessTexHandle_PMA = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, GSYS.Resource.LineBoxOneThicknessTexHandle_PMA, &BaseImage, NULL ) ; + GSYS.Resource.LineBoxOneThicknessTexHandle_PMA = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, -1, &BaseImage, NULL ) ; NS_SetDeleteHandleFlag( GSYS.Resource.LineBoxOneThicknessTexHandle_PMA, &GSYS.Resource.LineBoxOneThicknessTexHandle_PMA ) ; NS_SetDeviceLostDeleteGraphFlag( GSYS.Resource.LineBoxOneThicknessTexHandle_PMA, TRUE ) ; @@ -30551,7 +31384,7 @@ extern int Graphics_Image_GetLineBoxOneThicknessTexHandle( int IsPMA ) Graphics_Image_InitLoadGraphGParam( &GParam ) ; Graphics_Image_InitSetupGraphHandleGParam_Normal_NonDrawValid( &GParam.CreateGraphGParam.InitHandleGParam, 16, TRUE, FALSE ) ; GParam.CreateGraphGParam.InitHandleGParam.TransColor = ( BYTE )255 << 16 | ( BYTE )0 << 8 | ( BYTE )255 ; - GSYS.Resource.LineBoxOneThicknessTexHandle = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, GSYS.Resource.LineBoxOneThicknessTexHandle, &BaseImage, NULL ) ; + GSYS.Resource.LineBoxOneThicknessTexHandle = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, -1, &BaseImage, NULL ) ; NS_SetDeleteHandleFlag( GSYS.Resource.LineBoxOneThicknessTexHandle, &GSYS.Resource.LineBoxOneThicknessTexHandle ) ; NS_SetDeviceLostDeleteGraphFlag( GSYS.Resource.LineBoxOneThicknessTexHandle, TRUE ) ; @@ -30654,7 +31487,7 @@ extern int Graphics_Image_MakeGraph_UseGParam( CheckActiveState() ; // ハンドルの作成 - GrHandle = Graphics_Image_AddHandle( ASyncThread ) ; + GrHandle = Graphics_Image_AddHandle( GSYS.CreateImage.CreateGraphHandle <= 0 ? -1 : GSYS.CreateImage.CreateGraphHandle, ASyncThread ) ; if( GrHandle == -1 ) { return -1 ; @@ -30750,7 +31583,7 @@ static int Graphics_Image_CreateGraph_Static( // 画像データの読み込み Graphics_Image_CreateGraph_LoadBaseImage( Param, &LParam ) ; - if( LParam.LoadHr == -1 ) + if( LParam.LoadHr == -1 ) { // 再読み込みではない場合はムービーの可能性を見る if( Param->ReCreateFlag == FALSE && ( Param->FileName != NULL || Param->RgbMemImage != NULL ) ) @@ -30904,10 +31737,21 @@ extern int Graphics_Image_CreateGraph_UseGParam( if( Param->ReCreateFlag == FALSE ) { - Param->GrHandle = Graphics_Image_AddHandle( ASyncThread ) ; - if( Param->GrHandle < 0 ) + if( Param->GrHandle <= 0 ) { - return -1 ; + Param->GrHandle = Graphics_Image_AddHandle( Param->GParam.CreateGraphGParam.InitHandleGParam.CreateGraphHandle <= 0 ? -1 : Param->GParam.CreateGraphGParam.InitHandleGParam.CreateGraphHandle, ASyncThread ) ; + if( Param->GrHandle < 0 ) + { + return -1 ; + } + } + else + { + // 非同期読み込みカウントをインクリメント + if( ASyncThread ) + { + IncASyncLoadCount( Param->GrHandle, -1 ) ; + } } } else @@ -31216,15 +32060,34 @@ extern int Graphics_Image_CreateDivGraph_UseGParam( { // グラフィックハンドルの作成 _MEMSET( Param->HandleArray, 0, sizeof( int ) * Param->AllNum ) ; - for( i = 0 ; i < Param->AllNum ; i ++ ) + if( Param->GParam.CreateGraphGParam.InitHandleGParam.CreateDivGraphHandle != NULL && + Param->GParam.CreateGraphGParam.InitHandleGParam.CreateDivGraphHandleNum >= Param->AllNum ) { - Param->HandleArray[ i ] = Graphics_Image_AddHandle( ASyncThread ) ; - if( Param->HandleArray[ i ] < 0 ) + for( i = 0 ; i < Param->AllNum ; i ++ ) { - goto ERR ; + Param->HandleArray[ i ] = Graphics_Image_AddHandle( Param->GParam.CreateGraphGParam.InitHandleGParam.CreateDivGraphHandle[ i ], ASyncThread ) ; + if( Param->HandleArray[ i ] < 0 ) + { + goto ERR ; + } } + + DXFREE( Param->GParam.CreateGraphGParam.InitHandleGParam.CreateDivGraphHandle ) ; + Param->GParam.CreateGraphGParam.InitHandleGParam.CreateDivGraphHandle = NULL ; + Param->GParam.CreateGraphGParam.InitHandleGParam.CreateDivGraphHandleNum = 0 ; } - Param->BaseHandle = Graphics_Image_AddHandle( ASyncThread ) ; + else + { + for( i = 0 ; i < Param->AllNum ; i ++ ) + { + Param->HandleArray[ i ] = Graphics_Image_AddHandle( -1, ASyncThread ) ; + if( Param->HandleArray[ i ] < 0 ) + { + goto ERR ; + } + } + } + Param->BaseHandle = Graphics_Image_AddHandle( -1, ASyncThread ) ; if( Param->BaseHandle < 0 ) { goto ERR ; @@ -31854,6 +32717,12 @@ extern int Graphics_Image_CreateDivGraphFromGraphImageBase_UseGParam( int Result ; int GrSizeX, GrSizeY ; + // XNum, YNum の乗算値が AllNum に満たなかったらエラー + if( XNum * YNum < AllNum ) + { + return -1 ; + } + if( StrideXI == 0 ) { StrideXI = SizeXI ; @@ -31906,8 +32775,9 @@ extern int Graphics_Image_CreateDivGraphFromGraphImageBase_UseGParam( for( j = 0 ; k < AllNum && j < XNum ; j ++, k ++ ) { // サイズのチェック - if( ( BaseImage->Width < basexI + addxI * j + StrideXI ) || - ( BaseImage->Height < StrideYI * i + StrideYI ) ) + if( GSYS.CreateImage.NotUseLoadDivGraphSizeCheck == FALSE && + ( ( BaseImage->Width < basexI + addxI * j + StrideXI ) || + ( BaseImage->Height < StrideYI * i + StrideYI ) ) ) { DXST_LOGFILE_ADDUTF16LE( "\xb0\x30\xe9\x30\xd5\x30\xa3\x30\xc3\x30\xaf\x30\x6e\x30\x06\x52\x72\x52\x6b\x30\x31\x59\x57\x65\x57\x30\x7e\x30\x57\x30\x5f\x30\x02\x30\x06\x52\x72\x52\x8c\x5f\x6e\x30\xcf\x7d\xb5\x30\xa4\x30\xba\x30\x4c\x30\x06\x52\x72\x52\x43\x51\x6e\x30\x3b\x75\xcf\x50\x88\x30\x8a\x30\x82\x30\x27\x59\x4d\x30\x44\x30\x07\x63\x9a\x5b\x6b\x30\x6a\x30\x63\x30\x66\x30\x57\x30\x7e\x30\x63\x30\x66\x30\x44\x30\x7e\x30\x59\x30\x02\x30\x20\x00\x69\x00\x6e\x00\x20\x00\x43\x00\x72\x00\x65\x00\x61\x00\x74\x00\x65\x00\x44\x00\x69\x00\x76\x00\x47\x00\x72\x00\x61\x00\x70\x00\x68\x00\x46\x00\x72\x00\x6f\x00\x6d\x00\x47\x00\x72\x00\x61\x00\x70\x00\x68\x00\x49\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x0a\x00\x00"/*@ L"グラフィックの分割に失敗しました。分割後の総サイズが分割元の画像よりも大きい指定になってしまっています。 in CreateDivGraphFromGraphImage\n" @*/ ) ; return -1 ; @@ -31984,14 +32854,14 @@ extern int Graphics_Image_CreateGraphFromGraphImageBase( BASEIMAGE *BaseImage, c CheckActiveState() ; - GrHandle = Graphics_Image_AddHandle( ASyncThread ) ; + Graphics_Image_InitCreateGraphHandleAndBltGraphImageGParam( &GParam ) ; + + GrHandle = Graphics_Image_AddHandle( GParam.InitHandleGParam.CreateGraphHandle <= 0 ? -1 : GParam.InitHandleGParam.CreateGraphHandle, ASyncThread ) ; if( GrHandle == -1 ) { return -1 ; } - Graphics_Image_InitCreateGraphHandleAndBltGraphImageGParam( &GParam ) ; - Result = Graphics_Image_CreateGraphFromGraphImageBase_UseGParam( &GParam, FALSE, GrHandle, BaseImage, AlphaBaseImage, TextureFlag, FALSE ) ; #ifndef DX_NON_ASYNCLOAD if( ASyncThread ) @@ -32035,7 +32905,7 @@ extern int Graphics_Image_CreateDivGraphFromGraphImageBase( } // 基本グラフィックハンドルの作成 - BaseHandle = Graphics_Image_AddHandle( FALSE ) ; + BaseHandle = Graphics_Image_AddHandle( -1, FALSE ) ; if( BaseHandle == -1 ) { return -1 ; @@ -32045,7 +32915,7 @@ extern int Graphics_Image_CreateDivGraphFromGraphImageBase( _MEMSET( HandleArray, 0, AllNum * sizeof( int ) ) ; for( i = 0 ; i < AllNum ; i ++ ) { - HandleArray[ i ] = Graphics_Image_AddHandle( FALSE ) ; + HandleArray[ i ] = Graphics_Image_AddHandle( -1, FALSE ) ; if( HandleArray[ i ] == -1 ) { goto ERR ; @@ -32151,6 +33021,26 @@ extern void Graphics_Image_InitSetupGraphHandleGParam( SETUP_GRAPHHANDLE_GPARAM GParam->NotUsePaletteGraphFlag = GSYS.CreateImage.NotUsePaletteGraphFlag ; GParam->NotInitGraphDelete = FALSE ; GParam->NotInitGraphDeleteUser = GSYS.CreateImage.NotInitGraphDeleteUserFlag ; + GParam->CreateGraphHandle = GSYS.CreateImage.CreateGraphHandle ; + if( GSYS.CreateImage.CreateDivGraphHandle != NULL && GSYS.CreateImage.CreateDivGraphHandleNum > 0 ) + { + GParam->CreateDivGraphHandle = ( int * )DXALLOC( sizeof( int ) * GSYS.CreateImage.CreateDivGraphHandleNum ) ; + if( GParam->CreateDivGraphHandle == NULL ) + { + DXST_LOGFILEFMT_ADDUTF16LE(( "\x06\x52\x72\x52\x3b\x75\xcf\x50\xb0\x30\xe9\x30\xd5\x30\xa3\x30\xc3\x30\xaf\x30\xcf\x30\xf3\x30\xc9\x30\xeb\x30\x24\x50\x07\x63\x9a\x5b\x28\x75\x4d\x91\x17\x52\x6e\x30\xe1\x30\xe2\x30\xea\x30\x20\x00\x25\x00\x64\x00\x62\x00\x79\x00\x74\x00\x65\x00\x20\x00\x6e\x30\xba\x78\xdd\x4f\x6b\x30\x31\x59\x57\x65\x57\x30\x7e\x30\x57\x30\x5f\x30\x00"/*@ L"分割画像グラフィックハンドル値指定用配列のメモリ %dbyte の確保に失敗しました" @*/, sizeof( int ) * GSYS.CreateImage.CreateDivGraphHandleNum )) ; + GParam->CreateDivGraphHandleNum = 0 ; + } + else + { + _MEMCPY( GParam->CreateDivGraphHandle, GSYS.CreateImage.CreateDivGraphHandle, sizeof( int ) * GSYS.CreateImage.CreateDivGraphHandleNum ) ; + GParam->CreateDivGraphHandleNum = GSYS.CreateImage.CreateDivGraphHandleNum ; + } + } + else + { + GParam->CreateDivGraphHandle = NULL ; + GParam->CreateDivGraphHandleNum = 0 ; + } GParam->UserPlatformTexture = NULL ; } @@ -32188,6 +33078,7 @@ extern void Graphics_Image_InitSetupGraphHandleGParam_Normal_NonDrawValid( SETUP GParam->NotUsePaletteGraphFlag = FALSE ; GParam->NotInitGraphDelete = FALSE ; GParam->NotInitGraphDeleteUser = FALSE ; + GParam->CreateGraphHandle = 0 ; GParam->UserPlatformTexture = NULL ; } @@ -32225,6 +33116,7 @@ extern void Graphics_Image_InitSetupGraphHandleGParam_Normal_DrawValid_NoneZBuff GParam->NotUsePaletteGraphFlag = FALSE ; GParam->NotInitGraphDelete = FALSE ; GParam->NotInitGraphDeleteUser = FALSE ; + GParam->CreateGraphHandle = 0 ; GParam->UserPlatformTexture = NULL ; } @@ -32884,10 +33776,20 @@ extern void Graphics_DrawSetting_RefreshBlend3DTransformMatrix( void ) GSYS.DrawSetting.ViewClipPos[ 0 ][ 0 ][ 1 ] = NS_ConvScreenPosToWorldPosD( VGetD( GSYS.DrawSetting.DrawAreaF.right, GSYS.DrawSetting.DrawAreaF.top, 0.0 ) ) ; GSYS.DrawSetting.ViewClipPos[ 0 ][ 1 ][ 0 ] = NS_ConvScreenPosToWorldPosD( VGetD( GSYS.DrawSetting.DrawAreaF.left, GSYS.DrawSetting.DrawAreaF.bottom, 0.0 ) ) ; GSYS.DrawSetting.ViewClipPos[ 0 ][ 1 ][ 1 ] = NS_ConvScreenPosToWorldPosD( VGetD( GSYS.DrawSetting.DrawAreaF.right, GSYS.DrawSetting.DrawAreaF.bottom, 0.0 ) ) ; - GSYS.DrawSetting.ViewClipPos[ 1 ][ 0 ][ 0 ] = NS_ConvScreenPosToWorldPosD( VGetD( GSYS.DrawSetting.DrawAreaF.left, GSYS.DrawSetting.DrawAreaF.top, 1.0 ) ) ; - GSYS.DrawSetting.ViewClipPos[ 1 ][ 0 ][ 1 ] = NS_ConvScreenPosToWorldPosD( VGetD( GSYS.DrawSetting.DrawAreaF.right, GSYS.DrawSetting.DrawAreaF.top, 1.0 ) ) ; - GSYS.DrawSetting.ViewClipPos[ 1 ][ 1 ][ 0 ] = NS_ConvScreenPosToWorldPosD( VGetD( GSYS.DrawSetting.DrawAreaF.left, GSYS.DrawSetting.DrawAreaF.bottom, 1.0 ) ) ; - GSYS.DrawSetting.ViewClipPos[ 1 ][ 1 ][ 1 ] = NS_ConvScreenPosToWorldPosD( VGetD( GSYS.DrawSetting.DrawAreaF.right, GSYS.DrawSetting.DrawAreaF.bottom, 1.0 ) ) ; + if( GSYS.DrawSetting.UseRightHandClippingProcess ) + { + GSYS.DrawSetting.ViewClipPos[ 1 ][ 0 ][ 0 ] = NS_ConvScreenPosToWorldPosD( VGetD( GSYS.DrawSetting.DrawAreaF.left, GSYS.DrawSetting.DrawAreaF.top, -1.0 ) ) ; + GSYS.DrawSetting.ViewClipPos[ 1 ][ 0 ][ 1 ] = NS_ConvScreenPosToWorldPosD( VGetD( GSYS.DrawSetting.DrawAreaF.right, GSYS.DrawSetting.DrawAreaF.top, -1.0 ) ) ; + GSYS.DrawSetting.ViewClipPos[ 1 ][ 1 ][ 0 ] = NS_ConvScreenPosToWorldPosD( VGetD( GSYS.DrawSetting.DrawAreaF.left, GSYS.DrawSetting.DrawAreaF.bottom, -1.0 ) ) ; + GSYS.DrawSetting.ViewClipPos[ 1 ][ 1 ][ 1 ] = NS_ConvScreenPosToWorldPosD( VGetD( GSYS.DrawSetting.DrawAreaF.right, GSYS.DrawSetting.DrawAreaF.bottom, -1.0 ) ) ; + } + else + { + GSYS.DrawSetting.ViewClipPos[ 1 ][ 0 ][ 0 ] = NS_ConvScreenPosToWorldPosD( VGetD( GSYS.DrawSetting.DrawAreaF.left, GSYS.DrawSetting.DrawAreaF.top, 1.0 ) ) ; + GSYS.DrawSetting.ViewClipPos[ 1 ][ 0 ][ 1 ] = NS_ConvScreenPosToWorldPosD( VGetD( GSYS.DrawSetting.DrawAreaF.right, GSYS.DrawSetting.DrawAreaF.top, 1.0 ) ) ; + GSYS.DrawSetting.ViewClipPos[ 1 ][ 1 ][ 0 ] = NS_ConvScreenPosToWorldPosD( VGetD( GSYS.DrawSetting.DrawAreaF.left, GSYS.DrawSetting.DrawAreaF.bottom, 1.0 ) ) ; + GSYS.DrawSetting.ViewClipPos[ 1 ][ 1 ][ 1 ] = NS_ConvScreenPosToWorldPosD( VGetD( GSYS.DrawSetting.DrawAreaF.right, GSYS.DrawSetting.DrawAreaF.bottom, 1.0 ) ) ; + } VECTOR_D Normal ; @@ -32938,6 +33840,8 @@ extern void Graphics_DrawSetting_RefreshBlend3DTransformMatrix( void ) // DXライブラリ内部で SetDrawScreen を使用して描画先を変更する際の、元のカメラ設定や描画領域を復元する為の情報を取得する処理を行う extern int Graphics_DrawSetting_GetScreenDrawSettingInfo( SCREENDRAWSETTINGINFO *ScreenDrawSettingInfo ) { + int i ; + // 各種データ保存 ScreenDrawSettingInfo->Use3DFlag = NS_GetUse3DFlag() ; ScreenDrawSettingInfo->UseSysMemFlag = NS_GetUseSystemMemGraphCreateFlag() ; @@ -32961,6 +33865,14 @@ extern int Graphics_DrawSetting_GetScreenDrawSettingInfo( SCREENDRAWSETTINGINFO ScreenDrawSettingInfo->ProjectionMatrix = GSYS.DrawSetting.ProjectionMatrix ; ScreenDrawSettingInfo->ViewportMatrix = GSYS.DrawSetting.ViewportMatrix ; ScreenDrawSettingInfo->WorldMatrix = GSYS.DrawSetting.WorldMatrix ; + for( i = 0 ; i < USE_TEXTURESTAGE_NUM ; i ++ ) + { + ScreenDrawSettingInfo->TexAddressModeU[ i ] = GSYS.DrawSetting.TexAddressModeU[ i ] ; + ScreenDrawSettingInfo->TexAddressModeV[ i ] = GSYS.DrawSetting.TexAddressModeV[ i ] ; + ScreenDrawSettingInfo->TexAddressModeW[ i ] = GSYS.DrawSetting.TexAddressModeW[ i ] ; + } + ScreenDrawSettingInfo->MaxAnisotropy = GSYS.DrawSetting.MaxAnisotropy ; + ScreenDrawSettingInfo->CullMode = GSYS.DrawSetting.CullMode ; // 描画領域を得る NS_GetDrawArea( &ScreenDrawSettingInfo->DrawRect ) ; @@ -32972,6 +33884,8 @@ extern int Graphics_DrawSetting_GetScreenDrawSettingInfo( SCREENDRAWSETTINGINFO // DXライブラリ内部で SetDrawScreen を使用して描画先を変更する際の、元のカメラ設定や描画領域を復元する処理を行う extern int Graphics_DrawSetting_SetScreenDrawSettingInfo( const SCREENDRAWSETTINGINFO *ScreenDrawSettingInfo ) { + int i ; + // 保存しておいた設定を反映させる NS_SetBackgroundColor( ScreenDrawSettingInfo->BackgroundRed, ScreenDrawSettingInfo->BackgroundGreen, ScreenDrawSettingInfo->BackgroundBlue, ScreenDrawSettingInfo->BackgroundAlpha ) ; NS_SetDrawBlendMode( ScreenDrawSettingInfo->DrawBlendMode, ScreenDrawSettingInfo->DrawBlendParam ) ; @@ -33003,6 +33917,14 @@ extern int Graphics_DrawSetting_SetScreenDrawSettingInfo( const SCREENDRAWSETTIN // NS_SetTransformToProjection( &ScreenDrawSettingInfo->ProjectionMatrix ); NS_SetTransformToViewportD( &ScreenDrawSettingInfo->ViewportMatrix ); + for( i = 0 ; i < USE_TEXTURESTAGE_NUM ; i ++ ) + { + NS_SetTextureAddressModeUV( ScreenDrawSettingInfo->TexAddressModeU[ i ], ScreenDrawSettingInfo->TexAddressModeV[ i ], i ) ; + } + + NS_SetUseCullingFlag( ScreenDrawSettingInfo->CullMode ) ; + NS_SetMaxAnisotropy( ScreenDrawSettingInfo->MaxAnisotropy ) ; + // 正常終了 return 0 ; } diff --git a/DxGraphics.h b/DxGraphics.h index e25d8e0..181d894 100644 --- a/DxGraphics.h +++ b/DxGraphics.h @@ -2,7 +2,7 @@ // // DXライブラリ 描画プログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -312,6 +312,11 @@ typedef struct tagSCREENDRAWSETTINGINFO double ProjDotAspect ; MATRIX_D ProjMatrix ; RECT DrawRect ; + int TexAddressModeU[ USE_TEXTURESTAGE_NUM ] ; + int TexAddressModeV[ USE_TEXTURESTAGE_NUM ] ; + int TexAddressModeW[ USE_TEXTURESTAGE_NUM ] ; + int MaxAnisotropy ; + int CullMode ; } SCREENDRAWSETTINGINFO ; // Graphics_Draw_DrawSimpleTriangleGraphF, Graphics_Draw_DrawSimpleQuadrangleGraphF 用構造体 @@ -677,6 +682,9 @@ struct SETUP_GRAPHHANDLE_GPARAM int NotUsePaletteGraphFlag ; // パレット画像が使用できる場合もパレット画像を使用しないかどうか( TRUE:使用しない FALSE:使用する ) int NotInitGraphDelete ; // InitGraph で削除しないかどうかのフラグ( TRUE:InitGraphでは削除しない FALSE:InitGraphで削除する ) int NotInitGraphDeleteUser ; // InitGraph で削除しないかどうかのフラグ、ユーザー用( TRUE:InitGraphでは削除しない FALSE:InitGraphで削除する ) + int CreateGraphHandle ; // 作成するグラフィックハンドルとして使用するグラフィックハンドル値 + int * CreateDivGraphHandle ; // 作成するグラフィックハンドルとして使用するグラフィックハンドル値、分割画像用 + int CreateDivGraphHandleNum ; // 作成するグラフィックハンドルとして使用するグラフィックハンドル値、分割画像用のハンドル数 void * UserPlatformTexture ; // ユーザー指定の環境依存テクスチャオブジェクトのアドレス } ; @@ -774,6 +782,7 @@ struct GRAPHICSSYS_LIGHTATA float MaterialTypeParam[ MATERIAL_TYPEPARAM_MAX_NUM ] ; // ライト計算用マテリアルのタイプ別パラメータ( DX_MATERIAL_TYPE_MAT_SPEC_LUMINANCE_TWO_COLOR などで使用 ) int MaterialNotUseVertexDiffuseColor ; // ライト計算に頂点のディフューズカラーを使用しないかどうか int MaterialNotUseVertexSpecularColor; // ライト計算に頂点のスペキュラカラーを使用しないかどうか + int NoLightAngleAttenuation ; // ライト計算で角度減衰を行わないかどうか LIGHT_HANDLE *Data[ MAX_LIGHT_NUM ] ; // ライト情報へのポインタ int Num ; // ライトの数 int Area ; // 有効なライトがある範囲 @@ -832,6 +841,7 @@ struct GRAPHICSSYS_DRAWSETTINGDATA int FillMode ; // フィルモード( DX_FILL_SOLID など ) int CullMode ; // カリングモード( DX_CULLING_LEFT など ) + int UseRightHandClippingProcess ; // 右手座標系のクリッピング処理を行うかどうか( TRUE:右手座標系 FALSE:左手座標系 ) int TexAddressModeU[ USE_TEXTURESTAGE_NUM ] ; // テクスチャアドレスモードU int TexAddressModeV[ USE_TEXTURESTAGE_NUM ] ; // テクスチャアドレスモードV @@ -853,6 +863,13 @@ struct GRAPHICSSYS_DRAWSETTINGDATA int BlendMode ; // ブレンドモード int BlendParam ; // ブレンドパラメータ + int BlendEnable ; // ブレンド処理を行うかどうか( DX_BLENDMODE_CUSTOM 用 ) + int BlendRGBSrc ; // RGBのソースブレンド( DX_BLENDMODE_CUSTOM 用 ) + int BlendRGBDest ; // RGBのデストブレンド( DX_BLENDMODE_CUSTOM 用 ) + int BlendRGBOp ; // RGBのブレンド処理( DX_BLENDMODE_CUSTOM 用 ) + int BlendASrc ; // Aのソースブレンド( DX_BLENDMODE_CUSTOM 用 ) + int BlendADest ; // Aのデストブレンド( DX_BLENDMODE_CUSTOM 用 ) + int BlendAOp ; // Aのブレンド処理( DX_BLENDMODE_CUSTOM 用 ) int AADrawInfoValid ; // BeginAADraw が実行されているかどうか( TRUE:実行されている FALSE:実行されていない ) int AADrawOldBlendMode ; // BeginAADraw で保存する元のブレンドモード @@ -988,6 +1005,9 @@ struct GRAPHICSSYS_CREATEIMAGEDATA int BlendImageFlag ; // ブレンド処理用画像作成指定フラグ int NotUseManagedTextureFlag ; // マネージドテクスチャを使用しないか、フラグ( 1:使用しない 0:使用する ) int NotInitGraphDeleteUserFlag ; // InitGraph を実行しても削除されない画像を作成するかのフラグ、ユーザー用( 1:InitGraphで削除されない 0:InitGraphで削除される ) + int CreateGraphHandle ; // 作成するグラフィックハンドルとして使用するグラフィックハンドル値 + int * CreateDivGraphHandle ; // 作成するグラフィックハンドルとして使用するグラフィックハンドル値、分割画像用 + int CreateDivGraphHandleNum ; // 作成するグラフィックハンドルとして使用するグラフィックハンドル値、分割画像用のハンドル数 int PlatformTextureFormat ; // 環境依存のテクスチャフォーマットを直接指定するために使用するための変数( DX_TEXTUREFORMAT_DIRECT3D9_R8G8B8 など ) int DrawValidFlag ; // 描画可能画像作成指定フラグ( テクスチャサーフェスのみ ) @@ -1010,6 +1030,7 @@ struct GRAPHICSSYS_CREATEIMAGEDATA int UserMaxTextureSize ; // ユーザー指定のテクスチャ最大サイズ int NotUseAlphaImageLoadFlag ; // _a が付いたアルファチャンネル用の画像ファイルを追加で読み込む処理を行わないかどうか( TRUE:行わない FALSE:行う ) int NotUsePaletteGraphFlag ; // パレット画像が使用できる場合もパレット画像を使用しないかどうか( TRUE:使用しない FALSE:使用する ) + int NotUseLoadDivGraphSizeCheck ; // LoadDivGraph系の関数でサイズチェックを行わないかどうか( TRUE:行わない FALSE:行う ) } ; // ディスプレイ一つあたりの情報 @@ -1236,7 +1257,7 @@ extern GRAPHICSSYSTEMDATA GraphicsSysData ; extern int Graphics_Screen_SetZBufferMode( int ZBufferSizeX, int ZBufferSizeY, int ZBufferBitDepth ) ; // メイン画面のZバッファの設定を変更する extern int Graphics_Screen_SetupUseZBuffer( void ) ; // 設定に基づいて使用するZバッファをセットする extern void Graphics_Screen_SetMainScreenSize( int SizeX, int SizeY ) ; // メイン画面のサイズ値を変更する -extern int Graphics_Screen_ChangeMode( int ScreenSizeX, int ScreenSizeY, int ColorBitDepth, int ChangeWindowFlag, int RefreshRate ) ; // 画面モードの変更2 +extern int Graphics_Screen_ChangeMode( int ScreenSizeX, int ScreenSizeY, int ColorBitDepth, int ChangeWindowFlag, int RefreshRate, int AlwaysRunFlag ) ; // 画面モードの変更2 extern int Graphics_Screen_LockDrawScreen( RECT *LockRect, BASEIMAGE *BaseImage, int TargetScreen/* = -1*/, int TargetScreenSurface/* = -1*/, int TargetScreenMipLevel, int ReadOnly/* = TRUE*/, int TargetScreenTextureNo/* = 0*/ ) ; // 描画先バッファをロックする extern int Graphics_Screen_UnlockDrawScreen( void ) ; // 描画先バッファをアンロックする extern int Graphics_Screen_FlipBase( void ) ; // ScreenFlip のベース関数 @@ -1255,11 +1276,12 @@ extern GRAPHICSSYSTEMDATA GraphicsSysData ; extern int Graphics_Image_SetupFormatDesc( IMAGEFORMATDESC *Format, SETUP_GRAPHHANDLE_GPARAM *GParam, int Width, int Height, int AlphaValidFlag, int UsePaletteFlag, int PaletteBitDepth, int BaseFormat, int MipMapCount ) ; // グラフィックハンドルに画像データを転送するための関数 extern int Graphics_Image_DeleteDeviceLostDelete( void ) ; // デバイスロスト発生時に削除するフラグが立っているグラフィックを削除する extern int Graphics_Image_CheckMultiSampleDrawValid( int GrHandle ) ; // MSAAを使用する描画可能画像かどうかを調べる( TRUE:MSAA画像 FALSE:MSAA画像ではない ) -extern int Graphics_Image_AddHandle( int ASyncThread ) ; // 新しいグラフィックハンドルを確保する +extern int Graphics_Image_AddHandle( int GrHandle, int ASyncThread ) ; // 新しいグラフィックハンドルを確保する extern int Graphics_Image_SetupHandle_UseGParam( SETUP_GRAPHHANDLE_GPARAM *GParam, int GrHandle, int Width, int Height, int TextureFlag, int AlphaValidFlag, int UsePaletteFlag, int PaletteBitDepth, int BaseFormat/* = DX_BASEIMAGE_FORMAT_NORMAL*/, int MipMapCount, int ASyncThread ) ; // SetupGraphHandle のグローバル変数にアクセスしないバージョン extern int Graphics_Image_ListUpTexSize( int Size, short *SizeList, int NotDivFlag, int Pow2Flag, int MaxTextureSize, int IsDXT ) ; // 指定のテクスチャーサイズを上手く分割する extern int Graphics_Image_InitializeHandle( HANDLEINFO *HandleInfo ) ; // グラフィックハンドルの初期化 extern int Graphics_Image_TerminateHandle( HANDLEINFO *HandleInfo ) ; // グラフィックハンドルの後始末 +extern int Graphics_Image_DumpInfoHandle( HANDLEINFO *HandleInfo ) ; // グラフィックハンドルの情報出力 extern int Graphics_Image_InitializeDerivationHandle( int GrHandle, int IsFloat, int SrcXI, float SrcXF, int SrcYI, float SrcYF, int WidthI, float WidthF, int HeightI, float HeightF, int SrcGrHandle, int ASyncThread = FALSE ) ; // 指定部分だけを抜き出したグラフィックハンドルを初期化する extern int Graphics_Image_InitializeDrawInfo( int GrHandle, int IsFloat, int ASyncThread = FALSE ) ; // グラフィックハンドルの描画情報を初期化する extern int Graphics_Image_IsValidHandle( int GrHandle ) ; // グラフィックハンドルが有効かどうかを調べる( TRUE:有効 FALSE:無効 ) @@ -1570,6 +1592,7 @@ extern void FASTCALL Graphics_DrawSetting_BlendModeSub_Post( RECT *DrawRect ) ; extern int Graphics_Hardware_SetBackgroundColor_PF( int Red, int Green, int Blue, int Alpha ) ; // メインウインドウの背景色を設定する( Red,Green,Blue:それぞれ 0〜255 ) extern int Graphics_Hardware_SetDrawBrightToOneParam_PF( DWORD Bright ) ; // SetDrawBright の引数が一つ版 extern int Graphics_Hardware_SetDrawBlendMode_PF( int BlendMode, int BlendParam ) ; // 描画ブレンドモードをセットする +extern int Graphics_Hardware_SetDrawCustomBlendMode_PF( int BlendEnable, int SrcBlendRGB, int DestBlendRGB, int BlendOpRGB, int SrcBlendA, int DestBlendA, int BlendOpA, int BlendParam ) ; // カスタムブレンドモードを設定する extern int Graphics_Hardware_SetDrawAlphaTest_PF( int TestMode, int TestParam ) ; // 描画時のアルファテストの設定を行う( TestMode:DX_CMP_GREATER等( -1:デフォルト動作に戻す ) TestParam:描画アルファ値との比較に使用する値 ) extern int Graphics_Hardware_SetDrawMode_PF( int DrawMode ) ; // 描画モードをセットする extern int Graphics_Hardware_SetDrawBright_PF( int RedBright, int GreenBright, int BlueBright ) ; // 描画輝度をセット @@ -1611,7 +1634,7 @@ extern void FASTCALL Graphics_DrawSetting_BlendModeSub_Post( RECT *DrawRect ) ; extern int Graphics_Hardware_SetGraphicsDeviceRestoreCallbackFunction_PF( void (* Callback )( void *Data ), void *CallbackData ) ; // グラフィックスデバイスがロストから復帰した際に呼ばれるコールバック関数を設定する extern int Graphics_Hardware_SetGraphicsDeviceLostCallbackFunction_PF( void (* Callback )( void *Data ), void *CallbackData ) ; // グラフィックスデバイスがロストから復帰する前に呼ばれるコールバック関数を設定する extern int Graphics_Hardware_SetUseNormalDrawShader_PF( int Flag ) ; // 通常描画にプログラマブルシェーダーを使用するかどうかを設定する( TRUE:使用する( デフォルト ) FALSE:使用しない ) -extern int Graphics_Hardware_GetVideoMemorySize_PF( int *AllSize, int *FreeSize ) ; // ビデオメモリの容量を得る +extern int Graphics_Hardware_GetVideoMemorySizeEx_PF( ULONGLONG *TotalSize, ULONGLONG *UseSize ) ; // ビデオメモリの容量を得る( 64bit版 ) extern int Graphics_SetAeroDisableFlag_PF( int Flag ) ; // Vista以降の Windows Aero を無効にするかどうかをセットする、TRUE:無効にする FALSE:有効にする( DxLib_Init の前に呼ぶ必要があります ) @@ -1748,7 +1771,7 @@ extern int Graphics_CheckRequiredNormalImageConv_BaseImageFormat_PF( extern int Graphics_Hardware_Light_GlobalAmbient_PF( COLOR_F *Color ) ; // グローバルアンビエントライトカラーを設定する extern int Graphics_Hardware_Light_SetState_PF( int LightNumber, LIGHTPARAM *LightParam ) ; // ライトパラメータをセット extern int Graphics_Hardware_Light_SetEnable_PF( int LightNumber, int EnableState ) ; // ライトの有効、無効を変更 - +extern int Graphics_Hardware_Light_SetNoAngleAttenuation_PF( int NoAngleAttenuation ) ; // ライトの計算で角度減衰を行わないようにするかどうかを設定する @@ -1847,23 +1870,29 @@ extern int Graphics_CheckRequiredNormalImageConv_BaseImageFormat_PF( extern int Graphics_Hardware_DrawPixel3D_PF( VECTOR Pos, unsigned int Color, int DrawFlag = TRUE, RECT *DrawArea = NULL ) ; // ハードウエアアクセラレータ使用版 DrawPixel3D extern int Graphics_Hardware_DrawPixelSet_PF( const POINTDATA *PointData, int Num ) ; // ハードウエアアクセラレータ使用版 DrawPixelSet extern int Graphics_Hardware_DrawLineSet_PF( const LINEDATA *LineData, int Num ) ; // ハードウエアアクセラレータ使用版 DrawLineSet - -extern int Graphics_Hardware_DrawPrimitive_PF( const VERTEX_3D *Vertex, int VertexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag ) ; -extern int Graphics_Hardware_DrawIndexedPrimitive_PF( const VERTEX_3D *Vertex, int VertexNum, const WORD *Indices, int IndexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag ) ; -extern int Graphics_Hardware_DrawPrimitiveLight_PF( const VERTEX3D *Vertex, int VertexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag ) ; -extern int Graphics_Hardware_DrawIndexedPrimitiveLight_PF( const VERTEX3D *Vertex, int VertexNum, const WORD *Indices, int IndexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag ) ; -extern int Graphics_Hardware_DrawPrimitiveLight_UseVertexBuffer_PF( VERTEXBUFFERHANDLEDATA *VertexBuffer, int PrimitiveType, int StartVertex, int UseVertexNum, IMAGEDATA *Image, int TransFlag ) ; -extern int Graphics_Hardware_DrawIndexedPrimitiveLight_UseVertexBuffer_PF( VERTEXBUFFERHANDLEDATA *VertexBuffer, INDEXBUFFERHANDLEDATA *IndexBuffer, int PrimitiveType, int BaseVertex, int StartVertex, int UseVertexNum, int StartIndex, int UseIndexNum, IMAGEDATA *Image, int TransFlag ) ; -extern int Graphics_Hardware_DrawPrimitive2D_PF( VERTEX_2D *Vertex, int VertexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag, int BillboardFlag, int Is3D, int ReverseXFlag, int ReverseYFlag, int TextureNo, int IsShadowMap ) ; -extern int Graphics_Hardware_DrawPrimitive2DUser_PF( const VERTEX2D *Vertex, int VertexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag, int Is3D, int ReverseXFlag, int ReverseYFlag, int TextureNo ) ; -extern int Graphics_Hardware_DrawIndexedPrimitive2DUser_PF( const VERTEX2D *Vertex, int VertexNum, const WORD *Indices, int IndexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag ) ; - -extern int Graphics_Hardware_DrawPolygon3DToShader_PF( const VERTEX3DSHADER *Vertex, int PolygonNum ) ; // シェーダーを使って3Dポリゴンを描画する -extern int Graphics_Hardware_DrawPolygonIndexed3DToShader_PF( const VERTEX3DSHADER *Vertex, int VertexNum, const unsigned short *Indices, int PolygonNum ) ; // シェーダーを使って3Dポリゴンを描画する( 頂点インデックスを使用する ) -extern int Graphics_Hardware_DrawPrimitive2DToShader_PF( const VERTEX2DSHADER *Vertex, int VertexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って2Dプリミティブを描画する -extern int Graphics_Hardware_DrawPrimitive3DToShader_PF( const VERTEX3DSHADER *Vertex, int VertexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って3Dプリミティブを描画する -extern int Graphics_Hardware_DrawPrimitiveIndexed2DToShader_PF( const VERTEX2DSHADER *Vertex, int VertexNum, const unsigned short *Indices, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って2Dプリミティブを描画する( 頂点インデックスを使用する ) -extern int Graphics_Hardware_DrawPrimitiveIndexed3DToShader_PF( const VERTEX3DSHADER *Vertex, int VertexNum, const unsigned short *Indices, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って3Dプリミティブを描画する( 頂点インデックスを使用する ) +extern int Graphics_Hardware_DrawBoxSet_PF( const RECTDATA *RectData, int Num ) ; // ハードウエアアクセラレータ使用版 DrawBoxSet + +extern int Graphics_Hardware_DrawPrimitive_PF( const VERTEX_3D *Vertex, int VertexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag ) ; +extern int Graphics_Hardware_DrawIndexedPrimitive_PF( const VERTEX_3D *Vertex, int VertexNum, const WORD *Indices, int IndexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag ) ; +extern int Graphics_Hardware_Draw32bitIndexedPrimitive_PF( const VERTEX_3D *Vertex, int VertexNum, const DWORD *Indices, int IndexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag ) ; +extern int Graphics_Hardware_DrawPrimitiveLight_PF( const VERTEX3D *Vertex, int VertexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag ) ; +extern int Graphics_Hardware_DrawIndexedPrimitiveLight_PF( const VERTEX3D *Vertex, int VertexNum, const WORD *Indices, int IndexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag ) ; +extern int Graphics_Hardware_Draw32bitIndexedPrimitiveLight_PF( const VERTEX3D *Vertex, int VertexNum, const DWORD *Indices, int IndexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag ) ; +extern int Graphics_Hardware_DrawPrimitiveLight_UseVertexBuffer_PF( VERTEXBUFFERHANDLEDATA *VertexBuffer, int PrimitiveType, int StartVertex, int UseVertexNum, IMAGEDATA *Image, int TransFlag ) ; +extern int Graphics_Hardware_DrawIndexedPrimitiveLight_UseVertexBuffer_PF( VERTEXBUFFERHANDLEDATA *VertexBuffer, INDEXBUFFERHANDLEDATA *IndexBuffer, int PrimitiveType, int BaseVertex, int StartVertex, int UseVertexNum, int StartIndex, int UseIndexNum, IMAGEDATA *Image, int TransFlag ) ; +extern int Graphics_Hardware_DrawPrimitive2D_PF( VERTEX_2D *Vertex, int VertexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag, int BillboardFlag, int Is3D, int ReverseXFlag, int ReverseYFlag, int TextureNo, int IsShadowMap ) ; +extern int Graphics_Hardware_DrawPrimitive2DUser_PF( const VERTEX2D *Vertex, int VertexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag, int Is3D, int ReverseXFlag, int ReverseYFlag, int TextureNo ) ; +extern int Graphics_Hardware_DrawIndexedPrimitive2DUser_PF( const VERTEX2D *Vertex, int VertexNum, const WORD *Indices, int IndexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag ) ; +extern int Graphics_Hardware_Draw32bitIndexedPrimitive2DUser_PF( const VERTEX2D *Vertex, int VertexNum, const DWORD *Indices, int IndexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag ) ; + +extern int Graphics_Hardware_DrawPolygon3DToShader_PF( const VERTEX3DSHADER *Vertex, int PolygonNum ) ; // シェーダーを使って3Dポリゴンを描画する +extern int Graphics_Hardware_DrawPolygonIndexed3DToShader_PF( const VERTEX3DSHADER *Vertex, int VertexNum, const unsigned short *Indices, int PolygonNum ) ; // シェーダーを使って3Dポリゴンを描画する( 頂点インデックスを使用する ) +extern int Graphics_Hardware_DrawPrimitive2DToShader_PF( const VERTEX2DSHADER *Vertex, int VertexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って2Dプリミティブを描画する +extern int Graphics_Hardware_DrawPrimitive3DToShader_PF( const VERTEX3DSHADER *Vertex, int VertexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って3Dプリミティブを描画する +extern int Graphics_Hardware_DrawPrimitiveIndexed2DToShader_PF( const VERTEX2DSHADER *Vertex, int VertexNum, const unsigned short *Indices, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って2Dプリミティブを描画する( 頂点インデックスを使用する ) +extern int Graphics_Hardware_DrawPrimitive32bitIndexed2DToShader_PF( const VERTEX2DSHADER *Vertex, int VertexNum, const unsigned int *Indices, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って2Dプリミティブを描画する( 頂点インデックスを使用する ) +extern int Graphics_Hardware_DrawPrimitiveIndexed3DToShader_PF( const VERTEX3DSHADER *Vertex, int VertexNum, const unsigned short *Indices, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って3Dプリミティブを描画する( 頂点インデックスを使用する ) +extern int Graphics_Hardware_DrawPrimitive32bitIndexed3DToShader_PF( const VERTEX3DSHADER *Vertex, int VertexNum, const unsigned int *Indices, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って3Dプリミティブを描画する( 頂点インデックスを使用する ) extern int Graphics_Hardware_DrawPrimitive3DToShader_UseVertexBuffer2_PF( int VertexBufHandle, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int StartVertex, int UseVertexNum ) ; // シェーダーを使って3Dプリミティブを描画する( 頂点バッファ使用版 ) extern int Graphics_Hardware_DrawPrimitiveIndexed3DToShader_UseVertexBuffer2_PF( int VertexBufHandle, int IndexBufHandle, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int BaseVertex, int StartVertex, int UseVertexNum, int StartIndex, int UseIndexNum ) ; // シェーダーを使って3Dプリミティブを描画する( 頂点バッファとインデックスバッファ使用版 ) diff --git a/DxGraphicsFilter.cpp b/DxGraphicsFilter.cpp index 45c2ce6..cc2c02e 100644 --- a/DxGraphicsFilter.cpp +++ b/DxGraphicsFilter.cpp @@ -2,7 +2,7 @@ // // DXライブラリ GraphFilter系プログラム // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- @@ -265,6 +265,16 @@ extern int GraphFilter_Terminate( void ) return 0 ; } +// GraphBlend で GrHandle と BlendGrHandle のサイズが異なる場合に適用される拡大フィルターモードを設定する +extern int NS_SetGraphBlendScalingFilterMode( int IsBilinearFilter ) +{ + // フラグを保存 + GraphFilterSystemData.BlendGraphScalingFilterIsNotBilinear = IsBilinearFilter ? FALSE : TRUE ; + + // 終了 + return 0 ; +} + // 画像にフィルター処理を行う extern int NS_GraphFilter( int GrHandle, int FilterType /* DX_GRAPH_FILTER_GAUSS_H 等 */ , ... ) { @@ -276,7 +286,7 @@ extern int GraphFilter_Terminate( void ) NS_GetGraphSize( GrHandle, &W, &H ) ; - Result = GraphFilter_RectBltBase( FALSE, GrHandle, -1, GrHandle, 0, FilterType, 0, 0, W, H, 0, 0, FALSE, 0, 0, VaList ) ; + Result = GraphFilter_RectBltBase( FALSE, GrHandle, -1, GrHandle, 0, FilterType, 0, 0, W, H, 0, 0, FALSE, 0, 0, FALSE, 0, 0, VaList ) ; va_end( VaList ) ; @@ -294,7 +304,7 @@ extern int NS_GraphFilterBlt( int SrcGrHandle, int DestGrHandle, int FilterType, NS_GetGraphSize( SrcGrHandle, &SrcW, &SrcH ) ; - Result = GraphFilter_RectBltBase( FALSE, SrcGrHandle, -1, DestGrHandle, 0, FilterType, 0, 0, SrcW, SrcH, 0, 0, FALSE, 0, 0, VaList ) ; + Result = GraphFilter_RectBltBase( FALSE, SrcGrHandle, -1, DestGrHandle, 0, FilterType, 0, 0, SrcW, SrcH, 0, 0, FALSE, 0, 0, FALSE, 0, 0, VaList ) ; va_end( VaList ) ; @@ -309,7 +319,7 @@ extern int NS_GraphFilterRectBlt( int SrcGrHandle, int DestGrHandle, int SrcX1, va_start( VaList, FilterType ) ; - Result = GraphFilter_RectBltBase( FALSE, SrcGrHandle, -1, DestGrHandle, 0, FilterType, SrcX1, SrcY1, SrcX2, SrcY2, 0, 0, FALSE, DestX, DestY, VaList ) ; + Result = GraphFilter_RectBltBase( FALSE, SrcGrHandle, -1, DestGrHandle, 0, FilterType, SrcX1, SrcY1, SrcX2, SrcY2, 0, 0, FALSE, 0, 0, FALSE, DestX, DestY, VaList ) ; va_end( VaList ) ; @@ -327,7 +337,7 @@ extern int NS_GraphBlend( int GrHandle, int BlendGrHandle, int BlendRatio, int B NS_GetGraphSize( GrHandle, &W, &H ) ; - Result = GraphFilter_RectBltBase( TRUE, GrHandle, BlendGrHandle, GrHandle, BlendRatio, BlendType, 0, 0, W, H, 0, 0, FALSE, 0, 0, VaList ) ; + Result = GraphFilter_RectBltBase( TRUE, GrHandle, BlendGrHandle, GrHandle, BlendRatio, BlendType, 0, 0, W, H, 0, 0, FALSE, 0, 0, FALSE, 0, 0, VaList ) ; va_end( VaList ) ; @@ -345,7 +355,7 @@ extern int NS_GraphBlendBlt( int SrcGrHandle, int BlendGrHandle, int DestGrHandl NS_GetGraphSize( SrcGrHandle, &SrcW, &SrcH ) ; - Result = GraphFilter_RectBltBase( TRUE, SrcGrHandle, BlendGrHandle, DestGrHandle, BlendRatio, BlendType, 0, 0, SrcW, SrcH, 0, 0, FALSE, 0, 0, VaList ) ; + Result = GraphFilter_RectBltBase( TRUE, SrcGrHandle, BlendGrHandle, DestGrHandle, BlendRatio, BlendType, 0, 0, SrcW, SrcH, 0, 0, FALSE, 0, 0, FALSE, 0, 0, VaList ) ; va_end( VaList ) ; @@ -360,7 +370,22 @@ extern int NS_GraphBlendRectBlt( int SrcGrHandle, int BlendGrHandle, int DestGrH va_start( VaList, BlendType ) ; - Result = GraphFilter_RectBltBase( TRUE, SrcGrHandle, BlendGrHandle, DestGrHandle, BlendRatio, BlendType, SrcX1, SrcY1, SrcX2, SrcY2, BlendX, BlendY, TRUE, DestX, DestY, VaList ) ; + Result = GraphFilter_RectBltBase( TRUE, SrcGrHandle, BlendGrHandle, DestGrHandle, BlendRatio, BlendType, SrcX1, SrcY1, SrcX2, SrcY2, BlendX, BlendY, TRUE, 0, 0, FALSE, DestX, DestY, VaList ) ; + + va_end( VaList ) ; + + return Result ; +} + +// 二つの画像をブレンドして結果を指定の画像に出力する( 矩形指定、ブレンド画像の矩形も指定 ) +extern int NS_GraphBlendRectBlt2( int SrcGrHandle, int BlendGrHandle, int DestGrHandle, int SrcX1, int SrcY1, int SrcX2, int SrcY2, int BlendX1, int BlendY1, int BlendX2, int BlendY2, int DestX, int DestY, int BlendRatio, int BlendType, ... ) +{ + int Result ; + va_list VaList ; + + va_start( VaList, BlendType ) ; + + Result = GraphFilter_RectBltBase( TRUE, SrcGrHandle, BlendGrHandle, DestGrHandle, BlendRatio, BlendType, SrcX1, SrcY1, SrcX2, SrcY2, BlendX1, BlendY1, TRUE, BlendX2, BlendY2, TRUE, DestX, DestY, VaList ) ; va_end( VaList ) ; @@ -621,6 +646,7 @@ extern int GraphFilter_RectBltBase( int SrcX1, int SrcY1, int SrcX2, int SrcY2, int BlendX, int BlendY, int BlendPosEnable, + int BlendX2, int BlendY2, int BlendPos2Enable, int DestX, int DestY, va_list ParamList ) { @@ -831,6 +857,7 @@ extern int GraphFilter_RectBltBase( return 0 ; // 情報のセット + Info.BlendGraphScalingFilterIsBilinear = GraphFilterSystemData.BlendGraphScalingFilterIsNotBilinear ? FALSE : TRUE ; Info.BltBlendMode = SrcGrHandle == DestGrHandle ? DX_BLENDMODE_NOBLEND : GraphFilterSystemData.BltBlendMode ; Info.IsBlend = IsBlend ; Info.FilterOrBlendType = FilterOrBlendType ; @@ -843,6 +870,9 @@ extern int GraphFilter_RectBltBase( Info.BlendX = BlendX ; Info.BlendY = BlendY ; Info.BlendPosEnable = BlendPosEnable ; + Info.BlendX2 = BlendX2 ; + Info.BlendY2 = BlendY2 ; + Info.BlendPos2Enable = BlendPos2Enable ; Info.DestX = DestX ; Info.DestY = DestY ; @@ -6253,7 +6283,7 @@ extern int GraphBlend_RGBA_Select_Mix( GRAPHFILTER_INFO *Info, int SelectR, int NS_GetGraphSize( GrHandle, &W, &H ) ; - Result = GraphFilter_RectBltBase( FALSE, GrHandle, -1, GrHandle, 0, FilterType, 0, 0, W, H, 0, 0, FALSE, 0, 0, VaList ) ; + Result = GraphFilter_RectBltBase( FALSE, GrHandle, -1, GrHandle, 0, FilterType, 0, 0, W, H, 0, 0, FALSE, 0, 0, FALSE, 0, 0, VaList ) ; return Result ; } @@ -6266,7 +6296,7 @@ extern int GraphBlend_RGBA_Select_Mix( GRAPHFILTER_INFO *Info, int SelectR, int NS_GetGraphSize( SrcGrHandle, &SrcW, &SrcH ) ; - Result = GraphFilter_RectBltBase( FALSE, SrcGrHandle, -1, DestGrHandle, 0, FilterType, 0, 0, SrcW, SrcH, 0, 0, FALSE, 0, 0, VaList ) ; + Result = GraphFilter_RectBltBase( FALSE, SrcGrHandle, -1, DestGrHandle, 0, FilterType, 0, 0, SrcW, SrcH, 0, 0, FALSE, 0, 0, FALSE, 0, 0, VaList ) ; return Result ; } @@ -6276,7 +6306,7 @@ extern int GraphBlend_RGBA_Select_Mix( GRAPHFILTER_INFO *Info, int SelectR, int { int Result ; - Result = GraphFilter_RectBltBase( FALSE, SrcGrHandle, -1, DestGrHandle, 0, FilterType, SrcX1, SrcY1, SrcX2, SrcY2, 0, 0, FALSE, DestX, DestY, VaList ) ; + Result = GraphFilter_RectBltBase( FALSE, SrcGrHandle, -1, DestGrHandle, 0, FilterType, SrcX1, SrcY1, SrcX2, SrcY2, 0, 0, FALSE, 0, 0, FALSE, DestX, DestY, VaList ) ; return Result ; } @@ -6289,7 +6319,7 @@ extern int GraphBlend_RGBA_Select_Mix( GRAPHFILTER_INFO *Info, int SelectR, int NS_GetGraphSize( GrHandle, &W, &H ) ; - Result = GraphFilter_RectBltBase( TRUE, GrHandle, BlendGrHandle, GrHandle, BlendRatio, BlendType, 0, 0, W, H, 0, 0, FALSE, 0, 0, VaList ) ; + Result = GraphFilter_RectBltBase( TRUE, GrHandle, BlendGrHandle, GrHandle, BlendRatio, BlendType, 0, 0, W, H, 0, 0, FALSE, 0, 0, FALSE, 0, 0, VaList ) ; return Result ; } @@ -6302,7 +6332,7 @@ extern int GraphBlend_RGBA_Select_Mix( GRAPHFILTER_INFO *Info, int SelectR, int NS_GetGraphSize( SrcGrHandle, &SrcW, &SrcH ) ; - Result = GraphFilter_RectBltBase( TRUE, SrcGrHandle, BlendGrHandle, DestGrHandle, BlendRatio, BlendType, 0, 0, SrcW, SrcH, 0, 0, FALSE, 0, 0, VaList ) ; + Result = GraphFilter_RectBltBase( TRUE, SrcGrHandle, BlendGrHandle, DestGrHandle, BlendRatio, BlendType, 0, 0, SrcW, SrcH, 0, 0, FALSE, 0, 0, FALSE, 0, 0, VaList ) ; return Result ; } @@ -6312,11 +6342,22 @@ extern int GraphBlend_RGBA_Select_Mix( GRAPHFILTER_INFO *Info, int SelectR, int { int Result ; - Result = GraphFilter_RectBltBase( TRUE, SrcGrHandle, BlendGrHandle, DestGrHandle, BlendRatio, BlendType, SrcX1, SrcY1, SrcX2, SrcY2, BlendX, BlendY, TRUE, DestX, DestY, VaList ) ; + Result = GraphFilter_RectBltBase( TRUE, SrcGrHandle, BlendGrHandle, DestGrHandle, BlendRatio, BlendType, SrcX1, SrcY1, SrcX2, SrcY2, BlendX, BlendY, TRUE, 0, 0, FALSE, DestX, DestY, VaList ) ; return Result ; } +// 二つの画像をブレンドして結果を指定の画像に出力する( 矩形指定、ブレンド画像の矩形も指定 ) +extern int GraphBlendRectBlt2_VaList( int SrcGrHandle, int BlendGrHandle, int DestGrHandle, int SrcX1, int SrcY1, int SrcX2, int SrcY2, int BlendX1, int BlendY1, int BlendX2, int BlendY2, int DestX, int DestY, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , va_list VaList ) +{ + int Result ; + + Result = GraphFilter_RectBltBase( TRUE, SrcGrHandle, BlendGrHandle, DestGrHandle, BlendRatio, BlendType, SrcX1, SrcY1, SrcX2, SrcY2, BlendX1, BlendY1, TRUE, BlendX2, BlendY2, TRUE, DestX, DestY, VaList ) ; + + return Result ; +} + + diff --git a/DxGraphicsFilter.h b/DxGraphicsFilter.h index 4723d3c..363c6fd 100644 --- a/DxGraphicsFilter.h +++ b/DxGraphicsFilter.h @@ -2,7 +2,7 @@ // // DXライブラリ GraphFilter系プログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -33,6 +33,7 @@ namespace DxLib // フィルター情報構造体 struct GRAPHFILTER_INFO { + int BlendGraphScalingFilterIsBilinear ; int BltBlendMode ; int IsBlend ; int FilterOrBlendType ; @@ -50,6 +51,9 @@ struct GRAPHFILTER_INFO int BlendX ; int BlendY ; int BlendPosEnable ; + int BlendX2 ; + int BlendY2 ; + int BlendPos2Enable ; int DestX ; int DestY ; @@ -152,6 +156,7 @@ struct GRAPHFILTER_SHADER_HANDLE // フィルター処理のシステムデータ struct GRAPHFILTER_SYSTEM_DATA { + int BlendGraphScalingFilterIsNotBilinear ; // SrcGrHandle と BlendGrHandle のサイズが異なった場合のスケーリングフィルターモードはバイリニア方式ではないかどうか int BltBlendMode ; // 転送先とのブレンドモード } ; @@ -185,7 +190,7 @@ extern int GraphFilter_Lanczos3Scale( GRAPHFILTER_INFO *Info, int DestSizeX, i extern int GraphFilter_SSAO( GRAPHFILTER_INFO *Info, int DepthMapGrHandle, float KernelRadius, float MinDistance, float MaxDistance, float Strength, int OcclusionColor, float OcclusionPower, int ColorMapGrHandle ) ; extern int GraphFilter_FloatColorScale( GRAPHFILTER_INFO *Info, COLOR_F ColorScale, COLOR_F ColorPreSub ) ; -extern int GraphFilter_RectBltBase( int IsBlend, int SrcGrHandle, int BlendGrHandle, int DestGrHandle, int BlendRatio, int FilterOrBlendType, int SrcX1, int SrcY1, int SrcX2, int SrcY2, int BlendX, int BlendY, int BlendPosEnable, int DestX, int DestY, va_list ParamList ) ; +extern int GraphFilter_RectBltBase( int IsBlend, int SrcGrHandle, int BlendGrHandle, int DestGrHandle, int BlendRatio, int FilterOrBlendType, int SrcX1, int SrcY1, int SrcX2, int SrcY2, int BlendX, int BlendY, int BlendPosEnable, int BlendX2, int BlendY2, int BlendPos2Enable, int DestX, int DestY, va_list ParamList ) ; extern int GraphBlend_Basic( GRAPHFILTER_INFO *Info, int IsPMA ) ; extern int GraphBlend_RGBA_Select_Mix( GRAPHFILTER_INFO *Info, int SelectR, int SelectG, int SelectB, int SelectA, int IsPMA ) ; @@ -196,9 +201,10 @@ extern int GraphBlend_RGBA_Select_Mix( GRAPHFILTER_INFO *Info, int SelectR, int extern int GraphFilter_VaList( int GrHandle, int FilterType /* DX_GRAPH_FILTER_GAUSS 等 */ , va_list VaList ) ; // 画像にフィルター処理を行う extern int GraphFilterBlt_VaList( int SrcGrHandle, int DestGrHandle, int FilterType /* DX_GRAPH_FILTER_GAUSS 等 */ , va_list VaList ) ; // 画像のフィルター付き転送を行う extern int GraphFilterRectBlt_VaList( int SrcGrHandle, int DestGrHandle, int SrcX1, int SrcY1, int SrcX2, int SrcY2, int DestX, int DestY, int FilterType /* DX_GRAPH_FILTER_GAUSS 等 */ , va_list VaList ) ; // 画像のフィルター付き転送を行う( 矩形指定 ) -extern int GraphBlend_VaList( int GrHandle, int BlendGrHandle, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , va_list VaList ) ; // 二つの画像をブレンドする -extern int GraphBlendBlt_VaList( int SrcGrHandle, int BlendGrHandle, int DestGrHandle, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , va_list VaList ) ; // 二つの画像をブレンドして結果を指定の画像に出力する -extern int GraphBlendRectBlt_VaList( int SrcGrHandle, int BlendGrHandle, int DestGrHandle, int SrcX1, int SrcY1, int SrcX2, int SrcY2, int BlendX, int BlendY, int DestX, int DestY, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , va_list VaList ) ; // 二つの画像をブレンドして結果を指定の画像に出力する( 矩形指定 ) +extern int GraphBlend_VaList( int GrHandle, int BlendGrHandle, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , va_list VaList ) ; // 二つの画像をブレンドする +extern int GraphBlendBlt_VaList( int SrcGrHandle, int BlendGrHandle, int DestGrHandle, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , va_list VaList ) ; // 二つの画像をブレンドして結果を指定の画像に出力する +extern int GraphBlendRectBlt_VaList( int SrcGrHandle, int BlendGrHandle, int DestGrHandle, int SrcX1, int SrcY1, int SrcX2, int SrcY2, int BlendX, int BlendY, int DestX, int DestY, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , va_list VaList ) ; // 二つの画像をブレンドして結果を指定の画像に出力する( 矩形指定 ) +extern int GraphBlendRectBlt2_VaList( int SrcGrHandle, int BlendGrHandle, int DestGrHandle, int SrcX1, int SrcY1, int SrcX2, int SrcY2, int BlendX1, int BlendY1, int BlendX2, int BlendY2, int DestX, int DestY, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , va_list VaList ) ; // 二つの画像をブレンドして結果を指定の画像に出力する( 矩形指定、ブレンド画像の矩形も指定 ) // 環境依存関係 extern int GraphFilter_Initialize_PF( void ) ; diff --git a/DxHandle.cpp b/DxHandle.cpp index c7f6fcc..0ce8b27 100644 --- a/DxHandle.cpp +++ b/DxHandle.cpp @@ -2,7 +2,7 @@ // // DXライブラリ ハンドル管理プログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -59,6 +59,7 @@ extern int InitializeHandleManage( int MaxNum, int ( *InitializeFunction )( HANDLEINFO *HandleInfo ), int ( *TerminateFunction )( HANDLEINFO *HandleInfo ), + int ( *DumpInfoFunction )( HANDLEINFO *HandleInfo ), const wchar_t *Name ) { @@ -79,6 +80,7 @@ extern int InitializeHandleManage( HandleManage->MaxNum = MaxNum ; HandleManage->InitializeFunction = InitializeFunction ; HandleManage->TerminateFunction = TerminateFunction ; + HandleManage->DumpInfoFunction = DumpInfoFunction ; HandleManage->Name = Name ; ConvString( ( const char * )HandleManage->Name, -1, WCHAR_T_CHARCODEFORMAT, HandleManage->NameUTF16LE, sizeof( HandleManage->NameUTF16LE ), DX_CHARCODEFORMAT_UTF16LE ) ; @@ -937,6 +939,8 @@ extern int SubHandleList( HANDLELIST *List ) { List->Prev->Next = List->Next ; List->Next->Prev = List->Prev ; + List->Prev = NULL ; + List->Next = NULL ; return 0 ; } @@ -1033,6 +1037,73 @@ extern int NS_SetDeleteHandleFlag( int Handle, int *DeleteFlag ) return 0 ; } +// 指定のタイプのハンドルの数を取得する +extern int NS_GetHandleNum( int HandleType /* DX_HANDLETYPE_GRAPH等 */ ) +{ + // タイプチェック + if( HandleType < 0 || HandleType >= DX_HANDLETYPE_MAX ) + { + return -1 ; + } + + // ハンドルの数を返す + return HandleManageArray[ HandleType ].Num ; +} + +// 指定のタイプのハンドルが最大で幾つ作成できるかを取得する +extern int NS_GetMaxHandleNum( int HandleType /* DX_HANDLETYPE_GRAPH等 */ ) +{ + // タイプチェック + if( HandleType < 0 || HandleType >= DX_HANDLETYPE_MAX ) + { + return -1 ; + } + + // ハンドルの最大数を返す + return HandleManageArray[ HandleType ].MaxNum ; +} + +// 指定のタイプの全ハンドルの情報をログに出力する +extern int NS_DumpHandleInfo( int HandleType /* DX_HANDLETYPE_GRAPH等 */ ) +{ + int i ; + HANDLEINFO **ppHandleInfo ; + HANDLEMANAGE *HandleManage = &HandleManageArray[ HandleType ] ; + + // タイプチェック + if( HandleType < 0 || HandleType >= DX_HANDLETYPE_MAX ) + { + return -1 ; + } + + if( HandleManage->InitializeFlag == FALSE ) + return -1 ; + + // クリティカルセクションの取得 + CRITICALSECTION_LOCK( &HandleManage->CriticalSection ) ; + + ppHandleInfo = &HandleManage->Handle[ HandleManage->AreaMin ] ; + for( i = HandleManage->AreaMin ; i <= HandleManage->AreaMax ; i ++, ppHandleInfo ++ ) + { + if( *ppHandleInfo == NULL ) + { + continue ; + } + + if( HandleManage->DumpInfoFunction != NULL ) + { + HandleManage->DumpInfoFunction( *ppHandleInfo ) ; + } + } + DXST_LOGFILEFMT_ADDW(( L"Total Count : %d", HandleManage->Num )) ; + + // クリティカルセクションの解放 + CriticalSection_Unlock( &HandleManage->CriticalSection ) ; + + // 終了 + return 0 ; +} + diff --git a/DxHandle.h b/DxHandle.h index cb99257..3c1b202 100644 --- a/DxHandle.h +++ b/DxHandle.h @@ -2,7 +2,7 @@ // // DXライブラリ ハンドル管理プログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -15,7 +15,7 @@ #ifndef DX_NON_ASYNCLOAD #include "DxASyncLoad.h" -#endif DX_NON_ASYNCLOAD +#endif // DX_NON_ASYNCLOAD #ifndef DX_NON_NAMESPACE @@ -40,29 +40,6 @@ namespace DxLib #define DX_HANDLEERROR_MASK (0x80000000) // エラーチェックマスク( 0ではなかったらエラー ) -// ハンドルタイプ定義 -#define DX_HANDLETYPE_NONE (0) // ハンドルタイプ0は未使用 -#define DX_HANDLETYPE_GRAPH (1) // グラフィックハンドル -#define DX_HANDLETYPE_SOFTIMAGE (2) // ソフトウエアで扱うイメージハンドル -#define DX_HANDLETYPE_SOUND (3) // サウンドハンドル -#define DX_HANDLETYPE_SOFTSOUND (4) // ソフトサウンドハンドル -#define DX_HANDLETYPE_MUSIC (5) // ミュージックハンドル -#define DX_HANDLETYPE_MOVIE (6) // ムービーハンドル -#define DX_HANDLETYPE_GMASK (7) // マスクハンドル -#define DX_HANDLETYPE_FONT (8) // フォントハンドル -#define DX_HANDLETYPE_KEYINPUT (9) // 文字列入力ハンドル -#define DX_HANDLETYPE_NETWORK (10) // ネットワークハンドル -#define DX_HANDLETYPE_LIGHT (11) // ライト -#define DX_HANDLETYPE_SHADER (12) // シェーダーハンドル -#define DX_HANDLETYPE_MODEL_BASE (13) // 3Dモデル基本データ -#define DX_HANDLETYPE_MODEL (14) // 3Dモデル -#define DX_HANDLETYPE_VERTEX_BUFFER (15) // 頂点バッファハンドル -#define DX_HANDLETYPE_INDEX_BUFFER (16) // インデックスバッファハンドル -#define DX_HANDLETYPE_FILE (17) // ファイルハンドル -#define DX_HANDLETYPE_SHADOWMAP (18) // シャドウマップハンドル -#define DX_HANDLETYPE_SHADER_CONSTANT_BUFFER (19) // シェーダー用定数バッファハンドル -#define DX_HANDLETYPE_LIVE2D_CUBISM4_MODEL (20) // Live2D Cubism 4 モデルハンドル - #define DX_HANDLETYPE_MASK_GRAPH (DX_HANDLETYPE_GRAPH << DX_HANDLETYPE_ADDRESS) // グラフィックハンドル #define DX_HANDLETYPE_MASK_SOFTIMAGE (DX_HANDLETYPE_SOFTIMAGE << DX_HANDLETYPE_ADDRESS) // ソフトウエアで扱うイメージハンドル #define DX_HANDLETYPE_MASK_SOUND (DX_HANDLETYPE_SOUND << DX_HANDLETYPE_ADDRESS) // サウンドハンドル @@ -189,6 +166,7 @@ struct HANDLEMANAGE DX_CRITICAL_SECTION CriticalSection ; // データアクセス時用クリティカルセクション int ( *InitializeFunction )( HANDLEINFO *HandleInfo ) ; // ハンドルの初期化をする関数へのポインタ int ( *TerminateFunction )( HANDLEINFO *HandleInfo ) ; // ハンドルの後始末をする関数へのポインタ + int ( *DumpInfoFunction )( HANDLEINFO *HandleInfo ) ; // ハンドルの情報を出力する関数へのポインタ const wchar_t *Name ; // ハンドル名 char NameUTF16LE[ 128 ] ; // ハンドル名( UTF16LE ) } ; @@ -200,7 +178,7 @@ extern HANDLEMANAGE HandleManageArray[ DX_HANDLETYPE_MAX ] ; // 関数プロトタイプ宣言----------------------------------------------------------- // ハンドル共通関係 -extern int InitializeHandleManage( int HandleType, int OneSize, int MaxNum, int ( *InitializeFunction )( HANDLEINFO *HandleInfo ), int ( *TerminateFunction )( HANDLEINFO *HandleInfo ), const wchar_t *Name ) ; // ハンドル管理情報を初期化する( InitializeFlag には FALSE が入っている必要がある ) +extern int InitializeHandleManage( int HandleType, int OneSize, int MaxNum, int ( *InitializeFunction )( HANDLEINFO *HandleInfo ), int ( *TerminateFunction )( HANDLEINFO *HandleInfo ), int ( *DumpInfoFunction )( HANDLEINFO *HandleInfo ), const wchar_t *Name ) ; // ハンドル管理情報を初期化する( InitializeFlag には FALSE が入っている必要がある ) extern int TerminateHandleManage( int HandleType ) ; // ハンドル管理情報の後始末を行う extern int AddHandle( int HandleType, int ASyncThread, int Handle /* = -1 */ ) ; // ハンドルを追加する diff --git a/DxHeap.cpp b/DxHeap.cpp index 0b63b52..687d082 100644 --- a/DxHeap.cpp +++ b/DxHeap.cpp @@ -2,7 +2,7 @@ // // DXライブラリ ヒープ関連プログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxHeap.h b/DxHeap.h index 6ab714c..9fe0dc9 100644 --- a/DxHeap.h +++ b/DxHeap.h @@ -2,7 +2,7 @@ // // DXライブラリ ヒープ関係プログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxInput.cpp b/DxInput.cpp index baa1d9f..0b3df6c 100644 --- a/DxInput.cpp +++ b/DxInput.cpp @@ -2,7 +2,7 @@ // // DXライブラリ DirectInput制御プログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -56,6 +56,14 @@ extern int InitializeInputSystem( void ) // 初期化完了フラグを立てる InputSysData.InitializeFlag = TRUE ; + // デフォルトのデッドゾーンが設定されていなかったら設定する + if( InputSysData.EnablePadDefaultDeadZone == FALSE ) + { + InputSysData.EnablePadDefaultDeadZone = TRUE ; + InputSysData.PadDefaultDeadZone = PAD_DEFAULT_DEADZONE ; + InputSysData.PadDefaultDeadZoneD = PAD_DEFAULT_DEADZONE_D ; + } + // 環境依存処理 if( InitializeInputSystem_PF_Timing0() != 0 ) { @@ -596,7 +604,7 @@ extern int AddTouchInputData( TOUCHINPUTDATA *TouchData ) { for( i = 0 ; i < TouchData->PointNum ; i ++ ) { - AddTouchUpInputPointLog( &TouchData->Point[ i ] ) ; + AddTouchDownInputPointLog( &TouchData->Point[ i ] ) ; } } else @@ -616,7 +624,7 @@ extern int AddTouchInputData( TOUCHINPUTDATA *TouchData ) continue ; } - AddTouchUpInputPointLog( &TouchData->Point[ i ] ) ; + AddTouchDownInputPointLog( &TouchData->Point[ i ] ) ; } } @@ -690,7 +698,7 @@ extern int NS_GetTouchInputNum( void ) } // タッチの情報を取得する -extern int NS_GetTouchInput( int InputNo, int *PositionX, int *PositionY, int *ID , int *Device ) +extern int NS_GetTouchInput( int InputNo, int *PositionX, int *PositionY, int *ID , int *Device, float *Pressure ) { if( InputNo >= InputSysData.Touch.NowData.PointNum ) { @@ -717,6 +725,11 @@ extern int NS_GetTouchInput( int InputNo, int *PositionX, int *PositionY, int *I *Device = InputSysData.Touch.NowData.Point[ InputNo ].Device ; } + if( Pressure != NULL ) + { + *Pressure = InputSysData.Touch.NowData.Point[ InputNo ].Pressure ; + } + return 0 ; } @@ -1621,6 +1634,17 @@ extern int NS_SetJoypadDeadZone( int InputType, double Zone ) INPUTPADDATA *pad = &InputSysData.Pad[ JoypadNum ] ; DWORD ZoneI ; + // 値の補正 + if( Zone < 0.0 ) + { + Zone = 0.0f ; + } + else + if( Zone > 1.0 ) + { + Zone = 1.0 ; + } + // ソフトが非アクティブの場合はアクティブになるまで待つ CheckActiveState() ; @@ -1648,6 +1672,9 @@ extern int NS_SetJoypadDeadZone( int InputType, double Zone ) pad->DeadZone = ZoneI ; pad->DeadZoneD = Zone ; + // ユーザーが変更したことを記録 + pad->UserChangeDeadZone = TRUE ; + // 環境依存処理 SetJoypadDeadZone_PF( pad ) ; @@ -1682,6 +1709,68 @@ extern double NS_GetJoypadDeadZone( int InputType ) return pad->DeadZoneD ; } +// ジョイパッドのデフォルトの無効ゾーンを設定する( Zone:新しい無効ゾーン( 0.0 〜 1.0 )、デフォルト値は 0.35 ) +extern int SetJoypadDefaultDeadZoneAll( double Zone ) +{ + DWORD ZoneI ; + INPUTPADDATA *pad ; + int i ; + + // 値の補正 + if( Zone < 0.0 ) + { + Zone = 0.0f ; + } + else + if( Zone > 1.0 ) + { + Zone = 1.0 ; + } + + // ソフトが非アクティブの場合はアクティブになるまで待つ + CheckActiveState() ; + + // 今までと同じゾーンの場合は何もせず終了 + ZoneI = ( DWORD )_DTOL( Zone * 65536 ) ; + if( InputSysData.EnablePadDefaultDeadZone == TRUE && InputSysData.PadDefaultDeadZone == ZoneI ) + { + return 0 ; + } + + // ゾーンを保存 + InputSysData.PadDefaultDeadZone = ZoneI ; + InputSysData.PadDefaultDeadZoneD = Zone ; + + // PadDefaultDeadZone と PadDefaultDeadZoneD が有効かどうかのフラグを立てる + InputSysData.EnablePadDefaultDeadZone = TRUE ; + + // ユーザーがデッドゾーンを変更していないジョイパッドに適用 + pad = InputSysData.Pad ; + for( i = 0 ; i < InputSysData.PadNum ; i ++ , pad ++ ) + { + if( pad->UserChangeDeadZone ) + { + continue ; + } + + // 値を保存 + pad->DeadZone = ZoneI ; + pad->DeadZoneD = Zone ; + + // 環境依存処理 + SetJoypadDeadZone_PF( pad ) ; + } + + // 終了 + return 0 ; +} + +// ジョイパッドのデフォルトの無効ゾーンを取得する( 戻り値:無効ゾーン( 0.0 〜 1.0 ) ) +extern double GetJoypadDefaultDeadZoneAll( void ) +{ + return InputSysData.PadDefaultDeadZoneD ; +} + // ジョイパッドの振動を開始する extern int NS_StartJoypadVibration( int InputType, int Power, int Time, int EffectIndex ) { @@ -1780,6 +1869,7 @@ extern int NS_StartJoypadVibration( int InputType, int Power, int Time, int Effe pad->Effect[ EffectIndex ].BackTime = NS_GetNowCount( FALSE ) ; pad->Effect[ EffectIndex ].Time = Time ; pad->Effect[ EffectIndex ].CompTime = 0 ; + pad->Effect[ EffectIndex ].PrevSetTime = -1 ; // 既に再生中でゆれの大きさも同じ場合は何もしない if( pad->Effect[ EffectIndex ].PlayFlag == TRUE && pad->Effect[ EffectIndex ].Power == Power ) @@ -1910,6 +2000,16 @@ extern int NS_ReSetupJoypad( void ) return SetupJoypad() ; } +// 入力システムの再セットアップを行う +extern int NS_ReSetupInputSystem( void ) +{ + // 入力システムの終了処理を行う + TerminateInputSystem() ; + + // 入力システムの初期化処理を行う + return InitializeInputSystem() ; +} + // キーボードの入力状態の更新 extern int UpdateKeyboardInputState( int UseProcessMessage ) { diff --git a/DxInput.h b/DxInput.h index 0fa4d43..9cb4181 100644 --- a/DxInput.h +++ b/DxInput.h @@ -2,7 +2,7 @@ // // DXライブラリ 入力情報プログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -48,6 +48,10 @@ namespace DxLib // マクロ定義 -------------------------------------------------------------------- +// ジョイパッドのデフォルトデッドゾーン +#define PAD_DEFAULT_DEADZONE_D (0.35) +#define PAD_DEFAULT_DEADZONE ( DWORD )( PAD_DEFAULT_DEADZONE_D * 65536 ) + // 保持するマウスのクリック情報 #define MOUSEINPUT_LOG_NUM (64) @@ -95,6 +99,7 @@ struct INPUTVIBRATIONDATA int Time ; // エフェクトの長さ int CompTime ; // エフェクトを開始してから経過した時間 int BackTime ; // エフェクトの前回調べた時刻 + int PrevSetTime ; // 前回ステータスをセットした時間 int PlayState ; // 振動の再生状態(ソフトが非アクティブになれば再生停止する為) int SetPower ; // 振動の設定パワー @@ -107,6 +112,7 @@ struct INPUTPADDATA { int GetTime ; // 取得時間 INPUTVIBRATIONDATA Effect[ DINPUTPAD_MOTOR_NUM ] ; // モーターの情報 + int UserChangeDeadZone ; // DeadZone の値をユーザーが変更したか DWORD DeadZone ; // 無効ゾーン( 65536 = 100% ) double DeadZoneD ; // 無効ゾーン( 1.0 = 100% ) int Buttons ; // 有効なボタンの数 @@ -155,6 +161,10 @@ struct INPUTSYSTEMDATA int PadNum ; // ジョイパッドの数 INPUTPADDATA Pad[ MAX_JOYPAD_NUM ] ; // パッドデバイス情報 + int EnablePadDefaultDeadZone ; // PadDefaultDeadZone と PadDefaultDeadZoneD が有効かどうか( TRUE:有効 FALSE:無効 ) + DWORD PadDefaultDeadZone ; // ジョイパッドのデフォルト無効ゾーン( 65536 = 100% ) + double PadDefaultDeadZoneD ; // ジョイパッドのデフォルト無効ゾーン( 1.0 = 100% ) + int EndFlag ; int F10Flag ; // F10 が押されたかフラグ diff --git a/DxInputString.cpp b/DxInputString.cpp index 5b9db66..db4dd85 100644 --- a/DxInputString.cpp +++ b/DxInputString.cpp @@ -2,7 +2,7 @@ // // DXライブラリ 文字列入力プログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -1318,7 +1318,7 @@ extern LRESULT IMEProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) } // 画面上に入力中の文字列を描画する -static size_t SetupDrawIMEInputStringInfo( int x, int y, int AddY, RECT *DrawArea, int StrLen, int FontHandle, DRAWIMESTRINFO *DrawImeStrInfo, int *pCharNum, int *pLineNum ) +static size_t SetupDrawIMEInputStringInfo( int x, int y, int EnableExRate, double ExRateX, double ExRateY, int AddY, RECT *DrawArea, int StrLen, int FontHandle, DRAWIMESTRINFO *DrawImeStrInfo, int *pCharNum, int *pLineNum ) { int PosX ; int PosY ; @@ -1371,7 +1371,14 @@ static size_t SetupDrawIMEInputStringInfo( int x, int y, int AddY, RECT *DrawAre } } - CharWidth = GetDrawStringWidthToHandle_WCHAR_T( TempBuf, 0, Num, FontHandle, FALSE ) ; + if( EnableExRate ) + { + CharWidth = GetDrawExtendStringWidthToHandle_WCHAR_T( ExRateX, TempBuf, 0, Num, FontHandle, FALSE ) ; + } + else + { + CharWidth = GetDrawStringWidthToHandle_WCHAR_T( TempBuf, 0, Num, FontHandle, FALSE ) ; + } if( PosX + CharWidth > DrawArea->right ) { if( DrawImeStrInfo != NULL ) @@ -1433,9 +1440,10 @@ static size_t SetupDrawIMEInputStringInfo( int x, int y, int AddY, RECT *DrawAre return sizeof( DRAWIMESTRINFO ) + sizeof( DRAWIMESTRLINEINFO ) * LineNum + sizeof( DRAWIMESTRCHARINFO ) * CharNum ; } -extern int NS_DrawIMEInputString( int x , int y , int SelectStringNum , int DrawCandidateList ) + +static int DrawIMEInputStringBase( int x , int y , int EnableExRate, double ExRateX, double ExRateY, int SelectStringNum , int DrawCandidateList ) { - int StrLen , FontSize , FontHandle ; + int StrLen , FontSizeX , FontSizeY , FontHandle ; int PointX , PointY ; int StrWidth ; int CPointX = 0, CPointY = 0 ; @@ -1455,7 +1463,12 @@ extern int NS_DrawIMEInputString( int x , int y , int SelectStringNum , int Draw FontHandle = CharBuf.UseFontHandle == -1 ? NS_GetDefaultFontHandle() : CharBuf.UseFontHandle ; // フォントサイズを得る - FontSize = NS_GetFontSizeToHandle( FontHandle ) ; + FontSizeY = FontSizeX = NS_GetFontSizeToHandle( FontHandle ) ; + if( EnableExRate ) + { + FontSizeX = _DTOL( FontSizeX * ExRateX ) ; + FontSizeY = _DTOL( FontSizeY * ExRateY ) ; + } // 3D有効フラグを得る Use3DFlag = NS_GetUse3DFlag() ; @@ -1465,7 +1478,7 @@ extern int NS_DrawIMEInputString( int x , int y , int SelectStringNum , int Draw NS_GetDrawArea( &DrawRect ) ; // 1行辺りの縦幅を算出 - AddY = FontSize + FontSize / 10 * 3 ; + AddY = FontSizeY + FontSizeY / 10 * 3 ; // 入力文字列がない場合はここで終了 if( CharBuf.InputString[ 0 ] == 0 ) @@ -1492,7 +1505,7 @@ extern int NS_DrawIMEInputString( int x , int y , int SelectStringNum , int Draw { size_t BufferBytes ; - BufferBytes = SetupDrawIMEInputStringInfo( x, y, AddY, &DrawRect, StrLen, FontHandle, NULL, &CharNum, &LineNum ) ; + BufferBytes = SetupDrawIMEInputStringInfo( x, y, EnableExRate, ExRateX, ExRateY, AddY, &DrawRect, StrLen, FontHandle, NULL, &CharNum, &LineNum ) ; DrawStrInfo = ( DRAWIMESTRINFO * )DXALLOC( BufferBytes ) ; if( DrawStrInfo == NULL ) { @@ -1501,7 +1514,7 @@ extern int NS_DrawIMEInputString( int x , int y , int SelectStringNum , int Draw } DrawStrInfo->LineInfo = ( DRAWIMESTRLINEINFO * )( DrawStrInfo + 1 ) ; DrawStrInfo->CharInfo = ( DRAWIMESTRCHARINFO * )( DrawStrInfo->LineInfo + LineNum ) ; - SetupDrawIMEInputStringInfo( x, y, AddY, &DrawRect, StrLen, FontHandle, DrawStrInfo, NULL, NULL ) ; + SetupDrawIMEInputStringInfo( x, y, EnableExRate, ExRateX, ExRateY, AddY, &DrawRect, StrLen, FontHandle, DrawStrInfo, NULL, NULL ) ; } // 入力文字列を描画 @@ -1511,25 +1524,45 @@ extern int NS_DrawIMEInputString( int x , int y , int SelectStringNum , int Draw { NS_DrawBox( DrawStrInfo->CharInfo[ i ].DrawX, DrawStrInfo->CharInfo[ i ].DrawY, - DrawStrInfo->CharInfo[ i ].DrawX + DrawStrInfo->CharInfo[ i ].Width, DrawStrInfo->CharInfo[ i ].DrawY + FontSize, + DrawStrInfo->CharInfo[ i ].DrawX + DrawStrInfo->CharInfo[ i ].Width, DrawStrInfo->CharInfo[ i ].DrawY + FontSizeY, DrawStrInfo->CharInfo[ i ].IsSelect ? CharBuf.IMESelectStrBackColor : CharBuf.IMEStrBackColor, TRUE ) ; } // 入力中文字列を描画 - for( i = 0 ; i < DrawStrInfo->CharNum ; i++ ) + if( EnableExRate ) { - DrawStringToHandle_WCHAR_T( - DrawStrInfo->CharInfo[ i ].DrawX, DrawStrInfo->CharInfo[ i ].DrawY, - DrawStrInfo->CharInfo[ i ].Char, DrawStrInfo->CharInfo[ i ].CharLength, - DrawStrInfo->CharInfo[ i ].IsSelect ? CharBuf.IMESelectStrColor : CharBuf.IMEStrColor, - FontHandle, - DrawStrInfo->CharInfo[ i ].IsSelect ? - ( CharBuf.IMESelectStrEdgeColorEnable ? CharBuf.IMESelectStrEdgeColor : CharBuf.IMESelectStrBackColor ) : - ( CharBuf.IMEStrEdgeColorEnable ? CharBuf.IMEStrEdgeColor : CharBuf.IMEStrBackColor ), - FALSE - ) ; + for( i = 0 ; i < DrawStrInfo->CharNum ; i++ ) + { + DrawExtendStringToHandle_WCHAR_T( + DrawStrInfo->CharInfo[ i ].DrawX, DrawStrInfo->CharInfo[ i ].DrawY, + ExRateX, ExRateY, + DrawStrInfo->CharInfo[ i ].Char, DrawStrInfo->CharInfo[ i ].CharLength, + DrawStrInfo->CharInfo[ i ].IsSelect ? CharBuf.IMESelectStrColor : CharBuf.IMEStrColor, + FontHandle, + DrawStrInfo->CharInfo[ i ].IsSelect ? + ( CharBuf.IMESelectStrEdgeColorEnable ? CharBuf.IMESelectStrEdgeColor : CharBuf.IMESelectStrBackColor ) : + ( CharBuf.IMEStrEdgeColorEnable ? CharBuf.IMEStrEdgeColor : CharBuf.IMEStrBackColor ), + FALSE + ) ; + } + } + else + { + for( i = 0 ; i < DrawStrInfo->CharNum ; i++ ) + { + DrawStringToHandle_WCHAR_T( + DrawStrInfo->CharInfo[ i ].DrawX, DrawStrInfo->CharInfo[ i ].DrawY, + DrawStrInfo->CharInfo[ i ].Char, DrawStrInfo->CharInfo[ i ].CharLength, + DrawStrInfo->CharInfo[ i ].IsSelect ? CharBuf.IMESelectStrColor : CharBuf.IMEStrColor, + FontHandle, + DrawStrInfo->CharInfo[ i ].IsSelect ? + ( CharBuf.IMESelectStrEdgeColorEnable ? CharBuf.IMESelectStrEdgeColor : CharBuf.IMESelectStrBackColor ) : + ( CharBuf.IMEStrEdgeColorEnable ? CharBuf.IMEStrEdgeColor : CharBuf.IMEStrBackColor ), + FALSE + ) ; + } } } @@ -1549,7 +1582,7 @@ extern int NS_DrawIMEInputString( int x , int y , int SelectStringNum , int Draw // カーソルの描画 NS_DrawBox( CPointX, CPointY, - CPointX + 2 , CPointY + FontSize, + CPointX + 2 , CPointY + FontSizeY, CharBuf.IMECursorColor, TRUE ) ; @@ -1561,15 +1594,22 @@ extern int NS_DrawIMEInputString( int x , int y , int SelectStringNum , int Draw StrNum = 0 ; LineX = 0 ; - LinePX = FontSize / 20 ; + LinePX = FontSizeX / 20 ; if( LinePX < 1 ) { LinePX = 1 ; } - LinePY = FontSize / 10 ; + LinePY = FontSizeY / 10 ; for( i = 0 ; i < CharBuf.ClauseNum ; i ++ ) { - StrWidth = GetDrawStringWidthToHandle_WCHAR_T( &CharBuf.InputString[ StrNum ], 0, CharBuf.ClauseData[ i ] - StrNum, FontHandle, FALSE ) ; + if( EnableExRate ) + { + StrWidth = GetDrawExtendStringWidthToHandle_WCHAR_T( ExRateX, &CharBuf.InputString[ StrNum ], 0, CharBuf.ClauseData[ i ] - StrNum, FontHandle, FALSE ) ; + } + else + { + StrWidth = GetDrawStringWidthToHandle_WCHAR_T( &CharBuf.InputString[ StrNum ], 0, CharBuf.ClauseData[ i ] - StrNum, FontHandle, FALSE ) ; + } if( StrWidth > LinePX * 4 ) { int j, tl ; @@ -1597,8 +1637,8 @@ extern int NS_DrawIMEInputString( int x , int y , int SelectStringNum , int Draw dr = tr < LineX + StrWidth ? DrawStrInfo->LineInfo[ j ].LineWidth : LineX + StrWidth - tl ; NS_DrawBox( - x + dl, y + j * AddY + FontSize + LinePY, - x + dr, y + j * AddY + FontSize + LinePY * ( IsSelect ? 3 : 2 ), + x + dl, y + j * AddY + FontSizeY + LinePY, + x + dr, y + j * AddY + FontSizeY + LinePY * ( IsSelect ? 3 : 2 ), CharBuf.IMELineColor, TRUE ) ; @@ -1624,10 +1664,10 @@ extern int NS_DrawIMEInputString( int x , int y , int SelectStringNum , int Draw int SelectionNumWidth ; // 選択候補の最大数を表示すると描画範囲を超えてしまう場合は描画する候補の数を制限する - h = FontSize / 3 ; - if( FontSize * ( SelectStringNum + 1 ) + h * 2 > DrawRect.bottom - DrawRect.top ) + h = FontSizeY / 3 ; + if( FontSizeY * ( SelectStringNum + 1 ) + h * 2 > DrawRect.bottom - DrawRect.top ) { - SelectStringNum = ( DrawRect.bottom - DrawRect.top - ( h * 2 ) ) / FontSize - 1 ; + SelectStringNum = ( DrawRect.bottom - DrawRect.top - ( h * 2 ) ) / FontSizeY - 1 ; if( SelectStringNum <= 0 ) { SelectStringNum = 1 ; @@ -1648,14 +1688,28 @@ extern int NS_DrawIMEInputString( int x , int y , int SelectStringNum , int Draw } _SWNPRINTF( StringBuf, sizeof( StringBuf ) / 2, L"%d:%s", j + 1, ( wchar_t * )( ( BYTE * )CharBuf.CandidateList + CharBuf.CandidateList->dwOffset[ ui ] ) ) ; - Width = GetDrawStringWidthToHandle_WCHAR_T( StringBuf, 0, ( int )_WCSLEN( StringBuf ), FontHandle, FALSE ) ; + if( EnableExRate ) + { + Width = GetDrawExtendStringWidthToHandle_WCHAR_T( ExRateX, StringBuf, 0, ( int )_WCSLEN( StringBuf ), FontHandle, FALSE ) ; + } + else + { + Width = GetDrawStringWidthToHandle_WCHAR_T( StringBuf, 0, ( int )_WCSLEN( StringBuf ), FontHandle, FALSE ) ; + } if( Width > MaxWidth ) { MaxWidth = Width ; } } _SWNPRINTF( StringBuf, sizeof( StringBuf ) / 2, L"%d/%d", CharBuf.CandidateList->dwSelection + 1, CharBuf.CandidateList->dwCount ) ; - SelectionNumWidth = GetDrawStringWidthToHandle_WCHAR_T( StringBuf, 0, ( int )_WCSLEN( StringBuf ), FontHandle, FALSE ) ; + if( EnableExRate ) + { + SelectionNumWidth = GetDrawExtendStringWidthToHandle_WCHAR_T( ExRateX, StringBuf, 0, ( int )_WCSLEN( StringBuf ), FontHandle, FALSE ) ; + } + else + { + SelectionNumWidth = GetDrawStringWidthToHandle_WCHAR_T( StringBuf, 0, ( int )_WCSLEN( StringBuf ), FontHandle, FALSE ) ; + } if( SelectionNumWidth > MaxWidth ) { MaxWidth = SelectionNumWidth ; @@ -1669,15 +1723,15 @@ extern int NS_DrawIMEInputString( int x , int y , int SelectStringNum , int Draw { SETRECT( SelectRect, - CPointX, CPointY + FontSize + FontSize / 2 , - CPointX + MaxWidth + h * 2, CPointY + FontSize + FontSize / 2 + FontSize * j + h * 2 + CPointX, CPointY + FontSizeY + FontSizeY / 2 , + CPointX + MaxWidth + h * 2, CPointY + FontSizeY + FontSizeY / 2 + FontSizeY * j + h * 2 ) ; // インプット文字描画位置より下の位置に配置できるか検証 if( SelectRect.bottom > DrawRect.bottom ) { // 出来ない場合はインプット文字描画位置より上の位置に配置を試みる - if( y - FontSize * j - FontSize / 2 - h * 2 < DrawRect.top ) + if( y - FontSizeY * j - FontSizeY / 2 - h * 2 < DrawRect.top ) { // それでも駄目な場合は無理やり下の位置に描画する j = SelectRect.bottom - DrawRect.bottom ; @@ -1685,7 +1739,7 @@ extern int NS_DrawIMEInputString( int x , int y , int SelectStringNum , int Draw else { // 上の位置を起点に配置 - j = SelectRect.top - ( y - FontSize * j - FontSize / 2 - h * 2 ) ; + j = SelectRect.top - ( y - FontSizeY * j - FontSizeY / 2 - h * 2 ) ; } // 高さを補正 @@ -1718,18 +1772,44 @@ extern int NS_DrawIMEInputString( int x , int y , int SelectStringNum , int Draw IsSelect = ( ui == CharBuf.CandidateList->dwSelection ) ? TRUE : FALSE ; if( IsSelect && CharBuf.IMEConvWinSelectStrBackColorEnable ) { - NS_DrawBox( SelectRect.left + 1, PointY + j * FontSize , SelectRect.right - 1, PointY + ( j + 1 ) * FontSize, CharBuf.IMEConvWinSelectStrBackColor, TRUE ) ; + NS_DrawBox( SelectRect.left + 1, PointY + j * FontSizeY , SelectRect.right - 1, PointY + ( j + 1 ) * FontSizeY, CharBuf.IMEConvWinSelectStrBackColor, TRUE ) ; } _SWNPRINTF( StringBuf, sizeof( StringBuf ) / 2, L"%d:%s", j + 1, ( wchar_t * )( ( BYTE * )CharBuf.CandidateList + CharBuf.CandidateList->dwOffset[ui] ) ) ; - DrawStringToHandle_WCHAR_T( PointX , PointY + j * FontSize , StringBuf, _WCSLEN( StringBuf ), - IsSelect ? CharBuf.IMEConvWinSelectStrColor : CharBuf.IMEConvWinStrColor , FontHandle , - IsSelect ? CharBuf.IMEConvWinSelectStrEdgeColor : CharBuf.IMEConvWinStrEdgeColor, FALSE ) ; + if( EnableExRate ) + { + DrawExtendStringToHandle_WCHAR_T( + PointX , PointY + j * FontSizeY , + ExRateX, ExRateY, + StringBuf, _WCSLEN( StringBuf ), + IsSelect ? CharBuf.IMEConvWinSelectStrColor : CharBuf.IMEConvWinStrColor , FontHandle , + IsSelect ? CharBuf.IMEConvWinSelectStrEdgeColor : CharBuf.IMEConvWinStrEdgeColor, FALSE ) ; + } + else + { + DrawStringToHandle_WCHAR_T( + PointX , PointY + j * FontSizeY , + StringBuf, _WCSLEN( StringBuf ), + IsSelect ? CharBuf.IMEConvWinSelectStrColor : CharBuf.IMEConvWinStrColor , FontHandle , + IsSelect ? CharBuf.IMEConvWinSelectStrEdgeColor : CharBuf.IMEConvWinStrEdgeColor, FALSE ) ; + } } // 候補総数の内何番目か、の情報を描画する _SWNPRINTF( StringBuf, sizeof( StringBuf ) / 2, L"%d/%d", CharBuf.CandidateList->dwSelection + 1, CharBuf.CandidateList->dwCount ) ; - DrawStringToHandle_WCHAR_T( PointX + MaxWidth - SelectionNumWidth, PointY + j * FontSize , StringBuf, _WCSLEN( StringBuf ), CharBuf.IMEConvWinStrColor , FontHandle , CharBuf.IMEConvWinStrEdgeColor, FALSE ) ; + if( EnableExRate ) + { + DrawExtendStringToHandle_WCHAR_T( + PointX + MaxWidth - SelectionNumWidth, PointY + j * FontSizeY , + ExRateX, ExRateY, + StringBuf, _WCSLEN( StringBuf ), CharBuf.IMEConvWinStrColor , FontHandle , CharBuf.IMEConvWinStrEdgeColor, FALSE ) ; + } + else + { + DrawStringToHandle_WCHAR_T( + PointX + MaxWidth - SelectionNumWidth, PointY + j * FontSizeY , + StringBuf, _WCSLEN( StringBuf ), CharBuf.IMEConvWinStrColor , FontHandle , CharBuf.IMEConvWinStrEdgeColor, FALSE ) ; + } // 候補リストの開始インデックスと候補リストのページサイズを変更 { @@ -1764,6 +1844,17 @@ extern int NS_DrawIMEInputString( int x , int y , int SelectStringNum , int Draw return 0 ; } +extern int NS_DrawIMEInputString( int x , int y , int SelectStringNum , int DrawCandidateList ) +{ + return DrawIMEInputStringBase( x, y, FALSE, 1.0, 1.0, SelectStringNum, DrawCandidateList ) ; +} + +// 画面上に入力中の文字列を描画する( 拡大率付き ) +extern int NS_DrawIMEInputExtendString( int x, int y, double ExRateX, double ExRateY, int SelectStringNum , int DrawCandidateList ) +{ + return DrawIMEInputStringBase( x, y, TRUE, ExRateX, ExRateY, SelectStringNum, DrawCandidateList ) ; +} + // IMEを使用するかどうかの状態を更新する extern void RefreshIMEFlag( int Always ) { @@ -2432,6 +2523,7 @@ extern int NS_DrawObtainsString_CharClip( #ifdef UNICODE return DrawObtainsString_CharClip_WCHAR_T( x, y, + FALSE, 1.0, 1.0, AddY, String, -1, @@ -2454,6 +2546,7 @@ extern int NS_DrawObtainsString_CharClip( Result = DrawObtainsString_CharClip_WCHAR_T( x, y, + FALSE, 1.0, 1.0, AddY, UseStringBuffer, -1, @@ -2484,6 +2577,7 @@ extern int NS_DrawObtainsNString_CharClip( int x, int y, int AddY, const TCHAR * WCHAR_T_STRING_WITH_STRLEN_TO_WCHAR_T_STRING_ONE_BEGIN( String, StringLength, return -1 ) Result = DrawObtainsString_CharClip_WCHAR_T( x, y, + FALSE, 1.0, 1.0, AddY, UseStringBuffer, -1, @@ -2504,6 +2598,7 @@ extern int NS_DrawObtainsNString_CharClip( int x, int y, int AddY, const TCHAR * TCHAR_STRING_WITH_STRLEN_TO_WCHAR_T_STRING_ONE_BEGIN( String, StringLength, return -1 ) Result = DrawObtainsString_CharClip_WCHAR_T( x, y, + FALSE, 1.0, 1.0, AddY, UseStringBuffer, -1, @@ -2527,6 +2622,7 @@ extern int NS_DrawObtainsNString_CharClip( int x, int y, int AddY, const TCHAR * // 描画可能領域に収まるように改行しながら文字列を描画( クリップが文字単位 ) extern int DrawObtainsString_CharClip_WCHAR_T( int x, int y, + int EnableExRate, double ExRateX, double ExRateY, int AddY, const wchar_t *String, int StrLen, @@ -2635,7 +2731,14 @@ extern int DrawObtainsString_CharClip_WCHAR_T( // } // else { - int smin = 0, smax = 0; + int smin = 0, smax = 0 ; + int FontSize ; + + FontSize = NS_GetFontSizeToHandle( FontHandle ) ; + if( EnableExRate ) + { + FontSize = _DTOL( FontSize * ExRateY ) ; + } if( SelectStart != -1 ) { @@ -2679,7 +2782,14 @@ extern int DrawObtainsString_CharClip_WCHAR_T( } } - StrWidth = GetDrawStringWidthToHandle_WCHAR_T( TempBuf, 0, Num, FontHandle, FALSE ) ; + if( EnableExRate ) + { + StrWidth = GetDrawExtendStringWidthToHandle_WCHAR_T( ExRateX, TempBuf, 0, Num, FontHandle, FALSE ) ; + } + else + { + StrWidth = GetDrawStringWidthToHandle_WCHAR_T( TempBuf, 0, Num, FontHandle, FALSE ) ; + } if( PointX + StrWidth > DrawRect.right ) { PointX = x ; @@ -2690,12 +2800,26 @@ extern int DrawObtainsString_CharClip_WCHAR_T( { if( SelectStart != -1 && i >= smin && i < smax ) { - NS_DrawBox( PointX, PointY, PointX + StrWidth, PointY + NS_GetFontSizeToHandle( FontHandle ), SelectBackColor, TRUE ) ; - DrawStringToHandle_WCHAR_T( PointX, PointY, TempBuf, _WCSLEN( TempBuf ), SelectStrColor, FontHandle, SelectStrEdgeColor, FALSE ) ; + NS_DrawBox( PointX, PointY, PointX + StrWidth, PointY + FontSize, SelectBackColor, TRUE ) ; + if( EnableExRate ) + { + DrawExtendStringToHandle_WCHAR_T( PointX, PointY, ExRateX, ExRateY, TempBuf, _WCSLEN( TempBuf ), SelectStrColor, FontHandle, SelectStrEdgeColor, FALSE ) ; + } + else + { + DrawStringToHandle_WCHAR_T( PointX, PointY, TempBuf, _WCSLEN( TempBuf ), SelectStrColor, FontHandle, SelectStrEdgeColor, FALSE ) ; + } } else { - DrawStringToHandle_WCHAR_T( PointX, PointY, TempBuf, _WCSLEN( TempBuf ), StrColor, FontHandle, StrEdgeColor, FALSE ) ; + if( EnableExRate ) + { + DrawExtendStringToHandle_WCHAR_T( PointX, PointY, ExRateX, ExRateY, TempBuf, _WCSLEN( TempBuf ), StrColor, FontHandle, StrEdgeColor, FALSE ) ; + } + else + { + DrawStringToHandle_WCHAR_T( PointX, PointY, TempBuf, _WCSLEN( TempBuf ), StrColor, FontHandle, StrEdgeColor, FALSE ) ; + } } } @@ -2789,6 +2913,7 @@ extern int NS_GetObtainsStringCharPosition_CharClip( int x, int y, int AddY, con #ifdef UNICODE return DrawObtainsString_CharClip_WCHAR_T( x, y, + FALSE, 1.0, 1.0, AddY, String, StrLen, @@ -2811,6 +2936,7 @@ extern int NS_GetObtainsStringCharPosition_CharClip( int x, int y, int AddY, con Result = DrawObtainsString_CharClip_WCHAR_T( x, y, + FALSE, 1.0, 1.0, AddY, UseStringBuffer, StrLen, @@ -4029,7 +4155,7 @@ extern int NS_ProcessActKeyInput( void ) if( Imc ) { WinAPIData.ImmFunc.ImmSetOpenStatusFunc( Imc, TRUE ); - WinAPIData.ImmFunc.ImmSetCompositionStringFunc( Imc, SCS_SETSTR, CharBuf.InputTempString, ( DWORD )_WCSLEN( CharBuf.InputTempString ), 0, 0 ); + WinAPIData.ImmFunc.ImmSetCompositionStringFunc( Imc, SCS_SETSTR, CharBuf.InputTempString, ( DWORD )_WCSLEN( CharBuf.InputTempString ) * sizeof( wchar_t ), 0, 0 ); WinAPIData.ImmFunc.ImmReleaseContextFunc( DefHwnd , Imc ); } } @@ -4149,7 +4275,7 @@ extern int NS_ProcessActKeyInput( void ) #endif // UNICODE // 設定を初期化 WinAPIData.ImmFunc.ImmNotifyIMEFunc( Imc , NI_COMPOSITIONSTR , CPS_CANCEL , 0 ); - WinAPIData.ImmFunc.ImmSetCompositionStringFunc( Imc, SCS_SETSTR, TempString, ( DWORD )_WCSLEN( TempString ), 0, 0 ); + WinAPIData.ImmFunc.ImmSetCompositionStringFunc( Imc, SCS_SETSTR, TempString, ( DWORD )_WCSLEN( TempString ) * sizeof( wchar_t ), 0, 0 ); } // 入力コンテキストの削除 @@ -4968,10 +5094,10 @@ extern int NS_SetKeyInputDrawArea( int x1, int y1, int x2, int y2, int InputHand } // キー入力中データの描画 -extern int NS_DrawKeyInputString( int x , int y , int InputHandle , int DrawCandidateList ) +static int DrawKeyInputStringBase( int x, int y, int EnableExRate, double ExRateX, double ExRateY, int InputHandle , int DrawCandidateList ) { INPUTDATA * Input ; - int Use3DFlag , FontSize , FontHandle ; + int Use3DFlag , FontSizeY , FontHandle ; int PointX ; int PointY ; int AddY ; @@ -4992,8 +5118,12 @@ extern int NS_DrawKeyInputString( int x , int y , int InputHandle , int DrawCand FontHandle = CharBuf.UseFontHandle == -1 ? NS_GetDefaultFontHandle() : CharBuf.UseFontHandle ; // フォントサイズの取得 - FontSize = NS_GetFontSizeToHandle( FontHandle ) ; - + FontSizeY = NS_GetFontSizeToHandle( FontHandle ) ; + if( EnableExRate ) + { + FontSizeY = _DTOL( FontSizeY * ExRateY ) ; + } + // カーソル点滅処理 if( CharBuf.CBrinkFlag == TRUE ) { @@ -5028,7 +5158,7 @@ extern int NS_DrawKeyInputString( int x , int y , int InputHandle , int DrawCand // int SizeX, SizeY, LineCount ; int PosX, PosY ; - AddY = FontSize + FontSize / 10 * 3 ; + AddY = FontSizeY + FontSizeY / 10 * 3 ; if( DrawRect.left == DrawRect.right || DrawRect.bottom == DrawRect.top ) @@ -5065,6 +5195,7 @@ extern int NS_DrawKeyInputString( int x , int y , int InputHandle , int DrawCand DrawObtainsString_CharClip_WCHAR_T( x, y, + EnableExRate, ExRateX, ExRateY, AddY, Input->Buffer, -1, @@ -5085,6 +5216,7 @@ extern int NS_DrawKeyInputString( int x , int y , int InputHandle , int DrawCand { DrawObtainsString_CharClip_WCHAR_T( x, y, + EnableExRate, ExRateX, ExRateY, AddY, Input->Buffer + Input->DrawStartPos, Input->Point - Input->DrawStartPos, @@ -5128,6 +5260,7 @@ extern int NS_DrawKeyInputString( int x , int y , int InputHandle , int DrawCand DrawObtainsString_CharClip_WCHAR_T( x, y, + EnableExRate, ExRateX, ExRateY, AddY, Input->Buffer + Input->DrawStartPos, Input->Point - Input->DrawStartPos, @@ -5147,7 +5280,7 @@ extern int NS_DrawKeyInputString( int x , int y , int InputHandle , int DrawCand if( CharBuf.CBrinkDrawFlag == TRUE && InputHandle == CharBuf.ActiveInputHandle ) // || ( InputHandle == CharBuf.ActiveInputHandle && CharBuf.IMESwitch == TRUE ) ) { - NS_DrawObtainsBox( PointX , PointY , PointX + 2 , PointY + FontSize , FontSize + FontSize / 10 * 3 , CharBuf.NormalCursorColor , TRUE ) ; + NS_DrawObtainsBox( PointX , PointY , PointX + 2 , PointY + FontSizeY , FontSizeY + FontSizeY / 10 * 3 , CharBuf.NormalCursorColor , TRUE ) ; } } @@ -5155,6 +5288,7 @@ extern int NS_DrawKeyInputString( int x , int y , int InputHandle , int DrawCand DrawObtainsString_CharClip_WCHAR_T( x, y, + EnableExRate, ExRateX, ExRateY, AddY, Input->Buffer + Input->DrawStartPos, -1, @@ -5177,7 +5311,7 @@ extern int NS_DrawKeyInputString( int x , int y , int InputHandle , int DrawCand // 入力中文字列の描画 if( InputHandle == CharBuf.ActiveInputHandle ) { - NS_DrawIMEInputString( PointX , PointY , 5 , DrawCandidateList ) ; + DrawIMEInputStringBase( PointX , PointY , EnableExRate, ExRateX, ExRateY, 5 , DrawCandidateList ) ; } // データを元に戻す @@ -5187,6 +5321,18 @@ extern int NS_DrawKeyInputString( int x , int y , int InputHandle , int DrawCand return 0 ; } +// キー入力中データの描画 +extern int NS_DrawKeyInputString( int x , int y , int InputHandle , int DrawCandidateList ) +{ + return DrawKeyInputStringBase( x, y, FALSE, 0.0, 0.0, InputHandle, DrawCandidateList ) ; +} + +// キー入力ハンドルの入力中情報の描画( 拡大率指定付き ) +extern int NS_DrawKeyInputExtendString( int x, int y, double ExRateX, double ExRateY, int InputHandle , int DrawCandidateList ) +{ + return DrawKeyInputStringBase( x, y, TRUE, ExRateX, ExRateY, InputHandle, DrawCandidateList ) ; +} + // キー入力時のカーソルの点滅する早さをセットする extern int NS_SetKeyInputCursorBrinkTime( int Time ) { @@ -5631,6 +5777,14 @@ extern const IMEINPUTDATA *NS_GetIMEInputData( void ) LPIMEINPUTDATA IMEInput ; int TotalSize, i, Len ; LPIMEINPUTCLAUSEDATA IMEClause ; +#ifndef UNICODE + static char ConvBuffer0[ 1024 ] ; + static char ConvBuffer1[ 1024 ] ; + char *TempConvBuffer0 = NULL ; + char *TempConvBuffer1 = NULL ; + char *UseConvBuffer0 ; + char *UseConvBuffer1 ; +#endif // UNICODE // 既に確保されていたら解放 if( CharBuf.IMEInputData ) @@ -5682,7 +5836,36 @@ extern const IMEINPUTDATA *NS_GetIMEInputData( void ) TLen = ( int )_TSTRLEN( IMEInput->InputString ) ; // カーソル位置のセット - IMEInput->CursorPosition = NS_GetStringPoint( IMEInput->InputString , CharBuf.InputPoint ) ; + int CharPositionW ; +#ifdef UNICODE + CharPositionW = NS_GetStringPoint( IMEInput->InputString , CharBuf.InputPoint ) ; + IMEInput->CursorPosition = CharPositionW ; +#else + CharPositionW = GetStringPoint2_WCHAR_T( CharBuf.InputString, CharBuf.InputPoint ) ; + if( ( CharPositionW + 1 ) * 8 > sizeof( ConvBuffer0 ) ) + { + TempConvBuffer0 = ( char * )DXALLOC( ( CharPositionW + 1 ) * 8 ) ; + if( TempConvBuffer0 == NULL ) + { + DXST_LOGFILE_ADDUTF16LE( "\xab\x30\xfc\x30\xbd\x30\xeb\x30\x4d\x4f\x6e\x7f\xe6\x51\x06\x74\x28\x75\x30\x00\x6e\x30\xe1\x30\xe2\x30\xea\x30\x6e\x30\xba\x78\xdd\x4f\x6b\x30\x31\x59\x57\x65\x57\x30\x7e\x30\x57\x30\x5f\x30\x0a\x00\x00"/*@ L"カーソル位置処理用0のメモリの確保に失敗しました\n" @*/ ) ; + return NULL ; + } + UseConvBuffer0 = TempConvBuffer0 ; + } + else + { + UseConvBuffer0 = ConvBuffer0 ; + } + ConvString( ( const char * )CharBuf.InputString, CharPositionW, WCHAR_T_CHARCODEFORMAT, UseConvBuffer0, ( CharPositionW + 1 ) * 8, _TCHARCODEFORMAT ) ; + + IMEInput->CursorPosition = ( int )_STRLEN( UseConvBuffer0 ) ; + + if( TempConvBuffer0 != NULL ) + { + DXFREE( TempConvBuffer0 ) ; + TempConvBuffer0 = NULL ; + } +#endif // UNICODE // 分節情報のセット if( CharBuf.ClauseNum > 1 ) @@ -5696,6 +5879,11 @@ extern const IMEINPUTDATA *NS_GetIMEInputData( void ) #ifdef UNICODE IMEClause->Position = CharBuf.ClauseData[ i ] ; IMEClause->Length = CharBuf.ClauseData[ i + 1 ] - IMEClause->Position ; + + if( IMEClause->Position == IMEInput->CursorPosition ) + { + IMEInput->SelectClause = i ; + } #else int CharPosition0 ; int CharPosition1 ; @@ -5705,17 +5893,67 @@ extern const IMEINPUTDATA *NS_GetIMEInputData( void ) CharPosition0 = GetStringPoint2_WCHAR_T( CharBuf.InputString, CharBuf.ClauseData[ i ] ) ; CharPosition1 = GetStringPoint2_WCHAR_T( CharBuf.InputString, CharBuf.ClauseData[ i + 1 ] ) ; - CharBytePosition0 = NS_GetStringPoint( IMEInput->InputString, CharPosition0 ) * sizeof( char ) ; - CharBytePosition1 = NS_GetStringPoint( IMEInput->InputString, CharPosition1 ) * sizeof( char ) ; + if( ( CharPosition0 + 1 ) * 8 > sizeof( ConvBuffer0 ) ) + { + TempConvBuffer0 = ( char * )DXALLOC( ( CharPosition0 + 1 ) * 8 ) ; + if( TempConvBuffer0 == NULL ) + { + DXST_LOGFILE_ADDUTF16LE( "\x87\x65\xc0\x7b\x87\x65\x57\x5b\x17\x52\x09\x59\xdb\x63\xe6\x51\x06\x74\x28\x75\x30\x00\x6e\x30\xe1\x30\xe2\x30\xea\x30\x6e\x30\xba\x78\xdd\x4f\x6b\x30\x31\x59\x57\x65\x57\x30\x7e\x30\x57\x30\x5f\x30\x0a\x00\x00"/*@ L"文節文字列変換処理用0のメモリの確保に失敗しました\n" @*/ ) ; + return NULL ; + } + UseConvBuffer0 = TempConvBuffer0 ; + } + else + { + UseConvBuffer0 = ConvBuffer0 ; + } + + if( ( CharPosition1 + 1 ) * 8 > sizeof( ConvBuffer1 ) ) + { + TempConvBuffer1 = ( char * )DXALLOC( ( CharPosition1 + 1 ) * 8 ) ; + if( TempConvBuffer1 == NULL ) + { + DXST_LOGFILE_ADDUTF16LE( "\x87\x65\xc0\x7b\x87\x65\x57\x5b\x17\x52\x09\x59\xdb\x63\xe6\x51\x06\x74\x28\x75\x30\x00\x6e\x30\xe1\x30\xe2\x30\xea\x30\x6e\x30\xba\x78\xdd\x4f\x6b\x30\x31\x59\x57\x65\x57\x30\x7e\x30\x57\x30\x5f\x30\x0a\x00\x00"/*@ L"文節文字列変換処理用0のメモリの確保に失敗しました\n" @*/ ) ; + if( TempConvBuffer0 != NULL ) + { + DXFREE( TempConvBuffer0 ) ; + TempConvBuffer0 = NULL ; + } + return NULL ; + } + UseConvBuffer1 = TempConvBuffer1 ; + } + else + { + UseConvBuffer1 = ConvBuffer1 ; + } + + ConvString( ( const char * )CharBuf.InputString, CharPosition0, WCHAR_T_CHARCODEFORMAT, UseConvBuffer0, ( CharPosition0 + 1 ) * 8, _TCHARCODEFORMAT ) ; + ConvString( ( const char * )CharBuf.InputString, CharPosition1, WCHAR_T_CHARCODEFORMAT, UseConvBuffer1, ( CharPosition1 + 1 ) * 8, _TCHARCODEFORMAT ) ; + + CharBytePosition0 = ( int )_STRLEN( UseConvBuffer0 ) ; + CharBytePosition1 = ( int )_STRLEN( UseConvBuffer1 ) ; + + if( TempConvBuffer0 != NULL ) + { + DXFREE( TempConvBuffer0 ) ; + TempConvBuffer0 = NULL ; + } + + if( TempConvBuffer1 != NULL ) + { + DXFREE( TempConvBuffer1 ) ; + TempConvBuffer1 = NULL ; + } IMEClause->Position = CharBytePosition0 ; IMEClause->Length = CharBytePosition1 - IMEClause->Position ; -#endif - if( IMEClause->Position == IMEInput->CursorPosition ) + if( CharPosition0 == CharPositionW ) { IMEInput->SelectClause = i ; } +#endif } NextP = IMEInput->ClauseData + IMEInput->ClauseNum ; @@ -5784,6 +6022,61 @@ extern const IMEINPUTDATA *NS_GetIMEInputData( void ) return CharBuf.IMEInputData ; } +// IMEで入力中の文字列を変更する( IMEで文字列を入力中ではなかった場合は何も起こりません ) +extern int NS_SetIMEInputString( const TCHAR *String ) +{ +#ifdef UNICODE + return SetIMEInputString_WCHAR_T( String ) ; +#else + int Result ; + + TCHAR_TO_WCHAR_T_STRING_ONE_BEGIN( String, return -1 ) + + Result = SetIMEInputString_WCHAR_T( UseStringBuffer ) ; + + TCHAR_TO_WCHAR_T_STRING_END( String ) + + return Result ; +#endif +} + +// IMEで入力中の文字列を変更する( IMEで文字列を入力中ではなかった場合は何も起こりません ) +extern int NS_SetIMEInputStringWithStrLen( const TCHAR *String, size_t StringLength ) +{ + int Result ; +#ifdef UNICODE + WCHAR_T_STRING_WITH_STRLEN_TO_WCHAR_T_STRING_ONE_BEGIN( String, StringLength, return -1 ) + Result = SetIMEInputString_WCHAR_T( UseStringBuffer ) ; + WCHAR_T_STRING_WITH_STRLEN_TO_WCHAR_T_STRING_END( String ) +#else + TCHAR_STRING_WITH_STRLEN_TO_WCHAR_T_STRING_ONE_BEGIN( String, StringLength, return -1 ) + Result = SetIMEInputString_WCHAR_T( UseStringBuffer ) ; + TCHAR_STRING_WITH_STRLEN_TO_WCHAR_T_STRING_END( String ) +#endif + return Result ; +} + +extern int SetIMEInputString_WCHAR_T( const wchar_t *String ) +{ + HIMC Imc ; + + if( NS_GetIMEInputData() == NULL ) + { + return 0 ; + } + + Imc = WinAPIData.ImmFunc.ImmGetContextFunc( WinData.MainWindow ) ; + if( Imc ) + { + _MEMSET( CharBuf.InputString, 0, sizeof( CharBuf.InputString ) ) ; + _WCSCPY_S( CharBuf.InputString, CHARBUFFER_SIZE * sizeof( wchar_t ), String ) ; + WinAPIData.ImmFunc.ImmSetCompositionStringFunc( Imc, SCS_SETSTR, CharBuf.InputString, ( DWORD )_WCSLEN( CharBuf.InputString ) * sizeof( wchar_t ), 0, 0 ) ; + WinAPIData.ImmFunc.ImmReleaseContextFunc( WinData.MainWindow , Imc ) ; + } + + return 0 ; +} + /* // IMEで文字列を変換中の場合に変換候補の中で選択する候補を変更する extern int NS_SetIMESelectCandidate( int CandidateIndex ) diff --git a/DxInputString.h b/DxInputString.h index b0f3481..d60792e 100644 --- a/DxInputString.h +++ b/DxInputString.h @@ -2,7 +2,7 @@ // // DXライブラリ 文字列入力プログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -233,8 +233,8 @@ extern int GetStringPoint2_WCHAR_T( const wchar_t *String, int Point ) ; extern int GetStringLength_WCHAR_T( const wchar_t *String ) ; #ifndef DX_NON_FONT -extern int DrawObtainsString_WCHAR_T( int x, int y, int AddY, const wchar_t *String, int StrLen, unsigned int StrColor, unsigned int StrEdgeColor = 0 , int FontHandle = -1 , unsigned int SelectBackColor = 0xffffffff , unsigned int SelectStrColor = 0 , unsigned int SelectStrEdgeColor = 0xffffffff , int SelectStart = -1 , int SelectEnd = -1 , int DrawFlag = TRUE, int *PosX = NULL, int *PosY = NULL ) ; -extern int DrawObtainsString_CharClip_WCHAR_T( int x, int y, int AddY, const wchar_t *String, int StrLen, unsigned int StrColor, unsigned int StrEdgeColor = 0 , int FontHandle = -1 , unsigned int SelectBackColor = 0xffffffff , unsigned int SelectStrColor = 0 , unsigned int SelectStrEdgeColor = 0xffffffff , int SelectStart = -1 , int SelectEnd = -1 , int DrawFlag = TRUE, int *PosX = NULL, int *PosY = NULL ) ; +extern int DrawObtainsString_WCHAR_T( int x, int y, int AddY, const wchar_t *String, int StrLen, unsigned int StrColor, unsigned int StrEdgeColor = 0 , int FontHandle = -1 , unsigned int SelectBackColor = 0xffffffff , unsigned int SelectStrColor = 0 , unsigned int SelectStrEdgeColor = 0xffffffff , int SelectStart = -1 , int SelectEnd = -1 , int DrawFlag = TRUE, int *PosX = NULL, int *PosY = NULL ) ; +extern int DrawObtainsString_CharClip_WCHAR_T( int x, int y, int EnableExRate, double ExRateX, double ExRateY, int AddY, const wchar_t *String, int StrLen, unsigned int StrColor, unsigned int StrEdgeColor = 0 , int FontHandle = -1 , unsigned int SelectBackColor = 0xffffffff , unsigned int SelectStrColor = 0 , unsigned int SelectStrEdgeColor = 0xffffffff , int SelectStart = -1 , int SelectEnd = -1 , int DrawFlag = TRUE, int *PosX = NULL, int *PosY = NULL ) ; #endif // DX_NON_FONT #ifndef DX_NON_KEYEX @@ -242,6 +242,7 @@ extern int InputStringToCustom_WCHAR_T( int x, int y, size_t BufLength, wchar extern int KeyInputString_WCHAR_T( int x, int y, size_t CharMaxLength, wchar_t *StrBuffer, int CancelValidFlag ) ; extern int KeyInputSingleCharString_WCHAR_T( int x, int y, size_t CharMaxLength, wchar_t *StrBuffer, int CancelValidFlag ) ; extern int GetIMEInputModeStr_WCHAR_T( wchar_t *GetBuffer ) ; +extern int SetIMEInputString_WCHAR_T( const wchar_t *String ) ; extern int SetKeyInputString_WCHAR_T( const wchar_t *String, int InputHandle ) ; extern int GetKeyInputString_WCHAR_T( wchar_t *StrBuffer, int InputHandle ) ; #endif // DX_NON_KEYEX diff --git a/DxLib.h b/DxLib.h index 978132d..7782afd 100644 --- a/DxLib.h +++ b/DxLib.h @@ -2,7 +2,7 @@ // // DXライブラリ ヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -12,9 +12,9 @@ #include "DxCompileConfig.h" // DXライブラリのバージョン -#define DXLIB_VERSION 0x3230 -#define DXLIB_VERSION_STR_T _T( "3.23 " ) -#define DXLIB_VERSION_STR_W L"3.23 " +#define DXLIB_VERSION 0x324b +#define DXLIB_VERSION_STR_T _T( "3.24b" ) +#define DXLIB_VERSION_STR_W L"3.24b" // 設定 ----------------------------------------------------------------------- @@ -53,7 +53,7 @@ #define MAX_MUSIC_NUM (256) // 同時に持てるミュージックハンドルの最大数 #define MAX_MOVIE_NUM (100) // 同時に持てるムービーハンドルの最大数 #define MAX_MASK_NUM (32768) // 同時に持てるマスクハンドルの最大数 -#define MAX_FONT_NUM (40) // 同時に持てるフォントハンドルの最大数 +#define MAX_FONT_NUM (256) // 同時に持てるフォントハンドルの最大数 #define MAX_INPUT_NUM (256) // 同時に持てる文字列入力ハンドルの最大数 #define MAX_SOCKET_NUM (8192) // 同時に持てる通信ハンドルの最大数 #define MAX_LIGHT_NUM (4096) // 同時に持てるライトハンドルの最大数 @@ -66,6 +66,29 @@ #define MAX_FILE_NUM (32768) // 同時に持てるファイルハンドルの最大数 #define MAX_LIVE2D_CUBISM4_MODEL_NUM (32768) // 同時に持てる Live2D Cubism 4 Model ハンドルの最大数 +// ハンドルタイプ定義 +#define DX_HANDLETYPE_NONE (0) // ハンドルタイプ0は未使用 +#define DX_HANDLETYPE_GRAPH (1) // グラフィックハンドル +#define DX_HANDLETYPE_SOFTIMAGE (2) // ソフトウエアで扱うイメージハンドル +#define DX_HANDLETYPE_SOUND (3) // サウンドハンドル +#define DX_HANDLETYPE_SOFTSOUND (4) // ソフトサウンドハンドル +#define DX_HANDLETYPE_MUSIC (5) // ミュージックハンドル +#define DX_HANDLETYPE_MOVIE (6) // ムービーハンドル +#define DX_HANDLETYPE_GMASK (7) // マスクハンドル +#define DX_HANDLETYPE_FONT (8) // フォントハンドル +#define DX_HANDLETYPE_KEYINPUT (9) // 文字列入力ハンドル +#define DX_HANDLETYPE_NETWORK (10) // ネットワークハンドル +#define DX_HANDLETYPE_LIGHT (11) // ライト +#define DX_HANDLETYPE_SHADER (12) // シェーダーハンドル +#define DX_HANDLETYPE_MODEL_BASE (13) // 3Dモデル基本データ +#define DX_HANDLETYPE_MODEL (14) // 3Dモデル +#define DX_HANDLETYPE_VERTEX_BUFFER (15) // 頂点バッファハンドル +#define DX_HANDLETYPE_INDEX_BUFFER (16) // インデックスバッファハンドル +#define DX_HANDLETYPE_FILE (17) // ファイルハンドル +#define DX_HANDLETYPE_SHADOWMAP (18) // シャドウマップハンドル +#define DX_HANDLETYPE_SHADER_CONSTANT_BUFFER (19) // シェーダー用定数バッファハンドル +#define DX_HANDLETYPE_LIVE2D_CUBISM4_MODEL (20) // Live2D Cubism 4 モデルハンドル + #define MAX_JOYPAD_NUM (16) // ジョイパッドの最大数 #define DEFAULT_SCREEN_SIZE_X (640) // デフォルトの画面の幅 @@ -222,7 +245,32 @@ #define DX_BLENDMODE_SPINE_ADDITIVE (29) // Spine のブレンドモード Additive 用 #define DX_BLENDMODE_SPINE_MULTIPLY (30) // Spine のブレンドモード Multiply 用 #define DX_BLENDMODE_SPINE_SCREEN (31) // Spine のブレンドモード Screen 用 -#define DX_BLENDMODE_NUM (32) // ブレンドモードの数 +#define DX_BLENDMODE_CUSTOM (32) // カスタムブレンドモード +#define DX_BLENDMODE_NUM (33) // ブレンドモードの数 + +// カスタムブレンドモード用のブレンド要素タイプ +// Rs = 描画元のR Rg = 描画元のG Rb = 描画元のB Ra = 描画元のA +// Rd = 描画先のR Rd = 描画先のG Rd = 描画先のB Rd = 描画先のA +#define DX_BLEND_ZERO (0) // R = 0 G = 0 B = 0 A = 0 +#define DX_BLEND_ONE (1) // R = 255 G = 255 B = 255 A = 255 +#define DX_BLEND_SRC_COLOR (2) // R = Rs G = Gs B = Gs A = As +#define DX_BLEND_INV_SRC_COLOR (3) // R = 255 - Rs G = 255 - Gs B = 255 - Gs A = 255 - As +#define DX_BLEND_SRC_ALPHA (4) // R = As G = As B = As A = As +#define DX_BLEND_INV_SRC_ALPHA (5) // R = 255 - As G = 255 - As B = 255 - As A = 255 - As +#define DX_BLEND_DEST_COLOR (6) // R = Rd G = Gd B = Bd A = Ad +#define DX_BLEND_INV_DEST_COLOR (7) // R = 255 - Rd G = 255 - Gd B = 255 - Bd A = 255 - Ad +#define DX_BLEND_DEST_ALPHA (8) // R = Ad G = Ad B = Ad A = Ad +#define DX_BLEND_INV_DEST_ALPHA (9) // R = 255 - Ad G = 255 - Ad B = 255 - Ad A = 255 - Ad +#define DX_BLEND_SRC_ALPHA_SAT (10) // R = f G = f B = f A = 255 f = min( As, 255 - Ad ) +#define DX_BLEND_NUM (11) // ブレンド要素タイプの数 + +// カスタムブレンドモード用のブレンド処理タイプ +#define DX_BLENDOP_ADD (0) // ブレンドソース1とブレンドソース2を加算 +#define DX_BLENDOP_SUBTRACT (1) // ブレンドソース1からブレンドソース2を減算 +#define DX_BLENDOP_REV_SUBTRACT (2) // ブレンドソース2からブレンドソース2を減算 +#define DX_BLENDOP_MIX (3) // ブレンドソース1とブレンドソース2の最小値 +#define DX_BLENDOP_MAX (4) // ブレンドソース1とブレンドソース2の最大値 +#define DX_BLENDOP_NUM (5) // ブレンド処理タイプの数 // DrawGraphF 等の浮動小数点値で座標を指定する関数における座標タイプ #define DX_DRAWFLOATCOORDTYPE_DIRECT3D9 (0) // Direct3D9タイプ( -0.5f の補正を行わないとテクスチャのピクセルが綺麗にマップされないタイプ ) @@ -616,6 +664,19 @@ #define DX_LIGHTTYPE_SPOT (2) // D_D3DLIGHT_SPOT #define DX_LIGHTTYPE_DIRECTIONAL (3) // D_D3DLIGHT_DIRECTIONAL +// Live2D のシェーダー +#define DX_LIVE2D_SHADER_SETUP_MASK_VERTEX (0) // マスク画像生成用頂点シェーダー +#define DX_LIVE2D_SHADER_SETUP_MASK_PIXEL (1) // マスク画像生成用ピクセルシェーダー +#define DX_LIVE2D_SHADER_NORMAL_VERTEX (2) // 標準の頂点シェーダー +#define DX_LIVE2D_SHADER_NORMAL_VERTEX_MASKED (3) // 標準の頂点シェーダー + マスク画像 +#define DX_LIVE2D_SHADER_NORMAL_PIXEL (4) // 標準のピクセルシェーダー +#define DX_LIVE2D_SHADER_NORMAL_PIXEL_MASKED (5) // 標準のピクセルシェーダー + マスク画像 +#define DX_LIVE2D_SHADER_NORMAL_PIXEL_MASKED_INVERTED (6) // 標準のピクセルシェーダー + マスク画像( マスク画像の値を反転して使用 ) +#define DX_LIVE2D_SHADER_NORMAL_PIXEL_PREMULALPHA (7) // 標準のピクセルシェーダー + テクスチャ画像が乗算済みアルファ +#define DX_LIVE2D_SHADER_NORMAL_PIXEL_MASKED_PREMULALPHA (8) // 標準のピクセルシェーダー + テクスチャ画像が乗算済みアルファ + マスク画像 +#define DX_LIVE2D_SHADER_NORMAL_PIXEL_MASKED_INVERTEX_PREMULALPHA (9) // 標準のピクセルシェーダー + テクスチャ画像が乗算済みアルファ + マスク画像( マスク画像の値を反転して使用 ) +#define DX_LIVE2D_SHADER_NUM (10) // シェーダーの数 + // グラフィックイメージフォーマットの定義 #define DX_GRAPHICSIMAGE_FORMAT_3D_PAL4 (0) // 16色パレットカラー標準 #define DX_GRAPHICSIMAGE_FORMAT_3D_PAL8 (1) // 256色パレットカラー標準 @@ -771,12 +832,14 @@ #define DX_PADTYPE_OTHER (0) #define DX_PADTYPE_XBOX_360 (1) #define DX_PADTYPE_XBOX_ONE (2) -#define DX_PADTYPE_DUAL_SHOCK_4 (3) -#define DX_PADTYPE_DUAL_SENSE (4) -#define DX_PADTYPE_SWITCH_JOY_CON_L (5) -#define DX_PADTYPE_SWITCH_JOY_CON_R (6) -#define DX_PADTYPE_SWITCH_PRO_CTRL (7) -#define DX_PADTYPE_NUM (8) +#define DX_PADTYPE_DUAL_SHOCK_3 (3) +#define DX_PADTYPE_DUAL_SHOCK_4 (4) +#define DX_PADTYPE_DUAL_SENSE (5) +#define DX_PADTYPE_SWITCH_JOY_CON_L (6) +#define DX_PADTYPE_SWITCH_JOY_CON_R (7) +#define DX_PADTYPE_SWITCH_PRO_CTRL (8) +#define DX_PADTYPE_SWITCH_HORI_PAD (9) +#define DX_PADTYPE_NUM (10) // タッチの同時接触検出対応最大数 #define TOUCHINPUTPOINT_MAX (16) @@ -1048,10 +1111,18 @@ #define DX_KEYINPSTR_ENDCHARAMODE_OVERWRITE (0) // 文字数が限界に達している状態で文字列の末端で文字が入力された場合は、最後の文字を上書き( デフォルト ) #define DX_KEYINPSTR_ENDCHARAMODE_NOTCHANGE (1) // 文字数が限界に達している状態で文字列の末端で文字が入力された場合は、何も変化しない +// タッチパネルデータのツールタイプ +#define DX_TOUCHINPUT_TOOL_TYPE_UNKNOWN (0) // 不明 +#define DX_TOUCHINPUT_TOOL_TYPE_FINGER (1) // 指 +#define DX_TOUCHINPUT_TOOL_TYPE_STYLUS (2) // スタイラスペン +#define DX_TOUCHINPUT_TOOL_TYPE_MOUSE (3) // マウス +#define DX_TOUCHINPUT_TOOL_TYPE_ERASER (4) // 消しゴム + // フルスクリーン解像度モード定義 -#define DX_FSRESOLUTIONMODE_DESKTOP (0) // モニターの画面モードをデスクトップ画面と同じにしてDXライブラリ画面を拡大して表示するモード -#define DX_FSRESOLUTIONMODE_NATIVE (1) // モニターの解像度をDXライブラリ画面の解像度に合わせるモード -#define DX_FSRESOLUTIONMODE_MAXIMUM (2) // モニターの解像度を最大にしてDXライブラリ画面を拡大して表示するモード +#define DX_FSRESOLUTIONMODE_BORDERLESS_WINDOW (0) // 仮想フルスクリーンモード( 実際にはフルスクリーンモードにせず、ボーダーレスウィンドウをデスクトップ画面いっぱいに拡大して仮想的にフルスクリーンモードを実現するモード ) +#define DX_FSRESOLUTIONMODE_DESKTOP (1) // モニターの画面モードをデスクトップ画面と同じにしてDXライブラリ画面を拡大して表示するモード +#define DX_FSRESOLUTIONMODE_NATIVE (2) // モニターの解像度をDXライブラリ画面の解像度に合わせるモード +#define DX_FSRESOLUTIONMODE_MAXIMUM (3) // モニターの解像度を最大にしてDXライブラリ画面を拡大して表示するモード // フルスクリーン拡大モード定義 #define DX_FSSCALINGMODE_BILINEAR (0) // バイリニアモード( ピクセルが滲んでピクセルとピクセルの区切りがはっきりしない ) @@ -1718,6 +1789,14 @@ typedef struct tagBASEIMAGE int GraphDataCount ; // グラフィックイメージの数 } BASEIMAGE, GRAPHIMAGE, *LPGRAPHIMAGE ; +// 矩形データ型 +typedef struct tagRECTDATA +{ + int x1, y1, x2, y2 ; // 座標 + unsigned int color ; // 色 + int pal ; // パラメータ +} RECTDATA, *LPRECTDATA ; + // ラインデータ型 typedef struct tagLINEDATA { @@ -1806,6 +1885,10 @@ typedef struct tagTOUCHINPUTPOINT DWORD ID ; // タッチを判別するためのID int PositionX ; // タッチされた座標X int PositionY ; // タッチされた座標Y + float Pressure ; // 圧力 + float Orientation ; // 画面の上端に対する接点の方位角 + float Tilt ; // 画面の垂線に対する接点の高度角 + int ToolType ; // ツールタイプ( DX_TOUCHINPUT_TOOL_TYPE_UNKNOWN など ) } TOUCHINPUTPOINT ; // タッチパネルのタッチの情報 @@ -1813,6 +1896,7 @@ typedef struct tagTOUCHINPUTDATA { LONGLONG Time ; // 情報の時間 + unsigned int Source ; int PointNum ; // 有効なタッチ情報の数 TOUCHINPUTPOINT Point[ TOUCHINPUTPOINT_MAX ] ; // タッチ情報 } TOUCHINPUTDATA ; @@ -1931,11 +2015,13 @@ namespace DxLib extern DXLIBAPI int SRand( int Seed ) ; // 乱数の初期値を設定する #ifndef DX_NON_MERSENNE_TWISTER +extern DXLIBAPI DWORD GetMersenneTwisterRand( void ) ; // メルセンヌ・ツイスターアルゴリズムで生成された乱数値を無加工で取得する extern DXLIBAPI DWORD_PTR CreateRandHandle( int Seed DEFAULTPARAM( = -1 ) ) ; // 乱数ハンドルを作成する( 戻り値 0以外:乱数ハンドル 0:エラー ) extern DXLIBAPI int DeleteRandHandle( DWORD_PTR RandHandle ) ; // 乱数ハンドルを削除する extern DXLIBAPI int SRandHandle( DWORD_PTR RandHandle, int Seed ) ; // 乱数ハンドルの初期値を再設定する extern DXLIBAPI int GetRandHandle( DWORD_PTR RandHandle, int RandMax ) ; // 乱数ハンドルを使用して乱数を取得する( RandMax : 返って来る値の最大値 ) +extern DXLIBAPI DWORD GetMersenneTwisterRandHandle( DWORD_PTR RandHandle ) ; // 乱数ハンドルを使用してメルセンヌ・ツイスターアルゴリズムで生成された乱数値を無加工で取得する #endif // DX_NON_MERSENNE_TWISTER @@ -1998,6 +2084,7 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM // ログ出力設定関数 extern DXLIBAPI int SetOutApplicationLogValidFlag( int Flag ) ; // ログファイル( Log.txt ) を作成するかどうかを設定する( TRUE:作成する( デフォルト ) FALSE:作成しない )、DxLib_Init の前でのみ使用可能  +extern DXLIBAPI int SetOutApplicationSystemLogValidFlag( int Flag ) ; // ログファイル( Log.txt ) にDXライブラリ内部のログ出力を行うかどうか設定する( TRUE:DXライブラリ内部のログ出力を行う( デフォルト ) FALSE:DXライブラリ内部のログ出力を行わない ) extern DXLIBAPI int SetApplicationLogFileName( const TCHAR *FileName ) ; // ログファイルの名前を設定する( Log.txt 以外にしたい場合に使用 ) extern DXLIBAPI int SetApplicationLogFileNameWithStrLen( const TCHAR *FileName, size_t FileNameLength ) ; // ログファイルの名前を設定する( Log.txt 以外にしたい場合に使用 ) extern DXLIBAPI int SetApplicationLogSaveDirectory( const TCHAR *DirectoryPath ) ; // ログファイル( Log.txt ) を保存するディレクトリパスを設定する @@ -2064,8 +2151,10 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM // DxHandle.cpp関数プロトタイプ宣言 -extern DXLIBAPI int SetDeleteHandleFlag( int Handle, int *DeleteFlag ) ; // ハンドルが削除されたときに−1が設定される変数を登録する - +extern DXLIBAPI int SetDeleteHandleFlag( int Handle, int *DeleteFlag ) ; // ハンドルが削除されたときに−1が設定される変数を登録する +extern DXLIBAPI int GetHandleNum( int HandleType /* DX_HANDLETYPE_GRAPH等 */ ) ; // 指定のタイプのハンドルの数を取得する +extern DXLIBAPI int GetMaxHandleNum( int HandleType /* DX_HANDLETYPE_GRAPH等 */ ) ; // 指定のタイプのハンドルが最大で幾つ作成できるかを取得する +extern DXLIBAPI int DumpHandleInfo( int HandleType /* DX_HANDLETYPE_GRAPH等 */ ) ; // 指定のタイプの全ハンドルの情報をログに出力する @@ -2082,6 +2171,7 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM // マウス関係関数 extern DXLIBAPI int SetMouseDispFlag( int DispFlag ) ; // マウスポインタの表示状態を設定する( DispFlag:マウスポインタを表示するかどうか( TRUE:表示する FALSE:表示しない ) +extern DXLIBAPI int SetMouseDispIgnoreMenuFlag( int IgnoreMenuFlag ) ; // マウスポインタの表示状態についてメニューの表示状態を無視するかどうかを設定する( TRUE:メニューの表示状態を無視する FALSE:メニューの表示状態を考慮する( デフォルト ) ) #ifndef DX_NON_INPUT extern DXLIBAPI int GetMousePoint( int *XBuf, int *YBuf ) ; // マウスポインタの位置を取得する extern DXLIBAPI int SetMousePoint( int PointX, int PointY ) ; // マウスポインタの位置を設定する @@ -2108,7 +2198,7 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM // タッチパネル入力関係関数 #ifndef DX_NON_INPUT extern DXLIBAPI int GetTouchInputNum( void ) ; // タッチされている数を取得する -extern DXLIBAPI int GetTouchInput( int InputNo, int *PositionX, int *PositionY, int *ID DEFAULTPARAM( = NULL ) , int *Device DEFAULTPARAM( = NULL ) ) ; // タッチの情報を取得する +extern DXLIBAPI int GetTouchInput( int InputNo, int *PositionX, int *PositionY, int *ID DEFAULTPARAM( = NULL ) , int *Device DEFAULTPARAM( = NULL ) , float *Pressure DEFAULTPARAM( = NULL ) ) ; // タッチの情報を取得する extern DXLIBAPI int GetTouchInputLogNum( void ) ; // ストックされているタッチ情報の数を取得する extern DXLIBAPI int ClearTouchInputLog( void ) ; // ストックされているタッチ情報をクリアする @@ -2364,7 +2454,8 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM #ifndef DX_NON_KEYEX -extern DXLIBAPI int DrawIMEInputString( int x, int y, int SelectStringNum , int DrawCandidateList DEFAULTPARAM( = TRUE ) ) ; // 画面上に入力中の文字列を描画する +extern DXLIBAPI int DrawIMEInputString( int x, int y, int SelectStringNum , int DrawCandidateList DEFAULTPARAM( = TRUE ) ) ; // 画面上に入力中の文字列を描画する +extern DXLIBAPI int DrawIMEInputExtendString( int x, int y, double ExRateX, double ExRateY, int SelectStringNum , int DrawCandidateList DEFAULTPARAM( = TRUE ) ) ; // 画面上に入力中の文字列を描画する( 拡大率付き ) extern DXLIBAPI int SetUseIMEFlag( int UseFlag ) ; // IMEを使用するかどうかを設定する extern DXLIBAPI int GetUseIMEFlag( void ) ; // IMEを使用するかどうかの設定を取得する extern DXLIBAPI int SetInputStringMaxLengthIMESync( int Flag ) ; // IMEで入力できる最大文字数を MakeKeyInput の設定に合わせるかどうかをセットする( TRUE:あわせる FALSE:あわせない(デフォルト) ) @@ -2398,6 +2489,8 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int GetIMEInputModeStr( TCHAR *GetBuffer ) ; // IMEの入力モード文字列を取得する extern DXLIBAPI const IMEINPUTDATA* GetIMEInputData( void ) ; // IMEで入力中の文字列の情報を取得する +extern DXLIBAPI int SetIMEInputString( const TCHAR *String ) ; // IMEで入力中の文字列を変更する( IMEで文字列を入力中ではなかった場合は何も起こりません ) +extern DXLIBAPI int SetIMEInputStringWithStrLen( const TCHAR *String, size_t StringLength ) ; // IMEで入力中の文字列を変更する( IMEで文字列を入力中ではなかった場合は何も起こりません ) extern DXLIBAPI int SetKeyInputStringColor( ULONGLONG NmlStr, ULONGLONG NmlCur, ULONGLONG IMEStrBack, ULONGLONG IMECur, ULONGLONG IMELine, ULONGLONG IMESelectStr, ULONGLONG IMEModeStr , ULONGLONG NmlStrE DEFAULTPARAM( = 0 ) , ULONGLONG IMESelectStrE DEFAULTPARAM( = 0 ) , ULONGLONG IMEModeStrE DEFAULTPARAM( = 0 ) , ULONGLONG IMESelectWinE DEFAULTPARAM( = ULL_PARAM( 0xffffffffffffffff ) ) , ULONGLONG IMESelectWinF DEFAULTPARAM( = ULL_PARAM( 0xffffffffffffffff ) ) , ULONGLONG SelectStrBackColor DEFAULTPARAM( = ULL_PARAM( 0xffffffffffffffff ) ) , ULONGLONG SelectStrColor DEFAULTPARAM( = ULL_PARAM( 0xffffffffffffffff ) ) , ULONGLONG SelectStrEdgeColor DEFAULTPARAM( = ULL_PARAM( 0xffffffffffffffff ) ) , ULONGLONG IMEStr DEFAULTPARAM( = ULL_PARAM( 0xffffffffffffffff ) ) , ULONGLONG IMEStrE DEFAULTPARAM( = ULL_PARAM( 0xffffffffffffffff ) ) ) ; // ( SetKeyInputStringColor2 の旧関数 )InputString関数使用時の文字の各色を変更する extern DXLIBAPI int SetKeyInputStringColor2( int TargetColor /* DX_KEYINPSTRCOLOR_NORMAL_STR 等 */ , unsigned int Color ) ; // InputString関数使用時の文字の各色を変更する extern DXLIBAPI int ResetKeyInputStringColor2( int TargetColor /* DX_KEYINPSTRCOLOR_NORMAL_STR 等 */ ) ; // SetKeyInputStringColor2 で設定した色をデフォルトに戻す @@ -2413,7 +2506,8 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int CheckKeyInput( int InputHandle ) ; // キー入力ハンドルの入力が終了しているか取得する extern DXLIBAPI int ReStartKeyInput( int InputHandle ) ; // 入力が完了したキー入力ハンドルを再度編集状態に戻す extern DXLIBAPI int ProcessActKeyInput( void ) ; // キー入力ハンドル処理関数 -extern DXLIBAPI int DrawKeyInputString( int x, int y, int InputHandle , int DrawCandidateList DEFAULTPARAM( = TRUE ) ) ; // キー入力ハンドルの入力中情報の描画 +extern DXLIBAPI int DrawKeyInputString( int x, int y, int InputHandle , int DrawCandidateList DEFAULTPARAM( = TRUE ) ) ; // キー入力ハンドルの入力中情報の描画 +extern DXLIBAPI int DrawKeyInputExtendString( int x, int y, double ExRateX, double ExRateY, int InputHandle , int DrawCandidateList DEFAULTPARAM( = TRUE ) ) ; // キー入力ハンドルの入力中情報の描画( 拡大率指定付き ) extern DXLIBAPI int SetKeyInputDrawArea( int x1, int y1, int x2, int y2, int InputHandle ) ; // キー入力ハンドルの入力中文字列を描画する際の描画範囲を設定する extern DXLIBAPI int SetKeyInputSelectArea( int SelectStart, int SelectEnd, int InputHandle ) ; // キー入力ハンドルの指定の領域を選択状態にする( SelectStart と SelectEnd に -1 を指定すると選択状態が解除されます ) @@ -2452,6 +2546,7 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int FileRead_open_mem( const void *FileImage, size_t FileImageSize ) ; // メモリに展開されたファイルを開く extern DXLIBAPI LONGLONG FileRead_size( const TCHAR *FilePath ) ; // ファイルのサイズを取得する extern DXLIBAPI LONGLONG FileRead_size_WithStrLen( const TCHAR *FilePath, size_t FilePathLength ) ; // ファイルのサイズを取得する +extern DXLIBAPI LONGLONG FileRead_size_handle( int FileHandle ) ; // ファイルのサイズを取得する( ファイルハンドル使用版 ) extern DXLIBAPI int FileRead_close( int FileHandle ) ; // ファイルを閉じる extern DXLIBAPI LONGLONG FileRead_tell( int FileHandle ) ; // ファイルポインタの読み込み位置を取得する extern DXLIBAPI int FileRead_seek( int FileHandle , LONGLONG Offset , int Origin ) ; // ファイルポインタの読み込み位置を変更する @@ -2487,7 +2582,7 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM // 補助関係関数 extern DXLIBAPI int ConvertFullPath( const TCHAR *Src, TCHAR *Dest, const TCHAR *CurrentDir DEFAULTPARAM( = NULL ) ) ; // フルパスではないパス文字列をフルパスに変換する( CurrentDir はフルパスである必要がある(語尾に『\』があっても無くても良い) )( CurrentDir が NULL の場合は現在のカレントディレクトリを使用する ) -extern DXLIBAPI int ConvertFullPathWithStrLen( const TCHAR *Src, size_t SrcLength, TCHAR *Dest, const TCHAR *CurrentDir DEFAULTPARAM( = NULL ), size_t CurrentDirLength DEFAULTPARAM( = 0 ) ) ; // フルパスではないパス文字列をフルパスに変換する( CurrentDir はフルパスである必要がある(語尾に『\』があっても無くても良い) )( CurrentDir が NULL の場合は現在のカレントディレクトリを使用する ) +extern DXLIBAPI int ConvertFullPathWithStrLen( const TCHAR *Src, size_t SrcLength, TCHAR *Dest, const TCHAR *CurrentDir DEFAULTPARAM( = NULL ), size_t CurrentDirLength DEFAULTPARAM( = 0 ) ) ; @@ -2520,11 +2615,14 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int GetJoypadXInputState( int InputType, XINPUT_STATE *XInputState ) ; // XInput から得られる入力デバイス( Xbox360コントローラ等 )の生のデータを取得する( XInput非対応のパッドの場合はエラーとなり -1 を返す、DX_INPUT_KEY や DX_INPUT_KEY_PAD1 など、キーボードが絡むタイプを InputType に渡すとエラーとなり -1 を返す ) extern DXLIBAPI int SetJoypadInputToKeyInput( int InputType, int PadInput, int KeyInput1, int KeyInput2 DEFAULTPARAM( = -1 ) , int KeyInput3 DEFAULTPARAM( = -1 ) , int KeyInput4 DEFAULTPARAM( = -1 ) ) ; // ジョイパッドの入力に対応したキーボードの入力を設定する( InputType:設定を変更するパッドの識別子( DX_INPUT_PAD1等 )  PadInput:設定を変更するパッドボタンの識別子( PAD_INPUT_1 等 )  KeyInput1:PadInput を押下したことにするキーコード( KEY_INPUT_A など )その1  KeyInput2:その2、-1で設定なし  KeyInput3:その3、-1で設定なし  KeyInput4:その4、-1で設定なし ) extern DXLIBAPI int SetJoypadDeadZone( int InputType, double Zone ) ; // ジョイパッドの無効ゾーンの設定を行う( InputType:設定を変更するパッドの識別子( DX_INPUT_PAD1等 ) Zone:新しい無効ゾーン( 0.0 〜 1.0 )、デフォルト値は 0.35 ) -extern DXLIBAPI double GetJoypadDeadZone( int InputType ) ; // ジョイパッドの無効ゾーンの設定を取得する( InputType:設定を変更するパッドの識別子( DX_INPUT_PAD1等 ) 戻り値:無効ゾーン( 0.0 〜 1.0 ) +extern DXLIBAPI double GetJoypadDeadZone( int InputType ) ; // ジョイパッドの無効ゾーンの設定を取得する( InputType:設定を変更するパッドの識別子( DX_INPUT_PAD1等 ) 戻り値:無効ゾーン( 0.0 〜 1.0 ) ) +extern DXLIBAPI int SetJoypadDefaultDeadZoneAll( double Zone ) ; // ジョイパッドのデフォルトの無効ゾーンを設定する( Zone:新しい無効ゾーン( 0.0 〜 1.0 )、デフォルト値は 0.35 ) +extern DXLIBAPI double GetJoypadDefaultDeadZoneAll( void ) ; // ジョイパッドのデフォルトの無効ゾーンを取得する( 戻り値:無効ゾーン( 0.0 〜 1.0 ) ) extern DXLIBAPI int StartJoypadVibration( int InputType, int Power, int Time, int EffectIndex DEFAULTPARAM( = -1 ) ) ; // ジョイパッドの振動を開始する extern DXLIBAPI int StopJoypadVibration( int InputType, int EffectIndex DEFAULTPARAM( = -1 ) ) ; // ジョイパッドの振動を停止する extern DXLIBAPI int GetJoypadPOVState( int InputType, int POVNumber ) ; // ジョイパッドのPOV入力の状態を得る( 戻り値 指定のPOVデータの角度、単位は角度の100倍( 90度なら 9000 ) 中心位置にある場合は -1 が返る ) extern DXLIBAPI int ReSetupJoypad( void ) ; // ジョイパッドの再セットアップを行う( 新たに接続されたジョイパッドがあったら検出される ) +extern DXLIBAPI int ReSetupInputSystem( void ) ; // 入力システムの再セットアップを行う( 戻り値 0:正常終了 -1:エラー発生 ) extern DXLIBAPI int SetUseJoypadVibrationFlag( int Flag ) ; // ジョイパッドの振動機能を使用するかどうかを設定する( TRUE:使用する  FALSE:使用しない ) @@ -2675,6 +2773,10 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int GetCreateGraphChannelBitDepth( void ) ; // 作成するグラフィックハンドルの1チャンネル辺りのビット深度を取得する extern DXLIBAPI int SetCreateGraphInitGraphDelete( int Flag ) ; // 作成するグラフィックハンドルを InitGraph() で削除されるかを設定する( Flag TRUE:InitGraphで削除される(デフォルト) FALSE:InitGraphで削除されない ) extern DXLIBAPI int GetCreateGraphInitGraphDelete( void ) ; // 作成するグラフィックハンドルを InitGraph() で削除されるかを取得する( Flag TRUE:InitGraphで削除される(デフォルト) FALSE:InitGraphで削除されない ) +extern DXLIBAPI int SetCreateGraphHandle( int GrHandle ) ; // 作成するグラフィックハンドルのハンドル値を設定する、0以下の値を渡すと設定解除( 存在しないグラフィックハンドルの値の場合のみ有効 ) +extern DXLIBAPI int GetCreateGraphHandle( void ) ; // 作成するグラフィックハンドルのハンドル値を取得する +extern DXLIBAPI int SetCreateDivGraphHandle( const int *HandleArray, int HandleNum ) ; // 作成するグラフィックハンドルのハンドル値を設定する、LoadDivGraph 等の分割画像読み込み用、HandleArray に NULL を渡すと設定解除( 存在しないグラフィックハンドルの値の場合のみ有効 ) +extern DXLIBAPI int GetCreateDivGraphHandle( int *HandleArray ) ; // 作成するグラフィックハンドルのハンドル値を取得する、LoadDivGraph 等の分割画像読み込み用、戻り値は SetCreateDivGraphHandle の引数 HandleNum に渡した値、HandleArray を NULL にすることが可能 extern DXLIBAPI int SetDrawValidGraphCreateFlag( int Flag ) ; // SetDrawScreen に引数として渡せる( 描画対象として使用できる )グラフィックハンドルを作成するかどうかを設定する( TRUE:描画可能グラフィックハンドルを作成する FLASE:通常のグラフィックハンドルを作成する( デフォルト ) ) extern DXLIBAPI int GetDrawValidGraphCreateFlag( void ) ; // SetDrawScreen に引数として渡せる( 描画対象として使用できる )グラフィックハンドルを作成するかどうかを設定を取得する extern DXLIBAPI int SetDrawValidFlagOf3DGraph( int Flag ) ; // SetDrawValidGraphCreateFlag の旧名称 @@ -2723,6 +2825,8 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int GetUseGraphBaseDataBackup( void ) ; // グラフィックハンドルを作成する際に使用した画像データのバックアップをして Direct3DDevice のデバイスロスト時に使用するかどうかを取得する extern DXLIBAPI int SetUseSystemMemGraphCreateFlag( int Flag ) ; // ( 現在効果なし )グラフィックハンドルが持つ画像データをシステムメモリ上に作成するかどうかを設定する( TRUE:システムメモリ上に作成 FALSE:VRAM上に作成( デフォルト ) ) extern DXLIBAPI int GetUseSystemMemGraphCreateFlag( void ) ; // ( 現在効果なし )グラフィックハンドルが持つ画像データをシステムメモリ上に作成するかどうかを取得する +extern DXLIBAPI int SetUseLoadDivGraphSizeCheckFlag( int Flag ) ; // LoadDivGraph 系の分割画像読み込み関数でサイズのチェックを行うかどうかを設定する( Flag:TRUE( チェックを行う(デフォルト) ) FALSE:チェックを行わない ) +extern DXLIBAPI int GetUseLoadDivGraphSizeCheckFlag( void ) ; // LoadDivGraph 系の分割画像読み込み関数でサイズのチェックを行うかどうかの設定を取得する // 画像情報関係関数 extern DXLIBAPI const unsigned int* GetFullColorImage( int GrHandle ) ; // 指定のグラフィックハンドルのARGB8イメージを取得する( 現在動画ファイルをグラフィックハンドルで読み込んだ場合のみ使用可能 ) @@ -2786,6 +2890,7 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int DrawPixelSet( const POINTDATA *PointDataArray, int Num ) ; // 点の集合を描画する extern DXLIBAPI int DrawLineSet( const LINEDATA *LineDataArray, int Num ) ; // 線の集合を描画する +extern DXLIBAPI int DrawBoxSet( const RECTDATA *RectDataArray, int Num ) ; // 矩形の集合を描画する extern DXLIBAPI int DrawPixel3D( VECTOR Pos, unsigned int Color ) ; // 3Dの点を描画する extern DXLIBAPI int DrawPixel3DD( VECTOR_D Pos, unsigned int Color ) ; // 3Dの点を描画する @@ -2888,8 +2993,11 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int DrawPolygon2D( const VERTEX2D *VertexArray, int PolygonNum, int GrHandle, int TransFlag ) ; // 2Dポリゴンを描画する extern DXLIBAPI int DrawPolygon3D( const VERTEX3D *VertexArray, int PolygonNum, int GrHandle, int TransFlag ) ; // 3Dポリゴンを描画する extern DXLIBAPI int DrawPolygonIndexed2D( const VERTEX2D *VertexArray, int VertexNum, const unsigned short *IndexArray, int PolygonNum, int GrHandle, int TransFlag ) ; // 2Dポリゴンを描画する( 頂点インデックスを使用 ) +extern DXLIBAPI int DrawPolygon32bitIndexed2D( const VERTEX2D *VertexArray, int VertexNum, const unsigned int *IndexArray, int PolygonNum, int GrHandle, int TransFlag ) ; // 2Dポリゴンを描画する( 頂点インデックスを使用 ) extern DXLIBAPI int DrawPolygonIndexed3D( const VERTEX3D *VertexArray, int VertexNum, const unsigned short *IndexArray, int PolygonNum, int GrHandle, int TransFlag ) ; // 3Dポリゴンを描画する( 頂点インデックスを使用 ) +extern DXLIBAPI int DrawPolygon32bitIndexed3D( const VERTEX3D *VertexArray, int VertexNum, const unsigned int *IndexArray, int PolygonNum, int GrHandle, int TransFlag ) ; // 3Dポリゴンを描画する( 頂点インデックスを使用 ) extern DXLIBAPI int DrawPolygonIndexed3DBase( const VERTEX_3D *VertexArray, int VertexNum, const unsigned short *IndexArray, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) ; // 3Dポリゴンを描画する( 頂点インデックスを使用 )( 旧バージョン用 ) +extern DXLIBAPI int DrawPolygon32bitIndexed3DBase( const VERTEX_3D *VertexArray, int VertexNum, const unsigned int *IndexArray, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) ; // 3Dポリゴンを描画する( 頂点インデックスを使用 )( 旧バージョン用 ) extern DXLIBAPI int DrawPolygon3DBase( const VERTEX_3D *VertexArray, int VertexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) ; // 3Dポリゴンを描画する( 旧バージョン用 ) #ifndef DX_COMPILE_TYPE_C_LANGUAGE extern DXLIBAPI int DrawPolygon3D( const VERTEX_3D *VertexArray, int PolygonNum, int GrHandle, int TransFlag ) ; // 3Dポリゴンを描画する( 旧バージョン用 ) @@ -2900,7 +3008,9 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int DrawPrimitive2D( const VERTEX2D *VertexArray, int VertexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) ; // 2Dプリミティブを描画する extern DXLIBAPI int DrawPrimitive3D( const VERTEX3D *VertexArray, int VertexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) ; // 3Dプリミティブを描画する extern DXLIBAPI int DrawPrimitiveIndexed2D( const VERTEX2D *VertexArray, int VertexNum, const unsigned short *IndexArray, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) ; // 2Dプリミティブを描画する(頂点インデックス使用) +extern DXLIBAPI int DrawPrimitive32bitIndexed2D( const VERTEX2D *VertexArray, int VertexNum, const unsigned int *IndexArray, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) ; // 2Dプリミティブを描画する(頂点インデックス使用) extern DXLIBAPI int DrawPrimitiveIndexed3D( const VERTEX3D *VertexArray, int VertexNum, const unsigned short *IndexArray, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) ; // 3Dプリミティブを描画する(頂点インデックス使用) +extern DXLIBAPI int DrawPrimitive32bitIndexed3D( const VERTEX3D *VertexArray, int VertexNum, const unsigned int *IndexArray, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) ; // 3Dプリミティブを描画する(頂点インデックス使用) extern DXLIBAPI int DrawPolygon3D_UseVertexBuffer( int VertexBufHandle, int GrHandle, int TransFlag ) ; // 頂点バッファを使用して3Dポリゴンを描画する extern DXLIBAPI int DrawPrimitive3D_UseVertexBuffer( int VertexBufHandle, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) ; // 頂点バッファを使用して3Dプリミティブを描画する @@ -2922,6 +3032,8 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int GetDrawMode( void ) ; // 描画モードを取得する extern DXLIBAPI int SetDrawBlendMode( int BlendMode, int BlendParam ) ; // 描画ブレンドモードを設定する extern DXLIBAPI int GetDrawBlendMode( int *BlendMode, int *BlendParam ) ; // 描画ブレンドモードを取得する +extern DXLIBAPI int SetDrawCustomBlendMode( int BlendEnable, int SrcBlendRGB /* DX_BLEND_SRC_COLOR 等 */, int DestBlendRGB /* DX_BLEND_SRC_COLOR 等 */, int BlendOpRGB /* DX_BLENDOP_ADD 等 */, int SrcBlendA /* DX_BLEND_SRC_COLOR 等 */, int DestBlendA /* DX_BLEND_SRC_COLOR 等 */, int BlendOpA /* DX_BLENDOP_ADD 等 */, int BlendParam ) ; // カスタムブレンドモードを設定する +extern DXLIBAPI int GetDrawCustomBlendMode( int *BlendEnable, int *SrcBlendRGB, int *DestBlendRGB, int *BlendOpRGB, int *SrcBlendA, int *DestBlendA, int *BlendOpA, int *BlendParam ) ; // カスタムブレンドモードを取得する extern DXLIBAPI int SetDrawAlphaTest( int TestMode, int TestParam ) ; // 描画時のアルファテストの設定を行う( TestMode:テストモード( DX_CMP_GREATER等 -1でデフォルト動作に戻す ) TestParam:描画アルファ値との比較に使用する値( 0〜255 ) ) extern DXLIBAPI int GetDrawAlphaTest( int *TestMode, int *TestParam ) ; // 描画時のアルファテストの設定を取得する( TestMode:テストモード( DX_CMP_GREATER等 -1でデフォルト動作に戻す ) TestParam:描画アルファ値との比較に使用する値( 0〜255 ) ) extern DXLIBAPI int SetBlendGraph( int BlendGraph, int BorderParam, int BorderRange ) ; // ( SetBlendGraphParam の BlendType = DX_BLENDGRAPHTYPE_WIPE の処理を行う旧関数 )描画処理時に描画する画像とブレンドするαチャンネル付き画像をセットする( BlendGraph を -1 でブレンド機能を無効 ) @@ -3005,6 +3117,8 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int SetUseCullingFlag( int Flag ) ; // SetUseBackCulling の旧名称 extern DXLIBAPI int SetUseBackCulling( int Flag /* DX_CULLING_LEFT 等 */ ) ; // ポリゴンカリングモードを設定する extern DXLIBAPI int GetUseBackCulling( void ) ; // ポリゴンカリングモードを取得する +extern DXLIBAPI int SetUseRightHandClippingProcess( int Flag ) ; // 右手座標系のクリッピング処理を行うかを設定する( TRUE:右手座標系のクリッピング処理を行う FALSE:左手座標系のクリッピング処理を行う( デフォルト ) ) +extern DXLIBAPI int GetUseRightHandClippingProcess( void ) ; // 右手座標系のクリッピング処理を行うかを取得する( TRUE:右手座標系のクリッピング処理を行う FALSE:左手座標系のクリッピング処理を行う( デフォルト ) ) extern DXLIBAPI int SetTextureAddressMode( int Mode /* DX_TEXADDRESS_WRAP 等 */ , int Stage DEFAULTPARAM( = -1 ) ) ; // テクスチャアドレスモードを設定する extern DXLIBAPI int SetTextureAddressModeUV( int ModeU, int ModeV, int Stage DEFAULTPARAM( = -1 ) ) ; // テクスチャアドレスモードを設定する( U と V を別々に設定する ) @@ -3050,6 +3164,7 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int SetUserScreenImage( void *Image, int PixelFormat /* DX_USER_SCREEN_PIXEL_FORMAT_R5G6B5 等 */ ) ; // 画面のメモリイメージをセットする( DxLib_Init の前で呼ぶ必要がある( DxLib_Init の前に一度でも呼んでいれば、DxLib_Init 後は Image のアドレスのみの変更目的で呼ぶことは可能 )、PixelFormat に DX_USER_SCREEN_PIXEL_FORMAT_R5G6B5 又は DX_USER_SCREEN_PIXEL_FORMAT_X8R8G8B8 の二つ以外を指定した場合はDXライブラリの描画関数は一切使用できなくなります ) extern DXLIBAPI int SetFullScreenResolutionMode( int ResolutionMode /* DX_FSRESOLUTIONMODE_NATIVE 等 */ ) ; // フルスクリーン解像度モードを設定する extern DXLIBAPI int GetFullScreenResolutionMode( int *ResolutionMode, int *UseResolutionMode ) ; // フルスクリーン解像度モードを取得する( UseResolutionMode は実際に使用されている解像度モード( 例えば DX_FSRESOLUTIONMODE_NATIVE を指定していてもモニタが指定の解像度に対応していない場合は UseResolutionMode が DX_FSRESOLUTIONMODE_DESKTOP や DX_FSRESOLUTIONMODE_MAXIMUM になります ) ) +extern DXLIBAPI int GetUseFullScreenResolutionMode( void ) ; // フルスクリーン解像度モードを取得する( GetFullScreenResolutionMode の UseResolutionMode で取得できる値を返す関数 ) extern DXLIBAPI int SetFullScreenScalingMode( int ScalingMode /* DX_FSSCALINGMODE_NEAREST 等 */ , int FitScaling DEFAULTPARAM( = FALSE ) ) ; // フルスクリーンモード時の画面拡大モードを設定する extern DXLIBAPI int SetEmulation320x240( int Flag ) ; // 640x480の画面で320x240の画面解像度にするかどうかを設定する、640x480以外の解像度では無効( TRUE:有効 FALSE:無効 ) extern DXLIBAPI int SetZBufferSize( int ZBufferSizeX, int ZBufferSizeY ) ; // 画面用のZバッファのサイズを設定する @@ -3064,7 +3179,8 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int GetScreenBitDepth( void ) ; // 画面のカラービット数を取得する extern DXLIBAPI int GetColorBitDepth( void ) ; // GetScreenBitDepth の旧名称 extern DXLIBAPI int GetChangeDisplayFlag( void ) ; // 画面モードが変更されているかどうかを取得する -extern DXLIBAPI int GetVideoMemorySize( int *AllSize, int *FreeSize ) ; // ( 現在正常に動作しません )ビデオメモリの容量を得る +extern DXLIBAPI int GetVideoMemorySize( int *AllSize, int *FreeSize ) ; // ビデオメモリの容量を得る +extern DXLIBAPI int GetVideoMemorySizeEx( ULONGLONG *TotalSize, ULONGLONG *UseSize ) ; // ビデオメモリの容量を得る( 64bit版 ) extern DXLIBAPI int GetRefreshRate( void ) ; // 現在の画面のリフレッシュレートを取得する extern DXLIBAPI int GetDisplayNum( void ) ; // ディスプレイの数を取得 extern DXLIBAPI int GetDisplayInfo( int DisplayIndex, int *DesktopRectX, int *DesktopRectY, int *DesktopSizeX, int *DesktopSizeY, int *IsPrimary ) ; // ディスプレイのデスクトップ上での矩形位置を取得する @@ -3211,23 +3327,28 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int SetUseGeometryShader( int ShaderHandle ) ; // シェーダーを使用した描画に使用するジオメトリシェーダーを設定する( -1を渡すと解除 ) extern DXLIBAPI int SetUsePixelShader( int ShaderHandle ) ; // シェーダーを使用した描画に使用するピクセルシェーダーを設定する( -1を渡すと解除 ) -extern DXLIBAPI int CalcPolygonBinormalAndTangentsToShader( VERTEX3DSHADER *VertexArray, int PolygonNum ) ; // ポリゴンの頂点の接線と従法線をUV座標から計算してセットする -extern DXLIBAPI int CalcPolygonIndexedBinormalAndTangentsToShader( VERTEX3DSHADER *VertexArray, int VertexNum, const unsigned short *IndexArray, int PolygonNum ) ; // ポリゴンの頂点の接線と従法線をUV座標から計算してセットする( 頂点インデックスを使用する ) +extern DXLIBAPI int CalcPolygonBinormalAndTangentsToShader( VERTEX3DSHADER *VertexArray, int PolygonNum ) ; // ポリゴンの頂点の接線と従法線をUV座標から計算してセットする +extern DXLIBAPI int CalcPolygonIndexedBinormalAndTangentsToShader( VERTEX3DSHADER *VertexArray, int VertexNum, const unsigned short *IndexArray, int PolygonNum ) ; // ポリゴンの頂点の接線と従法線をUV座標から計算してセットする( 頂点インデックスを使用する ) +extern DXLIBAPI int CalcPolygon32bitIndexedBinormalAndTangentsToShader( VERTEX3DSHADER *VertexArray, int VertexNum, const unsigned int *IndexArray, int PolygonNum ) ; // ポリゴンの頂点の接線と従法線をUV座標から計算してセットする( 頂点インデックスを使用する ) extern DXLIBAPI int DrawBillboard3DToShader( VECTOR Pos, float cx, float cy, float Size, float Angle, int GrHandle, int TransFlag, int ReverseXFlag DEFAULTPARAM( = FALSE ) , int ReverseYFlag DEFAULTPARAM( = FALSE ) ) ; // シェーダーを使ってビルボードを描画する -extern DXLIBAPI int DrawPolygon2DToShader( const VERTEX2DSHADER *VertexArray, int PolygonNum ) ; // シェーダーを使って2Dポリゴンを描画する -extern DXLIBAPI int DrawPolygon3DToShader( const VERTEX3DSHADER *VertexArray, int PolygonNum ) ; // シェーダーを使って3Dポリゴンを描画する -extern DXLIBAPI int DrawPolygonIndexed2DToShader( const VERTEX2DSHADER *VertexArray, int VertexNum, const unsigned short *IndexArray, int PolygonNum ) ; // シェーダーを使って2Dポリゴンを描画する( 頂点インデックスを使用する ) -extern DXLIBAPI int DrawPolygonIndexed3DToShader( const VERTEX3DSHADER *VertexArray, int VertexNum, const unsigned short *IndexArray, int PolygonNum ) ; // シェーダーを使って3Dポリゴンを描画する( 頂点インデックスを使用する ) -extern DXLIBAPI int DrawPrimitive2DToShader( const VERTEX2DSHADER *VertexArray, int VertexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って2Dプリミティブを描画する -extern DXLIBAPI int DrawPrimitive3DToShader( const VERTEX3DSHADER *VertexArray, int VertexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って3Dプリミティブを描画する -extern DXLIBAPI int DrawPrimitiveIndexed2DToShader( const VERTEX2DSHADER *VertexArray, int VertexNum, const unsigned short *IndexArray, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って2Dプリミティブを描画する( 頂点インデックスを使用する ) -extern DXLIBAPI int DrawPrimitiveIndexed3DToShader( const VERTEX3DSHADER *VertexArray, int VertexNum, const unsigned short *IndexArray, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って3Dプリミティブを描画する( 頂点インデックスを使用する ) -extern DXLIBAPI int DrawPolygon3DToShader_UseVertexBuffer( int VertexBufHandle ) ; // シェーダーを使って3Dポリゴンを描画する( 頂点バッファ使用版 ) -extern DXLIBAPI int DrawPolygonIndexed3DToShader_UseVertexBuffer( int VertexBufHandle, int IndexBufHandle ) ; // シェーダーを使って3Dポリゴンを描画する( 頂点バッファとインデックスバッファ使用版 ) -extern DXLIBAPI int DrawPrimitive3DToShader_UseVertexBuffer( int VertexBufHandle, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って3Dプリミティブを描画する( 頂点バッファ使用版 ) -extern DXLIBAPI int DrawPrimitive3DToShader_UseVertexBuffer2( int VertexBufHandle, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int StartVertex, int UseVertexNum ) ; // シェーダーを使って3Dプリミティブを描画する( 頂点バッファ使用版 ) -extern DXLIBAPI int DrawPrimitiveIndexed3DToShader_UseVertexBuffer( int VertexBufHandle, int IndexBufHandle, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って3Dプリミティブを描画する( 頂点バッファとインデックスバッファ使用版 ) +extern DXLIBAPI int DrawPolygon2DToShader( const VERTEX2DSHADER *VertexArray, int PolygonNum ) ; // シェーダーを使って2Dポリゴンを描画する +extern DXLIBAPI int DrawPolygon3DToShader( const VERTEX3DSHADER *VertexArray, int PolygonNum ) ; // シェーダーを使って3Dポリゴンを描画する +extern DXLIBAPI int DrawPolygonIndexed2DToShader( const VERTEX2DSHADER *VertexArray, int VertexNum, const unsigned short *IndexArray, int PolygonNum ) ; // シェーダーを使って2Dポリゴンを描画する( 頂点インデックスを使用する ) +extern DXLIBAPI int DrawPolygon32bitIndexed2DToShader( const VERTEX2DSHADER *VertexArray, int VertexNum, const unsigned int *IndexArray, int PolygonNum ) ; // シェーダーを使って2Dポリゴンを描画する( 頂点インデックスを使用する ) +extern DXLIBAPI int DrawPolygonIndexed3DToShader( const VERTEX3DSHADER *VertexArray, int VertexNum, const unsigned short *IndexArray, int PolygonNum ) ; // シェーダーを使って3Dポリゴンを描画する( 頂点インデックスを使用する ) +extern DXLIBAPI int DrawPolygon32bitIndexed3DToShader( const VERTEX3DSHADER *VertexArray, int VertexNum, const unsigned int *IndexArray, int PolygonNum ) ; // シェーダーを使って3Dポリゴンを描画する( 頂点インデックスを使用する ) +extern DXLIBAPI int DrawPrimitive2DToShader( const VERTEX2DSHADER *VertexArray, int VertexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って2Dプリミティブを描画する +extern DXLIBAPI int DrawPrimitive3DToShader( const VERTEX3DSHADER *VertexArray, int VertexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って3Dプリミティブを描画する +extern DXLIBAPI int DrawPrimitiveIndexed2DToShader( const VERTEX2DSHADER *VertexArray, int VertexNum, const unsigned short *IndexArray, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って2Dプリミティブを描画する( 頂点インデックスを使用する ) +extern DXLIBAPI int DrawPrimitive32bitIndexed2DToShader( const VERTEX2DSHADER *VertexArray, int VertexNum, const unsigned int *IndexArray, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って2Dプリミティブを描画する( 頂点インデックスを使用する ) +extern DXLIBAPI int DrawPrimitiveIndexed3DToShader( const VERTEX3DSHADER *VertexArray, int VertexNum, const unsigned short *IndexArray, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って3Dプリミティブを描画する( 頂点インデックスを使用する ) +extern DXLIBAPI int DrawPrimitive32bitIndexed3DToShader( const VERTEX3DSHADER *VertexArray, int VertexNum, const unsigned int *IndexArray, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って3Dプリミティブを描画する( 頂点インデックスを使用する ) +extern DXLIBAPI int DrawPolygon3DToShader_UseVertexBuffer( int VertexBufHandle ) ; // シェーダーを使って3Dポリゴンを描画する( 頂点バッファ使用版 ) +extern DXLIBAPI int DrawPolygonIndexed3DToShader_UseVertexBuffer( int VertexBufHandle, int IndexBufHandle ) ; // シェーダーを使って3Dポリゴンを描画する( 頂点バッファとインデックスバッファ使用版 ) +extern DXLIBAPI int DrawPrimitive3DToShader_UseVertexBuffer( int VertexBufHandle, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って3Dプリミティブを描画する( 頂点バッファ使用版 ) +extern DXLIBAPI int DrawPrimitive3DToShader_UseVertexBuffer2( int VertexBufHandle, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int StartVertex, int UseVertexNum ) ; // シェーダーを使って3Dプリミティブを描画する( 頂点バッファ使用版 ) +extern DXLIBAPI int DrawPrimitiveIndexed3DToShader_UseVertexBuffer( int VertexBufHandle, int IndexBufHandle, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って3Dプリミティブを描画する( 頂点バッファとインデックスバッファ使用版 ) extern DXLIBAPI int DrawPrimitiveIndexed3DToShader_UseVertexBuffer2( int VertexBufHandle, int IndexBufHandle, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int BaseVertex, int StartVertex, int UseVertexNum, int StartIndex, int UseIndexNum ) ; // シェーダーを使って3Dプリミティブを描画する( 頂点バッファとインデックスバッファ使用版 ) // シェーダー用定数バッファ関係関数 @@ -3241,6 +3362,7 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM // フィルター関係関数 #ifndef DX_NON_FILTER extern DXLIBAPI int SetGraphFilterBltBlendMode( int BlendMode /* DX_BLENDMODE_ALPHA など */ ) ; // GraphFilterBlt や GraphBlendBlt の結果を転送先に転送する際のブレンドモードを設定する( 現状で対応しているのは DX_BLENDMODE_NOBLEND と DX_BLENDMODE_ALPHA のみ ) +extern DXLIBAPI int SetGraphBlendScalingFilterMode( int IsBilinearFilter ) ; // GraphBlend で GrHandle と BlendGrHandle のサイズが異なる場合に適用される拡大フィルターモードを設定する( IsBilinearFilter TRUE:バイリニアフィルター(デフォルト) FALSE:ニアレストフィルター ) extern DXLIBAPI int GraphFilter( int GrHandle, int FilterType /* DX_GRAPH_FILTER_GAUSS 等 */ , ... ) ; // 画像にフィルター処理を行う extern DXLIBAPI int GraphFilterBlt( int SrcGrHandle, int DestGrHandle, int FilterType /* DX_GRAPH_FILTER_GAUSS 等 */ , ... ) ; // 画像のフィルター付き転送を行う @@ -3267,9 +3389,10 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM // int GraphFilter( int GrHandle, int FilterType = DX_GRAPH_FILTER_SSAO, int ColorWithDepthGrHandle = Zバッファが含まれるカラーバッファ, float KernelRadius = 遮蔽物を調べる範囲, float MinDistance = 遮蔽物判定する最小深度値, float MaxDistance = 遮蔽物判定する最大深度値, float Strength = 遮蔽物の影響の強さ, int OcclusionColor = オクリュージョンカラー, float OcclusionPower = オクリュージョンカラーの強さ ) ; // int GraphFilter( int GrHandle, int FilterType = DX_GRAPH_FILTER_FLOAT_COLOR_SCALE, float ColorScaleR = 赤成分へのスケーリング値, float ColorScaleG = 緑成分へのスケーリング値, float ColorScaleB = 青成分へのスケーリング値, float ColorScaleA = α成分へのスケーリング値, float ColorPreSubR = 赤成分にスケーリングを掛ける前に減算する値, float ColorPreSubG = 緑成分にスケーリングを掛ける前に減算する値, float ColorPreSubB = 青成分にスケーリングを掛ける前に減算する値, float ColorPreSubA = α成分にスケーリングを掛ける前に減算する値 ) ; -extern DXLIBAPI int GraphBlend( int GrHandle, int BlendGrHandle, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , ... ) ; // 二つの画像をブレンドする -extern DXLIBAPI int GraphBlendBlt( int SrcGrHandle, int BlendGrHandle, int DestGrHandle, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , ... ) ; // 二つの画像をブレンドして結果を指定の画像に出力する -extern DXLIBAPI int GraphBlendRectBlt( int SrcGrHandle, int BlendGrHandle, int DestGrHandle, int SrcX1, int SrcY1, int SrcX2, int SrcY2, int BlendX, int BlendY, int DestX, int DestY, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , ... ) ; // 二つの画像をブレンドして結果を指定の画像に出力する( 矩形指定 ) +extern DXLIBAPI int GraphBlend( int GrHandle, int BlendGrHandle, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , ... ) ; // 二つの画像をブレンドする +extern DXLIBAPI int GraphBlendBlt( int SrcGrHandle, int BlendGrHandle, int DestGrHandle, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , ... ) ; // 二つの画像をブレンドして結果を指定の画像に出力する +extern DXLIBAPI int GraphBlendRectBlt( int SrcGrHandle, int BlendGrHandle, int DestGrHandle, int SrcX1, int SrcY1, int SrcX2, int SrcY2, int BlendX, int BlendY, int DestX, int DestY, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , ... ) ; // 二つの画像をブレンドして結果を指定の画像に出力する( 矩形指定 ) +extern DXLIBAPI int GraphBlendRectBlt2( int SrcGrHandle, int BlendGrHandle, int DestGrHandle, int SrcX1, int SrcY1, int SrcX2, int SrcY2, int BlendX1, int BlendY1, int BlendX2, int BlendY2, int DestX, int DestY, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , ... ) ; // 二つの画像をブレンドして結果を指定の画像に出力する( 矩形指定、ブレンド画像も矩形指定 ) // int GraphBlend( int GrHandle, int BlendGrHandle, int BlendRatio, int BlendType = DX_GRAPH_BLEND_NORMAL ) ; // int GraphBlend( int GrHandle, int BlendGrHandle, int BlendRatio, int BlendType = DX_GRAPH_BLEND_RGBA_SELECT_MIX, int SelectR = ( 出力の赤分となる成分 DX_RGBA_SELECT_SRC_R 等 ), int SelectG = ( 出力の緑成分となる成分 DX_RGBA_SELECT_SRC_R 等 ), int SelectB = ( 出力の青成分となる成分 DX_RGBA_SELECT_SRC_R 等 ), int SelectA = ( 出力のα成分となる成分 DX_RGBA_SELECT_SRC_R 等 ) ) ; // int GraphBlend( int GrHandle, int BlendGrHandle, int BlendRatio, int BlendType = DX_GRAPH_BLEND_MULTIPLE ) ; @@ -3403,6 +3526,7 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int SetMaterialParam( MATERIALPARAM Material ) ; // 3D描画のライティング計算で使用するマテリアルパラメータを設定する extern DXLIBAPI int SetUseSpecular( int UseFlag ) ; // 3D描画にスペキュラを使用するかどうかを設定する extern DXLIBAPI int SetGlobalAmbientLight( COLOR_F Color ) ; // グローバルアンビエントライトカラーを設定する +extern DXLIBAPI int SetUseLightAngleAttenuation( int UseFlag ) ; // 3D描画のライティング計算で角度減衰を行うかどうかを設定する( TRUE:角度減衰を行う( デフォルト ) FALSE:角度減衰を行わない ) extern DXLIBAPI int ChangeLightTypeDir( VECTOR Direction ) ; // デフォルトライトのタイプをディレクショナルライトにする extern DXLIBAPI int ChangeLightTypeSpot( VECTOR Position, VECTOR Direction, float OutAngle, float InAngle, float Range, float Atten0, float Atten1, float Atten2 ) ; // デフォルトライトのタイプをスポットライトにする @@ -3559,6 +3683,7 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int ChangeFont( const TCHAR *FontName, int CharSet DEFAULTPARAM( = -1 ) /* DX_CHARSET_SHFTJIS 等 */ ) ; // デフォルトフォントハンドルで使用するフォントを変更 extern DXLIBAPI int ChangeFontWithStrLen( const TCHAR *FontName, size_t FontNameLength, int CharSet DEFAULTPARAM( = -1 ) /* DX_CHARSET_SHFTJIS 等 */ ) ; // デフォルトフォントハンドルで使用するフォントを変更 +extern DXLIBAPI int ChangeFontFromHandle( int FontHandle ) ; // デフォルトフォントハンドルとして使用するフォントハンドルを変更する extern DXLIBAPI int ChangeFontType( int FontType ) ; // デフォルトフォントハンドルのフォントタイプの変更 extern DXLIBAPI const TCHAR *GetFontName( void ) ; // デフォルトフォントハンドルのフォント名を取得する extern DXLIBAPI int SetFontSize( int FontSize ) ; // デフォルトフォントハンドルのサイズを設定する @@ -3645,6 +3770,8 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int GetFontCacheUsePremulAlphaFlag( void ) ; // フォントキャッシュとして保存する画像の形式を乗算済みαチャンネル付き画像にするかどうかを取得する extern DXLIBAPI int SetFontUseAdjustSizeFlag( int Flag ) ; // フォントのサイズを補正する処理を行うかどうかを設定する( Flag TRUE:行う( デフォルト ) FALSE:行わない ) extern DXLIBAPI int GetFontUseAdjustSizeFlag( void ) ; // フォントのサイズを補正する処理を行うかどうかを取得する +extern DXLIBAPI int SetFontOnlyDrawType( int OnlyType ) ; // フォントの描画で縁のみ、又は本体のみ描画を行うかどうかを設定する( OnlyType 0:通常描画 1:本体のみ描画 2:縁のみ描画 ) +extern DXLIBAPI int GetFontOnlyDrawType( void ) ; // フォントの描画で縁のみ、又は本体のみ描画を行うかどうかを取得する( 戻り値 0:通常描画 1:本体のみ描画 2:縁のみ描画 ) // FontCacheStringDraw の代わりに DrawString を使ってください @@ -3662,14 +3789,18 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int DrawNString( int x, int y, const TCHAR *String, size_t StringLength, unsigned int Color, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // デフォルトフォントハンドルを使用して文字列を描画する extern DXLIBAPI int DrawVString( int x, int y, const TCHAR *String, unsigned int Color, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // デフォルトフォントハンドルを使用して文字列を描画する( 縦書き ) extern DXLIBAPI int DrawNVString( int x, int y, const TCHAR *String, size_t StringLength, unsigned int Color, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // デフォルトフォントハンドルを使用して文字列を描画する( 縦書き ) -extern DXLIBAPI int DrawFormatString( int x, int y, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する -extern DXLIBAPI int DrawFormatVString( int x, int y, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縦書き ) +extern DXLIBAPI int DrawFormatString( int x, int y, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する +extern DXLIBAPI int DrawFormatVString( int x, int y, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縦書き ) +extern DXLIBAPI int DrawFormatString2( int x, int y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縁の色引数付き ) +extern DXLIBAPI int DrawFormatVString2( int x, int y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縁の色引数付き )( 縦書き ) extern DXLIBAPI int DrawExtendString( int x, int y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // デフォルトフォントハンドルを使用して文字列の拡大描画 extern DXLIBAPI int DrawExtendNString( int x, int y, double ExRateX, double ExRateY, const TCHAR *String, size_t StringLength, unsigned int Color, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // デフォルトフォントハンドルを使用して文字列の拡大描画 extern DXLIBAPI int DrawExtendVString( int x, int y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // デフォルトフォントハンドルを使用して文字列の拡大描画( 縦書き ) extern DXLIBAPI int DrawExtendNVString( int x, int y, double ExRateX, double ExRateY, const TCHAR *String, size_t StringLength, unsigned int Color, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // デフォルトフォントハンドルを使用して文字列の拡大描画( 縦書き ) -extern DXLIBAPI int DrawExtendFormatString( int x, int y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する -extern DXLIBAPI int DrawExtendFormatVString( int x, int y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き ) +extern DXLIBAPI int DrawExtendFormatString( int x, int y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する +extern DXLIBAPI int DrawExtendFormatVString( int x, int y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き ) +extern DXLIBAPI int DrawExtendFormatString2( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縁の色引数付き ) +extern DXLIBAPI int DrawExtendFormatVString2( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縁の色引数付き )( 縦書き ) extern DXLIBAPI int DrawRotaString( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) , const TCHAR *String DEFAULTPARAM( = NULL ) ) ; // デフォルトフォントハンドルを使用して文字列を回転描画する extern DXLIBAPI int DrawRotaNString( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) , const TCHAR *String DEFAULTPARAM( = NULL ) , size_t StringLength DEFAULTPARAM( = 0 ) ) ; // デフォルトフォントハンドルを使用して文字列を回転描画する extern DXLIBAPI int DrawRotaFormatString( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) , const TCHAR *FormatString DEFAULTPARAM( = NULL ) , ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を回転描画する @@ -3681,14 +3812,18 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int DrawNStringF( float x, float y, const TCHAR *String, size_t StringLength, unsigned int Color, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // デフォルトフォントハンドルを使用して文字列を描画する( 座標指定が float 版 ) extern DXLIBAPI int DrawVStringF( float x, float y, const TCHAR *String, unsigned int Color, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // デフォルトフォントハンドルを使用して文字列を描画する( 縦書き )( 座標指定が float 版 ) extern DXLIBAPI int DrawNVStringF( float x, float y, const TCHAR *String, size_t StringLength, unsigned int Color, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // デフォルトフォントハンドルを使用して文字列を描画する( 縦書き )( 座標指定が float 版 ) -extern DXLIBAPI int DrawFormatStringF( float x, float y, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 座標指定が float 版 ) -extern DXLIBAPI int DrawFormatVStringF( float x, float y, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縦書き )( 座標指定が float 版 ) +extern DXLIBAPI int DrawFormatStringF( float x, float y, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 座標指定が float 版 ) +extern DXLIBAPI int DrawFormatVStringF( float x, float y, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縦書き )( 座標指定が float 版 ) +extern DXLIBAPI int DrawFormatString2F( float x, float y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縁の色引数付き )( 座標指定が float 版 ) +extern DXLIBAPI int DrawFormatVString2F( float x, float y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縁の色引数付き )( 縦書き )( 座標指定が float 版 ) extern DXLIBAPI int DrawExtendStringF( float x, float y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // デフォルトフォントハンドルを使用して文字列の拡大描画( 座標指定が float 版 ) extern DXLIBAPI int DrawExtendNStringF( float x, float y, double ExRateX, double ExRateY, const TCHAR *String, size_t StringLength, unsigned int Color, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // デフォルトフォントハンドルを使用して文字列の拡大描画( 座標指定が float 版 ) extern DXLIBAPI int DrawExtendVStringF( float x, float y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // デフォルトフォントハンドルを使用して文字列の拡大描画( 縦書き )( 座標指定が float 版 ) extern DXLIBAPI int DrawExtendNVStringF( float x, float y, double ExRateX, double ExRateY, const TCHAR *String, size_t StringLength, unsigned int Color, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // デフォルトフォントハンドルを使用して文字列の拡大描画( 縦書き )( 座標指定が float 版 ) -extern DXLIBAPI int DrawExtendFormatStringF( float x, float y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 座標指定が float 版 ) -extern DXLIBAPI int DrawExtendFormatVStringF( float x, float y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き )( 座標指定が float 版 ) +extern DXLIBAPI int DrawExtendFormatStringF( float x, float y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 座標指定が float 版 ) +extern DXLIBAPI int DrawExtendFormatVStringF( float x, float y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き )( 座標指定が float 版 ) +extern DXLIBAPI int DrawExtendFormatString2F( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縁の色引数付き )( 座標指定が float 版 ) +extern DXLIBAPI int DrawExtendFormatVString2F( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縁の色引数付き )( 縦書き )( 座標指定が float 版 ) extern DXLIBAPI int DrawRotaStringF( float x, float y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) , const TCHAR *String DEFAULTPARAM( = NULL ) ) ; // デフォルトフォントハンドルを使用して文字列を回転描画する( 座標指定が float 版 ) extern DXLIBAPI int DrawRotaNStringF( float x, float y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) , const TCHAR *String DEFAULTPARAM( = NULL ) , size_t StringLength DEFAULTPARAM( = 0 ) ) ; // デフォルトフォントハンドルを使用して文字列を回転描画する( 座標指定が float 版 ) extern DXLIBAPI int DrawRotaFormatStringF( float x, float y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) , const TCHAR *FormatString DEFAULTPARAM( = NULL ) , ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を回転描画する( 座標指定が float 版 ) @@ -3721,18 +3856,22 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int DrawModiFormatStringToZBuffer( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int WriteZMode /* DX_ZWRITE_MASK 等 */ , int VerticalFlag , const TCHAR *FormatString , ... ) ; // デフォルトフォントハンドルを使用してZバッファに対して書式指定文字列を変形描画する -extern DXLIBAPI int DrawStringToHandle( int x, int y, const TCHAR *String, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) ) ; // フォントハンドルを使用して文字列を描画する -extern DXLIBAPI int DrawNStringToHandle( int x, int y, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) ) ; // フォントハンドルを使用して文字列を描画する -extern DXLIBAPI int DrawVStringToHandle( int x, int y, const TCHAR *String, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // フォントハンドルを使用して文字列を描画する( 縦書き ) -extern DXLIBAPI int DrawNVStringToHandle( int x, int y, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // フォントハンドルを使用して文字列を描画する( 縦書き ) -extern DXLIBAPI int DrawFormatStringToHandle( int x, int y, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を描画する -extern DXLIBAPI int DrawFormatVStringToHandle( int x, int y, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を描画する( 縦書き ) +extern DXLIBAPI int DrawStringToHandle( int x, int y, const TCHAR *String, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) ) ; // フォントハンドルを使用して文字列を描画する +extern DXLIBAPI int DrawNStringToHandle( int x, int y, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) ) ; // フォントハンドルを使用して文字列を描画する +extern DXLIBAPI int DrawVStringToHandle( int x, int y, const TCHAR *String, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // フォントハンドルを使用して文字列を描画する( 縦書き ) +extern DXLIBAPI int DrawNVStringToHandle( int x, int y, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // フォントハンドルを使用して文字列を描画する( 縦書き ) +extern DXLIBAPI int DrawFormatStringToHandle( int x, int y, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を描画する +extern DXLIBAPI int DrawFormatVStringToHandle( int x, int y, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を描画する( 縦書き ) +extern DXLIBAPI int DrawFormatString2ToHandle( int x, int y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を描画する( 縁の色引数付き ) +extern DXLIBAPI int DrawFormatVString2ToHandle( int x, int y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を描画する( 縁の色引数付き )( 縦書き ) extern DXLIBAPI int DrawExtendStringToHandle( int x, int y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) ) ; // フォントハンドルを使用して文字列を拡大描画する extern DXLIBAPI int DrawExtendNStringToHandle( int x, int y, double ExRateX, double ExRateY, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) ) ; // フォントハンドルを使用して文字列を拡大描画する -extern DXLIBAPI int DrawExtendVStringToHandle( int x, int y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // フォントハンドルを使用して文字列を拡大描画する( 縦書き ) -extern DXLIBAPI int DrawExtendNVStringToHandle( int x, int y, double ExRateX, double ExRateY, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // フォントハンドルを使用して文字列を拡大描画する( 縦書き ) -extern DXLIBAPI int DrawExtendFormatStringToHandle( int x, int y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する -extern DXLIBAPI int DrawExtendFormatVStringToHandle( int x, int y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き ) +extern DXLIBAPI int DrawExtendVStringToHandle( int x, int y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // フォントハンドルを使用して文字列を拡大描画する( 縦書き ) +extern DXLIBAPI int DrawExtendNVStringToHandle( int x, int y, double ExRateX, double ExRateY, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // フォントハンドルを使用して文字列を拡大描画する( 縦書き ) +extern DXLIBAPI int DrawExtendFormatStringToHandle( int x, int y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する +extern DXLIBAPI int DrawExtendFormatVStringToHandle( int x, int y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き ) +extern DXLIBAPI int DrawExtendFormatString2ToHandle( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 縁の色引数付き ) +extern DXLIBAPI int DrawExtendFormatVString2ToHandle( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 縁の色引数付き )( 縦書き ) extern DXLIBAPI int DrawRotaStringToHandle( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, const TCHAR *String ) ; // フォントハンドルを使用して文字列を回転描画する extern DXLIBAPI int DrawRotaNStringToHandle( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, const TCHAR *String, size_t StringLength ) ; // フォントハンドルを使用して文字列を回転描画する extern DXLIBAPI int DrawRotaFormatStringToHandle( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を回転描画する @@ -3740,18 +3879,22 @@ extern DXLIBAPI int MailApp_SendWithStrLen( const TCHAR *MailAddr DEFAULTPARAM extern DXLIBAPI int DrawModiNStringToHandle( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, const TCHAR *String, size_t StringLength ) ; // フォントハンドルを使用して文字列を変形描画する extern DXLIBAPI int DrawModiFormatStringToHandle( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を変形描画する -extern DXLIBAPI int DrawStringFToHandle( float x, float y, const TCHAR *String, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) ) ; // フォントハンドルを使用して文字列を描画する( 座標指定が float 版 ) -extern DXLIBAPI int DrawNStringFToHandle( float x, float y, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) ) ; // フォントハンドルを使用して文字列を描画する( 座標指定が float 版 ) -extern DXLIBAPI int DrawVStringFToHandle( float x, float y, const TCHAR *String, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // フォントハンドルを使用して文字列を描画する( 縦書き )( 座標指定が float 版 ) -extern DXLIBAPI int DrawNVStringFToHandle( float x, float y, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // フォントハンドルを使用して文字列を描画する( 縦書き )( 座標指定が float 版 ) -extern DXLIBAPI int DrawFormatStringFToHandle( float x, float y, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を描画する( 座標指定が float 版 ) -extern DXLIBAPI int DrawFormatVStringFToHandle( float x, float y, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を描画する( 縦書き )( 座標指定が float 版 ) +extern DXLIBAPI int DrawStringFToHandle( float x, float y, const TCHAR *String, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) ) ; // フォントハンドルを使用して文字列を描画する( 座標指定が float 版 ) +extern DXLIBAPI int DrawNStringFToHandle( float x, float y, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) ) ; // フォントハンドルを使用して文字列を描画する( 座標指定が float 版 ) +extern DXLIBAPI int DrawVStringFToHandle( float x, float y, const TCHAR *String, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // フォントハンドルを使用して文字列を描画する( 縦書き )( 座標指定が float 版 ) +extern DXLIBAPI int DrawNVStringFToHandle( float x, float y, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // フォントハンドルを使用して文字列を描画する( 縦書き )( 座標指定が float 版 ) +extern DXLIBAPI int DrawFormatStringFToHandle( float x, float y, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を描画する( 座標指定が float 版 ) +extern DXLIBAPI int DrawFormatVStringFToHandle( float x, float y, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を描画する( 縦書き )( 座標指定が float 版 ) +extern DXLIBAPI int DrawFormatString2FToHandle( float x, float y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を描画する( 縁の色引数付き )( 座標指定が float 版 ) +extern DXLIBAPI int DrawFormatVString2FToHandle( float x, float y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を描画する( 縁の色引数付き )( 縦書き )( 座標指定が float 版 ) extern DXLIBAPI int DrawExtendStringFToHandle( float x, float y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) ) ; // フォントハンドルを使用して文字列を拡大描画する( 座標指定が float 版 ) extern DXLIBAPI int DrawExtendNStringFToHandle( float x, float y, double ExRateX, double ExRateY, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) ) ; // フォントハンドルを使用して文字列を拡大描画する( 座標指定が float 版 ) -extern DXLIBAPI int DrawExtendVStringFToHandle( float x, float y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // フォントハンドルを使用して文字列を拡大描画する( 縦書き )( 座標指定が float 版 ) -extern DXLIBAPI int DrawExtendNVStringFToHandle( float x, float y, double ExRateX, double ExRateY, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // フォントハンドルを使用して文字列を拡大描画する( 縦書き )( 座標指定が float 版 ) -extern DXLIBAPI int DrawExtendFormatStringFToHandle( float x, float y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 座標指定が float 版 ) -extern DXLIBAPI int DrawExtendFormatVStringFToHandle( float x, float y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き )( 座標指定が float 版 ) +extern DXLIBAPI int DrawExtendVStringFToHandle( float x, float y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // フォントハンドルを使用して文字列を拡大描画する( 縦書き )( 座標指定が float 版 ) +extern DXLIBAPI int DrawExtendNVStringFToHandle( float x, float y, double ExRateX, double ExRateY, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) ) ; // フォントハンドルを使用して文字列を拡大描画する( 縦書き )( 座標指定が float 版 ) +extern DXLIBAPI int DrawExtendFormatStringFToHandle( float x, float y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 座標指定が float 版 ) +extern DXLIBAPI int DrawExtendFormatVStringFToHandle( float x, float y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き )( 座標指定が float 版 ) +extern DXLIBAPI int DrawExtendFormatString2FToHandle( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 縁の色引数付き )( 座標指定が float 版 ) +extern DXLIBAPI int DrawExtendFormatVString2FToHandle( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 縁の色引数付き )( 縦書き )( 座標指定が float 版 ) extern DXLIBAPI int DrawRotaStringFToHandle( float x, float y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) , const TCHAR *String DEFAULTPARAM( = NULL ) ) ; // フォントハンドルを使用して文字列を回転描画する( 座標指定が float 版 ) extern DXLIBAPI int DrawRotaNStringFToHandle( float x, float y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) , const TCHAR *String DEFAULTPARAM( = NULL ) , size_t StringLength DEFAULTPARAM( = 0 ) ) ; // フォントハンドルを使用して文字列を回転描画する( 座標指定が float 版 ) extern DXLIBAPI int DrawRotaFormatStringFToHandle( float x, float y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor DEFAULTPARAM( = 0 ) , int VerticalFlag DEFAULTPARAM( = FALSE ) , const TCHAR *FormatString DEFAULTPARAM( = NULL ) , ... ) ; // フォントハンドルを使用して書式指定文字列を回転描画する( 座標指定が float 版 ) @@ -4423,6 +4566,9 @@ extern DXLIBAPI VECTOR_D VRotQD( VECTOR_D P, VECTOR_D Axis, double Angle ) ; extern DXLIBAPI int SetGraphDataShavedMode( int ShavedMode /* DX_SHAVEDMODE_NONE 等 */ ) ; // 画像減色時の画像劣化緩和処理モードを設定する( デフォルトでは緩和処理無しの DX_SHAVEDMODE_NONE ) extern DXLIBAPI int GetGraphDataShavedMode( void ) ; // 画像減色時の画像劣化緩和処理モードを取得する extern DXLIBAPI int SetUsePremulAlphaConvertLoad( int UseFlag ) ; // 画像ファイル読み込み時に乗算済みアルファ画像に変換するかどうかを設定する( TRUE:変換処理を行う FALSE:変換処理を行わない( デフォルト ) ) +extern DXLIBAPI int GetUsePremulAlphaConvertLoad( void ) ; // 画像ファイル読み込み時に乗算済みアルファ画像に変換するかどうかを取得する( TRUE:変換処理を行う FALSE:変換処理を行わない( デフォルト ) ) +extern DXLIBAPI int SetUseConvertNormalFormatLoad( int UseFlag ) ; // 画像ファイル読み込み時に DX_BASEIMAGE_FORMAT_NORMAL 以外の形式のイメージを DX_BASEIMAGE_FORMAT_NORMAL 形式のイメージに変換するかどうかを設定する( TRUE:変換処理を行う FALSE:変換処理を行なわない( デフォルト ) ) +extern DXLIBAPI int GetUseConvertNormalFormatLoad( void ) ; // 画像ファイル読み込み時に DX_BASEIMAGE_FORMAT_NORMAL 以外の形式のイメージを DX_BASEIMAGE_FORMAT_NORMAL 形式のイメージに変換するかどうかを取得する( TRUE:変換処理を行う FALSE:変換処理を行なわない( デフォルト ) ) // 基本イメージデータ構造体関係 extern DXLIBAPI int CreateBaseImage( const TCHAR *FileName, const void *FileImage, int FileImageSize, int DataType /*=LOADIMAGE_TYPE_FILE*/ , BASEIMAGE *BaseImage, int ReverseFlag ) ; // 画像ファイル若しくはメモリ上に展開された画像ファイルイメージから基本イメージデータを構築する @@ -4536,6 +4682,7 @@ extern DXLIBAPI int GraphColorMatchBltVer2( void *DestGraphData, int Des extern DXLIBAPI int CreateRGBA8ColorData( COLORDATA *ColorDataBuf ) ; // RGBA8カラーのカラーフォーマットを構築する extern DXLIBAPI int CreateABGR8ColorData( COLORDATA *ColorDataBuf ) ; // ABGR8カラーのカラーフォーマットを構築する extern DXLIBAPI int CreateBGRA8ColorData( COLORDATA *ColorDataBuf ) ; // BGRA8カラーのカラーフォーマットを構築する +extern DXLIBAPI int CreateBGR8ColorData( COLORDATA *ColorDataBuf ) ; // BGR8カラーのカラーフォーマットを構築する extern DXLIBAPI int CreateARGB4ColorData( COLORDATA *ColorDataBuf ) ; // ARGB4カラーのカラーフォーマットを構築する extern DXLIBAPI int CreateA1R5G5B5ColorData( COLORDATA *ColorDataBuf ) ; // A1R5G5B5カラーのカラーフォーマットを構築する extern DXLIBAPI int CreateX1R5G5B5ColorData( COLORDATA *ColorDataBuf ) ; // X1R5G5B5カラーのカラーフォーマットを構築する @@ -4687,7 +4834,7 @@ extern DXLIBAPI int CreateColorData( COLORDATA *ColorDataBuf, int Col extern DXLIBAPI int SetupStreamSoundMem( int SoundHandle ) ; // ストリーム再生タイプのサウンドハンドルの再生準備をする extern DXLIBAPI int PlayStreamSoundMem( int SoundHandle, int PlayType DEFAULTPARAM( = DX_PLAYTYPE_LOOP ) , int TopPositionFlag DEFAULTPARAM( = TRUE ) ) ; // ストリーム再生タイプのサウンドハンドルの再生を開始する extern DXLIBAPI int CheckStreamSoundMem( int SoundHandle ) ; // ストリーム再生タイプのサウンドハンドルの再生状態を取得する -extern DXLIBAPI int StopStreamSoundMem( int SoundHandle ) ; // ストリーム再生タイプのサウンドハンドルの再生を停止する +extern DXLIBAPI int StopStreamSoundMem( int SoundHandle, int IsNextLoopEnd DEFAULTPARAM( = FALSE ) ) ; // ストリーム再生タイプのサウンドハンドルの再生を停止する extern DXLIBAPI int SetStreamSoundCurrentPosition( LONGLONG Byte, int SoundHandle ) ; // サウンドハンドルの再生位置をバイト単位で変更する(再生が止まっている時のみ有効) extern DXLIBAPI LONGLONG GetStreamSoundCurrentPosition( int SoundHandle ) ; // サウンドハンドルの再生位置をバイト単位で取得する extern DXLIBAPI int SetStreamSoundCurrentTime( LONGLONG Time, int SoundHandle ) ; // サウンドハンドルの再生位置をミリ秒単位で設定する(圧縮形式の場合は正しく設定されない場合がある) @@ -4719,7 +4866,7 @@ extern DXLIBAPI int CreateColorData( COLORDATA *ColorDataBuf, int Col extern DXLIBAPI int DeleteSoundMem( int SoundHandle, int LogOutFlag DEFAULTPARAM( = FALSE ) ) ; // サウンドハンドルを削除する extern DXLIBAPI int PlaySoundMem( int SoundHandle, int PlayType, int TopPositionFlag DEFAULTPARAM( = TRUE ) ) ; // サウンドハンドルを再生する -extern DXLIBAPI int StopSoundMem( int SoundHandle ) ; // サウンドハンドルの再生を停止する +extern DXLIBAPI int StopSoundMem( int SoundHandle, int IsNextLoopEnd DEFAULTPARAM( = FALSE ) ) ; // サウンドハンドルの再生を停止する( IsNextLoopEnd を TRUE にすると次回のループ終了のタイミングで音を止める ) extern DXLIBAPI int CheckSoundMem( int SoundHandle ) ; // サウンドハンドルが再生中かどうかを取得する extern DXLIBAPI int SetPanSoundMem( int PanPal, int SoundHandle ) ; // サウンドハンドルのパンを設定する( 100分の1デシベル単位 0 〜 10000 ) extern DXLIBAPI int ChangePanSoundMem( int PanPal, int SoundHandle ) ; // サウンドハンドルのパンを設定する( -255 〜 255 ) @@ -5013,6 +5160,8 @@ extern DXLIBAPI int CreateColorData( COLORDATA *ColorDataBuf, int Col extern DXLIBAPI int MV1SetLoadModelAnimFilePathWithStrLen( const TCHAR *FileName, size_t FileNameLength ) ; // 読み込むモデルに適用するアニメーションファイルのパスを設定する、NULLを渡すと設定リセット( 現在は PMD,PMX のみに効果あり ) extern DXLIBAPI int MV1SetLoadModelUsePackDraw( int Flag ) ; // 読み込むモデルを同時複数描画に対応させるかどうかを設定する( TRUE:対応させる FALSE:対応させない( デフォルト ) )、( 「対応させる」にすると描画が高速になる可能性がある代わりに消費VRAMが増えます ) extern DXLIBAPI int MV1SetLoadModelTriangleListUseMaxBoneNum( int UseMaxBoneNum ) ; // 読み込むモデルのひとつのトライアングルリストで使用できる最大ボーン数を設定する( UseMaxBoneNum で指定できる値の範囲は 8 〜 54、 0 を指定するとデフォルト動作に戻る ) +extern DXLIBAPI int MV1SetLoadModelTextureLoad( int Flag ) ; // 読み込むモデルで使用するテクスチャファイルを読み込むかどうかを設定する( TRUE:読み込む(デフォルト) FALSE:読み込まない ) +extern DXLIBAPI int MV1SetLoadModelIgnoreIK( int IgnoreFlag ) ; // 読み込むモデルのIK情報を無視するかどうかを設定する( TRUE:無視する FALSE:無視しない(デフォルト) ) // モデル保存関係 extern DXLIBAPI int MV1SaveModelToMV1File( int MHandle, const TCHAR *FileName, int SaveType DEFAULTPARAM( = MV1_SAVETYPE_NORMAL ) , int AnimMHandle DEFAULTPARAM( = -1 ) , int AnimNameCheck DEFAULTPARAM( = TRUE ) , int Normal8BitFlag DEFAULTPARAM( = 1 ) , int Position16BitFlag DEFAULTPARAM( = 1 ) , int Weight8BitFlag DEFAULTPARAM( = 0 ) , int Anim16BitFlag DEFAULTPARAM( = 1 ) ) ; // 指定のパスにモデルを保存する( 戻り値 0:成功 -1:メモリ不足 -2:使われていないアニメーションがあった ) @@ -5096,7 +5245,9 @@ extern DXLIBAPI int CreateColorData( COLORDATA *ColorDataBuf, int Col extern DXLIBAPI int MV1SetAttachAnimBlendRate( int MHandle, int AttachIndex, float Rate DEFAULTPARAM( = 1.0f ) ) ; // アタッチしているアニメーションのブレンド率を設定する extern DXLIBAPI float MV1GetAttachAnimBlendRate( int MHandle, int AttachIndex ) ; // アタッチしているアニメーションのブレンド率を取得する extern DXLIBAPI int MV1SetAttachAnimBlendRateToFrame( int MHandle, int AttachIndex, int FrameIndex, float Rate, int SetChild DEFAULTPARAM( = TRUE ) ) ; // アタッチしているアニメーションのブレンド率を設定する( フレーム単位 ) -extern DXLIBAPI float MV1GetAttachAnimBlendRateToFrame( int MHandle, int AttachIndex, int FrameIndex ) ; // アタッチしているアニメーションのブレンド率を設定する( フレーム単位 ) +extern DXLIBAPI float MV1GetAttachAnimBlendRateToFrame( int MHandle, int AttachIndex, int FrameIndex ) ; // アタッチしているアニメーションのブレンド率を取得する( フレーム単位 ) +extern DXLIBAPI int MV1SetAttachAnimTimeToFrame( int MHandle, int AttachIndex, int FrameIndex, float Time, int SetChild DEFAULTPARAM( = TRUE ) ) ; // アタッチしているアニメーションの再生時間を設定する( フレーム単位 )( Time にマイナスの値を渡すと設定を解除 ) +extern DXLIBAPI float MV1GetAttachAnimTimeToFrame( int MHandle, int AttachIndex, int FrameIndex ) ; // アタッチしているアニメーションの再生時間を取得する( フレーム単位 ) extern DXLIBAPI int MV1GetAttachAnim( int MHandle, int AttachIndex ) ; // アタッチしているアニメーションのアニメーションインデックスを取得する extern DXLIBAPI int MV1SetAttachAnimUseShapeFlag( int MHandle, int AttachIndex, int UseFlag ) ; // アタッチしているアニメーションのシェイプを使用するかどうかを設定する( UseFlag TRUE:使用する( デフォルト ) FALSE:使用しない ) extern DXLIBAPI int MV1GetAttachAnimUseShapeFlag( int MHandle, int AttachIndex ) ; // アタッチしているアニメーションのシェイプを使用するかどうかを取得する @@ -5401,6 +5552,12 @@ extern DXLIBAPI int CreateColorData( COLORDATA *ColorDataBuf, int Col extern DXLIBAPI int Live2D_DeleteModel( int Live2DModelHandle ) ; // Live2D のモデルを削除する extern DXLIBAPI int Live2D_InitModel( void ) ; // すべての Live2D のモデルを削除する +extern DXLIBAPI int Live2D_SetUserShader( int TargetShader /* DX_LIVE2D_SHADER_NORMAL_PIXEL 等 */ , int ShaderHandle DEFAULTPARAM( = -1 ) ) ; // Live2D のモデル描画で使用するシェーダーを設定する( ShaderHandle に -1 を渡すと設定を解除 ) +extern DXLIBAPI int Live2D_DrawCallback( void ( *Callback )( int Live2DModelHandle, int TextureIndex, void *UserData ), void *UserData ) ; // Live2D のモデル描画の前に呼ばれるコールバック関数を設定する Callback に NULL を渡すと設定を解除 ) +extern DXLIBAPI int Live2D_SetUseAutoScaling( int UseFlag ) ; // Live2D のモデル描画をする際に、画面サイズに応じたスケーリングを行うかを設定する( UseFlag TRUE:スケーリングを行う( デフォルト ) FALSE:スケーリングを行わない ) +extern DXLIBAPI int Live2D_SetUseAutoCentering( int UseFlag ) ; // Live2D のモデルを画面の中心に描画するかを設定する( UseFlag TRUE:画面の中心に描画する( デフォルト ) FALSE:画面の中心に描画しない ) +extern DXLIBAPI int Live2D_SetUseReverseYAxis( int UseFlag ) ; // Live2D_Model_SetTranslate で指定する平行移動値の y の向きを反転するかを設定する( UseFlag TRUE:反転する( デフォルト ) FALSE:反転しない ) + extern DXLIBAPI int Live2D_Model_Update( int Live2DModelHandle, float DeltaTimeSeconds ) ; // Live2D のモデルの状態を更新する extern DXLIBAPI int Live2D_Model_SetTranslate( int Live2DModelHandle, float x, float y ) ; // Live2D のモデルの位置を設定する extern DXLIBAPI int Live2D_Model_SetExtendRate( int Live2DModelHandle, float ExRateX, float ExRateY ) ; // Live2D のモデルの拡大率を設定する @@ -5409,7 +5566,9 @@ extern DXLIBAPI int CreateColorData( COLORDATA *ColorDataBuf, int Col extern DXLIBAPI int Live2D_Model_StartMotion( int Live2DModelHandle, const TCHAR *group, int no ) ; // Live2D のモデルの指定のモーションを再生する extern DXLIBAPI int Live2D_Model_StartMotionWithStrLen( int Live2DModelHandle, const TCHAR *group, size_t groupLength, int no ) ; // Live2D のモデルの指定のモーションを再生する +extern DXLIBAPI int Live2D_Model_GetLastPlayMotionNo( int Live2DModelHandle ) ; // Live2D のモデルで最後に再生したモーションのグループ内の番号を取得する extern DXLIBAPI int Live2D_Model_IsMotionFinished( int Live2DModelHandle ) ; // Live2D のモデルのモーション再生が終了しているかを取得する( 戻り値 TRUE:再生が終了している FALSE:再生中 ) +extern DXLIBAPI float Live2D_Model_GetMotionPlayTime( int Live2DModelHandle ) ; // Live2D のモデルのモーション再生時間を取得する extern DXLIBAPI int Live2D_Model_SetExpression( int Live2DModelHandle, const TCHAR *expressionID ) ; // Live2D のモデルの指定の表情モーションを設定する extern DXLIBAPI int Live2D_Model_SetExpressionWithStrLen( int Live2DModelHandle, const TCHAR *expressionID, size_t expressionIDLength ) ; // Live2D のモデルの指定の表情モーションを設定する extern DXLIBAPI int Live2D_Model_HitTest( int Live2DModelHandle, const TCHAR *hitAreaName, float x, float y ) ; // 指定の座標が Live2D のモデルの指定の当たり判定の矩形範囲内か判定する( TRUE:矩形範囲内 FALSE:矩形範囲外 ) @@ -5446,6 +5605,8 @@ extern DXLIBAPI int CreateColorData( COLORDATA *ColorDataBuf, int Col extern DXLIBAPI const TCHAR *Live2D_Model_GetEyeBlinkParameterId( int Live2DModelHandle, int index ) ; // Live2D のモデルの目パチに関連付けられたパラメータのIDを取得する extern DXLIBAPI int Live2D_Model_GetLipSyncParameterCount( int Live2DModelHandle ) ; // Live2D のモデルのリップシンクに関連付けられたパラメータの数を取得する extern DXLIBAPI const TCHAR *Live2D_Model_GetLipSyncParameterId( int Live2DModelHandle, int index ) ; // Live2D のモデルのリップシンクに関連付けられたパラメータのIDを取得する +extern DXLIBAPI float Live2D_Model_GetCanvasWidth( int Live2DModelHandle ) ; // Live2D のモデルのキャンバスの横幅を取得する +extern DXLIBAPI float Live2D_Model_GetCanvasHeight( int Live2DModelHandle ) ; // Live2D のモデルのキャンバスの縦幅を取得する #endif // DX_NON_LIVE2D_CUBISM4 diff --git a/DxLib.txt b/DxLib.txt index a028bce..ab26b5b 100644 --- a/DxLib.txt +++ b/DxLib.txt @@ -2,7 +2,7 @@ // // DXライブラリ さわり // -// Ver 3.23 By 山田 巧 +// Ver 3.24b By 山田 巧 // //=============================================================================================== diff --git a/DxLive2DCubism4.cpp b/DxLive2DCubism4.cpp index 3a80738..9a706d0 100644 --- a/DxLive2DCubism4.cpp +++ b/DxLive2DCubism4.cpp @@ -2,7 +2,7 @@ // // DXライブラリ Live2D Cubism4 関係プログラム // -// Ver 3.23 +// Ver 3.24b // // ---------------------------------------------------------------------------- @@ -64,7 +64,7 @@ extern int Live2DCubism4_Initialize( void ) if( LIVE2DSYS.InitializeFlag == TRUE ) return 0 ; // Live2D Cubism4 Model ハンドル管理情報の初期化 - InitializeHandleManage( DX_HANDLETYPE_LIVE2D_CUBISM4_MODEL, sizeof( LIVE2DCUBISM4MODEL ), MAX_LIVE2D_CUBISM4_MODEL_NUM, Live2DCubism4_Model_InitializeHandle, Live2DCubism4_Model_TerminateHandle, L"Live2DModel" ) ; + InitializeHandleManage( DX_HANDLETYPE_LIVE2D_CUBISM4_MODEL, sizeof( LIVE2DCUBISM4MODEL ), MAX_LIVE2D_CUBISM4_MODEL_NUM, Live2DCubism4_Model_InitializeHandle, Live2DCubism4_Model_TerminateHandle, NULL, L"Live2DModel" ) ; //---- static 初期化 ---- D_JsonValue::StaticInitializeNotForClientCall() ; @@ -220,6 +220,9 @@ static int Live2DCubism4_Model_InitializeHandle( HANDLEINFO * HandleInfo ) Model->ExRateY = 1.0f ; Model->RotAngle = 0.0f ; + // 最後に再生したモーションのグループ内の番号を初期化 + Model->LastPlayMotionNo = -1 ; + // 終了 return 0 ; } @@ -601,6 +604,63 @@ extern int NS_Live2D_InitModel( void ) return AllHandleSub( DX_HANDLETYPE_LIVE2D_CUBISM4_MODEL ) ; } +// Live2D のモデル描画で使用するシェーダーを設定する( ShaderHandle に -1 を渡すと解除 ) +extern int NS_Live2D_SetUserShader( int TargetShader /* DX_LIVE2D_SHADER_NORMAL_PIXEL 等 */ , int ShaderHandle ) +{ + if( TargetShader < 0 || TargetShader >= DX_LIVE2D_SHADER_NUM ) + { + return -1 ; + } + + // シェーダーハンドルを保存 + LIVE2DSYS.UserShader[ TargetShader ] = ShaderHandle ; + + // 正常終了 + return 0 ; +} + +// Live2D のモデル描画の前に呼ばれるコールバック関数を設定する Callback に NULL を渡すと設定を解除 ) +extern int NS_Live2D_DrawCallback( void ( *Callback )( int Live2DModelHandle, int TextureIndex, void *UserData ), void *UserData ) +{ + // 値を保存 + LIVE2DSYS.DrawUserCallback = Callback ; + LIVE2DSYS.DrawUserCallbackData = UserData ; + + // 正常終了 + return 0 ; + +} + +// Live2D のモデル描画をする際に、画面サイズに応じたスケーリングを行うかを設定する( UseFlag TRUE:スケーリングを行う( デフォルト ) FALSE:スケーリングを行わない ) +extern int NS_Live2D_SetUseAutoScaling( int UseFlag ) +{ + // 値を保存 + LIVE2DSYS.NotUseAutoScaling = UseFlag != 0 ? FALSE : TRUE ; + + // 正常終了 + return 0 ; +} + +// Live2D のモデルを画面の中心に描画するかを設定する( UseFlag TRUE:画面の中心に描画する( デフォルト ) FALSE:画面の中心に描画しない ) +extern int NS_Live2D_SetUseAutoCentering( int UseFlag ) +{ + // 値を保存 + LIVE2DSYS.NotUseAutoCentering = UseFlag != 0 ? FALSE : TRUE ; + + // 正常終了 + return 0 ; +} + +// Live2D_Model_SetTranslate で指定する平行移動値の y の向きを反転するかを設定する( UseFlag TRUE:反転する( デフォルト ) FALSE:反転しない ) +extern int NS_Live2D_SetUseReverseYAxis( int UseFlag ) +{ + // 値を保存 + LIVE2DSYS.NotUseReverseYAxis = UseFlag != 0 ? FALSE : TRUE ; + + // 正常終了 + return 0 ; +} + // Live2D のモデルの状態を更新する extern int NS_Live2D_Model_Update( int Live2DModelHandle, float DeltaTimeSeconds ) { @@ -672,29 +732,74 @@ extern int NS_Live2D_Model_Draw( int Live2DModelHandle ) { LIVE2DCUBISM4MODEL * Model ; int windowWidth, windowHeight ; + D_CubismVector2 SizeInPixels ; + D_CubismVector2 OriginInPixels ; + float PixelsPerUnit ; // エラー判定 if( LIVE2DCUBISM4MODELCHK( Live2DModelHandle, Model ) ) return -1 ; + // キャンバスサイズの取得 + Model->AppModel->_model->GetCanvasInfo( &SizeInPixels, &OriginInPixels, &PixelsPerUnit ) ; + + // 描画に使用しているハンドルを保存 + LIVE2DSYS.NowDrawLive2DModelHandle = Live2DModelHandle ; + // 投影用マトリックス D_CubismMatrix44 *projection = new_D_CubismMatrix44() ; NS_GetGraphSize( NS_GetDrawScreen(), &windowWidth, &windowHeight ) ; - projection->Scale( Model->ExRateX, Model->ExRateY * ( ( float )windowWidth / ( float )windowHeight ) ) ; - if( Model->PosX != 0.0f || Model->PosY != 0.0f ) + if( LIVE2DSYS.NotUseAutoScaling ) { - projection->Translate( Model->PosX / windowWidth * 2.0f, Model->PosY / windowHeight * 2.0f ) ; + projection->Scale( + Model->ExRateX * PixelsPerUnit / ( float )windowWidth * 2.0f, + Model->ExRateY * PixelsPerUnit / ( float )windowWidth * 2.0f * ( ( float )windowWidth / ( float )windowHeight ) + ) ; } - if( Model->RotAngle != 0.0f ) + else { - projection->RotateRelative( -Model->RotAngle ) ; + projection->Scale( Model->ExRateX, Model->ExRateY * ( ( float )windowWidth / ( float )windowHeight ) ) ; } + if( LIVE2DSYS.NotUseAutoCentering ) + { + if( LIVE2DSYS.NotUseReverseYAxis ) + { + projection->Translate( + ( Model->PosX - ( windowWidth - SizeInPixels.X ) / 2.0f ) / windowWidth * 2.0f , + -( Model->PosY - ( windowHeight - SizeInPixels.Y ) / 2.0f ) / windowHeight * 2.0f + ) ; + } + else + { + projection->Translate( + ( Model->PosX - ( windowWidth - SizeInPixels.X ) / 2.0f ) / windowWidth * 2.0f , + ( Model->PosY - ( windowHeight - SizeInPixels.Y ) / 2.0f ) / windowHeight * 2.0f + ) ; + } + } + else + { + if( LIVE2DSYS.NotUseReverseYAxis ) + { + projection->Translate( Model->PosX / windowWidth * 2.0f, -Model->PosY / windowHeight * 2.0f ) ; + } + else + { + projection->Translate( Model->PosX / windowWidth * 2.0f, Model->PosY / windowHeight * 2.0f ) ; + } + } + + projection->RotateRelative( -Model->RotAngle ) ; + // 描画 - Model->AppModel->Draw( *projection ); + Model->AppModel->Draw( *projection, LIVE2DSYS.NotUseAutoScaling == FALSE ) ; delete_D_CubismMatrix44( projection ) ; + // 描画に使用しているモデルハンドルをリセット + LIVE2DSYS.NowDrawLive2DModelHandle = 0 ; + // 正常終了 return 0 ; } @@ -753,10 +858,34 @@ extern int Live2D_Model_StartMotion_WCHAR_T( int Live2DModelHandle, const wchar_ Result = Model->AppModel->StartMotion( UsegroupBuffer, no, D_CubismMotion_PriorityForce ) ; WCHAR_T_TO_CHAR_STRING_END( group ) + if( Result != InvalidMotionQueueEntryHandleValue ) + { + Model->LastPlayMotionNo = no ; + } + else + { + Model->LastPlayMotionNo = -1 ; + } + // 終了 return Result == InvalidMotionQueueEntryHandleValue ? -1 : 0 ; } +// Live2D のモデルで最後に再生したモーションのグループ内の番号を取得する +extern int NS_Live2D_Model_GetLastPlayMotionNo( int Live2DModelHandle ) +{ + LIVE2DCUBISM4MODEL * Model ; + + // エラー判定 + if( LIVE2DCUBISM4MODELCHK( Live2DModelHandle, Model ) ) + { + return -1 ; + } + + // 最後に再生したモーション番号を取得する + return Model->LastPlayMotionNo ; +} + // Live2D のモデルのモーション再生が終了しているかを取得する extern int NS_Live2D_Model_IsMotionFinished( int Live2DModelHandle ) { @@ -770,6 +899,18 @@ extern int NS_Live2D_Model_IsMotionFinished( int Live2DModelHandle ) return Model->AppModel->_motionManager->IsFinished() ? TRUE : FALSE ; } +// Live2D のモデルのモーション再生時間を取得する +extern float NS_Live2D_Model_GetMotionPlayTime( int Live2DModelHandle ) +{ + LIVE2DCUBISM4MODEL * Model ; + + // エラー判定 + if( LIVE2DCUBISM4MODELCHK( Live2DModelHandle, Model ) ) + return -1 ; + + return Model->AppModel->_motionManager->GetMotionPlayTime() ; +} + // Live2D のモデルの指定の表情モーションをセットする extern int NS_Live2D_Model_SetExpression( int Live2DModelHandle, const TCHAR *expressionID ) { @@ -1561,6 +1702,39 @@ extern const TCHAR *NS_Live2D_Model_GetLipSyncParameterId( int Live2DModelHandle #endif } +// Live2D のモデルのキャンバスの横幅を取得する +extern float NS_Live2D_Model_GetCanvasWidth( int Live2DModelHandle ) +{ + LIVE2DCUBISM4MODEL * Model ; + D_CubismVector2 SizeInPixels ; + D_CubismVector2 OriginInPixels ; + float PixelsPerUnit ; + + // エラー判定 + if( LIVE2DCUBISM4MODELCHK( Live2DModelHandle, Model ) ) + return -1.0f ; + + Model->AppModel->_model->GetCanvasInfo( &SizeInPixels, &OriginInPixels, &PixelsPerUnit ) ; + + return SizeInPixels.X ; +} + +// Live2D のモデルのキャンバスの縦幅を取得する +extern float NS_Live2D_Model_GetCanvasHeight( int Live2DModelHandle ) +{ + LIVE2DCUBISM4MODEL * Model ; + D_CubismVector2 SizeInPixels ; + D_CubismVector2 OriginInPixels ; + float PixelsPerUnit ; + + // エラー判定 + if( LIVE2DCUBISM4MODELCHK( Live2DModelHandle, Model ) ) + return -1.0f ; + + Model->AppModel->_model->GetCanvasInfo( &SizeInPixels, &OriginInPixels, &PixelsPerUnit ) ; + + return SizeInPixels.Y ; +} diff --git a/DxLive2DCubism4.h b/DxLive2DCubism4.h index 4d52828..4dd4338 100644 --- a/DxLive2DCubism4.h +++ b/DxLive2DCubism4.h @@ -2,7 +2,7 @@ // // DXライブラリ Live2D Cubism4 関係プログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -145,12 +145,14 @@ struct LIVE2DCUBISM4MODEL { HANDLEINFO HandleInfo ; // ハンドル共通データ - float PosX ; + float PosX ; // トランスレーションパラメータ float PosY ; float ExRateX ; float ExRateY ; float RotAngle ; + int LastPlayMotionNo ; // 最後に再生したモーションのグループ内の番号 + D_LAppModel * AppModel ; } ; @@ -239,18 +241,29 @@ struct LIVE2DCUBISM4DLL // Live2D Cubism4 システム用データ構造体 struct LIVE2DCUBISM4SYSTEMDATA { - int InitializeFlag ; // 初期化フラグ + int InitializeFlag ; // 初期化フラグ - int EnableConstantBuffer ; // コンスタントバッファが使用できるかどうか + int EnableConstantBuffer ; // コンスタントバッファが使用できるかどうか - SCREENDRAWSETTINGINFO ScreenDrawSettingInfo ; // Live2D描画開始前の描画設定 + SCREENDRAWSETTINGINFO ScreenDrawSettingInfo ; // Live2D描画開始前の描画設定 D_CubismIdManager * s_cubismIdManager ; - DXARC ShaderBinDxa ; // シェーダーオブジェクトファイルDXA構造体 - void *ShaderBinDxaImage ; // シェーダーオブジェクトファイルDXAのバイナリイメージ + DXARC ShaderBinDxa ; // シェーダーオブジェクトファイルDXA構造体 + void *ShaderBinDxaImage ; // シェーダーオブジェクトファイルDXAのバイナリイメージ + + int NowDrawLive2DModelHandle ; // 現在描画を行っている Live2Dモデルのハンドル + + int UserShader[ DX_LIVE2D_SHADER_NUM ] ; // ユーザーシェーダー + + void ( *DrawUserCallback )( int Live2DModelHandle, int TextureIndex, void *UserData ) ; // 描画の前に呼ぶコールバック関数 + void *DrawUserCallbackData ; // 描画の前に呼ぶコールバック関数に渡すアドレス + + int NotUseAutoScaling ; // 画面サイズに応じた自動スケーリングを行なわないかどうか( TRUE:行なわない FALSE:行う ) + int NotUseAutoCentering ; // 自動で画面の中心に描画するかどうか( TRUE:画面の中心に描画しない FALSE:画面の中心に描画する ) + int NotUseReverseYAxis ; // Live2D_Model_SetTranslate で指定する平行移動値の y の向きを反転しないかどうか( TRUE:反転しない FALSE:反転する ) - LIVE2DCUBISM4SYSTEMDATA_PF PF ; // 環境依存データ + LIVE2DCUBISM4SYSTEMDATA_PF PF ; // 環境依存データ } ; // テーブル----------------------------------------------------------------------- diff --git a/DxLog.cpp b/DxLog.cpp index 22acada..6554e11 100644 --- a/DxLog.cpp +++ b/DxLog.cpp @@ -2,7 +2,7 @@ // // DXライブラリ ログプログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -166,7 +166,7 @@ extern int LogFileInitialize( void ) } // ログファイル( Log.txt ) に文字列を出力する -extern int LogFileAdd_WCHAR_T( int ErrorCode/* DX_ERRORCODE_WIN_24BIT_COLOR など*/, const wchar_t *String ) +extern int LogFileAdd_WCHAR_T( int IsSystem, int ErrorCode/* DX_ERRORCODE_WIN_24BIT_COLOR など*/, const wchar_t *String ) { wchar_t LogFilePath[ FILEPATH_MAX ] ; wchar_t * UseBuffer ; @@ -186,6 +186,12 @@ extern int LogFileInitialize( void ) return ErrorCode != 0 ? -1 : 0 ; } + // DXライブラリ内部のログ出力で、且つシステムのログは出力しないフラグが立っていたら何もせずに終了 + if( IsSystem == TRUE && LogData.NotSystemLogOutFlag == TRUE ) + { + return ErrorCode != 0 ? -1 : 0 ; + } + // 初期化されていなかったら初期化する if( LogData.InitializeFlag == FALSE ) { @@ -258,7 +264,7 @@ extern int LogFileInitialize( void ) _WCSCPY( Dest, p1 ) ; } - // 最後の文字が改行意外だった場合はタブストップフラグを立てる + // 最後の文字が改行以外だった場合はタブストップフラグを立てる LogData.LogFileTabStop = UseBuffer[ _WCSLEN( UseBuffer ) - 1 ] != L'\n' ? TRUE : FALSE ; // ログファイルのパスを作成 @@ -302,7 +308,7 @@ extern int LogFileAddA( const char *String ) SHIFT_JIS_TO_WCHAR_T_STRING_ONE_BEGIN( String, return -1 ) ; - Result = LogFileAdd_WCHAR_T( 0, UseStringBuffer ) ; + Result = LogFileAdd_WCHAR_T( TRUE, 0, UseStringBuffer ) ; SHIFT_JIS_TO_WCHAR_T_STRING_END( String ) ; @@ -313,7 +319,7 @@ extern int LogFileAddA( const char *String ) CHAR_TO_WCHAR_T_STRING_BEGIN( String ) CHAR_TO_WCHAR_T_STRING_SETUP( String, return -1, DX_CHARCODEFORMAT_SHIFTJIS ) ; - Result = LogFileAdd_WCHAR_T( 0, UseStringBuffer ) ; + Result = LogFileAdd_WCHAR_T( TRUE, 0, UseStringBuffer ) ; CHAR_TO_WCHAR_T_STRING_END( String ) ; @@ -324,7 +330,7 @@ extern int LogFileAddA( const char *String ) // ログファイルに文字列を書き出す( wchar_t版 ) extern int LogFileAddW( const wchar_t *String ) { - return LogFileAdd_WCHAR_T( 0, String ) ; + return LogFileAdd_WCHAR_T( TRUE, 0, String ) ; } // ログファイルに文字列を書き出す( UTF16LE版 ) @@ -335,7 +341,7 @@ extern int LogFileAddUTF16LE( const char *String ) CHAR_TO_WCHAR_T_STRING_BEGIN( String ) CHAR_TO_WCHAR_T_STRING_SETUP( String, return -1, DX_CHARCODEFORMAT_UTF16LE ) ; - Result = LogFileAdd_WCHAR_T( 0, UseStringBuffer ) ; + Result = LogFileAdd_WCHAR_T( TRUE, 0, UseStringBuffer ) ; CHAR_TO_WCHAR_T_STRING_END( String ) ; @@ -426,7 +432,7 @@ extern int LogFileFmtAddUTF16LE( const char *FormatString , ... ) SHIFT_JIS_TO_WCHAR_T_STRING_ONE_BEGIN( String, return -1 ) ; - Result = LogFileAdd_WCHAR_T( ErrorCode, UseStringBuffer ) ; + Result = LogFileAdd_WCHAR_T( TRUE, ErrorCode, UseStringBuffer ) ; SHIFT_JIS_TO_WCHAR_T_STRING_END( String ) ; @@ -437,7 +443,7 @@ extern int LogFileFmtAddUTF16LE( const char *FormatString , ... ) CHAR_TO_WCHAR_T_STRING_BEGIN( String ) CHAR_TO_WCHAR_T_STRING_SETUP( String, return -1, DX_CHARCODEFORMAT_SHIFTJIS ) ; - Result = LogFileAdd_WCHAR_T( ErrorCode, UseStringBuffer ) ; + Result = LogFileAdd_WCHAR_T( TRUE, ErrorCode, UseStringBuffer ) ; CHAR_TO_WCHAR_T_STRING_END( String ) ; @@ -448,7 +454,7 @@ extern int LogFileFmtAddUTF16LE( const char *FormatString , ... ) // ログファイルに文字列を書き出す、エラーコード設定つき( wchar_t版 ) extern int LogFileAddWithErrorCode_W( int ErrorCode/* DX_ERRORCODE_WIN_24BIT_COLOR など*/, const wchar_t *String ) { - return LogFileAdd_WCHAR_T( ErrorCode, String ) ; + return LogFileAdd_WCHAR_T( TRUE, ErrorCode, String ) ; } // ログファイルに文字列を書き出す、エラーコード設定つき( UTF16LE版 ) @@ -459,7 +465,7 @@ extern int LogFileFmtAddUTF16LE( const char *FormatString , ... ) CHAR_TO_WCHAR_T_STRING_BEGIN( String ) CHAR_TO_WCHAR_T_STRING_SETUP( String, return -1, DX_CHARCODEFORMAT_UTF16LE ) ; - Result = LogFileAdd_WCHAR_T( ErrorCode, UseStringBuffer ) ; + Result = LogFileAdd_WCHAR_T( TRUE, ErrorCode, UseStringBuffer ) ; CHAR_TO_WCHAR_T_STRING_END( String ) ; @@ -559,13 +565,13 @@ extern int NS_ErrorLogAdd( const TCHAR *String ) extern int NS_LogFileAdd( const TCHAR *String ) { #ifdef UNICODE - return LogFileAdd_WCHAR_T( 0, String ) ; + return LogFileAdd_WCHAR_T( FALSE, 0, String ) ; #else int Result ; TCHAR_TO_WCHAR_T_STRING_ONE_BEGIN( String, return -1 ) ; - Result = LogFileAdd_WCHAR_T( 0, UseStringBuffer ) ; + Result = LogFileAdd_WCHAR_T( FALSE, 0, UseStringBuffer ) ; TCHAR_TO_WCHAR_T_STRING_END( String ) @@ -579,11 +585,11 @@ extern int NS_LogFileAddWithStrLen( const TCHAR *String, size_t StringLength ) int Result ; #ifdef UNICODE WCHAR_T_STRING_WITH_STRLEN_TO_WCHAR_T_STRING_ONE_BEGIN( String, StringLength, return -1 ) - Result = LogFileAdd_WCHAR_T( 0, UseStringBuffer ) ; + Result = LogFileAdd_WCHAR_T( FALSE, 0, UseStringBuffer ) ; WCHAR_T_STRING_WITH_STRLEN_TO_WCHAR_T_STRING_END( String ) #else TCHAR_STRING_WITH_STRLEN_TO_WCHAR_T_STRING_ONE_BEGIN( String, StringLength, return -1 ) - Result = LogFileAdd_WCHAR_T( 0, UseStringBuffer ) ; + Result = LogFileAdd_WCHAR_T( FALSE, 0, UseStringBuffer ) ; TCHAR_STRING_WITH_STRLEN_TO_WCHAR_T_STRING_END( String ) #endif return Result ; @@ -620,7 +626,7 @@ extern int NS_LogFileFmtAdd( const TCHAR *FormatString , ... ) } // 書式付きで ログファイル( Log.txt ) に文字列を出力する( 書式は printf と同じ ) -extern int LogFileFmt_WCHAR_T( int ErrorCode/* DX_ERRORCODE_WIN_24BIT_COLOR など*/, const wchar_t *FormatString , ... ) +extern int LogFileFmtAdd_WCHAR_T( int IsSystem, int ErrorCode/* DX_ERRORCODE_WIN_24BIT_COLOR など*/, const wchar_t *FormatString , ... ) { int Result ; @@ -630,7 +636,7 @@ extern int NS_LogFileFmtAdd( const TCHAR *FormatString , ... ) _WCSCAT_S( String, sizeof( String ), L"\n" ) ; // ログ出力する - Result = LogFileAdd_WCHAR_T( ErrorCode, String ) ; + Result = LogFileAdd_WCHAR_T( IsSystem, ErrorCode, String ) ; return Result ; } @@ -720,6 +726,16 @@ extern int NS_SetOutApplicationLogValidFlag( int Flag ) return 0 ; } +// ログファイル( Log.txt ) にDXライブラリ内部のログ出力を行うかどうか設定する( TRUE:DXライブラリ内部のログ出力を行う( デフォルト ) FALSE:DXライブラリ内部のログ出力を行わない ) +extern int NS_SetOutApplicationSystemLogValidFlag( int Flag ) +{ + // フラグを保存 + LogData.NotSystemLogOutFlag = !Flag ; + + // 終了 + return 0 ; +} + // ログファイルを保存するディレクトリパスを設定する extern int NS_SetApplicationLogSaveDirectory( const TCHAR *DirectoryPath ) { @@ -862,6 +878,8 @@ extern int AppLogAdd_VaList( const TCHAR *String, va_list VaList ) return NS_ErrorLogAdd( StringBuf ) ; } +#ifndef DX_NON_PRINTF_DX + // printf と同じ引数で画面に文字列を表示するための関数 extern int printfDx_VaList( const TCHAR *FormatString, va_list VaList ) { @@ -883,6 +901,7 @@ extern int printfDx_VaList( const TCHAR *FormatString, va_list VaList ) return Result ; } +#endif // DX_NON_PRINTF_DX @@ -1027,7 +1046,8 @@ static int CrLog( void ) // 外れる場合は一行分データを全て上げる // 文字列を1行分ずらす - _MEMMOVE( LogData.LogString[0], LogData.LogString[1], sizeof( wchar_t ) * LOG_MAXLENGTH * LogData.LogY ) ; + _MEMMOVE( LogData.LogString[0], LogData.LogString[1], sizeof( wchar_t ) * LOG_MAXLENGTH * LogData.LogY ) ; + _MEMMOVE( LogData.LogStringColor[0], LogData.LogStringColor[1], ( sizeof( int ) * 2 ) * LOG_MAXLENGTH * LogData.LogY ) ; } else { @@ -1036,7 +1056,8 @@ static int CrLog( void ) } // 新しい行の文字列を初期化する - _MEMSET( LogData.LogString[ LogData.LogY ], 0, sizeof( wchar_t ) * LOG_MAXLENGTH ) ; + _MEMSET( LogData.LogString[ LogData.LogY ], 0, sizeof( wchar_t ) * LOG_MAXLENGTH ) ; + _MEMSET( LogData.LogStringColor[ LogData.LogY ], 0, ( sizeof( int ) * 2 ) * LOG_MAXLENGTH ) ; // 描画幅を初期化 LogData.LogDrawWidth = 0 ; diff --git a/DxLog.h b/DxLog.h index d5a45a9..ecec36f 100644 --- a/DxLog.h +++ b/DxLog.h @@ -2,7 +2,7 @@ // // DXライブラリ ログプログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -105,6 +105,7 @@ struct LOGDATA int NonUseTimeStampFlag ; // タイムスタンプを出力しないかどうかのフラグ int NotLogOutFlag ; // ログ出力を行うかフラグ(TRUEで行わない) + int NotSystemLogOutFlag ; // DXライブラリ内部のログ出力を行うかフラグ(TRUEで行わない) int LogStartTime ; // 起動時のタイムスタンプ wchar_t UserLogFileName[ 256 ] ; // SetApplicationLogFileName で設定されたログファイル名 wchar_t LogOutDirectory[ FILEPATH_MAX ] ; // ログ出力を行うファイルを保存するディレクトリ @@ -161,8 +162,8 @@ extern LOGDATA LogData ; extern int LogFileFmtAddWithErrorCode_UTF16LE( int ErrorCode/* DX_ERRORCODE_WIN_24BIT_COLOR など*/, const char *FormatString , ... ) ; // ログファイルに書式付き文字列を書き出す、エラーコード設定つき( UTF16LE版 ) // wchar_t版関数 -extern int LogFileAdd_WCHAR_T( int ErrorCode/* DX_ERRORCODE_WIN_24BIT_COLOR など*/, const wchar_t *ErrorStr ) ; // ログファイル( Log.txt ) に文字列を出力する -extern int LogFileFmtAdd_WCHAR_T( int ErrorCode/* DX_ERRORCODE_WIN_24BIT_COLOR など*/, const wchar_t *FormatString , ... ) ; // 書式付きで ログファイル( Log.txt ) に文字列を出力する( 書式は printf と同じ ) +extern int LogFileAdd_WCHAR_T( int IsSystem, int ErrorCode/* DX_ERRORCODE_WIN_24BIT_COLOR など*/, const wchar_t *ErrorStr ) ; // ログファイル( Log.txt ) に文字列を出力する +extern int LogFileFmtAdd_WCHAR_T( int IsSystem, int ErrorCode/* DX_ERRORCODE_WIN_24BIT_COLOR など*/, const wchar_t *FormatString , ... ) ; // 書式付きで ログファイル( Log.txt ) に文字列を出力する( 書式は printf と同じ ) extern int SetApplicationLogSaveDirectory_WCHAR_T( const wchar_t *DirectoryPath ); // ログファイル( Log.txt ) を保存するディレクトリパスを設定する extern int SetApplicationLogFileName_WCHAR_T( const wchar_t *FileName ) ; // ログファイルの名前を設定する( Log.txt 以外にしたい場合に使用 ) diff --git a/DxLog.txt b/DxLog.txt index 9e507f7..11f4cef 100644 --- a/DxLog.txt +++ b/DxLog.txt @@ -3,9 +3,250 @@ // DXライブラリ 非公式ログ // // Creator : 山田 巧 -// Last Access : 2021/11/23 +// Last Access : 2023/2/24 // ============================================================================ +Ver 3.24b  正式公開のためにバージョン番号を変更。 +Ver 3.24a  DxLibModelViewer.exe の実行時に Log.txt が作成されるように + 仕様を変更。 +  Windows版:SetEnableASIOFlag( TRUE ) ; を実行して ASIO の + 使用を指定した場合で ASIO の初期化に失敗した場合は次に + WASAPI の使用を試みるように処理を変更。 +  一部のタイプのハンドルの情報を Log.txt にダンプ出力する関数 + DumpHandleInfo を追加。 +  ゲームパッドのデフォルトのデッドゾーンを設定するための関数 + SetJoypadDefaultDeadZoneAll を追加。 +  関数 LoadDivGraph 等の分割読み込み系の関数で引数から算出される + 合計サイズが分割元画像のサイズよりも大きい場合に関数をエラー終了 + させるかどうかを設定するための関数 SetUseLoadDivGraphSizeCheckFlag + を追加。 +  Windows版:接続されているモニターのログ出力で、出力される + 解像度が正しくないことがあるバグを修正。 +  ConvertStringCharCodeFormat で、変換元の文字列に + 変換先の文字コードフォーマットに存在しない文字が含まれていた場合、 + 変換後の文字列が『存在しない文字』の箇所で終わってしまうバグを修正。 +  KeyInputString などで入力中の文字列に使用中の文字コード + フォーマットに存在しない文字が含まれていた場合、GetIMEInputData で + 取得できる文節情報が正常な値ではなくなるバグを修正。 +  Windows版:指定のウィンドウの画像を取得するための関数 + GetOtherWindowGraph を追加。 +  Windows版:Direct3D 11 Device の作成時に + D3D11_CREATE_DEVICE_BGRA_SUPPORT を指定するかを設定するための + 関数 SetUseDirect3D11BGRASupport を追加。 +  SetUsePremulAlphaConvertLoad と SetUseConvertNormalFormatLoad の + 設定されている値を取得するための関数 + GetUsePremulAlphaConvertLoad と GetUseConvertNormalFormatLoad を追加。 +  LoadGraph などで作成するグラフィックハンドルに割り当てる + グラフィックハンドル値を設定するための関数 SetCreateGraphHandle を追加。 + ( LoadDivGraph などの分割画像用として SetCreateDivGraphHandle も追加 ) +  フォントが使用するグラフィックハンドルは InitGraph では + 削除されないように処理を変更。 +  Windows版:WIC( Windows Imaging Component ) による画像の + 読み込み処理を追加。 +  DXライブラリ内部のログ出力を行うかどうかを設定するための + 関数 SetOutApplicationSystemLogValidFlag を追加。 +  Windows版:マウスポインターの表示状態についてメニューの表示状態の + 影響を受けるかを設定するための関数 SetMouseDispIgnoreMenuFlag を追加。 +  パレット付きの pngファイルを読み込むとメモリの不正なアクセスが + 発生してしまうことがあるバグを修正。 +  DXArchivePreLoad で事前に読み込んだ DXAファイルを + DXArchiveRelease で明示的に解放しなくても DxLib_End 実行時に + 自動的に解放されるように処理を変更。 +  指定のファイルハンドルのファイルのサイズを取得する為の関数 + FileRead_size_handle を追加。 +  strchrDx, strrchrDx が正常に動作しないことがあるバグを修正。 +  文字列の描画で縁のみ、又は本体のみ描画を行うかどうかを設定する + ための関数 SetFontOnlyDrawType を追加。 +  DrawModiString で正常な描画が行われないことがあるバグを修正。 +  Windows版:MinGW 12.2.0 x86_64_release_win32_seh_ucrt_rt_v10_rev2 用の + ライブラリファイルを追加。 +  Windows版:SetUseUpdateLayerdWindowFlag( TRUE ); や + SetUseBackBufferTransColorFlag( TRUE ); を使用して透過ウィンドウで + 実行している際にマウスのイベントが後ろのウィンドウに透過するかを + 設定するための関数 SetUseMouseEventTransparentWindowFlag を追加。 +  DrawPolygonIndexed3D などの頂点インデックス付きポリゴン描画関数の + 頂点インデックスの型が unsigned int となっている + DrawPolygon32bitIndexed3D などを追加。 +  MV1LoadTexture を非同期読み込みに対応。 +  Windows版:DxDataTypeWin.h から ULONG_PTR の定義を削除。 +  printfDx で \n で改行を行いスクロールすると、文字が指定以外の + 色になる( 主に黒になる )バグを修正。 +  右手座標系用のクリッピング処理を行うかどうかを設定するための + 関数 SetUseRightHandClippingProcess を追加。 +  Android版:AndroidStudio用のライブラリファイルを追加。 +Ver 3.24  Windows版:DxLib_Init 実行後でも SetFullScreenResolutionMode + によるフルスクリーン解像度モードの変更ができるように仕様を変更。 +  Windows版:サウンド再生に使用する ASIOドライバーの番号を + 設定するための関数 SetUseASIODriverIndex を追加。 +  関数 DrawRectGraph を実行すると描画範囲が変更されてしまう + 事があるバグを修正。 +  Windows版:DxLib_Init の呼び出し前に SetGraphMode で + 画面解像度を設定しなかった場合、DxLib_Init の中で0除算エラーが + 発生してしまうバグを修正。 +  DxLibModelViewer.exe で fbx読み込みエラーが発生した際の + ログ出力内容を追加。 +Ver 3.23f  正式公開のためにバージョン番号を変更。 +Ver 3.23e  DrawChipMap2 が正常に動作しないバグを修正。 +  DX_LIB_LITEVER を有効にするとコンパイルエラーが発生して + ビルドが失敗するバグを修正。 +  Windows版:SetAlwaysRunFlag( TRUE ) ; を実行してウィンドウが + 非アクティブでも動作する設定にしていた場合は、StartJoypadVibration で + 開始したゲームパッドの振動もウィンドウが非アクティブになっても + 止まらないように仕様を変更。 +  Windows版:SetUseDirectInputFlag( FALSE ) ; を実行した場合 + XInput も無効になっていたバグを修正。 +  フレーム単位のアニメーション再生時間を設定するための関数 + MV1SetAttachAnimTimeToFrame を追加。 +  Live2Dモデルの最後に再生したモーションの番号を取得するための + 関数 Live2D_Model_GetLastPlayMotionNo を追加。 +  Live2Dモデルの再生中のモーションの再生時間を取得するための + 関数 Live2D_Model_GetMotionPlayTime を追加。 +  Android版:アプリの ANativeWindow を取得するための関数 + GetNativeWindow を追加。 +  DxLibModelViewer のマテリアル調整機能にアルファテストの項目を + 追加。 +  Android版:アプリの入力イベントが発生した際に呼ばれるコールバック + 関数を登録するための関数 SetAndroidInputEventFookFunction を追加。 +  Windows版:SetFullScreenResolutionMode で指定できるフルスクリーン + 解像度モードに仮想フルスクリーンモードである + DX_FSRESOLUTIONMODE_BORDERLESS_WINDOW を追加。 +  Windows版:デフォルトのフルスクリーン解像度モードを + DX_FSRESOLUTIONMODE_DESKTOP から + DX_FSRESOLUTIONMODE_BORDERLESS_WINDOW に変更。 +  Windows版:SetFullScreenResolutionMode で + DX_FSRESOLUTIONMODE_MAXIMUM や DX_FSRESOLUTIONMODE_DESKTOP を + 指定した場合正常に動作しなかったバグを修正。 +  Windows版:MinGW 8.1.0 x86_64_posix_sjis_rt_v6_rev0 用の + ライブラリファイルを追加。 +  ブレンドパラメータを詳細に設定できる関数 + SetDrawCustomBlendMode を追加。 +  フォントハンドルの最大数を 40 から 256 に変更。 +Ver 3.23d  正式公開のためにバージョン番号を変更。 +Ver 3.23c  pngファイルの読み込みを高速化。 +  4の倍数ではないサイズの DXT圧縮ファイルが正常に読み込まれない + 事があるバグを修正。 +  MME の waveOut を使用してサウンド出力を行うかどうかを設定する + 為の関数 SetEnableMMEwaveOutFlag を追加。 +  画像読み込み時に DXT圧縮されている画像ファイルをRGBA等の非圧縮 + 画像形式に変換するかどうかを設定するための関数 + SetUseConvertNormalFormatLoad を追加。 +  LoadSoftImage 等のCPUで扱うイメージの読み込み関数を + SetUseASyncLoad( TRUE ) ; を実行して非同期読み込みを行った際に、 + SetUsePremulAlphaConvertLoad 関数などの設定が反映されない + 事があるバグを修正。 +  CreateMaskScreen でマスクを有効にしていると DrawString で文字を + 描画した際に文字の下側が描画されないことがあるバグを修正。 +  DrawFormatString 等の書式指定文字列描画に縁の色を指定する引数 + EdgeColor を追加した DrawFormatString2 等の関数を追加。 +  DrawKeyInputString の拡大率を指定する引数を追加した + DrawKeyInputExtendString を追加。 +  iOS版で内部関数 MemoryProcess が呼ばれていなかったバグを修正。 +  DrawBoxSet の iOS版用の処理にバグがあったのを修正。 +  Windows版:GetJoypadType で取得できるパッドタイプに + DX_PADTYPE_DUAL_SHOCK_3 を追加。 +  入力システムを再初期化する関数 ReSetupInputSystem を追加。 +  Windows版:Live2D で使用するシェーダーハンドルを設定するための + 関数 Live2D_SetUserShader を追加。 +  Live2D の描画の前に呼ばれるコールバック関数を設定するための + 関数 Live2D_DrawCallback を追加。 +  Windows版:Direct3D 9 を使用している場合、Live2D の描画を + 行った後に GraphFilter が正常に動作しないことがあるバグを修正。 +  Windows版:MinGW 12.1.0 i686_release_posix_dwarf_rt_v10_rev3 用の + ライブラリファイルを追加。 +  DrawString や DrawExtendString などのフォントハンドルの指定の + 無い文字列描画系の関数で使用されるフォントハンドルを指定するための + 関数 ChangeFontFromHandle を追加。 +  Windows版:出力先のオーディオデバイスが1チャンネルだった場合に + メモリの不正なアクセスエラーが発生してしまうバグを修正。 +  Windows版:WASAPI のサウンドシステム終了処理の際にメモリの + 不正なアクセスが発生していたバグを修正。 +  Live2D の自動センタリング処理を行うかを設定するための関数 + Live2D_SetUseAutoCentering を追加。 +  Live2D の自動スケーリング処理を行うかを設定するための関数 + Live2D_SetUseAutoScaling を追加。 +  Live2D_Model_SetTranslate で指定する y の移動方向を反転するかを + 設定するための関数 Live2D_SetUseReverseYAxis を追加。 +  Live2Dモデルのキャンバスサイズを取得するための関数 + Live2D_Model_GetCanvasWidth と Live2D_Model_GetCanvasHeight を追加。 +  Windows版:Direct3D 11 を使用してウィンドウモードで起動した際に + 初期化でエラーが発生して Direct3D 9 を使用するようになってしまう + 事がある不具合に対応。 +  Windows版:VRAMの容量を 64bitの値で取得するための関数 + GetVideoMemorySizeEx を追加。 +  PMD, PMX ファイル読み込み時にIKを無効化するかどうかを設定する + ための関数 MV1SetLoadModelIgnoreIK を追加。 +  LoadDivGraph 等の分割読み込み系の関数の引数 XNum と YNum を + 乗算した値が AllNum 未満の場合はエラーになるように処理を追加。 +Ver 3.23b  正式公開のためにバージョン番号を変更。 +Ver 3.23a  SetCreateSoundIgnoreLoopAreaInfo( TRUE ) ; を実行していても + ループ範囲情報テキストファイルが適用されてしまっていたバグを修正。 +  Windows版:Log.txt の文字コード形式を UTF-8 に固定。 +  矩形を大量に描画するための関数 DrawBoxSet を追加。 +  fbxファイルのバンプマップ付きのマテリアルが正常に読み込めなかった + バグを修正。 +  iOS版:ストリームサウンド処理用スレッドとサウンドバッファ再生処理用 + スレッドが使用するスレッド終了指示確認用変数が誤っていたバグを修正。( 修正コード提供:draさん ) +  iOS版:ALリソース解放処理の毎フレーム行う処理を行う関数内で + 関数終了時にクリティカルセクションが解放されない事があるバグを修正。( 修正コード提供:draさん ) +  DxHandle.h 内の #endif に不要な識別子の記述があったのを修正。( 修正コード提供:draさん ) +  DxUseCLib.cpp で jinclude.h をインクルードしなくても済むように + コードを変更。( 変更コード提供:draさん ) +  Windows版:ソフトウェアレンダリングモード時にウィンドウを + 最大化してゲーム画面よりもウィンドウのクライアント領域が大きく + なった際に、クライアント領域の左上側にゲーム画面が寄ってしまうバグを修正。 +  Windows版:Direct3D 9 を使用した場合、乗算済みαの描画処理が + 正常に行われないバグを修正。 +  Android版:ファイルをフルパス指定した場合に読み込みに失敗するバグを修正。 +  指定のタイプのハンドルの数を取得するための関数 GetHandleNum を追加。 +  指定のタイプのハンドルの作成可能最大数を取得するための関数 GetMaxHandleNum を追加。 +  Android版:ペンタブレットの入力を取得するために TOUCHINPUTPOINT構造体に + メンバー変数 Pressure や ToolType 等を追加。 +  Android版:ペンタブレットとマウスを接続すると、マウスのボタン + 入力が取得できないことがあるバグを修正。 +  Windows版:タグに画像が含まれる mp3 ファイルを再生すると + 再生開始位置がズレてしまうバグを修正。 +  Windows版:EDGE で出力したAVIファイルをフルスクリーンモードで + 再生しようとするとエラーになるバグを修正。 +  GraphBlendRectBlt にブレンド画像の右下座標も指定する為の引数を追加した + GraphBlendRectBlt2 を追加。 +  Windows版:MinGW 10.3.0 用のライブラリファイルを追加。 +  Windows版:MinGW 12.1.0 用のライブラリファイルを追加。 +  Windows版:GetDragFilePath で取得できるファイルパスの順番が + ドラッグ&ドロップしたファイルの順番と逆になっていたバグを修正。 +  ライティング計算でライトや法線の方向を元にした角度減衰を行うか + を設定するための関数 SetUseLightAngleAttenuation を追加。 +  Android版:Android Studio のブレーク機能などで一時停止したあと + 再開すると音の再生が止まってしまう事がある不具合を修正。 +  Windows版:SetWindowVisibleFlag( FALSE ); を実行してウィンドウを + 非表示にしていても SetGraphMode を使用するとウィンドウが表示されて + しまうバグを修正。 +  BC7フォーマットのDDSファイルを SetUsePremulAlphaConvertLoad( TRUE ); の + 設定で読み込んだ場合にエラーになっていなかったバグを修正。 +  Android版:GraphBlend や GraphFilter を使用した後の描画が、強制的に + バイリニアフィルタリングになってしまう事があるバグを修正。 +  Android版:ディスプレイカットアウト情報を取得するための関数 + GetDisplayCutoutRectCount と GetDisplayCutoutRect を追加。 +  サウンドの再生中に SetSoundCurrentTime などで再生位置を変更すると + 音の再生が正常に行われなくなる事があるバグを修正。 +  Windows版:入力中のIME文字列を変更するための関数 SetIMEInputString を追加。 +  MV1LoadModel で読み込むモデルで使用するテクスチャファイルを読み込むかどうかを + 設定する関数 MV1SetLoadModelTextureLoad を追加。 +  使用する zlib のバージョンを 1.2.12 に変更。 +  使用する libpng のバージョンを 1.6.37 に変更。 +  Windows版:GetJoypadType で取得できるパッドタイプに + DX_PADTYPE_SWITCH_HORI_PAD を追加。 +  GraphBlend で GrHandle と BlendGrHandle のサイズが異なる場合に適用される + 拡大フィルターモードを設定する為の関数 SetGraphBlendScalingFilterMode を追加。 +  メルセンヌ・ツイスターアルゴリズムの乱数の生の値を取得するための関数 + GetMersenneTwisterRand と GetMersenneTwisterRandHandle を追加。 +  GetDrawStringSizeToHandle が引数 StrLen で指定した半角文字数より + 多くの文字の描画幅が取得できてしまっていたバグを修正。 +  CreateFontToHandle で縁に大きなサイズを指定した場合の縁の形を + 丸みを帯びたものになるように改善。 +  StopSoundMem に『次にループ範囲の終端まで再生したら音を止める + かどうか』を指定するための引数 IsNextLoopEnd を追加。 +  GetTouchInputDownLogNum と GetTouchInputUpLogNum が正常に動作していなかった + バグを修正。 Ver 3.23  正式公開のためにバージョン番号を変更。 Ver 3.22f  Windows版:DirectInput のジョイパッド初期化処理に関する詳細な ログを出力するように処理を変更。 diff --git a/DxMask.cpp b/DxMask.cpp index 04b18cc..79035e3 100644 --- a/DxMask.cpp +++ b/DxMask.cpp @@ -2,7 +2,7 @@ // // DXライブラリ マスクデータ管理プログラム // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- @@ -77,7 +77,7 @@ extern int Mask_Initialize( void ) return -1 ; // マスクハンドル管理データの初期化 - InitializeHandleManage( DX_HANDLETYPE_GMASK, sizeof( MASKDATA ), MAX_MASK_NUM, Mask_InitializeHandle, Mask_TerminateHandle, L"Mask" ) ; + InitializeHandleManage( DX_HANDLETYPE_GMASK, sizeof( MASKDATA ), MAX_MASK_NUM, Mask_InitializeHandle, Mask_TerminateHandle, NULL, L"Mask" ) ; // 初期化フラグを立てる MASKD.InitializeFlag = TRUE ; diff --git a/DxMask.h b/DxMask.h index 97e32f9..773ad3a 100644 --- a/DxMask.h +++ b/DxMask.h @@ -2,7 +2,7 @@ // // DXライブラリ マスク処理ヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxMath.cpp b/DxMath.cpp index 14a7a79..6415849 100644 --- a/DxMath.cpp +++ b/DxMath.cpp @@ -2,7 +2,7 @@ // // DXライブラリ 演算プログラム // -// Ver 3.23 +// Ver 3.24b // // ---------------------------------------------------------------------------- diff --git a/DxMath.h b/DxMath.h index 5a86ed2..7a1a81e 100644 --- a/DxMath.h +++ b/DxMath.h @@ -2,7 +2,7 @@ // // DXライブラリ 演算プログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxMemImg.cpp b/DxMemImg.cpp index 82ba93d..55a494f 100644 --- a/DxMemImg.cpp +++ b/DxMemImg.cpp @@ -2,7 +2,7 @@ // // DXライブラリ メモリイメージ制御用プログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxMemImg.h b/DxMemImg.h index 842440b..98e32ae 100644 --- a/DxMemImg.h +++ b/DxMemImg.h @@ -2,7 +2,7 @@ // // DXライブラリ メモリイメージ制御用ヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -3538,6 +3538,7 @@ extern void DrawTurnMemImg( MEMIMG *DestImg, const MEMIMG *SrcImg, int X extern void DrawLineBoxMemImg( MEMIMG *DestImg, int x1, int y1, int x2, int y2, unsigned int Color ) ; // イメージに枠だけのボックスを描画する extern void DrawPixelSetMemImg( MEMIMG *DestImg, const POINTDATA *PointData, int Num ) ; // イメージに点の集合を描画する extern void DrawLineSetMemImg( MEMIMG *DestImg, const LINEDATA *LineData, int Num ) ; // イメージに線の集合を描画する +extern void DrawBoxSetMemImg( MEMIMG *DestImg, const RECTDATA *RectData, int Num ) ; // イメージに矩形の集合を描画する extern void DrawCircleMemImg( MEMIMG *DestImg, int x, int y, int r, unsigned int Color, int FillFlag, int Rx_One_Minus = FALSE, int Ry_One_Minus = FALSE ) ; // イメージに円を描画する extern void DrawOvalMemImg( MEMIMG *DestImg, int x, int y, int rx, int ry, unsigned int Color, int FillFlag, int Rx_One_Minus = FALSE, int Ry_One_Minus = FALSE ) ; // イメージに楕円を描画する diff --git a/DxMemImgDrawFunction0.cpp b/DxMemImgDrawFunction0.cpp index b1c8596..1192ecd 100644 --- a/DxMemImgDrawFunction0.cpp +++ b/DxMemImgDrawFunction0.cpp @@ -2,7 +2,7 @@ // // DXライブラリ メモリイメージ制御用プログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxMemImgDrawFunction1.cpp b/DxMemImgDrawFunction1.cpp index 9eb9e32..80accfe 100644 --- a/DxMemImgDrawFunction1.cpp +++ b/DxMemImgDrawFunction1.cpp @@ -2,7 +2,7 @@ // // DXライブラリ メモリイメージ制御用プログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxMemImgDrawFunction2.cpp b/DxMemImgDrawFunction2.cpp index 8718940..2016def 100644 --- a/DxMemImgDrawFunction2.cpp +++ b/DxMemImgDrawFunction2.cpp @@ -2,7 +2,7 @@ // // DXライブラリ メモリイメージ制御用プログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxMemImgDrawFunction3.cpp b/DxMemImgDrawFunction3.cpp index a182c42..c1f66f7 100644 --- a/DxMemImgDrawFunction3.cpp +++ b/DxMemImgDrawFunction3.cpp @@ -2,7 +2,7 @@ // // DXライブラリ メモリイメージ制御用プログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -67,6 +67,11 @@ extern void DrawLineSetMemImg( MEMIMG *DestImg, const LINEDATA *LineData, int Nu return ; } +extern void DrawBoxSetMemImg( MEMIMG *DestImg, const RECTDATA *RectData, int Num ) +{ + return ; +} + extern void DrawPixelMemImg( MEMIMG *DestImg, int x, int y, unsigned int Color ) { return ; @@ -1130,6 +1135,21 @@ extern void DrawLineSetMemImg( MEMIMG *DestImg, const LINEDATA *LineData, int Nu } } +// イメージに矩形の集合を描画する +extern void DrawBoxSetMemImg( MEMIMG *DestImg, const RECTDATA *RectData, int Num ) +{ + int i ; + for( i = 0 ; i < Num ; i ++, RectData ++ ) + { + RECT DrawRect ; + DrawRect.left = RectData->x1 ; + DrawRect.top = RectData->y1 ; + DrawRect.right = RectData->x2 ; + DrawRect.bottom = RectData->y2 ; + DrawFillBoxMemImg( DestImg, &DrawRect, RectData->color ) ; + } +} + #define DRAWCIRCLEMEMIMG_FILL_SHRED_ND( DRAW, DESTADDNUM ) \ if( !( ( x2 < DrawArea.left ) | ( x1 >= DrawArea.right ) |\ ( y1 < DrawArea.top ) | ( y1 >= DrawArea.bottom ) | LineDrawBuf[ y1 ] ) )\ diff --git a/DxMemory.cpp b/DxMemory.cpp index 20418a4..715c405 100644 --- a/DxMemory.cpp +++ b/DxMemory.cpp @@ -2,7 +2,7 @@ // // DXライブラリ メモリ関連プログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxMemory.h b/DxMemory.h index 984e6af..9654f5a 100644 --- a/DxMemory.h +++ b/DxMemory.h @@ -2,7 +2,7 @@ // // DXライブラリ メモリ関係プログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxModel.cpp b/DxModel.cpp index 394caec..81fe02a 100644 --- a/DxModel.cpp +++ b/DxModel.cpp @@ -2,7 +2,7 @@ // // DXライブラリ モデルデータ制御プログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -381,17 +381,17 @@ MV1_MODEL_MANAGE MV1Man; static void * MV1SetupWorkBuffer( size_t AllocSize ) ; // 作業用バッファのセットアップ static int _MV1GetAnimKeyDataIndexFromTime( MV1_ANIM_KEYSET_BASE *AnimKeySetBase, float Time, float &Rate ) ; // 指定の時間を超える一番小さい番号のキーのインデックスを取得する -static int _MV1AnimSetSyncNowKey( MV1_ANIMSET *AnimSet, bool AboutSetting = false ) ; // 現在のアニメーション再生時間に各キーの NowKey の値を合わせる -static MV1_ANIMSET_BASE *MV1GetAnimSetBase( int MV1ModelHandle, const wchar_t *Name = NULL, int Index = -1 ) ; // 名前やインデックスからモデル基本データ内のアニメーションを取得する +static int _MV1AnimSetSyncNowKey( MV1_MODEL *Model, int AttachIndex, MV1_ANIMSET *AnimSet, bool AboutSetting = false ) ; // 現在のアニメーション再生時間に各キーの NowKey の値を合わせる +static MV1_ANIMSET_BASE *MV1GetAnimSetBase( int MV1ModelHandle, const wchar_t *Name = NULL, int Index = -1 ) ; // 名前やインデックスからモデル基本データ内のアニメーションを取得する static MV1_ANIMSET *MV1CreateAnimSet( MV1_ANIMSET_BASE *MV1AnimSetBase ) ; // アニメーションセット基本データから実行用アニメーションセットを作成する -static MV1_ANIM *MV1GetAnimSetAnim( MV1_ANIMSET *AnimSet, const wchar_t *Name = NULL, int Index = -1 ) ; // アニメーションセットから特定の名前、若しくはインデックスのアニメーションを得る +static MV1_ANIM *MV1GetAnimSetAnim( MV1_ANIMSET *AnimSet, const wchar_t *Name = NULL, int Index = -1 ) ; // アニメーションセットから特定の名前、若しくはインデックスのアニメーションを得る //static int MV1PlayAnimSet( MV1_ANIMSET *AnimSet, int Loop ) ; // アニメーションを再生する -static int MV1SetAnimSetTime( MV1_ANIMSET *AnimSet, float Time ) ; // アニメーションを指定の時間に設定する +static int MV1SetAnimSetTime( MV1_MODEL *Model, int AttachIndex, MV1_ANIMSET *AnimSet, float Time ) ; // アニメーションを指定の時間に設定する //static int MV1AnimSetAddTime( MV1_ANIMSET *AnimSet, float AddTime ) ; // アニメーションを進める //static int MV1StopAnimSet( MV1_ANIMSET *AnimSet ) ; // アニメーションを止める //static int MV1GetAnimSetState( MV1_ANIMSET *AnimSet ) ; // アニメーションが再生中かどうかを取得する( TRUE:再生中 FALSE:停止中 ) -static int MV1AnimSetSetupParam( MV1_ANIMSET *AnimSet ) ; // アニメーションの現在の再生経過時間に合わせたパラメータを計算する +static int MV1AnimSetSetupParam( MV1_MODEL *Model, int AttachIndex, MV1_ANIMSET *AnimSet ) ; // アニメーションの現在の再生経過時間に合わせたパラメータを計算する static void MV1SetupTransformMatrix( MATRIX_4X4CT_F * RST BlendMatrix, int ValidFlag, VECTOR * RST Translate, VECTOR * RST Scale, int RotateOrder, VECTOR * RST PreRotate, VECTOR * RST Rotate, VECTOR * RST PostRotate, FLOAT4 * RST Quaternion ) ; // 座標変換情報を使用して座標変換行列を作成する static int MV1SetupReferenceMeshFrame( MV1_MODEL *Model, MV1_MODEL_BASE *ModelBase, MV1_FRAME *Frame, MV1_MESH *Mesh, MV1_REF_POLYGONLIST *DestBuffer, int VIndexTarget, bool IsTransform, bool IsPositionOnly ) ; // 参照用メッシュのセットアップを行う static int MV1RefreshReferenceMeshFrame( MV1_FRAME *Frame, MV1_MESH *Mesh, int IsPositionOnly, MV1_REF_POLYGONLIST *DestBuffer ) ; // 参照用メッシュのリフレッシュを行う @@ -1624,7 +1624,7 @@ static void MV1SetupAnimMatrix( MV1_MODEL *Model ) for( i = 0 ; i < Model->AnimSetMaxNum ; i ++ ) { if( Model->AnimSet[ i ].Use == false || Model->AnimSet[ i ].AnimSet->ParamSetup ) continue ; - MV1AnimSetSetupParam( Model->AnimSet[ i ].AnimSet ) ; + MV1AnimSetSetupParam( Model, i, Model->AnimSet[ i ].AnimSet ) ; } Model->AnimSetupFlag = true ; @@ -3777,10 +3777,11 @@ static int _MV1GetAnimKeyDataIndexFromTime( MV1_ANIM_KEYSET_BASE *AnimKeySetBase } // 現在のアニメーション再生時間に各キーの NowKey の値を合わせる -static int _MV1AnimSetSyncNowKey( MV1_ANIMSET *AnimSet, bool AboutSetting ) +static int _MV1AnimSetSyncNowKey( MV1_MODEL *Model, int AttachIndex, MV1_ANIMSET *AnimSet, bool AboutSetting ) { MV1_ANIM *Anim ; MV1_ANIM_KEYSET *KeySet ; + MV1_MODEL_ANIM *MAnim ; int i, j ; float NowTime, NowRate ; @@ -3794,10 +3795,23 @@ static int _MV1AnimSetSyncNowKey( MV1_ANIMSET *AnimSet, bool AboutSetting ) Anim = AnimSet->Anim ; for( i = 0 ; i < AnimSet->BaseData->AnimNum ; i ++, Anim ++ ) { + float UseNowTime = NowTime ; + float UseNowRate = NowRate ; + + if( Anim->Frame ) + { + MAnim = &Model->Anim[ AttachIndex + Model->AnimSetMaxNum * Anim->Frame->BaseData->Index ] ; + if( MAnim->EnableNowTime ) + { + UseNowTime = MAnim->NowTime ; + UseNowRate = UseNowTime / AnimSet->BaseData->MaxTime ; + } + } + KeySet = Anim->KeySet ; for( j = 0 ; j < Anim->BaseData->KeySetNum ; j ++, KeySet ++ ) { - KeySet->NowKey = _MV1GetAnimKeyDataIndexFromTime_inline( KeySet->BaseData, NowTime, NowRate, KeySet->NowKey, AboutSetting ) ; + KeySet->NowKey = _MV1GetAnimKeyDataIndexFromTime_inline( KeySet->BaseData, UseNowTime, UseNowRate, KeySet->NowKey, AboutSetting ) ; } } @@ -3909,7 +3923,7 @@ static MV1_ANIM *MV1GetAnimSetAnim( MV1_ANIMSET *AnimSet, const wchar_t *Name, i } // アニメーションを指定の時間まで進める -static int MV1SetAnimSetTime( MV1_ANIMSET *AnimSet, float Time ) +static int MV1SetAnimSetTime( MV1_MODEL *Model, int AttachIndex, MV1_ANIMSET *AnimSet, float Time ) { // 指定の時間が範囲を超えていたらクランプする if( AnimSet->BaseData->MaxTime < Time ) Time = AnimSet->BaseData->MaxTime ; @@ -3919,7 +3933,7 @@ static int MV1SetAnimSetTime( MV1_ANIMSET *AnimSet, float Time ) AnimSet->NowTime = Time ; // 大体の位置をセットする - _MV1AnimSetSyncNowKey( AnimSet, true ) ; + _MV1AnimSetSyncNowKey( Model, AttachIndex, AnimSet, true ) ; // ループフラグを倒す // AnimSet->LoopCompFlag = false ; @@ -3929,8 +3943,9 @@ static int MV1SetAnimSetTime( MV1_ANIMSET *AnimSet, float Time ) } // アニメーションの現在の再生経過時間に合わせたパラメータを計算する -static int MV1AnimSetSetupParam( MV1_ANIMSET *AnimSet ) +static int MV1AnimSetSetupParam( MV1_MODEL *Model, int AttachIndex, MV1_ANIMSET *AnimSet ) { + MV1_MODEL_ANIM *MAnim ; MV1_ANIM *Anim ; MV1_ANIMSET_BASE *AnimSetBase ; MV1_ANIM_KEYSET_BASE *KeySetBase ; @@ -3987,6 +4002,7 @@ MATRIXLINEARBLEND : { MATRIX_4X4CT_F RotMat1, RotMat2 ; MATRIX_4X4CT_F PreRotMat, PostRotMat ; + float NowTime = AnimSet->NowTime ; // セットアップ情報をリセット Anim->ValidFlag = 0 ; @@ -3999,6 +4015,12 @@ MATRIXLINEARBLEND : QtRate = -1.0f ; if( Anim->Frame ) { + MAnim = &Model->Anim[ AttachIndex + Model->AnimSetMaxNum * Anim->Frame->BaseData->Index ] ; + if( MAnim->EnableNowTime ) + { + NowTime = MAnim->NowTime ; + } + NextRot = NowRot = Anim->Frame->BaseData->Rotate ; NextRotX = NowRotX = NowRot.x ; NextRotY = NowRotY = NowRot.y ; @@ -4090,11 +4112,11 @@ MATRIXLINEARBLEND : { if( KeySetBase->TimeType == MV1_ANIMKEY_TIME_TYPE_ONE ) { - t = ( AnimSet->NowTime - ( KeySetBase->UnitTime * NowKey + KeySetBase->StartTime ) ) / KeySetBase->UnitTime ; + t = ( NowTime - ( KeySetBase->UnitTime * NowKey + KeySetBase->StartTime ) ) / KeySetBase->UnitTime ; } else { - t = ( AnimSet->NowTime - KeySetBase->KeyTime[ NowKey ] ) / ( KeySetBase->KeyTime[ NowKey + 1 ] - KeySetBase->KeyTime[ NowKey ] ) ; + t = ( NowTime - KeySetBase->KeyTime[ NowKey ] ) / ( KeySetBase->KeyTime[ NowKey + 1 ] - KeySetBase->KeyTime[ NowKey ] ) ; } if( t < 0.0f ) t = 0.0f ; } @@ -4573,6 +4595,8 @@ MATRIXLINEARBLEND : Anim = AnimSet->Anim ; for( i = 0 ; i < AnimSetBase->AnimNum ; i ++, Anim ++ ) { + float NowTime = AnimSet->NowTime ; + // セットアップ情報をリセット Anim->ValidFlag = 0 ; @@ -4580,6 +4604,12 @@ MATRIXLINEARBLEND : ValidMatrix = FALSE ; if( Anim->Frame ) { + MAnim = &Model->Anim[ AttachIndex + Model->AnimSetMaxNum * Anim->Frame->BaseData->Index ] ; + if( MAnim->EnableNowTime ) + { + NowTime = MAnim->NowTime ; + } + Translate = Anim->Frame->BaseData->Translate ; Rotate = Anim->Frame->BaseData->Rotate ; Scale = Anim->Frame->BaseData->Scale ; @@ -4627,11 +4657,11 @@ MATRIXLINEARBLEND : { if( KeySetBase->TimeType == MV1_ANIMKEY_TIME_TYPE_ONE ) { - t = ( AnimSet->NowTime - ( KeySetBase->UnitTime * NowKey + KeySetBase->StartTime ) ) / KeySetBase->UnitTime ; + t = ( NowTime - ( KeySetBase->UnitTime * NowKey + KeySetBase->StartTime ) ) / KeySetBase->UnitTime ; } else { - t = ( AnimSet->NowTime - KeySetBase->KeyTime[ NowKey ] ) / ( KeySetBase->KeyTime[ NowKey + 1 ] - KeySetBase->KeyTime[ NowKey ] ) ; + t = ( NowTime - KeySetBase->KeyTime[ NowKey ] ) / ( KeySetBase->KeyTime[ NowKey + 1 ] - KeySetBase->KeyTime[ NowKey ] ) ; } if( t < 0.0f ) t = 0.0f ; } @@ -5773,10 +5803,10 @@ extern int MV1Initialize() } // モデル基本データハンドルの初期化 - InitializeHandleManage( DX_HANDLETYPE_MODEL_BASE, sizeof( MV1_MODEL_BASE ), MAX_MODEL_BASE_NUM, InitializeModelBaseHandle, TerminateModelBaseHandle, L"ModelBase" ) ; + InitializeHandleManage( DX_HANDLETYPE_MODEL_BASE, sizeof( MV1_MODEL_BASE ), MAX_MODEL_BASE_NUM, InitializeModelBaseHandle, TerminateModelBaseHandle, NULL, L"ModelBase" ) ; // モデルデータハンドルの初期化 - InitializeHandleManage( DX_HANDLETYPE_MODEL, sizeof( MV1_MODEL ), MAX_MODEL_NUM, InitializeModelHandle, TerminateModelHandle, L"Model" ) ; + InitializeHandleManage( DX_HANDLETYPE_MODEL, sizeof( MV1_MODEL ), MAX_MODEL_NUM, InitializeModelHandle, TerminateModelHandle, NULL, L"Model" ) ; // 各種変数を初期化 MV1Man.ModelBaseNum = 0 ; @@ -6907,6 +6937,7 @@ extern int MV1CreateCloneModelBase( int SrcMBHandle ) Texture->Bmp32AllZeroAlphaToXRGB8Flag = F1Texture->Bmp32AllZeroAlphaToXRGB8Flag ; // テクスチャの読み込み + Texture->GraphHandle = 0 ; if( __MV1LoadTexture( &F1Texture->ColorImage, &F1Texture->ColorImageSize, &F1Texture->AlphaImage, &F1Texture->AlphaImageSize, @@ -6926,6 +6957,7 @@ extern int MV1CreateCloneModelBase( int SrcMBHandle ) NULL, true, TRUE, + FALSE, FALSE ) == -1 ) { DXST_LOGFILEFMT_ADDW(( L"MV1 CloneModel Error : Texture LoadError : %s\n", Texture->NameW ) ) ; @@ -10019,6 +10051,7 @@ extern int __MV1LoadTexture( const MV1_FILE_READ_FUNC *FileReadFunc, bool ValidImageAddr, int NotInitGraphDelete, + int NotTextureLoad, int ASyncThread ) { @@ -10026,6 +10059,7 @@ extern int __MV1LoadTexture( char TempPath[ 2048 ] ; int i/*, j*/, Result ; void *DataAddr ; + int UserGraphHandle = *GraphHandle != 0 ? TRUE : FALSE ; // ポインタの初期化 if( ValidImageAddr == false ) @@ -10039,7 +10073,10 @@ extern int __MV1LoadTexture( *AlphaImage = NULL ; *ColorImage = NULL ; } - *GraphHandle = -1 ; + if( UserGraphHandle == FALSE ) + { + *GraphHandle = -1 ; + } *DefaultTextureFlag = FALSE ; AlphaBaseImage.GraphData = NULL ; ColorBaseImage.GraphData = NULL ; @@ -10110,37 +10147,44 @@ extern int __MV1LoadTexture( *ColorImageSize = 0 ; if( ColorFilePath ) { - if( FileReadFunc ) + if( NotTextureLoad ) { + Result = -1 ; + } + else + { + if( FileReadFunc ) + { #ifdef UNICODE - Result = FileReadFunc->Read( ColorFilePath, &DataAddr, ColorImageSize, FileReadFunc->Data ) ; + Result = FileReadFunc->Read( ColorFilePath, &DataAddr, ColorImageSize, FileReadFunc->Data ) ; #else - ConvString( ( const char * )ColorFilePath, -1, WCHAR_T_CHARCODEFORMAT, TempPath, sizeof( TempPath ), CHAR_CHARCODEFORMAT ) ; - Result = FileReadFunc->Read( TempPath, &DataAddr, ColorImageSize, FileReadFunc->Data ) ; + ConvString( ( const char * )ColorFilePath, -1, WCHAR_T_CHARCODEFORMAT, TempPath, sizeof( TempPath ), CHAR_CHARCODEFORMAT ) ; + Result = FileReadFunc->Read( TempPath, &DataAddr, ColorImageSize, FileReadFunc->Data ) ; #endif - if( Result != -1 ) - { - *ColorImage = DXALLOC( ( size_t )( *ColorImageSize ) ) ; - if( *ColorImage == NULL ) + if( Result != -1 ) { + *ColorImage = DXALLOC( ( size_t )( *ColorImageSize ) ) ; + if( *ColorImage == NULL ) + { #ifndef DX_GCC_COMPILE - DXST_LOGFILEFMT_ADDW(( L"Load Texture Error : Color Channel Image File : Memory Alloc Error : %s\n", ColorFilePath ) ) ; + DXST_LOGFILEFMT_ADDW(( L"Load Texture Error : Color Channel Image File : Memory Alloc Error : %s\n", ColorFilePath ) ) ; #endif - Result = -1 ; - } - else - { - _MEMCPY( *ColorImage, DataAddr, ( size_t )( *ColorImageSize ) ) ; - } - if( FileReadFunc->Release ) - { - FileReadFunc->Release( DataAddr, FileReadFunc->Data ) ; + Result = -1 ; + } + else + { + _MEMCPY( *ColorImage, DataAddr, ( size_t )( *ColorImageSize ) ) ; + } + if( FileReadFunc->Release ) + { + FileReadFunc->Release( DataAddr, FileReadFunc->Data ) ; + } } } - } - else - { - Result = MV1RLoadFileW( ColorFilePath, ColorImage, ColorImageSize ) ; + else + { + Result = MV1RLoadFileW( ColorFilePath, ColorImage, ColorImageSize ) ; + } } if( Result == -1 ) @@ -10152,7 +10196,8 @@ extern int __MV1LoadTexture( // #endif // 拡張子が bmp だったら bin も試す StrLength = ( int )_WCSLEN( ColorFilePath ) ; - if( StrLength >= 4 && + if( NotTextureLoad == FALSE && + StrLength >= 4 && ColorFilePath[ StrLength - 4 ] == '.' && ( ColorFilePath[ StrLength - 3 ] == 'b' || ColorFilePath[ StrLength - 3 ] == 'B' ) && ( ColorFilePath[ StrLength - 2 ] == 'm' || ColorFilePath[ StrLength - 2 ] == 'M' ) && @@ -10210,17 +10255,26 @@ extern int __MV1LoadTexture( if( Result == -1 ) { - // 読み込みに失敗した場合はエラー時用テクスチャを充てる - *ColorImage = DXALLOC( sizeof( Tga8x8TextureFileImage ) ) ; - if( *ColorImage == NULL ) + if( NotTextureLoad ) { - DXST_LOGFILEFMT_ADDUTF16LE(( "\x4c\x00\x6f\x00\x61\x00\x64\x00\x20\x00\x54\x00\x65\x00\x78\x00\x74\x00\x75\x00\x72\x00\x65\x00\x20\x00\x45\x00\x72\x00\x72\x00\x6f\x00\x72\x00\x20\x00\x3a\x00\x20\x00\xa8\x30\xe9\x30\xfc\x30\xde\x56\x7f\x90\x28\x75\xc6\x30\xaf\x30\xb9\x30\xc1\x30\xe3\x30\x92\x30\x3c\x68\x0d\x7d\x59\x30\x8b\x30\x18\x98\xdf\x57\x6e\x30\xba\x78\xdd\x4f\x6b\x30\x31\x59\x57\x65\x57\x30\x7e\x30\x57\x30\x5f\x30\x00"/*@ L"Load Texture Error : エラー回避用テクスチャを格納する領域の確保に失敗しました" @*/ )) ; - goto ERRORLABEL ; + *ColorImage = NULL ; + *ColorImageSize = 0 ; + *DefaultTextureFlag = FALSE ; } - _MEMCPY( *ColorImage, Tga8x8TextureFileImage, sizeof( Tga8x8TextureFileImage ) ) ; - *ColorImageSize = sizeof( Tga8x8TextureFileImage ) ; + else + { + // 読み込みに失敗した場合はエラー時用テクスチャを充てる + *ColorImage = DXALLOC( sizeof( Tga8x8TextureFileImage ) ) ; + if( *ColorImage == NULL ) + { + DXST_LOGFILEFMT_ADDUTF16LE(( "\x4c\x00\x6f\x00\x61\x00\x64\x00\x20\x00\x54\x00\x65\x00\x78\x00\x74\x00\x75\x00\x72\x00\x65\x00\x20\x00\x45\x00\x72\x00\x72\x00\x6f\x00\x72\x00\x20\x00\x3a\x00\x20\x00\xa8\x30\xe9\x30\xfc\x30\xde\x56\x7f\x90\x28\x75\xc6\x30\xaf\x30\xb9\x30\xc1\x30\xe3\x30\x92\x30\x3c\x68\x0d\x7d\x59\x30\x8b\x30\x18\x98\xdf\x57\x6e\x30\xba\x78\xdd\x4f\x6b\x30\x31\x59\x57\x65\x57\x30\x7e\x30\x57\x30\x5f\x30\x00"/*@ L"Load Texture Error : エラー回避用テクスチャを格納する領域の確保に失敗しました" @*/ )) ; + goto ERRORLABEL ; + } + _MEMCPY( *ColorImage, Tga8x8TextureFileImage, sizeof( Tga8x8TextureFileImage ) ) ; + *ColorImageSize = sizeof( Tga8x8TextureFileImage ) ; - *DefaultTextureFlag = TRUE ; + *DefaultTextureFlag = TRUE ; + } } } } @@ -10229,38 +10283,45 @@ extern int __MV1LoadTexture( *AlphaImageSize = 0 ; if( AlphaFilePath ) { - if( FileReadFunc ) + if( NotTextureLoad ) { + Result = -1 ; + } + else + { + if( FileReadFunc ) + { #ifdef UNICODE - Result = FileReadFunc->Read( AlphaFilePath, &DataAddr, AlphaImageSize, FileReadFunc->Data ) ; + Result = FileReadFunc->Read( AlphaFilePath, &DataAddr, AlphaImageSize, FileReadFunc->Data ) ; #else - ConvString( ( const char * )AlphaFilePath, -1, WCHAR_T_CHARCODEFORMAT, TempPath, sizeof( TempPath ), CHAR_CHARCODEFORMAT ) ; - Result = FileReadFunc->Read( TempPath, &DataAddr, AlphaImageSize, FileReadFunc->Data ) ; + ConvString( ( const char * )AlphaFilePath, -1, WCHAR_T_CHARCODEFORMAT, TempPath, sizeof( TempPath ), CHAR_CHARCODEFORMAT ) ; + Result = FileReadFunc->Read( TempPath, &DataAddr, AlphaImageSize, FileReadFunc->Data ) ; #endif - if( Result != -1 ) - { - *AlphaImage = DXALLOC( ( size_t )( *AlphaImageSize ) ) ; - if( *AlphaImage == NULL ) + if( Result != -1 ) { + *AlphaImage = DXALLOC( ( size_t )( *AlphaImageSize ) ) ; + if( *AlphaImage == NULL ) + { #ifndef DX_GCC_COMPILE - DXST_LOGFILEFMT_ADDW(( L"Load Texture Error : Alpha Channel Image : Memory Alloc Error : %s\n", AlphaFilePath ) ) ; + DXST_LOGFILEFMT_ADDW(( L"Load Texture Error : Alpha Channel Image : Memory Alloc Error : %s\n", AlphaFilePath ) ) ; #endif - Result = -1 ; - } - else - { - _MEMCPY( *AlphaImage, DataAddr, ( size_t )( *AlphaImageSize ) ) ; - } - if( FileReadFunc->Release ) - { - FileReadFunc->Release( DataAddr, FileReadFunc->Data ) ; + Result = -1 ; + } + else + { + _MEMCPY( *AlphaImage, DataAddr, ( size_t )( *AlphaImageSize ) ) ; + } + if( FileReadFunc->Release ) + { + FileReadFunc->Release( DataAddr, FileReadFunc->Data ) ; + } } } - } - else - { - Result = MV1RLoadFileW( AlphaFilePath, AlphaImage, AlphaImageSize ) ; + else + { + Result = MV1RLoadFileW( AlphaFilePath, AlphaImage, AlphaImageSize ) ; + } } if( Result == -1 ) @@ -10281,6 +10342,11 @@ extern int __MV1LoadTexture( } } else + if( NotTextureLoad ) + { + Result = -1 ; + } + else { // αチャンネル用のファイルパスが無い場合はカラーテクスチャファイルの名前に _a を加えたファイルが無いか調べる wchar_t TempAlphaFilePath[ 1024 ] ; @@ -10337,116 +10403,141 @@ extern int __MV1LoadTexture( } } - // BASEIMAGE を構築 - SetBmp32AllZeroAlphaToXRGB8( Bmp32AllZeroAlphaToXRGB8Flag ) ; - if( MV1CreateTextureColorBaseImage( - &ColorBaseImage, - &AlphaBaseImage, - *ColorImage, *ColorImageSize, - *AlphaImage, *AlphaImageSize, - BumpImageFlag, BumpImageNextPixelLength, ReverseFlag ) == -1 ) + if( NotTextureLoad ) { - SetBmp32AllZeroAlphaToXRGB8( FALSE ) ; - DXST_LOGFILEFMT_ADDUTF16LE(( "\x4c\x00\x6f\x00\x61\x00\x64\x00\x20\x00\x54\x00\x65\x00\x78\x00\x74\x00\x75\x00\x72\x00\x65\x00\x20\x00\x45\x00\x72\x00\x72\x00\x6f\x00\x72\x00\x20\x00\x3a\x00\x20\x00\xc6\x30\xaf\x30\xb9\x30\xc1\x30\xe3\x30\x28\x75\x6e\x30\x20\x00\x42\x00\x41\x00\x53\x00\x45\x00\x49\x00\x4d\x00\x41\x00\x47\x00\x45\x00\x20\x00\x6e\x30\x5c\x4f\x10\x62\x6b\x30\x31\x59\x57\x65\x57\x30\x7e\x30\x57\x30\x5f\x30\x0a\x00\x00"/*@ L"Load Texture Error : テクスチャ用の BASEIMAGE の作成に失敗しました\n" @*/ )) ; - goto ERRORLABEL ; - } - SetBmp32AllZeroAlphaToXRGB8( FALSE ) ; - - // ハンドルを得る - LOADGRAPH_GPARAM GParam ; - Graphics_Image_InitLoadGraphGParam( &GParam ) ; - GParam.LoadBaseImageGParam.ConvertPremultipliedAlpha = FALSE ; - GParam.CreateGraphGParam.NotUseTransColor = TRUE ; - if( ColorBaseImage.ColorData.Format == DX_BASEIMAGE_FORMAT_DXT1 || - ColorBaseImage.ColorData.Format == DX_BASEIMAGE_FORMAT_DXT2 || - ColorBaseImage.ColorData.Format == DX_BASEIMAGE_FORMAT_DXT3 || - ColorBaseImage.ColorData.Format == DX_BASEIMAGE_FORMAT_DXT4 || - ColorBaseImage.ColorData.Format == DX_BASEIMAGE_FORMAT_DXT5 || - ColorBaseImage.ColorData.Format == DX_BASEIMAGE_FORMAT_BC7_UNORM || - ColorBaseImage.ColorData.Format == DX_BASEIMAGE_FORMAT_BC7_UNORM_SRGB ) - { - GParam.CreateGraphGParam.InitHandleGParam.MipMapCount = ColorBaseImage.MipMapCount ; + if( UserGraphHandle == FALSE ) + { + *GraphHandle = 0 ; + } + *SemiTransFlag = FALSE ; } else { - GParam.CreateGraphGParam.InitHandleGParam.MipMapCount = -1 ; - } - GParam.CreateGraphGParam.InitHandleGParam.NotInitGraphDelete = NotInitGraphDelete ; - *GraphHandle = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, -1, &ColorBaseImage, *AlphaImage ? &AlphaBaseImage : NULL, TRUE, FALSE, FALSE, ASyncThread ) ; - if( *GraphHandle < 0 ) - { - NS_ReleaseBaseImage( &ColorBaseImage ) ; - if( AlphaImage ) NS_ReleaseBaseImage( &AlphaBaseImage ) ; - goto ERRORLABEL ; - } + // BASEIMAGE を構築 + SetBmp32AllZeroAlphaToXRGB8( Bmp32AllZeroAlphaToXRGB8Flag ) ; + if( MV1CreateTextureColorBaseImage( + &ColorBaseImage, + &AlphaBaseImage, + *ColorImage, *ColorImageSize, + *AlphaImage, *AlphaImageSize, + BumpImageFlag, BumpImageNextPixelLength, ReverseFlag ) == -1 ) + { + SetBmp32AllZeroAlphaToXRGB8( FALSE ) ; + DXST_LOGFILEFMT_ADDUTF16LE(( "\x4c\x00\x6f\x00\x61\x00\x64\x00\x20\x00\x54\x00\x65\x00\x78\x00\x74\x00\x75\x00\x72\x00\x65\x00\x20\x00\x45\x00\x72\x00\x72\x00\x6f\x00\x72\x00\x20\x00\x3a\x00\x20\x00\xc6\x30\xaf\x30\xb9\x30\xc1\x30\xe3\x30\x28\x75\x6e\x30\x20\x00\x42\x00\x41\x00\x53\x00\x45\x00\x49\x00\x4d\x00\x41\x00\x47\x00\x45\x00\x20\x00\x6e\x30\x5c\x4f\x10\x62\x6b\x30\x31\x59\x57\x65\x57\x30\x7e\x30\x57\x30\x5f\x30\x0a\x00\x00"/*@ L"Load Texture Error : テクスチャ用の BASEIMAGE の作成に失敗しました\n" @*/ )) ; + goto ERRORLABEL ; + } + SetBmp32AllZeroAlphaToXRGB8( FALSE ) ; - // 半透明要素があるかどうかを調べる - *SemiTransFlag = FALSE ; - if( *AlphaImage ) *SemiTransFlag = TRUE ; - if( *SemiTransFlag == FALSE && ColorBaseImage.ColorData.AlphaWidth != 0 ) - { -// int r, g, b, a ; + // ハンドルを得る + LOADGRAPH_GPARAM GParam ; + Graphics_Image_InitLoadGraphGParam( &GParam ) ; + GParam.LoadBaseImageGParam.ConvertPremultipliedAlpha = FALSE ; + GParam.CreateGraphGParam.NotUseTransColor = TRUE ; + if( ColorBaseImage.ColorData.Format == DX_BASEIMAGE_FORMAT_DXT1 || + ColorBaseImage.ColorData.Format == DX_BASEIMAGE_FORMAT_DXT2 || + ColorBaseImage.ColorData.Format == DX_BASEIMAGE_FORMAT_DXT3 || + ColorBaseImage.ColorData.Format == DX_BASEIMAGE_FORMAT_DXT4 || + ColorBaseImage.ColorData.Format == DX_BASEIMAGE_FORMAT_DXT5 || + ColorBaseImage.ColorData.Format == DX_BASEIMAGE_FORMAT_BC7_UNORM || + ColorBaseImage.ColorData.Format == DX_BASEIMAGE_FORMAT_BC7_UNORM_SRGB ) + { + GParam.CreateGraphGParam.InitHandleGParam.MipMapCount = ColorBaseImage.MipMapCount ; + } + else + { + GParam.CreateGraphGParam.InitHandleGParam.MipMapCount = -1 ; + } + GParam.CreateGraphGParam.InitHandleGParam.NotInitGraphDelete = NotInitGraphDelete ; + if( UserGraphHandle ) + { + int Result ; + Result = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, *GraphHandle, &ColorBaseImage, *AlphaImage ? &AlphaBaseImage : NULL, TRUE, FALSE, FALSE, ASyncThread ) ; + if( Result < 0 ) + { + NS_ReleaseBaseImage( &ColorBaseImage ) ; + if( AlphaImage ) NS_ReleaseBaseImage( &AlphaBaseImage ) ; + goto ERRORLABEL ; + } + } + else + { + *GraphHandle = Graphics_Image_CreateGraphFromGraphImage_UseGParam( &GParam, FALSE, -1, &ColorBaseImage, *AlphaImage ? &AlphaBaseImage : NULL, TRUE, FALSE, FALSE, ASyncThread ) ; + if( *GraphHandle < 0 ) + { + NS_ReleaseBaseImage( &ColorBaseImage ) ; + if( AlphaImage ) NS_ReleaseBaseImage( &AlphaBaseImage ) ; + goto ERRORLABEL ; + } + } - // フォーマットが標準フォーマットではなかったらDXTフォーマットで判断する - if( ColorBaseImage.ColorData.Format != DX_BASEIMAGE_FORMAT_NORMAL ) + // 半透明要素があるかどうかを調べる + *SemiTransFlag = FALSE ; + if( *AlphaImage ) *SemiTransFlag = TRUE ; + if( *SemiTransFlag == FALSE && ColorBaseImage.ColorData.AlphaWidth != 0 ) { - //NS_ConvertNormalFormatBaseImage( &ColorBaseImage ) ; - switch( ColorBaseImage.ColorData.Format ) + // int r, g, b, a ; + + // フォーマットが標準フォーマットではなかったらDXTフォーマットで判断する + if( ColorBaseImage.ColorData.Format != DX_BASEIMAGE_FORMAT_NORMAL ) { - case DX_BASEIMAGE_FORMAT_DXT1 : - *SemiTransFlag = FALSE ; - break ; + //NS_ConvertNormalFormatBaseImage( &ColorBaseImage ) ; + switch( ColorBaseImage.ColorData.Format ) + { + case DX_BASEIMAGE_FORMAT_DXT1 : + *SemiTransFlag = FALSE ; + break ; - case DX_BASEIMAGE_FORMAT_DXT2 : - *SemiTransFlag = TRUE ; - break ; + case DX_BASEIMAGE_FORMAT_DXT2 : + *SemiTransFlag = TRUE ; + break ; - case DX_BASEIMAGE_FORMAT_DXT3 : - *SemiTransFlag = TRUE ; - break ; + case DX_BASEIMAGE_FORMAT_DXT3 : + *SemiTransFlag = TRUE ; + break ; - case DX_BASEIMAGE_FORMAT_DXT4 : - *SemiTransFlag = TRUE ; - break ; + case DX_BASEIMAGE_FORMAT_DXT4 : + *SemiTransFlag = TRUE ; + break ; - case DX_BASEIMAGE_FORMAT_DXT5 : - *SemiTransFlag = TRUE ; - break ; + case DX_BASEIMAGE_FORMAT_DXT5 : + *SemiTransFlag = TRUE ; + break ; - case DX_BASEIMAGE_FORMAT_BC7_UNORM : - *SemiTransFlag = TRUE ; - break ; + case DX_BASEIMAGE_FORMAT_BC7_UNORM : + *SemiTransFlag = TRUE ; + break ; - case DX_BASEIMAGE_FORMAT_BC7_UNORM_SRGB : - *SemiTransFlag = TRUE ; - break ; + case DX_BASEIMAGE_FORMAT_BC7_UNORM_SRGB : + *SemiTransFlag = TRUE ; + break ; + } } - } -/* - for( i = 0 ; i < ColorBaseImage.Height ; i ++ ) - { - for( j = 0 ; j < ColorBaseImage.Width ; j ++ ) + /* + for( i = 0 ; i < ColorBaseImage.Height ; i ++ ) { - NS_GetPixelBaseImage( &ColorBaseImage, j, i, &r, &g, &b, &a ) ; - if( a != 255 ) + for( j = 0 ; j < ColorBaseImage.Width ; j ++ ) { - *SemiTransFlag = TRUE ; - break ; + NS_GetPixelBaseImage( &ColorBaseImage, j, i, &r, &g, &b, &a ) ; + if( a != 255 ) + { + *SemiTransFlag = TRUE ; + break ; + } } + if( *SemiTransFlag ) break ; + } + */ + else + { + // 全ピクセルを調べて半透明要素があるかどうかを調べる + *SemiTransFlag = NS_CheckPixelAlphaBaseImage( &ColorBaseImage ) <= 1 ? 0 : 1 ; } - if( *SemiTransFlag ) break ; - } -*/ - else - { - // 全ピクセルを調べて半透明要素があるかどうかを調べる - *SemiTransFlag = NS_CheckPixelAlphaBaseImage( &ColorBaseImage ) <= 1 ? 0 : 1 ; } - } - // 基本イメージは解放 - NS_ReleaseBaseImage( &ColorBaseImage ) ; - if( *AlphaImage ) NS_ReleaseBaseImage( &AlphaBaseImage ) ; + // 基本イメージは解放 + NS_ReleaseBaseImage( &ColorBaseImage ) ; + if( *AlphaImage ) NS_ReleaseBaseImage( &AlphaBaseImage ) ; + } // 終了 return 0 ; @@ -10487,7 +10578,7 @@ ERRORLABEL : *AlphaImage = NULL ; } } - if( *GraphHandle != -1 ) + if( UserGraphHandle == FALSE && *GraphHandle != -1 ) { NS_DeleteGraph( *GraphHandle, FALSE ) ; *GraphHandle = -1 ; @@ -10520,6 +10611,7 @@ static int _MV1TextureLoadBase( DirW = ModelBase->DirectoryPath ; // テクスチャの読み込み + GraphHandle = 0 ; Result = __MV1LoadTexture( &ColorImage, &ColorImageSize, &AlphaImage, &AlphaImageSize, @@ -10535,6 +10627,7 @@ static int _MV1TextureLoadBase( NULL, false, TRUE, + FALSE, ASyncThread ) ; @@ -10653,6 +10746,7 @@ static int _MV1TextureLoad( DirW = ModelBase->DirectoryPath ; // テクスチャの読み込み + GraphHandle = 0 ; Result = __MV1LoadTexture( &ColorImage, &ColorImageSize, &AlphaImage, &AlphaImageSize, @@ -10668,6 +10762,7 @@ static int _MV1TextureLoad( NULL, false, TRUE, + FALSE, ASyncThread ) ; if( Result == -1 ) @@ -12079,6 +12174,7 @@ extern int MV1AddTextureBase( MBTexture->Bmp32AllZeroAlphaToXRGB8Flag = Bmp32AllZeroAlphaToXRGB8Flag ? TRUE : FALSE ; // テクスチャの読み込み + MBTexture->GraphHandle = 0 ; Result = __MV1LoadTexture( &MBTexture->ColorImage, &MBTexture->ColorImageSize, &MBTexture->AlphaImage, &MBTexture->AlphaImageSize, @@ -12096,6 +12192,7 @@ extern int MV1AddTextureBase( NULL, false, TRUE, + FALSE, ASyncThread ) ; if( Result == -1 ) @@ -14442,6 +14539,8 @@ extern void InitMV1LoadModelGParam( MV1LOADMODEL_GPARAM *GParam ) GParam->LoadModelToPMD_PMX_AnimationFPSMode = MV1Man.LoadModelToPMD_PMX_AnimationFPSMode ; GParam->LoadModelToUsePackDraw = MV1Man.LoadModelToUsePackDraw ; GParam->LoadModelToTriangleListUseMaxBoneNum = MV1Man.LoadModelToTriangleListUseMaxBoneNum == 0 ? MV1_TRIANGLE_LIST_USE_BONE_MAX_NUM : MV1Man.LoadModelToTriangleListUseMaxBoneNum ; + GParam->LoadModelToNotTextureLoad = MV1Man.LoadModelToNotTextureLoad ; + GParam->LoadModelToIgnoreIK = MV1Man.LoadModelToIgnoreIK ; _MEMCPY( GParam->LoadCalcPhysicsWorldGravity, MV1Man.LoadCalcPhysicsWorldGravity, sizeof( MV1Man.LoadCalcPhysicsWorldGravity ) ) ; GParam->AnimFilePathValid = MV1Man.AnimFilePathValid ; @@ -15326,6 +15425,7 @@ extern int MV1LoadModelToMV1( const MV1_MODEL_LOAD_PARAM *LoadParam, int ASyncTh } } + Texture->GraphHandle = 0 ; if( __MV1LoadTexture( &Texture->ColorImage, &Texture->ColorImageSize, &Texture->AlphaImage, &Texture->AlphaImageSize, @@ -15345,6 +15445,7 @@ extern int MV1LoadModelToMV1( const MV1_MODEL_LOAD_PARAM *LoadParam, int ASyncTh LoadParam->FileReadFunc, false, TRUE, + LoadParam->GParam.LoadModelToNotTextureLoad, ASyncThread ) == -1 ) { DXST_LOGFILEFMT_ADDW(( L"MV1 LoadModel Error : Txture Load Error : %s\n", Texture->NameW ) ) ; @@ -15356,14 +15457,14 @@ extern int MV1LoadModelToMV1( const MV1_MODEL_LOAD_PARAM *LoadParam, int ASyncTh Texture->AlphaImageFilePathAllocMem = FALSE ; // ファイルパスを保存 - if( Texture->ColorImage == NULL || F1Texture->ColorFilePath == 0 ) + if( ( Texture->ColorImage == NULL && LoadParam->GParam.LoadModelToNotTextureLoad == FALSE ) || F1Texture->ColorFilePath == 0 ) { #ifndef UNICODE Texture->ColorFilePathA = NULL ; #endif Texture->ColorFilePathW = NULL ; } - if( Texture->AlphaImage == NULL || F1Texture->AlphaFilePath == 0 ) + if( ( Texture->AlphaImage == NULL && LoadParam->GParam.LoadModelToNotTextureLoad == FALSE ) || F1Texture->AlphaFilePath == 0 ) { #ifndef UNICODE Texture->AlphaFilePathA = NULL ; @@ -17018,6 +17119,24 @@ extern int NS_MV1SetLoadModelTriangleListUseMaxBoneNum( int UseMaxBoneNum ) return 0 ; } +// 読み込むモデルで使用するテクスチャファイルを読み込むかどうかを設定する( TRUE:読み込む(デフォルト) FALSE:読み込まない ) +extern int NS_MV1SetLoadModelTextureLoad( int Flag ) +{ + MV1Man.LoadModelToNotTextureLoad = Flag ? FALSE : TRUE ; + + // 終了 + return 0 ; +} + +// 読み込むモデルのIK情報を無視するかどうかを設定する( TRUE:無視する FALSE:無視しない(デフォルト) ) +extern int NS_MV1SetLoadModelIgnoreIK( int IgnoreFlag ) +{ + MV1Man.LoadModelToIgnoreIK = IgnoreFlag ; + + // 終了 + return 0 ; +} + // 指定のパスにモデルを保存する @@ -21744,6 +21863,8 @@ extern int NS_MV1AttachAnim( int MHandle, int AnimIndex, int AnimSrcMHandle, int { MAnim->Anim = NULL ; MAnim->BlendRate = 1.0f ; + MAnim->EnableNowTime = false ; + MAnim->NowTime = 0.0f ; MAnim->Use = false ; } @@ -21976,7 +22097,7 @@ extern int NS_MV1AttachAnim( int MHandle, int AnimIndex, int AnimSrcMHandle, int Model->LocalWorldMatrixSetupFlag = false ; // アニメーションの時間を初期化する - MV1SetAnimSetTime( MAnimSet->AnimSet, 0.0f ) ; + MV1SetAnimSetTime( Model, AttachIndex, MAnimSet->AnimSet, 0.0f ) ; // アタッチしたインデックスを返す return AttachIndex ; @@ -23114,7 +23235,7 @@ extern int NS_MV1SetAttachAnimTime( int MHandle, int AttachIndex, float Time ) Model->LocalWorldMatrixSetupFlag = false ; // アニメーションの時間をセットする - MV1SetAnimSetTime( AnimSet, Time ) ; + MV1SetAnimSetTime( Model, AttachIndex, AnimSet, Time ) ; // 終了 return 0 ; @@ -23292,7 +23413,7 @@ extern int NS_MV1SetAttachAnimBlendRateToFrame( int MHandle, int AttachIndex, in return 0 ; } -// アタッチしているアニメーションのブレンド率を設定する( フレーム単位 ) +// アタッチしているアニメーションのブレンド率を取得する( フレーム単位 ) extern float NS_MV1GetAttachAnimBlendRateToFrame( int MHandle, int AttachIndex, int FrameIndex ) { MV1_MODEL *Model ; @@ -23319,6 +23440,138 @@ extern float NS_MV1GetAttachAnimBlendRateToFrame( int MHandle, int AttachIndex, return MAnim->BlendRate ; } +// アタッチしているアニメーションの再生時間を設定する( フレーム単位 ) +extern int NS_MV1SetAttachAnimTimeToFrame( int MHandle, int AttachIndex, int FrameIndex, float Time, int SetChild ) +{ + MV1_MODEL *Model ; + MV1_MODEL_ANIM *MAnim ; + MV1_FRAME *Frame ; + bool Change = false ; + int i ; + + // 初期化されていなかったらエラー + if( MV1Man.Initialize == false ) return -1 ; + + // アドレス取得 + if( MV1MDLCHK( MHandle, Model ) ) + return -1 ; + + // 確保しているアタッチインデックス外だった場合は何もせずに終了 + if( AttachIndex < 0 || AttachIndex >= Model->AnimSetMaxNum ) return -1 ; + + // フレームインデックスが不正だったら何もせずに終了 + if( FrameIndex < 0 || FrameIndex >= Model->BaseData->FrameNum ) return -1 ; + Frame = &Model->Frame[ FrameIndex ] ; + MAnim = &Model->Anim[ AttachIndex ] + Model->AnimSetMaxNum * FrameIndex ; + + // アニメーションがアタッチされていなかったら何もせずに終了 + if( Model->AnimSet[ AttachIndex ].Use == false ) return -1 ; + + // 時間がマイナスかどうかで処理を分岐 + if( Time < 0.0f ) + { + // 解除処理 + if( MAnim->EnableNowTime ) + { + Change = true ; + MAnim->EnableNowTime = false ; + } + + if( SetChild ) + { + MV1_MODEL_ANIM *MAnim2 ; + + MAnim2 = MAnim + Model->AnimSetMaxNum ; + for( i = 0 ; i < Frame->BaseData->TotalChildNum ; i ++, MAnim2 += Model->AnimSetMaxNum ) + { + if( MAnim2->EnableNowTime ) + { + Change = true ; + MAnim2->EnableNowTime = false ; + } + } + } + } + else + { + // 値セット処理 + if( MAnim->EnableNowTime ) + { + if( MAnim->NowTime != Time ) + { + Change = true ; + MAnim->NowTime = Time ; + } + } + else + { + Change = true ; + MAnim->EnableNowTime = true ; + MAnim->NowTime = Time ; + } + + if( SetChild ) + { + MV1_MODEL_ANIM *MAnim2 ; + + MAnim2 = MAnim + Model->AnimSetMaxNum ; + for( i = 0 ; i < Frame->BaseData->TotalChildNum ; i ++, MAnim2 += Model->AnimSetMaxNum ) + { + if( MAnim2->EnableNowTime ) + { + if( MAnim2->NowTime != Time ) + { + Change = true ; + MAnim2->NowTime = Time ; + } + } + else + { + Change = true ; + MAnim2->EnableNowTime = true ; + MAnim2->NowTime = Time ; + } + } + } + } + + if( Change ) + { + // 大体の位置をセットする + _MV1AnimSetSyncNowKey( Model, AttachIndex, Model->AnimSet[ AttachIndex ].AnimSet, true ) ; + } + + // 正常終了 + return 0 ; +} + +// アタッチしているアニメーションの再生時間を取得する( フレーム単位 ) +extern float NS_MV1GetAttachAnimTimeToFrame( int MHandle, int AttachIndex, int FrameIndex ) +{ + MV1_MODEL *Model ; + MV1_MODEL_ANIM *MAnim ; + + // 初期化されていなかったらエラー + if( MV1Man.Initialize == false ) return -1.0f ; + + // アドレス取得 + if( MV1MDLCHK( MHandle, Model ) ) + return -1.0f ; + + // 確保しているアタッチインデックス外だった場合は何もせずに終了 + if( AttachIndex < 0 || AttachIndex >= Model->AnimSetMaxNum ) return -1.0f ; + + // フレームインデックスが不正だったら何もせずに終了 + if( FrameIndex < 0 || FrameIndex >= Model->BaseData->FrameNum ) return -1.0f ; + MAnim = &Model->Anim[ AttachIndex ] + Model->AnimSetMaxNum * FrameIndex ; + + // アニメーションがアタッチされていなかったら何もせずに終了 + if( Model->AnimSet[ AttachIndex ].Use == false ) return -1.0f ; + + // 再生時間を返す + return MAnim->EnableNowTime ? MAnim->NowTime : Model->AnimSet[ AttachIndex ].AnimSet->NowTime ; +} + // アタッチしているアニメーションがターゲットとするフレームの数を取得する extern int MV1GetAttachAnimTargetFrameNum( int MHandle, int AttachIndex ) { @@ -25812,8 +26065,6 @@ extern int NS_MV1SetMaterialDrawAddColorAll( int MHandle, int Red, int Green, in // 指定のマテリアルの描画時の加算カラーを設定する extern int NS_MV1SetMaterialDrawAddColor( int MHandle, int MaterialIndex, int Red, int Green, int Blue ) { - MV1_MESH *Mesh ; - int i ; MV1MATERIALSTART( MHandle, Model, ModelBase, Material, MaterialIndex, -1 ) ; if( Material->DrawAddColor.x == Red && @@ -26503,7 +26754,7 @@ extern int NS_MV1LoadTexture( const TCHAR *FilePath ) { #ifdef UNICODE return MV1LoadTexture_WCHAR_T( - FilePath + FilePath, GetASyncLoadFlag() ) ; #else int Result ; @@ -26511,7 +26762,7 @@ extern int NS_MV1LoadTexture( const TCHAR *FilePath ) TCHAR_TO_WCHAR_T_STRING_ONE_BEGIN( FilePath, return -1 ) Result = MV1LoadTexture_WCHAR_T( - UseFilePathBuffer + UseFilePathBuffer, GetASyncLoadFlag() ) ; TCHAR_TO_WCHAR_T_STRING_END( FilePath ) @@ -26526,20 +26777,19 @@ extern int NS_MV1LoadTextureWithStrLen( const TCHAR *FilePath, size_t FilePathLe int Result ; #ifdef UNICODE WCHAR_T_STRING_WITH_STRLEN_TO_WCHAR_T_STRING_ONE_BEGIN( FilePath, FilePathLength, return -1 ) - Result = MV1LoadTexture_WCHAR_T( UseFilePathBuffer ) ; + Result = MV1LoadTexture_WCHAR_T( UseFilePathBuffer, GetASyncLoadFlag() ) ; WCHAR_T_STRING_WITH_STRLEN_TO_WCHAR_T_STRING_END( FilePath ) #else TCHAR_STRING_WITH_STRLEN_TO_WCHAR_T_STRING_ONE_BEGIN( FilePath, FilePathLength, return -1 ) - Result = MV1LoadTexture_WCHAR_T( UseFilePathBuffer ) ; + Result = MV1LoadTexture_WCHAR_T( UseFilePathBuffer, GetASyncLoadFlag() ) ; TCHAR_STRING_WITH_STRLEN_TO_WCHAR_T_STRING_END( FilePath ) #endif return Result ; } -// 3Dモデルに貼り付けるのに向いた画像の読み込み方式で画像を読み込む( 戻り値 -1:エラー 0以上:グラフィックハンドル ) -extern int MV1LoadTexture_WCHAR_T( const wchar_t *FilePath ) +// MV1LoadTexture_WCHAR_T の実処理関数 +extern int MV1LoadTexture_WCHAR_T_Static( int NewGraphHandle, const wchar_t *FilePath, int ASyncThread ) { - int NewGraphHandle ; void *ColorImage, *AlphaImage ; int ColorImageSize, AlphaImageSize ; int SemiTransFlag, DefaultTextureFlag ; @@ -26563,7 +26813,8 @@ extern int MV1LoadTexture_WCHAR_T( const wchar_t *FilePath ) NULL, false, FALSE, - FALSE ) == -1 ) + FALSE, + ASyncThread ) == -1 ) return -1 ; if( ColorImage ) @@ -26578,10 +26829,127 @@ extern int MV1LoadTexture_WCHAR_T( const wchar_t *FilePath ) AlphaImage = NULL ; } - // ハンドルを返す - return NewGraphHandle ; + // ここに来た場合は成功 + return 0 ; } +#ifndef DX_NON_ASYNCLOAD + +// MV1LoadTexture_WCHAR_T の非同期読み込みスレッドから呼ばれる関数 +static void MV1LoadTexture_WCHAR_T_ASync( ASYNCLOADDATA_COMMON *AParam ) +{ + int NewGraphHandle ; + const wchar_t *FilePath ; + int Addr ; + int Result ; + IMAGEDATA *Image ; + + Addr = 0 ; + NewGraphHandle = GetASyncLoadParamInt( AParam->Data, &Addr ) ; + FilePath = GetASyncLoadParamString( AParam->Data, &Addr ) ; + + Result = MV1LoadTexture_WCHAR_T_Static( NewGraphHandle, FilePath, TRUE ) ; + if( !GRAPHCHK_ASYNC( NewGraphHandle, Image ) ) + { + Image->HandleInfo.ASyncLoadResult = Result ; + } + + DecASyncLoadCount( NewGraphHandle ) ; + if( Result < 0 ) + { + NS_DeleteGraph( NewGraphHandle, FALSE ) ; + } +} +#endif // DX_NON_ASYNCLOAD + +// 3Dモデルに貼り付けるのに向いた画像の読み込み方式で画像を読み込む( 戻り値 -1:エラー 0以上:グラフィックハンドル ) +extern int MV1LoadTexture_WCHAR_T( const wchar_t *FilePath, int ASyncLoadFlag, int ASyncThread ) +{ + int NewGraphHandle ; + + if( FilePath == NULL ) + { + return -1 ; + } + + if( ASyncThread == FALSE ) + { + CheckActiveState() ; + } + + NewGraphHandle = Graphics_Image_AddHandle( -1, ASyncThread ) ; + if( NewGraphHandle < 0 ) + { + return -1 ; + } + +#ifndef DX_NON_ASYNCLOAD + if( ASyncThread == FALSE && ASyncLoadFlag ) + { + ASYNCLOADDATA_COMMON *AParam = NULL ; + int Addr ; + wchar_t FullPath[ 1024 ] ; + + ConvertFullPathW_( FilePath, FullPath, sizeof( FullPath ) ) ; + + // パラメータに必要なメモリのサイズを算出 + Addr = 0 ; + AddASyncLoadParamInt( NULL, &Addr, NewGraphHandle ) ; + AddASyncLoadParamString( NULL, &Addr, FullPath ) ; + + // メモリの確保 + AParam = AllocASyncLoadDataMemory( Addr ) ; + if( AParam == NULL ) + goto ERR ; + + // 処理に必要な情報をセット + AParam->ProcessFunction = MV1LoadTexture_WCHAR_T_ASync ; + Addr = 0 ; + AddASyncLoadParamInt( AParam->Data, &Addr, NewGraphHandle ) ; + AddASyncLoadParamString( AParam->Data, &Addr, FullPath ) ; + + // データを追加 + if( AddASyncLoadData( AParam ) < 0 ) + { + DXFREE( AParam ) ; + AParam = NULL ; + goto ERR ; + } + + // 非同期読み込みカウントをインクリメント + IncASyncLoadCount( NewGraphHandle, AParam->Index ) ; + } + else +#endif // DX_NON_ASYNCLOAD + { + if( MV1LoadTexture_WCHAR_T_Static( NewGraphHandle, FilePath, ASyncThread ) < 0 ) + { + goto ERR ; + } + } + +#ifndef DX_NON_ASYNCLOAD + if( ASyncThread ) + { + DecASyncLoadCount( NewGraphHandle ) ; + } +#endif // DX_NON_ASYNCLOAD + + // 正常終了 + return NewGraphHandle ; + +ERR : +#ifndef DX_NON_ASYNCLOAD + if( ASyncThread ) + { + DecASyncLoadCount( NewGraphHandle ) ; + } +#endif // DX_NON_ASYNCLOAD + + NS_DeleteGraph( NewGraphHandle, FALSE ) ; + + return -1 ; +} diff --git a/DxModel.h b/DxModel.h index 6f25d54..e403bb9 100644 --- a/DxModel.h +++ b/DxModel.h @@ -2,7 +2,7 @@ // // DXライブラリ モデルデータ制御プログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -1286,6 +1286,8 @@ struct MV1_MODEL_ANIM { bool Use ; // この構造体が有効かどうか( true :有効 false:無効 ) float BlendRate ; // ブレンド率 + bool EnableNowTime ; // NowTime が有効かどうか( true:有効 false:無効 ) + float NowTime ; // このフレームでのアニメーションタイム MV1_ANIM *Anim ; // アニメーション情報へのポインタ } ; @@ -1427,6 +1429,8 @@ struct MV1_MODEL_MANAGE int LoadModelToDisablePhysicsNameWordMode ; // LoadModelToDisablePhysicsNameWord の適用ルール( DX_LOADMODEL_PHYSICS_DISABLENAMEWORD_ALWAYS 等 ) int LoadModelToUsePackDraw ; // 読み込むモデルを一度に複数の描画に対応させるかどうか( TRUE:対応させる FALSE:対応させない ) int LoadModelToTriangleListUseMaxBoneNum ; // 読み込むモデルのひとつのトライアングルリストで使用できる最大ボーン数 + int LoadModelToNotTextureLoad ; // 読み込むモデルのテクスチャを読み込まないかどうか( FALSE:読み込む TRUE:読み込まない ) + int LoadModelToIgnoreIK ; // 読み込むモデルのIK情報を無視するかどうか( TRUE:無視する FALSE:無視しない ) VECTOR LoadCalcPhysicsWorldGravity[ MV1_LOADCALC_PHYSICS_GRAVITY_NUM ] ; // 読み込むモデルの事前計算に使用する重力 int AnimFilePathValid ; // AnimFilePath が有効かどうか( TRUE:有効 FALSE:無効 ) @@ -1499,6 +1503,8 @@ struct MV1LOADMODEL_GPARAM int LoadModelToPMD_PMX_AnimationFPSMode ; // PMD, PMX を読み込む際のアニメーションの FPS モード( DX_LOADMODEL_PMD_PMX_ANIMATION_FPSMODE_30 等 ) int LoadModelToUsePackDraw ; // 読み込むモデルを一度に複数の描画に対応させるかどうか( TRUE:対応させる FALSE:対応させない ) int LoadModelToTriangleListUseMaxBoneNum ; // 読み込むモデルのひとつのトライアングルリストで使用できる最大ボーン数 + int LoadModelToNotTextureLoad ; // 読み込むモデルのテクスチャを読み込まないかどうか( FALSE:読み込む TRUE:読み込まない ) + int LoadModelToIgnoreIK ; // 読み込むモデルのIK情報を無視するかどうか( TRUE:無視する FALSE:無視しない ) VECTOR LoadCalcPhysicsWorldGravity[ MV1_LOADCALC_PHYSICS_GRAVITY_NUM ] ; // 読み込むモデルの事前計算に使用する重力 int AnimFilePathValid ; // AnimFilePath が有効かどうか( TRUE:有効 FALSE:無効 ) @@ -1618,6 +1624,7 @@ extern int __MV1LoadTexture( const MV1_FILE_READ_FUNC *FileReadFunc, bool ValidImageAddr, int NotInitGraphDelete, + int NotTextureLoad, int ASyncThread ) ; extern int MV1CreateTextureColorBaseImage( BASEIMAGE *DestColorBaseImage, @@ -2214,7 +2221,7 @@ extern int MV1SetTextureColorFilePath_WCHAR_T( int MHandle, int TexIndex, co extern const wchar_t * MV1GetTextureColorFilePath_WCHAR_T( int MHandle, int TexIndex ) ; extern int MV1SetTextureAlphaFilePath_WCHAR_T( int MHandle, int TexIndex, const wchar_t *FilePath ) ; extern const wchar_t * MV1GetTextureAlphaFilePath_WCHAR_T( int MHandle, int TexIndex ) ; -extern int MV1LoadTexture_WCHAR_T( const wchar_t *FilePath ) ; +extern int MV1LoadTexture_WCHAR_T( const wchar_t *FilePath, int ASyncLoadFlag = FALSE, int ASyncThread = FALSE ) ; extern int MV1SearchFrame_WCHAR_T( int MHandle, const wchar_t *FrameName ) ; extern int MV1SearchFrameChild_WCHAR_T( int MHandle, int FrameIndex = -1 , const wchar_t *ChildName = NULL ) ; extern const wchar_t * MV1GetFrameName_WCHAR_T( int MHandle, int FrameIndex ) ; @@ -2274,6 +2281,8 @@ extern const wchar_t * MV1GetShapeName_WCHAR_T( int MHandle, int ShapeIndex ) extern int NS_MV1SetLoadModelAnimFilePathWithStrLen( const TCHAR *FileName, size_t FileNameLength ) ; // 読み込むモデルに適用するアニメーションファイルのパスを設定する、NULLを渡すと設定リセット( 現在は PMD,PMX のみに効果あり ) extern int NS_MV1SetLoadModelUsePackDraw( int Flag ) ; // 読み込むモデルを同時複数描画に対応させるかどうかを設定する( TRUE:対応させる FALSE:対応させない( デフォルト ) )、( 「対応させる」にすると描画が高速になる可能性がある代わりに消費VRAMが増えます ) extern int NS_MV1SetLoadModelTriangleListUseMaxBoneNum( int UseMaxBoneNum ) ; // 読み込むモデルのひとつのトライアングルリストで使用できる最大ボーン数を設定する( UseMaxBoneNum で指定できる値の範囲は 8 〜 54、 0 を指定するとデフォルト動作に戻る ) +extern int NS_MV1SetLoadModelTextureLoad( int Flag ) ; // 読み込むモデルで使用するテクスチャファイルを読み込むかどうかを設定する( TRUE:読み込む(デフォルト) FALSE:読み込まない ) +extern int NS_MV1SetLoadModelIgnoreIK( int IgnoreFlag ) ; // 読み込むモデルのIK情報を無視するかどうかを設定する( TRUE:無視する FALSE:無視しない(デフォルト) ) // モデル保存関係 extern int NS_MV1SaveModelToMV1File( int MHandle, const TCHAR *FileName, int SaveType = MV1_SAVETYPE_NORMAL , int AnimMHandle = -1 , int AnimNameCheck = TRUE , int Normal8BitFlag = 1 , int Position16BitFlag = 1 , int Weight8BitFlag = 0 , int Anim16BitFlag = 1 ) ; // 指定のパスにモデルを保存する( 戻り値 0:成功 -1:メモリ不足 -2:使われていないアニメーションがあった ) @@ -2363,6 +2372,8 @@ extern const wchar_t * MV1GetShapeName_WCHAR_T( int MHandle, int ShapeIndex ) extern float NS_MV1GetAttachAnimBlendRate( int MHandle, int AttachIndex ) ; // アタッチしているアニメーションのブレンド率を取得する extern int NS_MV1SetAttachAnimBlendRateToFrame( int MHandle, int AttachIndex, int FrameIndex, float Rate, int SetChild ) ; // アタッチしているアニメーションのブレンド率を設定する( フレーム単位 ) extern float NS_MV1GetAttachAnimBlendRateToFrame( int MHandle, int AttachIndex, int FrameIndex ) ; // アタッチしているアニメーションのブレンド率を設定する( フレーム単位 ) +extern int NS_MV1SetAttachAnimTimeToFrame( int MHandle, int AttachIndex, int FrameIndex, float Time, int SetChild DEFAULTPARAM( = TRUE ) ) ; // アタッチしているアニメーションの再生時間を設定する( フレーム単位 ) +extern float NS_MV1GetAttachAnimTimeToFrame( int MHandle, int AttachIndex, int FrameIndex ) ; // アタッチしているアニメーションの再生時間を取得する( フレーム単位 ) extern int NS_MV1GetAttachAnim( int MHandle, int AttachIndex ) ; // アタッチしているアニメーションのアニメーションインデックスを取得する extern int NS_MV1SetAttachAnimUseShapeFlag( int MHandle, int AttachIndex, int UseFlag ) ; // アタッチしているアニメーションのシェイプを使用するかどうかを設定する( UseFlag TRUE:使用する( デフォルト ) FALSE:使用しない ) extern int NS_MV1GetAttachAnimUseShapeFlag( int MHandle, int AttachIndex ) ; // アタッチしているアニメーションのシェイプを使用するかどうかを取得する @@ -2664,6 +2675,9 @@ extern const wchar_t * MV1GetShapeName_WCHAR_T( int MHandle, int ShapeIndex ) #define NS_MV1SetLoadModelAnimFilePathWithStrLen MV1SetLoadModelAnimFilePathWithStrLen #define NS_MV1SetLoadModelUsePackDraw MV1SetLoadModelUsePackDraw #define NS_MV1SetLoadModelTriangleListUseMaxBoneNum MV1SetLoadModelTriangleListUseMaxBoneNum +#define NS_MV1SetLoadModelTextureLoad MV1SetLoadModelTextureLoad +#define NS_MV1SetLoadModelIgnoreIK MV1SetLoadModelIgnoreIK + // モデル保存関係 #define NS_MV1SaveModelToMV1File MV1SaveModelToMV1File @@ -2751,6 +2765,8 @@ extern const wchar_t * MV1GetShapeName_WCHAR_T( int MHandle, int ShapeIndex ) #define NS_MV1GetAttachAnimBlendRate MV1GetAttachAnimBlendRate #define NS_MV1SetAttachAnimBlendRateToFrame MV1SetAttachAnimBlendRateToFrame #define NS_MV1GetAttachAnimBlendRateToFrame MV1GetAttachAnimBlendRateToFrame +#define NS_MV1SetAttachAnimTimeToFrame MV1SetAttachAnimTimeToFrame +#define NS_MV1GetAttachAnimTimeToFrame MV1GetAttachAnimTimeToFrame #define NS_MV1GetAttachAnim MV1GetAttachAnim #define NS_MV1SetAttachAnimUseShapeFlag MV1SetAttachAnimUseShapeFlag #define NS_MV1GetAttachAnimUseShapeFlag MV1GetAttachAnimUseShapeFlag diff --git a/DxModelFile.h b/DxModelFile.h index 0b14a3d..f69e5f2 100644 --- a/DxModelFile.h +++ b/DxModelFile.h @@ -2,7 +2,7 @@ // // DXライブラリ モデルデータファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxModelLoader0.cpp b/DxModelLoader0.cpp index 113f966..80713b9 100644 --- a/DxModelLoader0.cpp +++ b/DxModelLoader0.cpp @@ -2,7 +2,7 @@ // // DXライブラリ Xファイル読み込みプログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxModelLoader1.cpp b/DxModelLoader1.cpp index 11c4eb2..8d8390c 100644 --- a/DxModelLoader1.cpp +++ b/DxModelLoader1.cpp @@ -2,7 +2,7 @@ // // DXライブラリ FBXモデルデータ読み込みプログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -44,12 +44,12 @@ struct FBX_MODEL static int AnalyseFbx( MV1_MODEL_R *RModel, FBX_MODEL *Model ) ; // FBXファイルの解析( 0:成功 -1:失敗 ) static int AnalyseFbxNode( MV1_MODEL_R *RModel, FBX_MODEL *Model, MV1_FRAME_R *ParentFrame, FbxNode *pFbxNode ) ; // ノードの解析( -1:エラー ) static int GetFbxAnimInfo( MV1_MODEL_R *RModel, FBX_MODEL *Model, MV1_FRAME_R *Frame, MV1_ANIMSET_R *AnimSet, MV1_ANIM_R **Anim, int DataType, FbxAnimCurve *FbxCurve, float TimeScale, bool Reverse = false, bool DeggToRad = false ) ; // FBXカーブからアニメーション情報を取得する( -1:エラー ) -static MV1_TEXTURE_R *FbxAddTexture( MV1_MODEL_R *RModel, FbxTexture *_FbxTexture ) ; // FBXテクスチャを追加する +static MV1_TEXTURE_R *FbxAddTexture( MV1_MODEL_R *RModel, FbxTexture *_FbxTexture, int BumpMapFlag = FALSE ) ; // FBXテクスチャを追加する // プログラム ----------------------------------- // FBXテクスチャを追加する -static MV1_TEXTURE_R *FbxAddTexture( MV1_MODEL_R *RModel, FbxTexture *_FbxTexture ) +static MV1_TEXTURE_R *FbxAddTexture( MV1_MODEL_R *RModel, FbxTexture *_FbxTexture, int BumpMapFlag ) { MV1_TEXTURE_R *Texture ; FbxFileTexture *pFbxFileTexture ; @@ -84,14 +84,14 @@ static MV1_TEXTURE_R *FbxAddTexture( MV1_MODEL_R *RModel, FbxTexture *_FbxTextur // 長さ無しの場合は特別処理 if( UTF8Length == 0 && ShiftJISLength == 0 ) { - Texture = MV1RAddTexture( RModel, "NoName", "", NULL, FALSE, 0.1f, false ) ; + Texture = MV1RAddTexture( RModel, "NoName", "", NULL, BumpMapFlag, 0.1f, false ) ; } else { // UTF8 の場合はそのまま渡す if( UTF8Length > ShiftJISLength ) { - Texture = MV1RAddTexture( RModel, _FbxTexture->GetName(), RelativeFileName, NULL, FALSE, 0.1f, false ) ; + Texture = MV1RAddTexture( RModel, _FbxTexture->GetName(), RelativeFileName, NULL, BumpMapFlag, 0.1f, false ) ; } else { @@ -109,21 +109,21 @@ static MV1_TEXTURE_R *FbxAddTexture( MV1_MODEL_R *RModel, FbxTexture *_FbxTextur UTF8Length = GetStringCharNum( FilePathUTF8, DX_CHARCODEFORMAT_UTF8 ) ; if( UTF8Length < ShiftJISLength ) { - Texture = MV1RAddTexture( RModel, _FbxTexture->GetName(), RelativeFileName, NULL, FALSE, 0.1f, false ) ; + Texture = MV1RAddTexture( RModel, _FbxTexture->GetName(), RelativeFileName, NULL, BumpMapFlag, 0.1f, false ) ; } else { - Texture = MV1RAddTexture( RModel, _FbxTexture->GetName(), FilePathUTF8, NULL, FALSE, 0.1f, false, false, true, true ) ; + Texture = MV1RAddTexture( RModel, _FbxTexture->GetName(), FilePathUTF8, NULL, BumpMapFlag, 0.1f, false, false, true, true ) ; // ShiftJIS としての読み込みに失敗したら UTF8 として読み込んでみる if( Texture == NULL ) { - Texture = MV1RAddTexture( RModel, _FbxTexture->GetName(), RelativeFileName, NULL, FALSE, 0.1f, false, false, true, true ) ; + Texture = MV1RAddTexture( RModel, _FbxTexture->GetName(), RelativeFileName, NULL, BumpMapFlag, 0.1f, false, false, true, true ) ; // UTF8 としても失敗した場合は改めて ShiftJIS として読み込む if( Texture == NULL ) { - Texture = MV1RAddTexture( RModel, _FbxTexture->GetName(), FilePathUTF8, NULL, FALSE, 0.1f, false ) ; + Texture = MV1RAddTexture( RModel, _FbxTexture->GetName(), FilePathUTF8, NULL, BumpMapFlag, 0.1f, false ) ; } } } @@ -1468,7 +1468,87 @@ static int AnalyseFbxNode( MV1_MODEL_R *RModel, FBX_MODEL *Model, MV1_FRAME_R *P } } + // バンプマップマテリアルプロパティの取得 + { + _FbxProperty = FbxMaterial->FindProperty( FbxSurfaceMaterial::sBump ) ; + + // レイヤードテクスチャの場合とそれ以外で処理を分岐 + LayeredTexNum = _FbxProperty.GetSrcObjectCount< FbxLayeredTexture >() ; + if( LayeredTexNum ) + { + // 2個以上のレイヤーには対応していない + if( LayeredTexNum > 1 ) + { + DXST_LOGFILEFMT_ADDUTF16LE(( "\x46\x00\x62\x00\x78\x00\x20\x00\x4c\x00\x6f\x00\x61\x00\x64\x00\x20\x00\x3a\x00\x20\x00\x42\x00\x75\x00\x6d\x00\x70\x00\x20\x00\xde\x30\xc6\x30\xea\x30\xa2\x30\xeb\x30\x6f\x30\x11\xff\xec\x30\xa4\x30\xe4\x30\xfc\x30\xe5\x4e\x0a\x4e\x6b\x30\x6f\x30\xfe\x5b\xdc\x5f\x57\x30\x66\x30\x44\x30\x7e\x30\x5b\x30\x93\x30\x0a\x00\x00"/*@ L"Fbx Load : Bump マテリアルは1レイヤー以上には対応していません\n" @*/ )) ; + return -1 ; + } + + // テクスチャの数だけ繰り返し + for( j = 0 ; j < LayeredTexNum ; j ++ ) + { + // テクスチャのアドレスを取得 + _FbxLayeredTexture = _FbxProperty.GetSrcObject< FbxLayeredTexture >( j ) ; + + // レイヤーの中に含まれているテクスチャの数を取得する + NormalTexNum = _FbxLayeredTexture->GetSrcObjectCount< FbxTexture >() ; + + // テクスチャの数だけ繰り返し + for( k = 0 ; k < NormalTexNum ; k ++ ) + { + _FbxTexture = _FbxLayeredTexture->GetSrcObject< FbxTexture >( k ) ; + if( _FbxTexture == NULL ) continue ; + + // モデルに追加 + Material->NormalTexs[ Material->NormalTexNum ] = FbxAddTexture( RModel, _FbxTexture, TRUE ) ; + if( Material->NormalTexs[ Material->NormalTexNum ] == NULL ) + { + DXST_LOGFILEFMT_ADDUTF16LE(( "\x46\x00\x62\x00\x78\x00\x20\x00\x4c\x00\x6f\x00\x61\x00\x64\x00\x20\x00\x3a\x00\x20\x00\x42\x00\x75\x00\x6d\x00\x70\x00\x20\x00\xc6\x30\xaf\x30\xb9\x30\xc1\x30\xe3\x30\xaa\x30\xd6\x30\xb8\x30\xa7\x30\xaf\x30\xc8\x30\x6e\x30\xfd\x8f\xa0\x52\x6b\x30\x31\x59\x57\x65\x57\x30\x7e\x30\x57\x30\x5f\x30\x0a\x00\x00"/*@ L"Fbx Load : Bump テクスチャオブジェクトの追加に失敗しました\n" @*/ )) ; + return -1 ; + } + + // 合成方法を取得する + _FbxLayeredTexture->GetTextureBlendMode( k, BlendMode ) ; + switch( BlendMode ) + { + case FbxLayeredTexture::eTranslucent : Material->NormalTexs[ Material->NormalTexNum ]->BlendType = MV1_LAYERBLEND_TYPE_TRANSLUCENT ; break ; + case FbxLayeredTexture::eAdditive : Material->NormalTexs[ Material->NormalTexNum ]->BlendType = MV1_LAYERBLEND_TYPE_ADDITIVE ; break ; + case FbxLayeredTexture::eModulate : Material->NormalTexs[ Material->NormalTexNum ]->BlendType = MV1_LAYERBLEND_TYPE_MODULATE ; break ; + case FbxLayeredTexture::eModulate2 : Material->NormalTexs[ Material->NormalTexNum ]->BlendType = MV1_LAYERBLEND_TYPE_MODULATE2 ; break ; + } + + // テクスチャの数をインクリメント + Material->NormalTexNum ++ ; + } + } + } + else + { + // 通常のテクスチャの数を取得 + Material->NormalTexNum = _FbxProperty.GetSrcObjectCount< FbxTexture >() ; + + // 使用している場合は処理 + if( Material->NormalTexNum != 0 ) + { + // テクスチャの数だけ繰り返し + for( j = 0 ; j < Material->NormalTexNum ; j ++ ) + { + // テクスチャのアドレスを取得 + _FbxTexture = _FbxProperty.GetSrcObject< FbxTexture >( j ) ; + + // モデルに追加 + Material->NormalTexs[ j ] = FbxAddTexture( RModel, _FbxTexture, TRUE ) ; + if( Material->NormalTexs[ j ] == NULL ) + { + DXST_LOGFILEFMT_ADDUTF16LE(( "\x46\x00\x62\x00\x78\x00\x20\x00\x4c\x00\x6f\x00\x61\x00\x64\x00\x20\x00\x3a\x00\x20\x00\x42\x00\x75\x00\x6d\x00\x70\x00\x20\x00\xc6\x30\xaf\x30\xb9\x30\xc1\x30\xe3\x30\xaa\x30\xd6\x30\xb8\x30\xa7\x30\xaf\x30\xc8\x30\x6e\x30\xfd\x8f\xa0\x52\x6b\x30\x31\x59\x57\x65\x57\x30\x7e\x30\x57\x30\x5f\x30\x0a\x00\x00"/*@ L"Fbx Load : Bump テクスチャオブジェクトの追加に失敗しました\n" @*/ )) ; + return -1 ; + } + } + } + } + } + // 法線マップマテリアルプロパティの取得 + if( Material->NormalTexNum == 0 ) { _FbxProperty = FbxMaterial->FindProperty( FbxSurfaceMaterial::sNormalMap ) ; @@ -1479,7 +1559,7 @@ static int AnalyseFbxNode( MV1_MODEL_R *RModel, FBX_MODEL *Model, MV1_FRAME_R *P // 2個以上のレイヤーには対応していない if( LayeredTexNum > 1 ) { - DXST_LOGFILEFMT_ADDUTF16LE(( "\x46\x00\x62\x00\x78\x00\x20\x00\x4c\x00\x6f\x00\x61\x00\x64\x00\x20\x00\x3a\x00\x20\x00\x42\x00\x75\x00\x6d\x00\x70\x00\x20\x00\xde\x30\xc6\x30\xea\x30\xa2\x30\xeb\x30\x6f\x30\x11\xff\xec\x30\xa4\x30\xe4\x30\xfc\x30\xe5\x4e\x0a\x4e\x6b\x30\x6f\x30\xfe\x5b\xdc\x5f\x57\x30\x66\x30\x44\x30\x7e\x30\x5b\x30\x93\x30\x0a\x00\x00"/*@ L"Fbx Load : Bump マテリアルは1レイヤー以上には対応していません\n" @*/ )) ; + DXST_LOGFILEFMT_ADDUTF16LE(( "\x46\x00\x62\x00\x78\x00\x20\x00\x4c\x00\x6f\x00\x61\x00\x64\x00\x20\x00\x3a\x00\x20\x00\x4e\x00\x6f\x00\x72\x00\x6d\x00\x61\x00\x6c\x00\x4d\x00\x61\x00\x70\x00\x20\x00\xde\x30\xc6\x30\xea\x30\xa2\x30\xeb\x30\x6f\x30\x11\xff\xec\x30\xa4\x30\xe4\x30\xfc\x30\xe5\x4e\x0a\x4e\x6b\x30\x6f\x30\xfe\x5b\xdc\x5f\x57\x30\x66\x30\x44\x30\x7e\x30\x5b\x30\x93\x30\x0a\x00\x00"/*@ L"Fbx Load : NormalMap マテリアルは1レイヤー以上には対応していません\n" @*/ )) ; return -1 ; } @@ -2204,18 +2284,23 @@ extern int MV1LoadModelToFBX( const MV1_MODEL_LOAD_PARAM *LoadParam, int ASyncTh ConvString( ( const char * )LoadParam->FilePath, -1, WCHAR_T_CHARCODEFORMAT, ( char * )UTF8Buffer, sizeof( UTF8Buffer ), DX_CHARCODEFORMAT_UTF8 ) ; if( FbxModel.pManager->GetIOPluginRegistry()->DetectReaderFileFormat( UTF8Buffer, iFileFormat ) == false ) { + DXST_LOGFILEFMT_ADDUTF16LE(( "\x46\x00\x62\x00\x78\x00\x20\x00\x4c\x00\x6f\x00\x61\x00\x64\x00\x20\x00\x3a\x00\x20\x00\x46\x00\x42\x00\x58\x00\xd5\x30\xa9\x30\xfc\x30\xde\x30\xc3\x30\xc8\x30\x6e\x30\xc1\x30\xa7\x30\xc3\x30\xaf\x30\x6b\x30\x31\x59\x57\x65\x57\x30\x7e\x30\x57\x30\x5f\x30\x0a\x00\x00"/*@ L"Fbx Load : FBXフォーマットのチェックに失敗しました\n" @*/ )) ; goto FUNCTIONEND ; } // 読み込み if( FbxModel.pImporter->Initialize( UTF8Buffer, iFileFormat, FbxModel.pIOSettings ) == false ) { + DXST_LOGFILEFMT_ADDUTF16LE(( "\x46\x00\x62\x00\x78\x00\x20\x00\x4c\x00\x6f\x00\x61\x00\x64\x00\x20\x00\x3a\x00\x20\x00\x46\x00\x42\x00\x58\x00\x20\x00\x49\x00\x6d\x00\x70\x00\x6f\x00\x72\x00\x74\x00\x65\x00\x72\x00\x20\x00\x6e\x30\x20\x00\x49\x00\x6e\x00\x69\x00\x74\x00\x69\x00\x61\x00\x6c\x00\x69\x00\x7a\x00\x65\x00\x20\x00\x4c\x30\x31\x59\x57\x65\x57\x30\x7e\x30\x57\x30\x5f\x30\x0a\x00\x00"/*@ L"Fbx Load : FBX Importer の Initialize が失敗しました\n" @*/ )) ; goto FUNCTIONEND ; } // FBXかチェック if( FbxModel.pImporter->IsFBX() == false ) + { + DXST_LOGFILEFMT_ADDUTF16LE(( "\x46\x00\x62\x00\x78\x00\x20\x00\x4c\x00\x6f\x00\x61\x00\x64\x00\x20\x00\x3a\x00\x20\x00\x46\x00\x42\x00\x58\x00\x20\x00\x49\x00\x6d\x00\x70\x00\x6f\x00\x72\x00\x74\x00\x65\x00\x72\x00\x20\x00\x6e\x30\x20\x00\x49\x00\x73\x00\x46\x00\x42\x00\x58\x00\x20\x00\x67\x30\x0e\x30\x46\x00\x42\x00\x58\x00\x20\x00\xd5\x30\xa1\x30\xa4\x30\xeb\x30\x67\x30\x6f\x30\x6a\x30\x44\x30\x0f\x30\x68\x30\x24\x52\x9a\x5b\x55\x30\x8c\x30\x7e\x30\x57\x30\x5f\x30\x0a\x00\x00"/*@ L"Fbx Load : FBX Importer の IsFBX で『FBX ファイルではない』と判定されました\n" @*/ )) ; goto FUNCTIONEND ; + } // 読み取り情報の設定 FbxModel.pIOSettings->SetBoolProp( IMP_FBX_MATERIAL, true ) ; @@ -2242,11 +2327,18 @@ extern int MV1LoadModelToFBX( const MV1_MODEL_LOAD_PARAM *LoadParam, int ASyncTh // ノードを手繰る if( AnalyseFbx( &RModel, &FbxModel ) == -1 ) + { + DXST_LOGFILEFMT_ADDUTF16LE(( "\x46\x00\x62\x00\x78\x00\x20\x00\x4c\x00\x6f\x00\x61\x00\x64\x00\x20\x00\x3a\x00\x20\x00\x41\x00\x6e\x00\x61\x00\x6c\x00\x79\x00\x73\x00\x65\x00\x46\x00\x62\x00\x78\x00\x20\x00\x4c\x30\x31\x59\x57\x65\x57\x30\x7e\x30\x57\x30\x5f\x30\x0a\x00\x00"/*@ L"Fbx Load : AnalyseFbx が失敗しました\n" @*/ )) ; goto FUNCTIONEND ; + } // モデル基データハンドルの作成 NewHandle = MV1LoadModelToReadModel( &LoadParam->GParam, &RModel, LoadParam->CurrentDir, LoadParam->FileReadFunc, ASyncThread ) ; - if( NewHandle < 0 ) goto FUNCTIONEND ; + if( NewHandle < 0 ) + { + DXST_LOGFILEFMT_ADDUTF16LE(( "\x46\x00\x62\x00\x78\x00\x20\x00\x4c\x00\x6f\x00\x61\x00\x64\x00\x20\x00\x3a\x00\x20\x00\x4d\x00\x56\x00\x31\x00\x4c\x00\x6f\x00\x61\x00\x64\x00\x4d\x00\x6f\x00\x64\x00\x65\x00\x6c\x00\x54\x00\x6f\x00\x52\x00\x65\x00\x61\x00\x64\x00\x4d\x00\x6f\x00\x64\x00\x65\x00\x6c\x00\x20\x00\x4c\x30\x31\x59\x57\x65\x57\x30\x7e\x30\x57\x30\x5f\x30\x0a\x00\x00"/*@ L"Fbx Load : MV1LoadModelToReadModel が失敗しました\n" @*/ )) ; + goto FUNCTIONEND ; + } // エラーフラグを倒す ErrorFlag = 0 ; diff --git a/DxModelLoader2.cpp b/DxModelLoader2.cpp index e9f070b..8ecfe8e 100644 --- a/DxModelLoader2.cpp +++ b/DxModelLoader2.cpp @@ -2,7 +2,7 @@ // // DXライブラリ MQOモデルデータ読み込みプログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxModelLoader3.cpp b/DxModelLoader3.cpp index e0d91a1..82f4070 100644 --- a/DxModelLoader3.cpp +++ b/DxModelLoader3.cpp @@ -2,7 +2,7 @@ // // DXライブラリ PMDモデルデータ読み込みプログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -1411,7 +1411,7 @@ PHYSICSDATAREADEND : DisablePhysicsFlag, BoneInfoDim, PmdBoneNum, - IKInfoFirst, + LoadParam->GParam.LoadModelToIgnoreIK ? NULL : IKInfoFirst, #ifndef DX_NON_BULLET_PHYSICS ValidPhysics && LoadParam->GParam.LoadModelToUsePhysicsMode == DX_LOADMODEL_PHYSICS_LOADCALC ? &MLPhysicsInfo : NULL, #endif @@ -2630,14 +2630,14 @@ static int _MV1LoadModelToVMD_PMD( // すべてのフレームの現在のフレームでのパラメータを算出する for( j = 0 ; j < PmdBoneNum ; j ++ ) { - if( PmdBoneInfo[ j ].IsIK == FALSE ) + if( PmdBoneInfo[ j ].IsIK == FALSE && PmdIKInfoFirst != NULL ) { MV1LoadModelToPMD_SetupOneBoneMatrixFormAnimKey( &PmdBoneInfo[ j ], TimeNo, LoopNo, MaxTime, TimeDivLoopCount == 0 ? FALSE : ValidNextRate, NextRate ) ; } } // 行列の計算 - MV1LoadModelToPMD_SetupMatrix( PmdBoneInfo, PmdBoneNum, FALSE, TRUE ) ; + MV1LoadModelToPMD_SetupMatrix( PmdBoneInfo, PmdBoneNum, FALSE, PmdIKInfoFirst != NULL ? TRUE : FALSE ) ; } else { @@ -2690,14 +2690,14 @@ static int _MV1LoadModelToVMD_PMD( BoneInfo = PmdBoneInfo ; for( j = 0 ; j < PmdBoneNum ; j ++, BoneInfo ++ ) { - if( BoneInfo->IsIK ) + if( BoneInfo->IsIK && PmdIKInfoFirst != NULL ) { BoneInfo->KeyPosTime[ TimeNo ] = ( float )TimeNo / 2.0f ; BoneInfo->KeyRotTime[ TimeNo ] = ( float )TimeNo / 2.0f ; } } - if( ValidNextRate || FPS60 || ( FPS60 == false && TimeNo % 2 == 0 ) ) + if( ( ValidNextRate || FPS60 || ( FPS60 == false && TimeNo % 2 == 0 ) ) && PmdIKInfoFirst != NULL ) { // IKに関わっているボーン又はIKの影響しないIKボーンの子ボーンのキーを保存 BoneInfo = PmdBoneInfo ; @@ -3125,7 +3125,7 @@ static int _MV1LoadModelToVMD_PMD( #ifndef DX_NON_BULLET_PHYSICS if( MLPhysicsInfo && BoneInfo->IsPhysics == TRUE && CheckDisablePhysicsAnim_PMDPhysicsInfo( MLPhysicsInfo, BoneInfo->PhysicsIndex ) == false ) continue ; #endif - if( BoneInfo->IsIKChild ) continue ; + if( BoneInfo->IsIKChild && PmdIKInfoFirst != NULL ) continue ; if( BoneInfo->Anim == NULL ) continue ; diff --git a/DxModelLoader3.h b/DxModelLoader3.h index bdc8a0e..b1102d5 100644 --- a/DxModelLoader3.h +++ b/DxModelLoader3.h @@ -2,7 +2,7 @@ // // DXライブラリ モデルデータ読み込み処理3用ヘッダ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxModelLoader4.cpp b/DxModelLoader4.cpp index fee6f24..ce72a4a 100644 --- a/DxModelLoader4.cpp +++ b/DxModelLoader4.cpp @@ -2,7 +2,7 @@ // // DXライブラリ PMXモデルデータ読み込みプログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -569,8 +569,8 @@ extern int MV1LoadModelToPMX( const MV1_MODEL_LOAD_PARAM *LoadParam, int ASyncTh PmxBone[ i ].Flag_Disp = ( BYTE )( ( Flag & 0x0008 ) != 0 ? 1 : 0 ) ; PmxBone[ i ].Flag_EnableControl = ( BYTE )( ( Flag & 0x0010 ) != 0 ? 1 : 0 ) ; PmxBone[ i ].Flag_IK = ( BYTE )( ( Flag & 0x0020 ) != 0 ? 1 : 0 ) ; - PmxBone[ i ].Flag_AddRot = ( BYTE )( ( Flag & 0x0100 ) != 0 ? 1 : 0 ) ; - PmxBone[ i ].Flag_AddMov = ( BYTE )( ( Flag & 0x0200 ) != 0 ? 1 : 0 ) ; + PmxBone[ i ].Flag_AddRot = ( BYTE )( ( Flag & 0x0100 ) != 0 ? 1 : 0 ) ; + PmxBone[ i ].Flag_AddMov = ( BYTE )( ( Flag & 0x0200 ) != 0 ? 1 : 0 ) ; PmxBone[ i ].Flag_LockAxis = ( BYTE )( ( Flag & 0x0400 ) != 0 ? 1 : 0 ) ; PmxBone[ i ].Flag_LocalAxis = ( BYTE )( ( Flag & 0x0800 ) != 0 ? 1 : 0 ) ; PmxBone[ i ].Flag_AfterPhysicsTransform = ( BYTE )( ( Flag & 0x1000 ) != 0 ? 1 : 0 ) ; @@ -633,7 +633,7 @@ extern int MV1LoadModelToPMX( const MV1_MODEL_LOAD_PARAM *LoadParam, int ASyncTh READ_MEM_4BYTE( &PmxBone[ i ].IKInfo.RotLimit, Src ) ; Src += 4 ; - PmxBone[ i ].IKInfo.LinkNum = *( ( int * )Src ) ; + PmxBone[ i ].IKInfo.LinkNum = GET_MEM_SIGNED_DWORD( Src ) ; Src += 4 ; if( PmxBone[ i ].IKInfo.LinkNum >= PMX_MAX_IKLINKNUM ) { @@ -661,6 +661,12 @@ extern int MV1LoadModelToPMX( const MV1_MODEL_LOAD_PARAM *LoadParam, int ASyncTh } } } + + if( LoadParam->GParam.LoadModelToIgnoreIK == TRUE ) + { + PmxBone[ i ].Flag_IK = 0 ; + PmxBone[ i ].IKInfo.LinkNum = 0 ; + } } // モーフ情報の数を取得 @@ -1094,7 +1100,7 @@ extern int MV1LoadModelToPMX( const MV1_MODEL_LOAD_PARAM *LoadParam, int ASyncTh BoneInfo->Frame = FrameDim[ i ] ; BoneInfo->IsPhysics = FALSE ; BoneInfo->IsIK = FALSE ; - BoneInfo->IsAddParent = PmxBone[ i ].Flag_AddMov == 1 || PmxBone[ i ].Flag_AddRot == 1 ? 1 : 0 ; + BoneInfo->IsAddParent = LoadParam->GParam.LoadModelToIgnoreIK == FALSE && ( PmxBone[ i ].Flag_AddMov == 1 || PmxBone[ i ].Flag_AddRot == 1 ) ? 1 : 0 ; BoneInfo->IsIKAnim = FALSE ; BoneInfo->IsIKChild = FALSE ; BoneInfo->Translate = FrameDim[ i ]->Translate ; @@ -1281,95 +1287,98 @@ extern int MV1LoadModelToPMX( const MV1_MODEL_LOAD_PARAM *LoadParam, int ASyncTh } } - // IKの情報を格納するメモリ領域の確保 - if( PmxIKNum ) + if( LoadParam->GParam.LoadModelToIgnoreIK == FALSE ) { - IKInfoDim = ( PMX_READ_IK_INFO * )DXALLOC( sizeof( PMX_READ_IK_INFO ) * PmxIKNum ) ; - if( IKInfoDim == NULL ) + // IKの情報を格納するメモリ領域の確保 + if( PmxIKNum ) { - DXST_LOGFILEFMT_ADDUTF16LE(( "\x50\x00\x4d\x00\x58\x00\x20\x00\x4c\x00\x6f\x00\x61\x00\x64\x00\x20\x00\x45\x00\x72\x00\x72\x00\x6f\x00\x72\x00\x20\x00\x3a\x00\x20\x00\xad\x8a\x7f\x30\xbc\x8f\x7f\x30\xe6\x51\x06\x74\x28\x75\x29\xff\x2b\xff\xc5\x60\x31\x58\x92\x30\x3c\x68\x0d\x7d\x59\x30\x8b\x30\xe1\x30\xe2\x30\xea\x30\x18\x98\xdf\x57\x6e\x30\xba\x78\xdd\x4f\x6b\x30\x31\x59\x57\x65\x57\x30\x7e\x30\x57\x30\x5f\x30\x0a\x00\x00"/*@ L"PMX Load Error : 読み込み処理用IK情報を格納するメモリ領域の確保に失敗しました\n" @*/ )) ; - goto ENDLABEL ; + IKInfoDim = ( PMX_READ_IK_INFO * )DXALLOC( sizeof( PMX_READ_IK_INFO ) * PmxIKNum ) ; + if( IKInfoDim == NULL ) + { + DXST_LOGFILEFMT_ADDUTF16LE(( "\x50\x00\x4d\x00\x58\x00\x20\x00\x4c\x00\x6f\x00\x61\x00\x64\x00\x20\x00\x45\x00\x72\x00\x72\x00\x6f\x00\x72\x00\x20\x00\x3a\x00\x20\x00\xad\x8a\x7f\x30\xbc\x8f\x7f\x30\xe6\x51\x06\x74\x28\x75\x29\xff\x2b\xff\xc5\x60\x31\x58\x92\x30\x3c\x68\x0d\x7d\x59\x30\x8b\x30\xe1\x30\xe2\x30\xea\x30\x18\x98\xdf\x57\x6e\x30\xba\x78\xdd\x4f\x6b\x30\x31\x59\x57\x65\x57\x30\x7e\x30\x57\x30\x5f\x30\x0a\x00\x00"/*@ L"PMX Load Error : 読み込み処理用IK情報を格納するメモリ領域の確保に失敗しました\n" @*/ )) ; + goto ENDLABEL ; + } } - } - // IKデータの追加 - IKInfo = IKInfoDim ; - IKInfoFirst = NULL ; - i = 0 ; - for( k = 0 ; ( DWORD )k < PmxBoneNum ; k ++ ) - { - if( PmxBone[ k ].Flag_IK == 0 ) continue ; - -// PMX_READ_BONE_INFO *BoneBone ; + // IKデータの追加 + IKInfo = IKInfoDim ; + IKInfoFirst = NULL ; + i = 0 ; + for( k = 0 ; ( DWORD )k < PmxBoneNum ; k ++ ) + { + if( PmxBone[ k ].Flag_IK == 0 ) continue ; - // データをセット - IKInfo->Base = &PmxBone[ k ].IKInfo ; - IKInfo->Bone = &BoneInfoDim[ k ] ; - IKInfo->TargetBone = &BoneInfoDim[ PmxBone[ k ].IKInfo.TargetBoneIndex ] ; - IKInfo->TargetBone->IsIK = TRUE ; + // PMX_READ_BONE_INFO *BoneBone ; - for( j = 0 ; j < IKInfo->Base->LinkNum ; j ++ ) - { -// BoneBone = &BoneInfoDim[ IKInfo->Base->Link[ j ].BoneIndex ] ; - BoneInfoDim[ IKInfo->Base->Link[ j ].BoneIndex ].IsIK = TRUE ; - } + // データをセット + IKInfo->Base = &PmxBone[ k ].IKInfo ; + IKInfo->Bone = &BoneInfoDim[ k ] ; + IKInfo->TargetBone = &BoneInfoDim[ PmxBone[ k ].IKInfo.TargetBoneIndex ] ; + IKInfo->TargetBone->IsIK = TRUE ; - // リストに追加 - if( IKInfoFirst == NULL ) - { - IKInfoFirst = IKInfo ; - IKInfo->Prev = NULL ; - IKInfo->Next = NULL ; - } - else - { - PMX_READ_IK_INFO *IKInfoTemp ; + for( j = 0 ; j < IKInfo->Base->LinkNum ; j ++ ) + { + // BoneBone = &BoneInfoDim[ IKInfo->Base->Link[ j ].BoneIndex ] ; + BoneInfoDim[ IKInfo->Base->Link[ j ].BoneIndex ].IsIK = TRUE ; + } - for( IKInfoTemp = IKInfoFirst ; IKInfoTemp->Next != NULL && IKInfoTemp->Base->Link[ 0 ].BoneIndex < IKInfo->Base->Link[ 0 ].BoneIndex ; IKInfoTemp = IKInfoTemp->Next ){} - if( IKInfoTemp->Next == NULL && IKInfoTemp->Base->Link[ 0 ].BoneIndex < IKInfo->Base->Link[ 0 ].BoneIndex ) + // リストに追加 + if( IKInfoFirst == NULL ) { - IKInfoTemp->Next = IKInfo ; + IKInfoFirst = IKInfo ; + IKInfo->Prev = NULL ; IKInfo->Next = NULL ; - IKInfo->Prev = IKInfoTemp ; } else { - if( IKInfoTemp->Prev == NULL ) + PMX_READ_IK_INFO *IKInfoTemp ; + + for( IKInfoTemp = IKInfoFirst ; IKInfoTemp->Next != NULL && IKInfoTemp->Base->Link[ 0 ].BoneIndex < IKInfo->Base->Link[ 0 ].BoneIndex ; IKInfoTemp = IKInfoTemp->Next ){} + if( IKInfoTemp->Next == NULL && IKInfoTemp->Base->Link[ 0 ].BoneIndex < IKInfo->Base->Link[ 0 ].BoneIndex ) { - IKInfoTemp->Prev = IKInfo ; - IKInfo->Next = IKInfoTemp ; - IKInfo->Prev = NULL ; - IKInfoFirst = IKInfo ; + IKInfoTemp->Next = IKInfo ; + IKInfo->Next = NULL ; + IKInfo->Prev = IKInfoTemp ; } else { - IKInfo->Prev = IKInfoTemp->Prev ; - IKInfo->Next = IKInfoTemp ; - IKInfoTemp->Prev->Next = IKInfo ; - IKInfoTemp->Prev = IKInfo ; + if( IKInfoTemp->Prev == NULL ) + { + IKInfoTemp->Prev = IKInfo ; + IKInfo->Next = IKInfoTemp ; + IKInfo->Prev = NULL ; + IKInfoFirst = IKInfo ; + } + else + { + IKInfo->Prev = IKInfoTemp->Prev ; + IKInfo->Next = IKInfoTemp ; + IKInfoTemp->Prev->Next = IKInfo ; + IKInfoTemp->Prev = IKInfo ; + } } } - } - IKInfo ++ ; - } + IKInfo ++ ; + } - // IKの影響を受けるボーンの子でIKの影響を受けないボーンに印をつける - BoneInfo = BoneInfoDim ; - for( i = 0 ; ( DWORD )i < PmxBoneNum ; i ++, BoneInfo ++ ) - { - PMX_READ_BONE_INFO *ParentBone ; + // IKの影響を受けるボーンの子でIKの影響を受けないボーンに印をつける + BoneInfo = BoneInfoDim ; + for( i = 0 ; ( DWORD )i < PmxBoneNum ; i ++, BoneInfo ++ ) + { + PMX_READ_BONE_INFO *ParentBone ; - if( BoneInfo->IsIK || BoneInfo->IsAddParent ) - continue ; + if( BoneInfo->IsIK || BoneInfo->IsAddParent ) + continue ; - if( BoneInfo->Frame->Parent == NULL ) - continue ; + if( BoneInfo->Frame->Parent == NULL ) + continue ; - ParentBone = ( PMX_READ_BONE_INFO * )BoneInfo->Frame->Parent->UserData ; - if( ParentBone->IsIK || ParentBone->IsAddParent ) - { - BoneInfo->IsIKChild = TRUE ; + ParentBone = ( PMX_READ_BONE_INFO * )BoneInfo->Frame->Parent->UserData ; + if( ParentBone->IsIK || ParentBone->IsAddParent ) + { + BoneInfo->IsIKChild = TRUE ; + } } } diff --git a/DxModelLoader4.h b/DxModelLoader4.h index 0c74f6a..40034cb 100644 --- a/DxModelLoader4.h +++ b/DxModelLoader4.h @@ -2,7 +2,7 @@ // // DXライブラリ モデルデータ読み込み処理4用ヘッダ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxModelLoaderVMD.cpp b/DxModelLoaderVMD.cpp index 933bc37..8af3e45 100644 --- a/DxModelLoaderVMD.cpp +++ b/DxModelLoaderVMD.cpp @@ -2,7 +2,7 @@ // // DXライブラリ VMDデータ読み込みプログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxModelLoaderVMD.h b/DxModelLoaderVMD.h index 3b6c123..3e32f24 100644 --- a/DxModelLoaderVMD.h +++ b/DxModelLoaderVMD.h @@ -2,7 +2,7 @@ // // DXライブラリ VMDファイルデータ構造体ヘッダ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxModelRead.cpp b/DxModelRead.cpp index 39a0db1..da5841e 100644 --- a/DxModelRead.cpp +++ b/DxModelRead.cpp @@ -2,7 +2,7 @@ // // DXライブラリ モデルデータ読み込みプログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -6298,6 +6298,7 @@ extern int MV1LoadModelToReadModel( } } + MBTexture->GraphHandle = 0 ; if( __MV1LoadTexture( &MBTexture->ColorImage, &MBTexture->ColorImageSize, &MBTexture->AlphaImage, &MBTexture->AlphaImageSize, @@ -6317,6 +6318,7 @@ extern int MV1LoadModelToReadModel( ReadFunc, false, TRUE, + GParam->LoadModelToNotTextureLoad, ASyncThread ) == -1 ) { DXST_LOGFILEFMT_ADDW(( L"Read Model Convert Error : Texture Load Error : %s\n", Texture->NameW ) ) ; @@ -6329,14 +6331,14 @@ extern int MV1LoadModelToReadModel( MBTexture->AlphaImageFilePathAllocMem = FALSE ; // ファイルパスを保存 - if( MBTexture->ColorImage ) + if( MBTexture->ColorImage || GParam->LoadModelToNotTextureLoad ) { #ifndef UNICODE MBTexture->ColorFilePathA = MV1RGetStringSpace( MBase, Texture->ColorFileNameA ) ; #endif MBTexture->ColorFilePathW = MV1RGetStringSpaceW( MBase, Texture->ColorFileNameW ) ; } - if( MBTexture->AlphaImage && Texture->AlphaFileNameW ) + if( ( MBTexture->AlphaImage || GParam->LoadModelToNotTextureLoad ) && Texture->AlphaFileNameW ) { #ifndef UNICODE MBTexture->AlphaFilePathA = MV1RGetStringSpace( MBase, Texture->AlphaFileNameA ) ; diff --git a/DxModelRead.h b/DxModelRead.h index b5a7340..0a6ab2a 100644 --- a/DxModelRead.h +++ b/DxModelRead.h @@ -2,7 +2,7 @@ // // DXライブラリ モデルデータ読み込みヘッダ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxMovie.cpp b/DxMovie.cpp index 035839d..87efe0b 100644 --- a/DxMovie.cpp +++ b/DxMovie.cpp @@ -2,7 +2,7 @@ // // DXライブラリ ムービー再生処理用プログラム // -// Ver 3.23 +// Ver 3.24b // // ---------------------------------------------------------------------------- @@ -61,7 +61,7 @@ extern int InitializeMovieManage( void ) return -1 ; // ハンドル管理情報の初期化 - InitializeHandleManage( DX_HANDLETYPE_MOVIE, sizeof( MOVIEGRAPH ), MAX_MOVIE_NUM, InitializeMovieHandle, TerminateMovieHandle, L"Movie" ) ; + InitializeHandleManage( DX_HANDLETYPE_MOVIE, sizeof( MOVIEGRAPH ), MAX_MOVIE_NUM, InitializeMovieHandle, TerminateMovieHandle, NULL, L"Movie" ) ; // 環境依存の初期化処理を行う if( InitializeMovieManage_PF() < 0 ) @@ -493,7 +493,7 @@ extern int PauseMovie( int MovieHandle, int SysPause ) // Vorbis の再生を停止する #ifndef DX_NON_SOUND - NS_StopSoundMem( Movie->TheoraVorbisHandle ) ; + NS_StopSoundMem( Movie->TheoraVorbisHandle, FALSE ) ; #endif // DX_NON_SOUND // 現在の再生時間分までフレームを進めておく @@ -592,7 +592,7 @@ extern int SeekMovie( int MovieHandle, int Time ) #ifndef DX_NON_SOUND if( Movie->PlayFlag ) { - NS_StopSoundMem( Movie->TheoraVorbisHandle ) ; + NS_StopSoundMem( Movie->TheoraVorbisHandle, FALSE ) ; } NS_SetSoundCurrentTime( Time, Movie->TheoraVorbisHandle ) ; if( Movie->PlayFlag ) @@ -862,7 +862,7 @@ extern int SeekMovieToFrame( int MovieHandle, int Frame ) #ifndef DX_NON_SOUND if( Movie->PlayFlag ) { - NS_StopSoundMem( Movie->TheoraVorbisHandle ) ; + NS_StopSoundMem( Movie->TheoraVorbisHandle, FALSE ) ; } NS_SetSoundCurrentTime( _DTOL( Frame * 1000 / Movie->TheoraFrameRate ), Movie->TheoraVorbisHandle ) ; if( Movie->PlayFlag ) diff --git a/DxMovie.h b/DxMovie.h index ab39086..188f418 100644 --- a/DxMovie.h +++ b/DxMovie.h @@ -2,7 +2,7 @@ // // DXライブラリ 動画プログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxNetwork.cpp b/DxNetwork.cpp index 94c4eb8..8803fee 100644 --- a/DxNetwork.cpp +++ b/DxNetwork.cpp @@ -2,7 +2,7 @@ // // DXライブラリ 通信関連プログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -268,7 +268,7 @@ extern int InitializeNetWork( HWND WindowHandle ) ErrorNetLogTabAdd() ; // ハンドル管理情報の初期化 - InitializeHandleManage( DX_HANDLETYPE_NETWORK, sizeof( SOCKETDATA ), MAX_SOCKET_NUM, InitializeNetworkHandle, TerminateNetworkHandle, L"Network" ) ; + InitializeHandleManage( DX_HANDLETYPE_NETWORK, sizeof( SOCKETDATA ), MAX_SOCKET_NUM, InitializeNetworkHandle, TerminateNetworkHandle, NULL, L"Network" ) ; // WinSockets初期化 if( WinAPIData.WinSockFunc.WSAStartupFunc( MAKEWORD( 2 , 2 ), &wsaData ) != 0 ) diff --git a/DxNetwork.h b/DxNetwork.h index df8d5e0..b7d74c9 100644 --- a/DxNetwork.h +++ b/DxNetwork.h @@ -2,7 +2,7 @@ // // DXライブラリ 通信プログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxRingBuffer.cpp b/DxRingBuffer.cpp index 9b5c95b..2a27abc 100644 --- a/DxRingBuffer.cpp +++ b/DxRingBuffer.cpp @@ -2,7 +2,7 @@ // // DXライブラリ リングバッファプログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxRingBuffer.h b/DxRingBuffer.h index ee36daa..ebb90b8 100644 --- a/DxRingBuffer.h +++ b/DxRingBuffer.h @@ -2,7 +2,7 @@ // // DXライブラリ リングバッファプログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxSoftImage.cpp b/DxSoftImage.cpp index 6cfb9c3..9f1d6e5 100644 --- a/DxSoftImage.cpp +++ b/DxSoftImage.cpp @@ -2,7 +2,7 @@ // // DXライブラリ ソフトウェアで扱う画像プログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -53,7 +53,7 @@ extern int InitializeSoftImageManage( void ) return -1 ; // ソフトイメージハンドル管理情報の初期化 - InitializeHandleManage( DX_HANDLETYPE_SOFTIMAGE, sizeof( SOFTIMAGE ), MAX_SOFTIMAGE_NUM, InitializeSoftImageHandle, TerminateSoftImageHandle, L"SoftImage" ) ; + InitializeHandleManage( DX_HANDLETYPE_SOFTIMAGE, sizeof( SOFTIMAGE ), MAX_SOFTIMAGE_NUM, InitializeSoftImageHandle, TerminateSoftImageHandle, NULL, L"SoftImage" ) ; // 初期化フラグを立てる SoftImageManage.InitializeFlag = TRUE ; @@ -116,6 +116,7 @@ extern int NS_InitSoftImage( void ) // LoadSoftImage の実処理関数 static int LoadSoftImage_Static( int SIHandle, + LOADBASEIMAGE_GPARAM *GParam, const wchar_t *FileName, int ASyncThread ) @@ -135,7 +136,14 @@ static int LoadSoftImage_Static( } // CreateBaseImageToFile でファイルから読み込み - if( CreateBaseImageToFile_WCHAR_T( FileName, &SoftImg->BaseImage, FALSE ) == -1 ) + if( /* CreateBaseImageToFile_WCHAR_T( FileName, &SoftImg->BaseImage, FALSE ) == -1 */ + CreateGraphImageOrDIBGraph_UseGParam( + GParam, + FileName, + NULL, 0, LOADIMAGE_TYPE_FILE, + FALSE, FALSE, FALSE, + &SoftImg->BaseImage, NULL, NULL + ) == -1 ) return -1 ; // 正常終了 @@ -149,15 +157,17 @@ static void LoadSoftImage_ASync( ASYNCLOADDATA_COMMON *AParam ) { int SIHandle ; const wchar_t *FileName ; + LOADBASEIMAGE_GPARAM *GParam ; int Addr ; int Result ; SOFTIMAGE *SoftImg ; Addr = 0 ; + GParam = ( LOADBASEIMAGE_GPARAM * )GetASyncLoadParamStruct( AParam->Data, &Addr ) ; SIHandle = GetASyncLoadParamInt( AParam->Data, &Addr ) ; FileName = GetASyncLoadParamString( AParam->Data, &Addr ) ; - Result = LoadSoftImage_Static( SIHandle, FileName, TRUE ) ; + Result = LoadSoftImage_Static( SIHandle, GParam, FileName, TRUE ) ; if( !SFTIMGCHK_ASYNC( SIHandle, SoftImg ) ) { SoftImg->HandleInfo.ASyncLoadResult = Result ; @@ -179,6 +189,7 @@ extern int LoadSoftImage_UseGParam( ) { int SIHandle ; + LOADBASEIMAGE_GPARAM GParam ; CheckActiveState() ; @@ -189,6 +200,8 @@ extern int LoadSoftImage_UseGParam( return -1 ; } + InitLoadBaseImageGParam( &GParam, FALSE ) ; + #ifndef DX_NON_ASYNCLOAD if( ASyncLoadFlag ) { @@ -200,6 +213,7 @@ extern int LoadSoftImage_UseGParam( // パラメータに必要なメモリのサイズを算出 Addr = 0 ; + AddASyncLoadParamStruct( NULL, &Addr, &GParam, sizeof( GParam ) ) ; AddASyncLoadParamInt( NULL, &Addr, SIHandle ) ; AddASyncLoadParamString( NULL, &Addr, FullPath ) ; @@ -211,6 +225,7 @@ extern int LoadSoftImage_UseGParam( // 処理に必要な情報をセット AParam->ProcessFunction = LoadSoftImage_ASync ; Addr = 0 ; + AddASyncLoadParamStruct( AParam->Data, &Addr, &GParam, sizeof( GParam ) ) ; AddASyncLoadParamInt( AParam->Data, &Addr, SIHandle ) ; AddASyncLoadParamString( AParam->Data, &Addr, FullPath ) ; @@ -228,7 +243,7 @@ extern int LoadSoftImage_UseGParam( else #endif // DX_NON_ASYNCLOAD { - if( LoadSoftImage_Static( SIHandle, FileName, FALSE ) < 0 ) + if( LoadSoftImage_Static( SIHandle, &GParam, FileName, FALSE ) < 0 ) goto ERR ; } @@ -293,6 +308,7 @@ extern int LoadSoftImage_WCHAR_T( const wchar_t *FileName ) // LoadARGB8ColorSoftImage の実処理関数 static int LoadARGB8ColorSoftImage_Static( int SIHandle, + LOADBASEIMAGE_GPARAM *GParam, const wchar_t *FileName, int ASyncThread ) @@ -312,7 +328,14 @@ static int LoadARGB8ColorSoftImage_Static( } // CreateBaseImageToFile でファイルから読み込み - if( CreateBaseImageToFile_WCHAR_T( FileName, &SoftImg->BaseImage, FALSE ) == -1 ) + if( /* CreateBaseImageToFile_WCHAR_T( FileName, &SoftImg->BaseImage, FALSE ) == -1 */ + CreateGraphImageOrDIBGraph_UseGParam( + GParam, + FileName, + NULL, 0, LOADIMAGE_TYPE_FILE, + FALSE, FALSE, FALSE, + &SoftImg->BaseImage, NULL, NULL + ) == -1 ) return -1 ; // 読み込んだ画像の形式が ARGB8 ではなかったら ARGB8 形式に変換 @@ -357,15 +380,17 @@ static void LoadARGB8ColorSoftImage_ASync( ASYNCLOADDATA_COMMON *AParam ) { int SIHandle ; const wchar_t *FileName ; + LOADBASEIMAGE_GPARAM *GParam ; int Addr ; int Result ; SOFTIMAGE *SoftImg ; Addr = 0 ; + GParam = ( LOADBASEIMAGE_GPARAM * )GetASyncLoadParamStruct( AParam->Data, &Addr ) ; SIHandle = GetASyncLoadParamInt( AParam->Data, &Addr ) ; FileName = GetASyncLoadParamString( AParam->Data, &Addr ) ; - Result = LoadARGB8ColorSoftImage_Static( SIHandle, FileName, TRUE ) ; + Result = LoadARGB8ColorSoftImage_Static( SIHandle, GParam, FileName, TRUE ) ; if( !SFTIMGCHK_ASYNC( SIHandle, SoftImg ) ) { SoftImg->HandleInfo.ASyncLoadResult = Result ; @@ -387,6 +412,7 @@ extern int LoadARGB8ColorSoftImage_UseGParam( ) { int SIHandle ; + LOADBASEIMAGE_GPARAM GParam ; CheckActiveState() ; @@ -397,6 +423,8 @@ extern int LoadARGB8ColorSoftImage_UseGParam( return -1 ; } + InitLoadBaseImageGParam( &GParam, FALSE ) ; + #ifndef DX_NON_ASYNCLOAD if( ASyncLoadFlag ) { @@ -408,6 +436,7 @@ extern int LoadARGB8ColorSoftImage_UseGParam( // パラメータに必要なメモリのサイズを算出 Addr = 0 ; + AddASyncLoadParamStruct( NULL, &Addr, &GParam, sizeof( GParam ) ) ; AddASyncLoadParamInt( NULL, &Addr, SIHandle ) ; AddASyncLoadParamString( NULL, &Addr, FullPath ) ; @@ -419,6 +448,7 @@ extern int LoadARGB8ColorSoftImage_UseGParam( // 処理に必要な情報をセット AParam->ProcessFunction = LoadARGB8ColorSoftImage_ASync ; Addr = 0 ; + AddASyncLoadParamStruct( AParam->Data, &Addr, &GParam, sizeof( GParam ) ) ; AddASyncLoadParamInt( AParam->Data, &Addr, SIHandle ) ; AddASyncLoadParamString( AParam->Data, &Addr, FullPath ) ; @@ -436,7 +466,7 @@ extern int LoadARGB8ColorSoftImage_UseGParam( else #endif // DX_NON_ASYNCLOAD { - if( LoadARGB8ColorSoftImage_Static( SIHandle, FileName, FALSE ) < 0 ) + if( LoadARGB8ColorSoftImage_Static( SIHandle, &GParam, FileName, FALSE ) < 0 ) goto ERR ; } @@ -514,6 +544,7 @@ extern int LoadARGB8ColorSoftImage_WCHAR_T( const wchar_t *FileName ) // LoadXRGB8ColorSoftImage の実処理関数 static int LoadXRGB8ColorSoftImage_Static( int SIHandle, + LOADBASEIMAGE_GPARAM *GParam, const wchar_t *FileName, int ASyncThread ) @@ -533,7 +564,14 @@ static int LoadXRGB8ColorSoftImage_Static( } // CreateBaseImageToFile でファイルから読み込み - if( CreateBaseImageToFile_WCHAR_T( FileName, &SoftImg->BaseImage, FALSE ) == -1 ) + if( /* CreateBaseImageToFile_WCHAR_T( FileName, &SoftImg->BaseImage, FALSE ) == -1 */ + CreateGraphImageOrDIBGraph_UseGParam( + GParam, + FileName, + NULL, 0, LOADIMAGE_TYPE_FILE, + FALSE, FALSE, FALSE, + &SoftImg->BaseImage, NULL, NULL + ) == -1 ) return -1 ; // 読み込んだ画像の形式が XRGB8 ではなかったら XRGB8 形式に変換 @@ -578,15 +616,17 @@ static void LoadXRGB8ColorSoftImage_ASync( ASYNCLOADDATA_COMMON *AParam ) { int SIHandle ; const wchar_t *FileName ; + LOADBASEIMAGE_GPARAM *GParam ; int Addr ; int Result ; SOFTIMAGE *SoftImg ; Addr = 0 ; + GParam = ( LOADBASEIMAGE_GPARAM * )GetASyncLoadParamStruct( AParam->Data, &Addr ) ; SIHandle = GetASyncLoadParamInt( AParam->Data, &Addr ) ; FileName = GetASyncLoadParamString( AParam->Data, &Addr ) ; - Result = LoadXRGB8ColorSoftImage_Static( SIHandle, FileName, TRUE ) ; + Result = LoadXRGB8ColorSoftImage_Static( SIHandle, GParam, FileName, TRUE ) ; if( !SFTIMGCHK_ASYNC( SIHandle, SoftImg ) ) { SoftImg->HandleInfo.ASyncLoadResult = Result ; @@ -608,6 +648,7 @@ extern int LoadXRGB8ColorSoftImage_UseGParam( ) { int SIHandle ; + LOADBASEIMAGE_GPARAM GParam ; CheckActiveState() ; @@ -618,6 +659,8 @@ extern int LoadXRGB8ColorSoftImage_UseGParam( return -1 ; } + InitLoadBaseImageGParam( &GParam, FALSE ) ; + #ifndef DX_NON_ASYNCLOAD if( ASyncLoadFlag ) { @@ -629,6 +672,7 @@ extern int LoadXRGB8ColorSoftImage_UseGParam( // パラメータに必要なメモリのサイズを算出 Addr = 0 ; + AddASyncLoadParamStruct( NULL, &Addr, &GParam, sizeof( GParam ) ) ; AddASyncLoadParamInt( NULL, &Addr, SIHandle ) ; AddASyncLoadParamString( NULL, &Addr, FullPath ) ; @@ -640,6 +684,7 @@ extern int LoadXRGB8ColorSoftImage_UseGParam( // 処理に必要な情報をセット AParam->ProcessFunction = LoadXRGB8ColorSoftImage_ASync ; Addr = 0 ; + AddASyncLoadParamStruct( AParam->Data, &Addr, &GParam, sizeof( GParam ) ) ; AddASyncLoadParamInt( AParam->Data, &Addr, SIHandle ) ; AddASyncLoadParamString( AParam->Data, &Addr, FullPath ) ; @@ -657,7 +702,7 @@ extern int LoadXRGB8ColorSoftImage_UseGParam( else #endif // DX_NON_ASYNCLOAD { - if( LoadXRGB8ColorSoftImage_Static( SIHandle, FileName, FALSE ) < 0 ) + if( LoadXRGB8ColorSoftImage_Static( SIHandle, &GParam, FileName, FALSE ) < 0 ) goto ERR ; } @@ -725,6 +770,7 @@ extern int LoadXRGB8ColorSoftImage_WCHAR_T( const wchar_t *FileName ) // LoadSoftImageToMem の実処理関数 static int LoadSoftImageToMem_Static( int SIHandle, + LOADBASEIMAGE_GPARAM *GParam, const void *FileImage, int FileImageSize, int ASyncThread @@ -745,7 +791,14 @@ static int LoadSoftImageToMem_Static( } // CreateBaseImageToMem でメモリから読み込み - if( NS_CreateBaseImageToMem( FileImage, FileImageSize, &SoftImg->BaseImage, FALSE ) == -1 ) + if( /* NS_CreateBaseImageToMem( FileImage, FileImageSize, &SoftImg->BaseImage, FALSE ) == -1 */ + CreateGraphImageOrDIBGraph_UseGParam( + GParam, + NULL, + FileImage, FileImageSize, LOADIMAGE_TYPE_MEM, + FALSE, FALSE, FALSE, + &SoftImg->BaseImage, NULL, NULL + ) == -1 ) return -1 ; // 正常終了 @@ -758,6 +811,7 @@ static int LoadSoftImageToMem_Static( static void LoadSoftImageToMem_ASync( ASYNCLOADDATA_COMMON *AParam ) { int SIHandle ; + LOADBASEIMAGE_GPARAM *GParam ; const void *FileImage ; int FileImageSize ; int Addr ; @@ -765,11 +819,12 @@ static void LoadSoftImageToMem_ASync( ASYNCLOADDATA_COMMON *AParam ) SOFTIMAGE *SoftImg ; Addr = 0 ; + GParam = ( LOADBASEIMAGE_GPARAM * )GetASyncLoadParamStruct( AParam->Data, &Addr ) ; SIHandle = GetASyncLoadParamInt( AParam->Data, &Addr ) ; FileImage = GetASyncLoadParamVoidP( AParam->Data, &Addr ) ; FileImageSize = GetASyncLoadParamInt( AParam->Data, &Addr ) ; - Result = LoadSoftImageToMem_Static( SIHandle, FileImage, FileImageSize, TRUE ) ; + Result = LoadSoftImageToMem_Static( SIHandle, GParam, FileImage, FileImageSize, TRUE ) ; if( !SFTIMGCHK_ASYNC( SIHandle, SoftImg ) ) { SoftImg->HandleInfo.ASyncLoadResult = Result ; @@ -793,6 +848,7 @@ extern int LoadSoftImageToMem_UseGParam( ) { int SIHandle ; + LOADBASEIMAGE_GPARAM GParam ; CheckActiveState() ; @@ -803,6 +859,8 @@ extern int LoadSoftImageToMem_UseGParam( return -1 ; } + InitLoadBaseImageGParam( &GParam, FALSE ) ; + #ifndef DX_NON_ASYNCLOAD if( ASyncLoadFlag ) { @@ -811,6 +869,7 @@ extern int LoadSoftImageToMem_UseGParam( // パラメータに必要なメモリのサイズを算出 Addr = 0 ; + AddASyncLoadParamStruct( NULL, &Addr, &GParam, sizeof( GParam ) ) ; AddASyncLoadParamInt( NULL, &Addr, SIHandle ) ; AddASyncLoadParamConstVoidP( NULL, &Addr, FileImage ) ; AddASyncLoadParamInt( NULL, &Addr, FileImageSize ) ; @@ -823,6 +882,7 @@ extern int LoadSoftImageToMem_UseGParam( // 処理に必要な情報をセット AParam->ProcessFunction = LoadSoftImageToMem_ASync ; Addr = 0 ; + AddASyncLoadParamStruct( AParam->Data, &Addr, &GParam, sizeof( GParam ) ) ; AddASyncLoadParamInt( AParam->Data, &Addr, SIHandle ) ; AddASyncLoadParamConstVoidP( AParam->Data, &Addr, FileImage ) ; AddASyncLoadParamInt( AParam->Data, &Addr, FileImageSize ) ; @@ -841,7 +901,7 @@ extern int LoadSoftImageToMem_UseGParam( else #endif // DX_NON_ASYNCLOAD { - if( LoadSoftImageToMem_Static( SIHandle, FileImage, FileImageSize, FALSE ) < 0 ) + if( LoadSoftImageToMem_Static( SIHandle, &GParam, FileImage, FileImageSize, FALSE ) < 0 ) goto ERR ; } @@ -871,6 +931,7 @@ extern int NS_LoadSoftImageToMem( const void *FileImage, int FileImageSize ) // LoadARGB8ColorSoftImageToMem の実処理関数 static int LoadARGB8ColorSoftImageToMem_Static( int SIHandle, + LOADBASEIMAGE_GPARAM *GParam, const void *FileImage, int FileImageSize, int ASyncThread @@ -891,7 +952,14 @@ static int LoadARGB8ColorSoftImageToMem_Static( } // CreateBaseImageToMem でメモリから読み込み - if( NS_CreateBaseImageToMem( FileImage, FileImageSize, &SoftImg->BaseImage, FALSE ) == -1 ) + if( /* NS_CreateBaseImageToMem( FileImage, FileImageSize, &SoftImg->BaseImage, FALSE ) == -1 */ + CreateGraphImageOrDIBGraph_UseGParam( + GParam, + NULL, + FileImage, FileImageSize, LOADIMAGE_TYPE_MEM, + FALSE, FALSE, FALSE, + &SoftImg->BaseImage, NULL, NULL + ) == -1 ) return -1 ; // 読み込んだ画像の形式が ARGB8 ではなかったら ARGB8 形式に変換 @@ -935,6 +1003,7 @@ static int LoadARGB8ColorSoftImageToMem_Static( static void LoadARGB8ColorSoftImageToMem_ASync( ASYNCLOADDATA_COMMON *AParam ) { int SIHandle ; + LOADBASEIMAGE_GPARAM *GParam ; const void *FileImage ; int FileImageSize ; int Addr ; @@ -942,11 +1011,12 @@ static void LoadARGB8ColorSoftImageToMem_ASync( ASYNCLOADDATA_COMMON *AParam ) SOFTIMAGE *SoftImg ; Addr = 0 ; + GParam = ( LOADBASEIMAGE_GPARAM * )GetASyncLoadParamStruct( AParam->Data, &Addr ) ; SIHandle = GetASyncLoadParamInt( AParam->Data, &Addr ) ; FileImage = GetASyncLoadParamVoidP( AParam->Data, &Addr ) ; FileImageSize = GetASyncLoadParamInt( AParam->Data, &Addr ) ; - Result = LoadARGB8ColorSoftImageToMem_Static( SIHandle, FileImage, FileImageSize, TRUE ) ; + Result = LoadARGB8ColorSoftImageToMem_Static( SIHandle, GParam, FileImage, FileImageSize, TRUE ) ; if( !SFTIMGCHK_ASYNC( SIHandle, SoftImg ) ) { SoftImg->HandleInfo.ASyncLoadResult = Result ; @@ -970,6 +1040,7 @@ extern int LoadARGB8ColorSoftImageToMem_UseGParam( ) { int SIHandle ; + LOADBASEIMAGE_GPARAM GParam ; CheckActiveState() ; @@ -980,6 +1051,8 @@ extern int LoadARGB8ColorSoftImageToMem_UseGParam( return -1 ; } + InitLoadBaseImageGParam( &GParam, FALSE ) ; + #ifndef DX_NON_ASYNCLOAD if( ASyncLoadFlag ) { @@ -988,6 +1061,7 @@ extern int LoadARGB8ColorSoftImageToMem_UseGParam( // パラメータに必要なメモリのサイズを算出 Addr = 0 ; + AddASyncLoadParamStruct( NULL, &Addr, &GParam, sizeof( GParam ) ) ; AddASyncLoadParamInt( NULL, &Addr, SIHandle ) ; AddASyncLoadParamConstVoidP( NULL, &Addr, FileImage ) ; AddASyncLoadParamInt( NULL, &Addr, FileImageSize ) ; @@ -1000,6 +1074,7 @@ extern int LoadARGB8ColorSoftImageToMem_UseGParam( // 処理に必要な情報をセット AParam->ProcessFunction = LoadARGB8ColorSoftImageToMem_ASync ; Addr = 0 ; + AddASyncLoadParamStruct( AParam->Data, &Addr, &GParam, sizeof( GParam ) ) ; AddASyncLoadParamInt( AParam->Data, &Addr, SIHandle ) ; AddASyncLoadParamConstVoidP( AParam->Data, &Addr, FileImage ) ; AddASyncLoadParamInt( AParam->Data, &Addr, FileImageSize ) ; @@ -1018,7 +1093,7 @@ extern int LoadARGB8ColorSoftImageToMem_UseGParam( else #endif // DX_NON_ASYNCLOAD { - if( LoadARGB8ColorSoftImageToMem_Static( SIHandle, FileImage, FileImageSize, FALSE ) < 0 ) + if( LoadARGB8ColorSoftImageToMem_Static( SIHandle, &GParam, FileImage, FileImageSize, FALSE ) < 0 ) goto ERR ; } @@ -1048,6 +1123,7 @@ extern int NS_LoadARGB8ColorSoftImageToMem( const void *FileImage, int FileImag // LoadXRGB8ColorSoftImageToMem の実処理関数 static int LoadXRGB8ColorSoftImageToMem_Static( int SIHandle, + LOADBASEIMAGE_GPARAM *GParam, const void *FileImage, int FileImageSize, int ASyncThread @@ -1068,7 +1144,14 @@ static int LoadXRGB8ColorSoftImageToMem_Static( } // CreateBaseImageToMem でメモリから読み込み - if( NS_CreateBaseImageToMem( FileImage, FileImageSize, &SoftImg->BaseImage, FALSE ) == -1 ) + if( /* NS_CreateBaseImageToMem( FileImage, FileImageSize, &SoftImg->BaseImage, FALSE ) == -1 */ + CreateGraphImageOrDIBGraph_UseGParam( + GParam, + NULL, + FileImage, FileImageSize, LOADIMAGE_TYPE_MEM, + FALSE, FALSE, FALSE, + &SoftImg->BaseImage, NULL, NULL + ) == -1 ) return -1 ; // 読み込んだ画像の形式が XRGB8 ではなかったら XRGB8 形式に変換 @@ -1112,6 +1195,7 @@ static int LoadXRGB8ColorSoftImageToMem_Static( static void LoadXRGB8ColorSoftImageToMem_ASync( ASYNCLOADDATA_COMMON *AParam ) { int SIHandle ; + LOADBASEIMAGE_GPARAM *GParam ; const void *FileImage ; int FileImageSize ; int Addr ; @@ -1119,11 +1203,12 @@ static void LoadXRGB8ColorSoftImageToMem_ASync( ASYNCLOADDATA_COMMON *AParam ) SOFTIMAGE *SoftImg ; Addr = 0 ; + GParam = ( LOADBASEIMAGE_GPARAM * )GetASyncLoadParamStruct( AParam->Data, &Addr ) ; SIHandle = GetASyncLoadParamInt( AParam->Data, &Addr ) ; FileImage = GetASyncLoadParamVoidP( AParam->Data, &Addr ) ; FileImageSize = GetASyncLoadParamInt( AParam->Data, &Addr ) ; - Result = LoadXRGB8ColorSoftImageToMem_Static( SIHandle, FileImage, FileImageSize, TRUE ) ; + Result = LoadXRGB8ColorSoftImageToMem_Static( SIHandle, GParam, FileImage, FileImageSize, TRUE ) ; if( !SFTIMGCHK_ASYNC( SIHandle, SoftImg ) ) { SoftImg->HandleInfo.ASyncLoadResult = Result ; @@ -1147,6 +1232,7 @@ extern int LoadXRGB8ColorSoftImageToMem_UseGParam( ) { int SIHandle ; + LOADBASEIMAGE_GPARAM GParam ; CheckActiveState() ; @@ -1157,6 +1243,8 @@ extern int LoadXRGB8ColorSoftImageToMem_UseGParam( return -1 ; } + InitLoadBaseImageGParam( &GParam, FALSE ) ; + #ifndef DX_NON_ASYNCLOAD if( ASyncLoadFlag ) { @@ -1165,6 +1253,7 @@ extern int LoadXRGB8ColorSoftImageToMem_UseGParam( // パラメータに必要なメモリのサイズを算出 Addr = 0 ; + AddASyncLoadParamStruct( NULL, &Addr, &GParam, sizeof( GParam ) ) ; AddASyncLoadParamInt( NULL, &Addr, SIHandle ) ; AddASyncLoadParamConstVoidP( NULL, &Addr, FileImage ) ; AddASyncLoadParamInt( NULL, &Addr, FileImageSize ) ; @@ -1177,6 +1266,7 @@ extern int LoadXRGB8ColorSoftImageToMem_UseGParam( // 処理に必要な情報をセット AParam->ProcessFunction = LoadXRGB8ColorSoftImageToMem_ASync ; Addr = 0 ; + AddASyncLoadParamStruct( AParam->Data, &Addr, &GParam, sizeof( GParam ) ) ; AddASyncLoadParamInt( AParam->Data, &Addr, SIHandle ) ; AddASyncLoadParamConstVoidP( AParam->Data, &Addr, FileImage ) ; AddASyncLoadParamInt( AParam->Data, &Addr, FileImageSize ) ; @@ -1195,7 +1285,7 @@ extern int LoadXRGB8ColorSoftImageToMem_UseGParam( else #endif // DX_NON_ASYNCLOAD { - if( LoadXRGB8ColorSoftImageToMem_Static( SIHandle, FileImage, FileImageSize, FALSE ) < 0 ) + if( LoadXRGB8ColorSoftImageToMem_Static( SIHandle, &GParam, FileImage, FileImageSize, FALSE ) < 0 ) goto ERR ; } diff --git a/DxSoftImage.h b/DxSoftImage.h index b1a94d5..fb978a4 100644 --- a/DxSoftImage.h +++ b/DxSoftImage.h @@ -2,7 +2,7 @@ // // DXライブラリ ソフトウェアで扱う画像プログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxSound.cpp b/DxSound.cpp index af367a9..7471173 100644 --- a/DxSound.cpp +++ b/DxSound.cpp @@ -2,7 +2,7 @@ // // DXライブラリ DirectSound制御プログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -182,18 +182,19 @@ extern int InitializeSoundSystem( void ) } // サウンドハンドル管理情報初期化 - InitializeHandleManage( DX_HANDLETYPE_SOUND, sizeof( SOUND ), MAX_SOUND_NUM, InitializeSoundHandle, TerminateSoundHandle, L"Sound" ) ; + InitializeHandleManage( DX_HANDLETYPE_SOUND, sizeof( SOUND ), MAX_SOUND_NUM, InitializeSoundHandle, TerminateSoundHandle, DumpInfoSoundHandle, L"Sound" ) ; // ソフトウエアで扱う波形データハンドル管理情報初期化 - InitializeHandleManage( DX_HANDLETYPE_SOFTSOUND, sizeof( SOFTSOUND ), MAX_SOFTSOUND_NUM, InitializeSoftSoundHandle, TerminateSoftSoundHandle, L"SoftSound" ) ; + InitializeHandleManage( DX_HANDLETYPE_SOFTSOUND, sizeof( SOFTSOUND ), MAX_SOFTSOUND_NUM, InitializeSoftSoundHandle, TerminateSoftSoundHandle, NULL, L"SoftSound" ) ; // MIDIハンドル管理情報初期化 - InitializeHandleManage( DX_HANDLETYPE_MUSIC, sizeof( MIDIHANDLEDATA ), MAX_MUSIC_NUM, InitializeMidiHandle, TerminateMidiHandle, L"Music" ) ; + InitializeHandleManage( DX_HANDLETYPE_MUSIC, sizeof( MIDIHANDLEDATA ), MAX_MUSIC_NUM, InitializeMidiHandle, TerminateMidiHandle, NULL, L"Music" ) ; // クリティカルセクションの初期化 CriticalSection_Initialize( &SoundSysData._3DSoundListCriticalSection ) ; CriticalSection_Initialize( &SoundSysData.Play3DSoundListCriticalSection ) ; CriticalSection_Initialize( &SoundSysData.PlaySoundBufferListCriticalSection ) ; + CriticalSection_Initialize( &SoundSysData.PlaySoundListCriticalSection ) ; CriticalSection_Initialize( &SoundSysData.StreamSoundListCriticalSection ) ; // ハンドルリストを初期化 @@ -201,6 +202,7 @@ extern int InitializeSoundSystem( void ) InitializeHandleList( &SoundSysData.StreamSoundListFirst, &SoundSysData.StreamSoundListLast ) ; InitializeHandleList( &SoundSysData.SoftSoundPlayerListFirst, &SoundSysData.SoftSoundPlayerListLast ) ; InitializeHandleList( &SoundSysData.PlayFinishDeleteSoundListFirst, &SoundSysData.PlayFinishDeleteSoundListLast ) ; + InitializeHandleList( &SoundSysData.PlaySoundListFirst, &SoundSysData.PlaySoundListLast ) ; InitializeHandleList( &SoundSysData.Play3DSoundListFirst, &SoundSysData.Play3DSoundListLast ) ; // シンプルリストを初期化 @@ -358,6 +360,7 @@ extern int TerminateSoundSystem( void ) { CriticalSection_Delete( &SoundSysData._3DSoundListCriticalSection ) ; CriticalSection_Delete( &SoundSysData.Play3DSoundListCriticalSection ) ; + CriticalSection_Delete( &SoundSysData.PlaySoundListCriticalSection ) ; CriticalSection_Delete( &SoundSysData.StreamSoundListCriticalSection ) ; } @@ -494,11 +497,11 @@ extern int TerminateSoundHandle( HANDLEINFO *HandleInfo ) // 音の再生を止める if( Sound->Type == DX_SOUNDTYPE_STREAMSTYLE ) { - NS_StopStreamSoundMem( HandleInfo->Handle ) ; + NS_StopStreamSoundMem( HandleInfo->Handle, FALSE ) ; } else { - if( Sound->Buffer[0].Valid ) NS_StopSoundMem( HandleInfo->Handle ) ; + if( Sound->Buffer[0].Valid ) NS_StopSoundMem( HandleInfo->Handle, FALSE ) ; } if( Sound->Is3DSound != FALSE ) @@ -512,21 +515,33 @@ extern int TerminateSoundHandle( HANDLEINFO *HandleInfo ) // クリティカルセクションの解放 CriticalSection_Unlock( &SoundSysData._3DSoundListCriticalSection ) ; - // 再生中リストに追加されていたら外す + // クリティカルセクションの取得 + CRITICALSECTION_LOCK( &SoundSysData.Play3DSoundListCriticalSection ) ; + + // 再生中3Dサウンドリストに追加されていたら外す if( Sound->AddPlay3DSoundList ) { Sound->AddPlay3DSoundList = FALSE ; + SubHandleList( &Sound->Play3DSoundList ) ; + } - // クリティカルセクションの取得 - CRITICALSECTION_LOCK( &SoundSysData.Play3DSoundListCriticalSection ) ; + // クリティカルセクションの解放 + CriticalSection_Unlock( &SoundSysData.Play3DSoundListCriticalSection ) ; + } - SubHandleList( &Sound->Play3DSoundList ) ; + // クリティカルセクションの取得 + CRITICALSECTION_LOCK( &SoundSysData.PlaySoundListCriticalSection ) ; - // クリティカルセクションの解放 - CriticalSection_Unlock( &SoundSysData.Play3DSoundListCriticalSection ) ; - } + // 再生中サウンドリストに追加されていたら外す + if( Sound->AddPlaySoundList ) + { + Sound->AddPlaySoundList = FALSE ; + SubHandleList( &Sound->PlaySoundList ) ; } + // クリティカルセクションの解放 + CriticalSection_Unlock( &SoundSysData.PlaySoundListCriticalSection ) ; + // 再生が終了したら削除する設定になっていたら、再生が終了したら削除するサウンドのリストから外す if( Sound->PlayFinishDeleteFlag ) { @@ -625,6 +640,23 @@ extern int TerminateSoundHandle( HANDLEINFO *HandleInfo ) return 0 ; } +// サウンドハンドルの情報出力 +extern int DumpInfoSoundHandle( HANDLEINFO *HandleInfo ) +{ + SOUND *Sound = ( SOUND * )HandleInfo ; + + if( Sound->Type == DX_SOUNDTYPE_STREAMSTYLE ) + { + DXST_LOGFILEFMT_ADDW(( L"Handle:0x%08x Type:Stream SamplePerSec:%d BitsPerSample:%d Channels:%d", HandleInfo->Handle, Sound->BufferFormat.nSamplesPerSec, Sound->BufferFormat.wBitsPerSample, Sound->BufferFormat.nChannels )) ; + } + else + { + DXST_LOGFILEFMT_ADDW(( L"Handle:0x%08x Type:Normal SamplePerSec:%d BitsPerSample:%d Channels:%d Samples:%d", HandleInfo->Handle, Sound->BufferFormat.nSamplesPerSec, Sound->BufferFormat.wBitsPerSample, Sound->BufferFormat.nChannels, Sound->Normal.WaveSize / Sound->BufferFormat.nBlockAlign )) ; + } + + // 終了 + return 0 ; +} // 使用可能なサウンドバッファを取得する(-1:サウンドバッファの使用権を得られなかった) static int GetSoundBuffer( int SoundHandle, SOUND * Sound, SOUNDBUFFER **BufferP, bool BufferGet ) @@ -655,7 +687,7 @@ static int GetSoundBuffer( int SoundHandle, SOUND * Sound, SOUNDBUFFER **BufferP // 使用権を持っているのが自分ではない場合は再生をストップする if( SoundHandle != Sound->Stream.BufferUseSoundHandle ) - NS_StopStreamSoundMem( Sound->Stream.BufferUseSoundHandle ) ; + NS_StopStreamSoundMem( Sound->Stream.BufferUseSoundHandle, FALSE ) ; // 使用権を得る Sound->Stream.BufferUseSoundHandle = SoundHandle ; @@ -680,7 +712,7 @@ static int GetSoundBuffer( int SoundHandle, SOUND * Sound, SOUNDBUFFER **BufferP // 使用権を持っているのが自分ではない場合は再生をストップする if( SoundHandle != UniSound->Stream.BufferUseSoundHandle ) - NS_StopStreamSoundMem( UniSound->Stream.BufferUseSoundHandle ) ; + NS_StopStreamSoundMem( UniSound->Stream.BufferUseSoundHandle, FALSE ) ; // 使用権を得る UniSound->Stream.BufferUseSoundHandle = SoundHandle ; @@ -1497,7 +1529,7 @@ static int _PlaySetupStreamSoundMem( int SoundHandle, SOUND * Sound, int PlayTyp return 1 ; // 再生中の場合は止める - NS_StopStreamSoundMem( SoundHandle ) ; + NS_StopStreamSoundMem( SoundHandle, FALSE ) ; // 再生タイプが違ったら分岐 if( Sound->PlayType != PlayType ) @@ -1534,6 +1566,9 @@ static int _PlaySetupStreamSoundMem( int SoundHandle, SOUND * Sound, int PlayTyp // 再生タイプを保存 Sound->PlayType = PlayType ; + // ループ終了時に音の再生を止めるフラグを倒す + Sound->Stream.IsNextLoopEndStop = FALSE ; + // 再生準備 NS_SetupStreamSoundMem( SoundHandle ) ; @@ -1713,20 +1748,32 @@ extern int NS_PlayStreamSoundMem( int SoundHandle , int PlayType, int TopPositio // 3Dサウンドの場合は再生中の3Dサウンドリストに追加する if( Sound->Is3DSound != FALSE ) { + // クリティカルセクションの取得 + CRITICALSECTION_LOCK( &SoundSysData.Play3DSoundListCriticalSection ) ; + if( Sound->AddPlay3DSoundList == FALSE ) { Sound->AddPlay3DSoundList = TRUE ; + AddHandleList( &SoundSysData.Play3DSoundListFirst, &Sound->Play3DSoundList, SoundHandle, Sound ) ; + } - // クリティカルセクションの取得 - CRITICALSECTION_LOCK( &SoundSysData.Play3DSoundListCriticalSection ) ; + // クリティカルセクションの解放 + CriticalSection_Unlock( &SoundSysData.Play3DSoundListCriticalSection ) ; + } - AddHandleList( &SoundSysData.Play3DSoundListFirst, &Sound->Play3DSoundList, SoundHandle, Sound ) ; + // クリティカルセクションの取得 + CRITICALSECTION_LOCK( &SoundSysData.PlaySoundListCriticalSection ) ; - // クリティカルセクションの解放 - CriticalSection_Unlock( &SoundSysData.Play3DSoundListCriticalSection ) ; - } + // 再生中のサウンドリストに追加する + if( Sound->AddPlaySoundList == FALSE ) + { + Sound->AddPlaySoundList = TRUE ; + AddHandleList( &SoundSysData.PlaySoundListFirst, &Sound->PlaySoundList, SoundHandle, Sound ) ; } + // クリティカルセクションの解放 + CriticalSection_Unlock( &SoundSysData.PlaySoundListCriticalSection ) ; + // クリティカルセクションの解放 CriticalSection_Unlock( &HandleManageArray[ DX_HANDLETYPE_SOUND ].CriticalSection ) ; @@ -1778,7 +1825,7 @@ extern int NS_CheckStreamSoundMem( int SoundHandle ) // ストリーム風サウンドデータの再生終了 -extern int NS_StopStreamSoundMem( int SoundHandle ) +extern int NS_StopStreamSoundMem( int SoundHandle, int IsNextLoopEnd ) { SOUND *Sound, *UniSound = NULL ; int IsPlay ; @@ -1817,6 +1864,24 @@ extern int NS_StopStreamSoundMem( int SoundHandle ) return 0 ; } + + // 次回ループ終了時に音を止める指定の場合は、フラグを立てて終了する + if( IsNextLoopEnd == TRUE ) + { + // フラグを立てる + Sound->Stream.IsNextLoopEndStop = TRUE ; + + // 再生タイプが DX_PLAYTYPE_LOOP だった場合は DX_PLAYTYPE_BACK に変更する + if( Sound->PlayType == DX_PLAYTYPE_LOOP ) + { + Sound->PlayType = DX_PLAYTYPE_BACK ; + } + + // クリティカルセクションの解放 + CriticalSection_Unlock( &HandleManageArray[ DX_HANDLETYPE_SOUND ].CriticalSection ) ; + + return 0 ; + } // 再生中の場合は止める if( Sound->Stream.BufferBorrowSoundHandle != -1 ) @@ -1855,6 +1920,13 @@ extern int SetStreamSoundCurrentPosition_UseGParam( LONGLONG Byte, int SoundHand // int i, pos ; // int datasize ; // WAVEFORMATEX *wf ; + int IsPlay = FALSE ; + int PlayType = 0 ; + + IsPlay = NS_CheckStreamSoundMem( SoundHandle ) ; + + // 再生中だった場合は一度止める + NS_StopStreamSoundMem( SoundHandle, FALSE ) ; if( SoundSysData.InitializeFlag == FALSE ) { @@ -1880,6 +1952,8 @@ extern int SetStreamSoundCurrentPosition_UseGParam( LONGLONG Byte, int SoundHand goto ERR ; } + PlayType = sd->PlayType ; + if( Byte / sd->BufferFormat.nBlockAlign > sd->Stream.TotalSample ) goto ERR ; @@ -1914,6 +1988,12 @@ extern int SetStreamSoundCurrentPosition_UseGParam( LONGLONG Byte, int SoundHand // クリティカルセクションの解放 CriticalSection_Unlock( &HandleManageArray[ DX_HANDLETYPE_SOUND ].CriticalSection ) ; + // 再生中だった場合は再生する + if( IsPlay ) + { + NS_PlayStreamSoundMem( SoundHandle, PlayType, FALSE ) ; + } + // 終了 return 0 ; @@ -1921,6 +2001,12 @@ ERR : // クリティカルセクションの解放 CriticalSection_Unlock( &HandleManageArray[ DX_HANDLETYPE_SOUND ].CriticalSection ) ; + // 再生中だった場合は再生する + if( IsPlay ) + { + NS_PlayStreamSoundMem( SoundHandle, PlayType, FALSE ) ; + } + return -1 ; } @@ -2255,7 +2341,7 @@ int StreamSoundNextData( SOUND * Sound, SOUNDBUFFERLOCKDATA *LockData, int Curre Sound->Stream.FileLoopCount ++ ; // 無限ループかどうかで処理を分岐 - if( Sound->Stream.File[Sound->Stream.FileActive].LoopNum == -1 ) + if( Sound->Stream.IsNextLoopEndStop == FALSE && Sound->Stream.File[Sound->Stream.FileActive].LoopNum == -1 ) { WAVEFORMATEX *wfmt = &Sound->BufferFormat ; @@ -2283,7 +2369,7 @@ int StreamSoundNextData( SOUND * Sound, SOUNDBUFFERLOCKDATA *LockData, int Curre else { // ループ回数が規定値にきていたら次のデータへ - if( Sound->Stream.FileLoopCount > Sound->Stream.File[Sound->Stream.FileActive].LoopNum ) + if( Sound->Stream.IsNextLoopEndStop == TRUE || Sound->Stream.FileLoopCount > Sound->Stream.File[Sound->Stream.FileActive].LoopNum ) { // ループ再生指定でループする条件が揃った場合、既にループ位置をセットしてある場合は一度ループするまで待つ if( Sound->Stream.FileNum - 1 == Sound->Stream.FileActive && @@ -2740,7 +2826,7 @@ extern int PauseSoundMemAll( int PauseFlag ) { // 停止する場合 - for( List = HandleManageArray[ DX_HANDLETYPE_SOUND ].ListFirst.Next ; List->Next != NULL ; List = List->Next ) + for( List = SoundSysData.PlaySoundListFirst.Next ; List->Next != NULL ; List = List->Next ) { Sound = ( SOUND * )List->Data ; @@ -2794,7 +2880,7 @@ extern int PauseSoundMemAll( int PauseFlag ) { // 再開する場合 - for( List = HandleManageArray[ DX_HANDLETYPE_SOUND ].ListFirst.Next ; List->Next != NULL ; List = List->Next ) + for( List = SoundSysData.PlaySoundListFirst.Next ; List->Next != NULL ; List = List->Next ) { Sound = ( SOUND * )List->Data ; @@ -2943,6 +3029,40 @@ extern int ProcessPlayFinishDeleteSoundMemAll( void ) return 0 ; } +// サウンドを再生しているサウンドハンドルに対する処理を行う +extern int ProcessPlaySoundMemAll( void ) +{ + HANDLELIST *List ; + SOUND *Sound ; + + if( CheckSoundSystem_Initialize_PF() == FALSE ) + { + return -1 ; + } + + // クリティカルセクションの取得 + CRITICALSECTION_LOCK( &SoundSysData.PlaySoundListCriticalSection ) ; + +LOOPSTART: + + for( List = SoundSysData.PlaySoundListFirst.Next ; List->Next != NULL ; List = List->Next ) + { + if( NS_CheckSoundMem( List->Handle ) == FALSE ) + { + Sound = ( SOUND * )List->Data ; + Sound->AddPlaySoundList = FALSE ; + SubHandleList( &Sound->PlaySoundList ) ; + goto LOOPSTART ; + } + } + + // クリティカルセクションの解放 + CriticalSection_Unlock( &SoundSysData.PlaySoundListCriticalSection ) ; + + // 終了 + return 0 ; +} + // 3Dサウンドを再生しているサウンドハンドルに対する処理を行う extern int ProcessPlay3DSoundMemAll( void ) { @@ -3430,7 +3550,8 @@ extern void InitLoadSoundGParam( LOADSOUND_GPARAM *GParam ) // ループ位置の指定がある場合はストリームサウンドとして読み込む if( GParam->CreateSoundDataType == DX_SOUNDDATATYPE_MEMNOPRESS && ( GParam->CreateSoundLoopStartTimePosition != GParam->CreateSoundLoopEndTimePosition || - GParam->CreateSoundLoopStartSamplePosition != GParam->CreateSoundLoopEndSamplePosition ) ) + GParam->CreateSoundLoopStartSamplePosition != GParam->CreateSoundLoopEndSamplePosition ) && + GParam->CreateSoundIgnoreLoopAreaInfo == FALSE ) { GParam->CreateSoundDataType = DX_SOUNDDATATYPE_MEMPRESS ; } @@ -4044,7 +4165,8 @@ static int LoadSoundMemBase_Static( // ループ範囲情報テキストファイルの読み込み if( ( GParam->CreateSoundLoopStartTimePosition == GParam->CreateSoundLoopEndTimePosition ) && - ( GParam->CreateSoundLoopStartSamplePosition == GParam->CreateSoundLoopEndSamplePosition ) ) + ( GParam->CreateSoundLoopStartSamplePosition == GParam->CreateSoundLoopEndSamplePosition ) && + GParam->CreateSoundIgnoreLoopAreaInfo == FALSE ) { int LoopStartPos ; int LoopEndPos ; @@ -4126,7 +4248,7 @@ static int LoadSoundMemBase_Static( // ループ位置の指定がある場合はループ位置を設定する if( SetLoopAreaCancel == FALSE ) { - if( GParam->CreateSoundLoopStartTimePosition != GParam->CreateSoundLoopEndTimePosition ) + if( GParam->CreateSoundLoopStartTimePosition != GParam->CreateSoundLoopEndTimePosition && GParam->CreateSoundIgnoreLoopAreaInfo == FALSE ) { SetLoopAreaTimePosSoundMem_UseGParam( GParam->CreateSoundLoopStartTimePosition, @@ -4136,7 +4258,7 @@ static int LoadSoundMemBase_Static( ) ; } else - if( GParam->CreateSoundLoopStartSamplePosition != GParam->CreateSoundLoopEndSamplePosition ) + if( GParam->CreateSoundLoopStartSamplePosition != GParam->CreateSoundLoopEndSamplePosition && GParam->CreateSoundIgnoreLoopAreaInfo == FALSE ) { SetLoopAreaSamplePosSoundMem_UseGParam( GParam->CreateSoundLoopStartSamplePosition, @@ -4737,7 +4859,7 @@ STREAM_TYPE : // ループ位置の指定がある場合はループ位置を設定する { - if( GParam->CreateSoundLoopStartTimePosition != GParam->CreateSoundLoopEndTimePosition ) + if( GParam->CreateSoundLoopStartTimePosition != GParam->CreateSoundLoopEndTimePosition && GParam->CreateSoundIgnoreLoopAreaInfo == FALSE ) { SetLoopAreaTimePosSoundMem_UseGParam( GParam->CreateSoundLoopStartTimePosition, @@ -4747,7 +4869,7 @@ STREAM_TYPE : ) ; } else - if( GParam->CreateSoundLoopStartSamplePosition != GParam->CreateSoundLoopEndSamplePosition ) + if( GParam->CreateSoundLoopStartSamplePosition != GParam->CreateSoundLoopEndSamplePosition && GParam->CreateSoundIgnoreLoopAreaInfo == FALSE ) { SetLoopAreaSamplePosSoundMem_UseGParam( GParam->CreateSoundLoopStartSamplePosition, @@ -5175,20 +5297,32 @@ extern int NS_PlaySoundMem( int SoundHandle , int PlayType, int TopPositionFlag // 3Dサウンドの場合は再生中の3Dサウンドリストに追加する if( Sound->Is3DSound != FALSE ) { + // クリティカルセクションの取得 + CRITICALSECTION_LOCK( &SoundSysData.Play3DSoundListCriticalSection ) ; + if( Sound->AddPlay3DSoundList == FALSE ) { Sound->AddPlay3DSoundList = TRUE ; + AddHandleList( &SoundSysData.Play3DSoundListFirst, &Sound->Play3DSoundList, SoundHandle, Sound ) ; + } - // クリティカルセクションの取得 - CRITICALSECTION_LOCK( &SoundSysData.Play3DSoundListCriticalSection ) ; + // クリティカルセクションの解放 + CriticalSection_Unlock( &SoundSysData.Play3DSoundListCriticalSection ) ; + } - AddHandleList( &SoundSysData.Play3DSoundListFirst, &Sound->Play3DSoundList, SoundHandle, Sound ) ; + // クリティカルセクションの取得 + CRITICALSECTION_LOCK( &SoundSysData.PlaySoundListCriticalSection ) ; - // クリティカルセクションの解放 - CriticalSection_Unlock( &SoundSysData.Play3DSoundListCriticalSection ) ; - } + // 再生中のサウンドリストに追加する + if( Sound->AddPlaySoundList == FALSE ) + { + Sound->AddPlaySoundList = TRUE ; + AddHandleList( &SoundSysData.PlaySoundListFirst, &Sound->PlaySoundList, SoundHandle, Sound ) ; } + // クリティカルセクションの解放 + CriticalSection_Unlock( &SoundSysData.PlaySoundListCriticalSection ) ; + // 再生ステータスによっては再生終了を待つ if( PlayType == DX_PLAYTYPE_NORMAL ) { @@ -5325,7 +5459,7 @@ END : // メモリに読み込んだWAVEデータの再生を止める -extern int NS_StopSoundMem( int SoundHandle ) +extern int NS_StopSoundMem( int SoundHandle, int IsNextLoopEnd ) { SOUND * Sound ; int IsPlay ; @@ -5343,24 +5477,64 @@ extern int NS_StopSoundMem( int SoundHandle ) // サウンドタイプがストリーム風サウンドだった場合はそっちに処理を移す if( Sound->Type == DX_SOUNDTYPE_STREAMSTYLE ) { - return NS_StopStreamSoundMem( SoundHandle ) ; + return NS_StopStreamSoundMem( SoundHandle, IsNextLoopEnd ) ; } - // 再生停止 - for( i = 0 ; i < Sound->ValidBufferNum ; i ++ ) + // ループ終了時に止める指定の場合はループフラグを倒す( セルフミキシングの場合のみ ) + if( IsNextLoopEnd ) { - Sound->BufferPlayStateBackupFlagValid[ i ] = FALSE ; - Sound->BufferPlayStateBackupFlag[ i ] = FALSE ; - - IsPlay = SoundBuffer_CheckPlay( &Sound->Buffer[ i ] ) ; - if( IsPlay == -1 ) + if( SoundSysData.EnableSoundCaptureFlag || SoundSysData.EnableSelfMixingFlag || SoundSysData.EnableChangeLoopFlag ) { - return -1 ; + for( i = 0 ; i < Sound->ValidBufferNum ; i ++ ) + { + IsPlay = SoundBuffer_CheckPlay( &Sound->Buffer[ i ] ) ; + if( IsPlay == -1 ) + { + return -1 ; + } + + if( IsPlay ) + { + Sound->Buffer[ i ].Loop = FALSE ; + } + } } + else + { + for( i = 0 ; i < Sound->ValidBufferNum ; i ++ ) + { + IsPlay = SoundBuffer_CheckPlay( &Sound->Buffer[ i ] ) ; + if( IsPlay == -1 ) + { + return -1 ; + } - if( IsPlay ) + if( IsPlay ) + { + SoundBuffer_Stop( &Sound->Buffer[ i ] ) ; + SoundBuffer_Play( &Sound->Buffer[ i ], FALSE ) ; + } + } + } + } + else + { + // 再生停止 + for( i = 0 ; i < Sound->ValidBufferNum ; i ++ ) { - SoundBuffer_Stop( &Sound->Buffer[ i ], TRUE ) ; + Sound->BufferPlayStateBackupFlagValid[ i ] = FALSE ; + Sound->BufferPlayStateBackupFlag[ i ] = FALSE ; + + IsPlay = SoundBuffer_CheckPlay( &Sound->Buffer[ i ] ) ; + if( IsPlay == -1 ) + { + return -1 ; + } + + if( IsPlay ) + { + SoundBuffer_Stop( &Sound->Buffer[ i ], TRUE ) ; + } } } @@ -5395,7 +5569,10 @@ extern int NS_CheckSoundMem( int SoundHandle ) // システム側で止めている場合は止める前の状態を返す if( Sound->BufferPlayStateBackupFlagValid[ i ] ) { - return Sound->BufferPlayStateBackupFlag[ i ] ? 1 : 0 ; + if( Sound->BufferPlayStateBackupFlag[ i ] ) + { + return 1 ; + } } else { @@ -10960,7 +11137,7 @@ extern int NS_StopSoundFile( void ) } if( SoundSysData.PlayWavSoundHandle == -1 ) return 0 ; - return NS_StopSoundMem( SoundSysData.PlayWavSoundHandle ) ; + return NS_StopSoundMem( SoundSysData.PlayWavSoundHandle, FALSE ) ; } // WAVEファイルの音量をセットする @@ -12445,12 +12622,23 @@ extern int WriteSelfMixingSample( BYTE *Buffer0, BYTE *Buffer1, DWORD Stride, DW BufferF = ( float * )SoundSysData.SelfMixingBuffer ; if( SoundSysData.SelfMixingFormatIsFloat ) { - for( i = 0 ; i < SampleNum ; i ++, BufferF += 2 ) + if( SoundSysData.SelfMixingFormat.nChannels == 1 ) + { + for( i = 0 ; i < SampleNum ; i ++, BufferF += 2 ) + { + *( ( float * )Buffer0 ) = ( BufferF[ 0 ] + BufferF[ 1 ] ) * 0.5f ; + Buffer0 += Stride ; + } + } + else { - *( ( float * )Buffer0 ) = BufferF[ 0 ] ; - *( ( float * )Buffer1 ) = BufferF[ 1 ] ; - Buffer0 += Stride ; - Buffer1 += Stride ; + for( i = 0 ; i < SampleNum ; i ++, BufferF += 2 ) + { + *( ( float * )Buffer0 ) = BufferF[ 0 ] ; + *( ( float * )Buffer1 ) = BufferF[ 1 ] ; + Buffer0 += Stride ; + Buffer1 += Stride ; + } } } else @@ -12458,53 +12646,101 @@ extern int WriteSelfMixingSample( BYTE *Buffer0, BYTE *Buffer1, DWORD Stride, DW switch( SoundSysData.SelfMixingFormatValidBitsPerSample ) { case 16: - for( i = 0 ; i < SampleNum ; i ++, BufferF += 2 ) + if( SoundSysData.SelfMixingFormat.nChannels == 1 ) { - *( ( short * )Buffer0 ) = ( short )_FTOL( BufferF[ 0 ] ) ; - *( ( short * )Buffer1 ) = ( short )_FTOL( BufferF[ 1 ] ) ; - Buffer0 += Stride ; - Buffer1 += Stride ; + for( i = 0 ; i < SampleNum ; i ++, BufferF += 2 ) + { + *( ( short * )Buffer0 ) = ( short )_FTOL( ( BufferF[ 0 ] + BufferF[ 1 ] ) * 0.5f ) ; + Buffer0 += Stride ; + } + } + else + { + for( i = 0 ; i < SampleNum ; i ++, BufferF += 2 ) + { + *( ( short * )Buffer0 ) = ( short )_FTOL( BufferF[ 0 ] ) ; + *( ( short * )Buffer1 ) = ( short )_FTOL( BufferF[ 1 ] ) ; + Buffer0 += Stride ; + Buffer1 += Stride ; + } } break ; case 24: if( SoundSysData.SelfMixingFormat.wBitsPerSample == 32 ) { - for( i = 0 ; i < SampleNum ; i ++, BufferF += 2 ) + if( SoundSysData.SelfMixingFormat.nChannels == 1 ) { - *( ( int * )Buffer0 ) = ( ( short )_FTOL( BufferF[ 0 ] ) << 8 ) & 0xffffff ; - *( ( int * )Buffer1 ) = ( ( short )_FTOL( BufferF[ 1 ] ) << 8 ) & 0xffffff ; - Buffer0 += Stride ; - Buffer1 += Stride ; + for( i = 0 ; i < SampleNum ; i ++, BufferF += 2 ) + { + *( ( int * )Buffer0 ) = ( ( short )_FTOL( ( BufferF[ 0 ] + BufferF[ 1 ] ) * 0.5f ) << 8 ) & 0xffffff ; + Buffer0 += Stride ; + } + } + else + { + for( i = 0 ; i < SampleNum ; i ++, BufferF += 2 ) + { + *( ( int * )Buffer0 ) = ( ( short )_FTOL( BufferF[ 0 ] ) << 8 ) & 0xffffff ; + *( ( int * )Buffer1 ) = ( ( short )_FTOL( BufferF[ 1 ] ) << 8 ) & 0xffffff ; + Buffer0 += Stride ; + Buffer1 += Stride ; + } } } else { - for( i = 0 ; i < SampleNum ; i ++, BufferF += 2 ) + if( SoundSysData.SelfMixingFormat.nChannels == 1 ) { - DWORD Dest0D ; - DWORD Dest1D ; - Dest0D = ( DWORD )_FTOL( BufferF[ 0 ] ) ; - Dest1D = ( DWORD )_FTOL( BufferF[ 1 ] ) ; - Buffer0[ 0 ] = ( BYTE )Dest0D ; - Buffer0[ 1 ] = ( BYTE )( Dest0D >> 8 ) ; - Buffer0[ 2 ] = ( BYTE )( Dest0D >> 16 ) ; - Buffer1[ 0 ] = ( BYTE )Dest1D ; - Buffer1[ 1 ] = ( BYTE )( Dest1D >> 8 ) ; - Buffer1[ 2 ] = ( BYTE )( Dest1D >> 16 ) ; - Buffer0 += Stride ; - Buffer1 += Stride ; + for( i = 0 ; i < SampleNum ; i ++, BufferF += 2 ) + { + DWORD Dest0D ; + Dest0D = ( DWORD )_FTOL( ( BufferF[ 0 ] + BufferF[ 1 ] ) * 0.5f ) ; + Buffer0[ 0 ] = ( BYTE )Dest0D ; + Buffer0[ 1 ] = ( BYTE )( Dest0D >> 8 ) ; + Buffer0[ 2 ] = ( BYTE )( Dest0D >> 16 ) ; + Buffer0 += Stride ; + } + } + else + { + for( i = 0 ; i < SampleNum ; i ++, BufferF += 2 ) + { + DWORD Dest0D ; + DWORD Dest1D ; + Dest0D = ( DWORD )_FTOL( BufferF[ 0 ] ) ; + Dest1D = ( DWORD )_FTOL( BufferF[ 1 ] ) ; + Buffer0[ 0 ] = ( BYTE )Dest0D ; + Buffer0[ 1 ] = ( BYTE )( Dest0D >> 8 ) ; + Buffer0[ 2 ] = ( BYTE )( Dest0D >> 16 ) ; + Buffer1[ 0 ] = ( BYTE )Dest1D ; + Buffer1[ 1 ] = ( BYTE )( Dest1D >> 8 ) ; + Buffer1[ 2 ] = ( BYTE )( Dest1D >> 16 ) ; + Buffer0 += Stride ; + Buffer1 += Stride ; + } } } break ; case 32: - for( i = 0 ; i < SampleNum ; i ++, BufferF += 2 ) + if( SoundSysData.SelfMixingFormat.nChannels == 1 ) { - *( ( int * )Buffer0 ) = ( short )_FTOL( BufferF[ 0 ] ) << 16 ; - *( ( int * )Buffer1 ) = ( short )_FTOL( BufferF[ 1 ] ) << 16 ; - Buffer0 += Stride ; - Buffer1 += Stride ; + for( i = 0 ; i < SampleNum ; i ++, BufferF += 2 ) + { + *( ( int * )Buffer0 ) = ( short )_FTOL( ( BufferF[ 0 ] + BufferF[ 1 ] ) * 0.5f ) << 16 ; + Buffer0 += Stride ; + } + } + else + { + for( i = 0 ; i < SampleNum ; i ++, BufferF += 2 ) + { + *( ( int * )Buffer0 ) = ( short )_FTOL( BufferF[ 0 ] ) << 16 ; + *( ( int * )Buffer1 ) = ( short )_FTOL( BufferF[ 1 ] ) << 16 ; + Buffer0 += Stride ; + Buffer1 += Stride ; + } } break ; } @@ -12594,12 +12830,23 @@ extern int WriteSelfMixingSample( BYTE *Buffer0, BYTE *Buffer1, DWORD Stride, DW BufferI = ( int * )SoundSysData.SelfMixingBuffer ; if( SoundSysData.SelfMixingFormatIsFloat ) { - for( i = 0 ; i < SampleNum ; i ++, BufferI += 2 ) + if( SoundSysData.SelfMixingFormat.nChannels == 1 ) { - *( ( float * )Buffer0 ) = BufferI[ 0 ] * ( 1.0f / 32768.0f ) ; - *( ( float * )Buffer1 ) = BufferI[ 1 ] * ( 1.0f / 32768.0f ) ; - Buffer0 += Stride ; - Buffer1 += Stride ; + for( i = 0 ; i < SampleNum ; i ++, BufferI += 2 ) + { + *( ( float * )Buffer0 ) = ( ( BufferI[ 0 ] + BufferI[ 1 ] ) >> 1 ) * ( 1.0f / 32768.0f ) ; + Buffer0 += Stride ; + } + } + else + { + for( i = 0 ; i < SampleNum ; i ++, BufferI += 2 ) + { + *( ( float * )Buffer0 ) = BufferI[ 0 ] * ( 1.0f / 32768.0f ) ; + *( ( float * )Buffer1 ) = BufferI[ 1 ] * ( 1.0f / 32768.0f ) ; + Buffer0 += Stride ; + Buffer1 += Stride ; + } } } else @@ -12607,53 +12854,101 @@ extern int WriteSelfMixingSample( BYTE *Buffer0, BYTE *Buffer1, DWORD Stride, DW switch( SoundSysData.SelfMixingFormatValidBitsPerSample ) { case 16: - for( i = 0 ; i < SampleNum ; i ++, BufferI += 2 ) + if( SoundSysData.SelfMixingFormat.nChannels == 1 ) { - *( ( short * )Buffer0 ) = ( short )BufferI[ 0 ] ; - *( ( short * )Buffer1 ) = ( short )BufferI[ 1 ] ; - Buffer0 += Stride ; - Buffer1 += Stride ; + for( i = 0 ; i < SampleNum ; i ++, BufferI += 2 ) + { + *( ( short * )Buffer0 ) = ( short )( ( BufferI[ 0 ] + BufferI[ 1 ] ) >> 1 ) ; + Buffer0 += Stride ; + } + } + else + { + for( i = 0 ; i < SampleNum ; i ++, BufferI += 2 ) + { + *( ( short * )Buffer0 ) = ( short )BufferI[ 0 ] ; + *( ( short * )Buffer1 ) = ( short )BufferI[ 1 ] ; + Buffer0 += Stride ; + Buffer1 += Stride ; + } } break ; case 24: if( SoundSysData.SelfMixingFormat.wBitsPerSample == 32 ) { - for( i = 0 ; i < SampleNum ; i ++, BufferI += 2 ) + if( SoundSysData.SelfMixingFormat.nChannels == 1 ) { - *( ( int * )Buffer0 ) = ( ( short )BufferI[ 0 ] << 8 ) & 0xffffff ; - *( ( int * )Buffer1 ) = ( ( short )BufferI[ 1 ] << 8 ) & 0xffffff ; - Buffer0 += Stride ; - Buffer1 += Stride ; + for( i = 0 ; i < SampleNum ; i ++, BufferI += 2 ) + { + *( ( int * )Buffer0 ) = ( ( short )( ( BufferI[ 0 ] + BufferI[ 1 ] ) >> 1 ) << 8 ) & 0xffffff ; + Buffer0 += Stride ; + } + } + else + { + for( i = 0 ; i < SampleNum ; i ++, BufferI += 2 ) + { + *( ( int * )Buffer0 ) = ( ( short )BufferI[ 0 ] << 8 ) & 0xffffff ; + *( ( int * )Buffer1 ) = ( ( short )BufferI[ 1 ] << 8 ) & 0xffffff ; + Buffer0 += Stride ; + Buffer1 += Stride ; + } } } else { - for( i = 0 ; i < SampleNum ; i ++, BufferI += 2 ) + if( SoundSysData.SelfMixingFormat.nChannels == 1 ) { - DWORD Dest0D ; - DWORD Dest1D ; - Dest0D = ( DWORD )BufferI[ 0 ] ; - Dest1D = ( DWORD )BufferI[ 1 ] ; - Buffer0[ 0 ] = ( BYTE )0 ; - Buffer0[ 1 ] = ( BYTE )Dest0D ; - Buffer0[ 2 ] = ( BYTE )( Dest0D >> 8 ) ; - Buffer1[ 0 ] = ( BYTE )0 ; - Buffer1[ 1 ] = ( BYTE )Dest1D ; - Buffer1[ 2 ] = ( BYTE )( Dest1D >> 8 ) ; - Buffer0 += Stride ; - Buffer1 += Stride ; + for( i = 0 ; i < SampleNum ; i ++, BufferI += 2 ) + { + DWORD Dest0D ; + Dest0D = ( DWORD )( ( BufferI[ 0 ] + BufferI[ 1 ] ) >> 1 ) ; + Buffer0[ 0 ] = ( BYTE )0 ; + Buffer0[ 1 ] = ( BYTE )Dest0D ; + Buffer0[ 2 ] = ( BYTE )( Dest0D >> 8 ) ; + Buffer0 += Stride ; + } + } + else + { + for( i = 0 ; i < SampleNum ; i ++, BufferI += 2 ) + { + DWORD Dest0D ; + DWORD Dest1D ; + Dest0D = ( DWORD )BufferI[ 0 ] ; + Dest1D = ( DWORD )BufferI[ 1 ] ; + Buffer0[ 0 ] = ( BYTE )0 ; + Buffer0[ 1 ] = ( BYTE )Dest0D ; + Buffer0[ 2 ] = ( BYTE )( Dest0D >> 8 ) ; + Buffer1[ 0 ] = ( BYTE )0 ; + Buffer1[ 1 ] = ( BYTE )Dest1D ; + Buffer1[ 2 ] = ( BYTE )( Dest1D >> 8 ) ; + Buffer0 += Stride ; + Buffer1 += Stride ; + } } } break ; case 32: - for( i = 0 ; i < SampleNum ; i ++, BufferI += 2 ) + if( SoundSysData.SelfMixingFormat.nChannels == 1 ) { - *( ( int * )Buffer0 ) = ( short )BufferI[ 0 ] << 16 ; - *( ( int * )Buffer1 ) = ( short )BufferI[ 1 ] << 16 ; - Buffer0 += Stride ; - Buffer1 += Stride ; + for( i = 0 ; i < SampleNum ; i ++, BufferI += 2 ) + { + *( ( int * )Buffer0 ) = ( short )( ( BufferI[ 0 ] + BufferI[ 1 ] ) >> 1 ) << 16 ; + Buffer0 += Stride ; + } + } + else + { + for( i = 0 ; i < SampleNum ; i ++, BufferI += 2 ) + { + *( ( int * )Buffer0 ) = ( short )BufferI[ 0 ] << 16 ; + *( ( int * )Buffer1 ) = ( short )BufferI[ 1 ] << 16 ; + Buffer0 += Stride ; + Buffer1 += Stride ; + } } break ; } @@ -19540,7 +19835,7 @@ extern int NS_StopMusicMem( int MusicHandle ) // サウンドハンドルの再生の場合はサウンドを止める if( MidiSystemData.DefaultHandle != 0 && MidiSystemData.DefaultHandleToSoundHandleFlag == TRUE ) { - NS_StopSoundMem( MidiSystemData.DefaultHandle ) ; + NS_StopSoundMem( MidiSystemData.DefaultHandle, FALSE ) ; NS_DeleteSoundMem( MidiSystemData.DefaultHandle, FALSE ) ; MidiSystemData.DefaultHandle = 0 ; @@ -19824,7 +20119,7 @@ extern int NS_StopMusic( void ) if( MidiSystemData.DefaultHandleToSoundHandleFlag == TRUE ) { - NS_StopSoundMem( MidiSystemData.DefaultHandle ) ; + NS_StopSoundMem( MidiSystemData.DefaultHandle, FALSE ) ; NS_DeleteSoundMem( MidiSystemData.DefaultHandle, FALSE ) ; } else @@ -20156,7 +20451,7 @@ static int SoundTypeChangeToStream( int SoundHandle ) // 既存ハンドルの削除 { - NS_StopSoundMem( SoundHandle ) ; // 再生中だったときのことを考えて止めておく + NS_StopSoundMem( SoundHandle, FALSE ) ; // 再生中だったときのことを考えて止めておく NS_DeleteSoundMem( SoundHandle, FALSE ) ; // ハンドルを削除 } diff --git a/DxSound.h b/DxSound.h index 149e10c..a0d5726 100644 --- a/DxSound.h +++ b/DxSound.h @@ -2,7 +2,7 @@ // // DXライブラリ サウンドプログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -225,6 +225,7 @@ struct STREAMPLAYDATA BYTE LoopPositionValidFlag ; // ループ位置が有効フラグ BYTE AllPlayFlag ; // 全体を通して一度でも最後でも再生したかフラグ ULONGLONG LoopAfterCompPlayWaveLength ; // ループ後の CompPlayWaveLength に加算する値 + int IsNextLoopEndStop ; // 次回のループ終了時に音を止める指定かのフラグ DWORD EndOffset ; // 終了オフセット DWORD EndStartOffset ; // 終了処理開始オフセット @@ -253,6 +254,9 @@ struct SOUND int AddPlay3DSoundList ; // Play3DSoundList がリストに追加されているかどうか( TRUE:追加されている FALSE:追加されていない ) HANDLELIST Play3DSoundList ; // 再生中の3Dサウンドのリスト処理用構造体 + int AddPlaySoundList ; // PlaySoundList がリストに追加されているかどうか( TRUE:追加されている FALSE:追加されていない ) + HANDLELIST PlaySoundList ; // 再生中のサウンドのリスト処理用構造体 + int PlayFinishDeleteFlag ; // サウンドの再生が終了したら削除するかどうか( TRUE:削除する FALSE:削除しない ) HANDLELIST PlayFinishDeleteSoundList ; // サウンドの再生が終了したら削除するサウンドのリスト処理用構造体 @@ -388,6 +392,10 @@ struct SOUNDSYSTEMDATA SIMPLELIST PlaySoundBufferListLast ; // 再生中サウンドバッファリストの終端 DX_CRITICAL_SECTION PlaySoundBufferListCriticalSection ; // 再生中サウンドバッファリストアクセス時用クリティカルセクション + HANDLELIST PlaySoundListFirst ; // 再生中のサウンドハンドルリストの先頭 + HANDLELIST PlaySoundListLast ; // 再生中のサウンドハンドルリストの終端 + DX_CRITICAL_SECTION PlaySoundListCriticalSection ; // 再生中のサウンドハンドルリストアクセス時用クリティカルセクション + HANDLELIST StreamSoundListFirst ; // ストリームサウンドハンドルリストの先頭 HANDLELIST StreamSoundListLast ; // ストリームサウンドハンドルリストの終端 DX_CRITICAL_SECTION StreamSoundListCriticalSection ;// ストリームサウンドハンドルリストアクセス時用クリティカルセクション @@ -429,6 +437,7 @@ struct SOUNDSYSTEMDATA int SelfMixingScalingSampleCount ; // 自前ミキシングでスケーリングを行うカウンタ int EnableSelfMixingFlag ; // 自前ミキシングを行うかどうか + int EnableChangeLoopFlag ; // 再生途中の Loopフラグの変更に対応しているかどうか int EnableSoundCaptureFlag ; // サウンドキャプチャを前提とした動作をする #ifndef DX_NON_SAVEFUNCTION int SoundCaptureFlag ; // サウンドキャプチャを実行している最中かどうかのフラグ(TRUE:最中 FASLE:違う) @@ -534,6 +543,7 @@ extern MIDISYSTEMDATA MidiSystemData ; extern int InitializeSoundHandle( HANDLEINFO *HandleInfo ) ; // サウンドハンドルの初期化 extern int TerminateSoundHandle( HANDLEINFO *HandleInfo ) ; // サウンドハンドルの後始末 +extern int DumpInfoSoundHandle( HANDLEINFO *HandleInfo ) ; // サウンドハンドルの情報出力 extern int LoadSoundMemBase_UseGParam( LOADSOUND_GPARAM *GParam, const wchar_t *WaveName, int BufferNum, int UnionHandle, int ASyncLoadFlag = FALSE, int ASyncThread = FALSE ) ; // LoadSoundMemBase のグローバル変数にアクセスしないバージョン extern int LoadSoundMemByMemImageBase_UseGParam( LOADSOUND_GPARAM *GParam, int CreateSoundHandle, int SoundHandle, const void *FileImageBuffer, size_t ImageSize, int BufferNum, int UnionHandle = -1, int ASyncLoadFlag = FALSE, int ASyncThread = FALSE ) ; // LoadSoundMemByMemImageBase のグローバル変数にアクセスしないバージョン @@ -559,6 +569,7 @@ extern MIDISYSTEMDATA MidiSystemData ; extern int Refresh3DSoundParamAll() ; // 再生中のすべての3Dサウンドのパラメータを更新する extern int ProcessPlayFinishDeleteSoundMemAll( void ) ; // 再生が終了したらサウンドハンドルを削除するサウンドの処理を行う +extern int ProcessPlaySoundMemAll( void ) ; // サウンドを再生しているサウンドハンドルに対する処理を行う extern int ProcessPlay3DSoundMemAll( void ) ; // 3Dサウンドを再生しているサウンドハンドルに対する処理を行う extern int ProcessSoundSystem( void ) ; // サウンドシステムで周期的に行う処理用の関数 diff --git a/DxSoundConvert.cpp b/DxSoundConvert.cpp index 6c0f2e6..249a210 100644 --- a/DxSoundConvert.cpp +++ b/DxSoundConvert.cpp @@ -2,7 +2,7 @@ // // DXライブラリ サウンドデータ変換プログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxSoundConvert.h b/DxSoundConvert.h index 4400eaa..3a7231c 100644 --- a/DxSoundConvert.h +++ b/DxSoundConvert.h @@ -2,7 +2,7 @@ // // DXライブラリ サウンドデータ変換プログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxStatic.h b/DxStatic.h index 20524dd..f3bd4be 100644 --- a/DxStatic.h +++ b/DxStatic.h @@ -2,7 +2,7 @@ // // DXライブラリ 内部使用関連用ヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ---------------------------------------------------------------------------- @@ -313,11 +313,13 @@ namespace DxLib extern int NS_SRand( int Seed ) ; // 乱数の初期値を設定する #ifndef DX_NON_MERSENNE_TWISTER +extern DWORD NS_GetMersenneTwisterRand( void ) ; // メルセンヌ・ツイスターアルゴリズムで生成された乱数値を無加工で取得する extern DWORD_PTR NS_CreateRandHandle( int Seed ) ; // 乱数ハンドルを作成する( 戻り値 0以外:乱数ハンドル 0:エラー ) extern int NS_DeleteRandHandle( DWORD_PTR RandHandle ) ; // 乱数ハンドルを削除する extern int NS_SRandHandle( DWORD_PTR RandHandle, int Seed ) ; // 乱数ハンドルの初期値を再設定する extern int NS_GetRandHandle( DWORD_PTR RandHandle, int RandMax ) ; // 乱数ハンドルを使用して乱数を取得する( RandMax : 返って来る値の最大値 ) +extern DWORD NS_GetMersenneTwisterRandHandle( DWORD_PTR RandHandle ) ; // 乱数ハンドルを使用してメルセンヌ・ツイスターアルゴリズムで生成された乱数値を無加工で取得する #endif // DX_NON_MERSENNE_TWISTER @@ -360,6 +362,7 @@ namespace DxLib // ログ出力設定関数 extern int NS_SetOutApplicationLogValidFlag( int Flag ) ; // ログ出力を行うか否かのセット +extern int NS_SetOutApplicationSystemLogValidFlag( int Flag ) ; // ログファイル( Log.txt ) にDXライブラリ内部のログ出力を行うかどうか設定する( TRUE:DXライブラリ内部のログ出力を行う( デフォルト ) FALSE:DXライブラリ内部のログ出力を行わない ) extern int NS_SetApplicationLogFileName( const TCHAR *FileName ) ; // ログファイルの名前を設定する( Log.txt 以外にしたい場合に使用 ) extern int NS_SetApplicationLogFileNameWithStrLen( const TCHAR *FileName, size_t FileNameLength ) ; // ログファイルの名前を設定する( Log.txt 以外にしたい場合に使用 ) extern int NS_SetApplicationLogSaveDirectory( const TCHAR *DirectoryPath ) ; // ログファイル( Log.txt ) を保存するディレクトリパスを設定する @@ -445,6 +448,9 @@ namespace DxLib // DxHandle.cpp関数プロトタイプ宣言 extern int NS_SetDeleteHandleFlag( int Handle, int *DeleteFlag ) ; // ハンドルが削除されたときに−1が設定される変数を登録する +extern int NS_GetHandleNum( int HandleType ) ; // 指定のタイプのハンドルの数を取得する +extern int NS_GetMaxHandleNum( int HandleType ) ; // 指定のタイプのハンドルが最大で幾つ作成できるかを取得する +extern int NS_DumpHandleInfo( int HandleType /* DX_HANDLETYPE_GRAPH等 */ ) ; // 指定のタイプの全ハンドルの情報をログに出力する @@ -561,6 +567,7 @@ namespace DxLib extern int NS_SetValidMousePointerWindowOutClientAreaMoveFlag( int Flag ) ; // マウスポインタがウインドウのクライアントエリアの外にいけるかどうかを設定する( TRUE:いける( デフォルト設定 ) FALSE:いけない ) extern int NS_SetUseBackBufferTransColorFlag( int Flag ) ; // バックバッファの透過色の部分を透過させるかどうかを設定する( TRUE:透過させる FALSE:透過させない ) extern int NS_SetUseUpdateLayerdWindowFlag( int Flag ) ; // UpdateLayerdWindowForBaseImage や UpdateLayerdWindowForSoftImage を使用するかどうかを設定する( TRUE:使用する FALSE:使用しない ) +extern int NS_SetUseMouseEventTransparentWindowFlag( int Flag ) ; // SetUseUpdateLayerdWindowFlag( TRUE ); の設定の際にマウス関係のイベントを背後のウィンドウに透過させるかを設定する( TRUE:透過する FALSE:透過しない( デフォルト ) ) extern int NS_SetResourceModule( HMODULE ResourceModule ) ; // リソースを読み込む際に使用するモジュールを設定する( NULL を指定すると初期状態に戻ります、デフォルトでは NULL ) extern int NS_SetUseDxLibWM_PAINTProcess( int Flag ) ; // WM_PAINT メッセージが来た際に『DXライブラリの WM_PAINTメッセージが来た際の処理』を行うかどうかを設定する( 別スレッドで描画処理を行う場合などで使用 ) extern int NS_SetWindows10_WM_CHAR_CancelTime( int MilliSecond ) ; // Windows10 で WM_CHAR で短時間に連続して同じ文字が入力された場合の無効扱いにする時間を設定する( MilliSecond のミリ秒以内に連続して同じ文字が入力された場合に無効にする、MilliSecond の値をマイナスにするとデフォルトの設定に戻る ) @@ -658,6 +665,7 @@ namespace DxLib // マウス関係関数 extern int NS_SetMouseDispFlag( int DispFlag ) ; // マウスの表示フラグのセット +extern int NS_SetMouseDispIgnoreMenuFlag( int IgnoreMenuFlag ) ; // マウスポインタの表示状態についてメニューの表示状態を無視するかどうかを設定する( TRUE:メニューの表示状態を無視する FALSE:メニューの表示状態を考慮する( デフォルト ) ) extern int NS_GetMousePoint( int *XBuf, int *YBuf ) ; // マウスの位置を取得する extern int NS_SetMousePoint( int PointX, int PointY ) ; // マウスの位置をセットする #ifndef DX_NON_INPUT @@ -684,7 +692,7 @@ namespace DxLib // タッチパネル入力関係関数 extern int NS_GetTouchInputNum( void ) ; // タッチされている数を取得する -extern int NS_GetTouchInput( int InputNo, int *PositionX, int *PositionY, int *ID = NULL , int *Device = NULL ) ; // タッチの情報を取得する +extern int NS_GetTouchInput( int InputNo, int *PositionX, int *PositionY, int *ID = NULL , int *Device = NULL, float *Pressure = NULL ) ; // タッチの情報を取得する extern int NS_GetTouchInputLogNum( void ) ; // ストックされているタッチ情報の数を取得する extern int NS_ClearTouchInputLog( void ) ; // ストックされているタッチ情報をクリアする @@ -845,7 +853,8 @@ namespace DxLib #ifndef DX_NON_KEYEX -extern int NS_DrawIMEInputString( int x, int y, int SelectStringNum , int DrawCandidateList = TRUE ) ; // 画面上に入力中の文字列を描画する +extern int NS_DrawIMEInputString( int x, int y, int SelectStringNum , int DrawCandidateList = TRUE ) ; // 画面上に入力中の文字列を描画する +extern int NS_DrawIMEInputExtendString( int x, int y, double ExRateX, double ExRateY, int SelectStringNum , int DrawCandidateList DEFAULTPARAM( = TRUE ) ) ; // 画面上に入力中の文字列を描画する( 拡大率付き ) extern int NS_SetUseIMEFlag( int UseFlag ) ; // IMEを使用するかどうかをセットする extern int NS_GetUseIMEFlag( void ) ; // IMEを使用するかどうかの設定を取得する extern int NS_SetInputStringMaxLengthIMESync( int Flag ) ; // IMEで入力できる最大文字数を MakeKeyInput の設定に合わせるかどうかをセットする( TRUE:あわせる FALSE:あわせない(デフォルト) ) @@ -880,6 +889,8 @@ namespace DxLib extern int NS_GetIMEInputModeStr( TCHAR *GetBuffer ) ; // IMEの入力モード文字列の取得 extern const IMEINPUTDATA* NS_GetIMEInputData( void ) ; // IMEで入力中の文字列の情報を取得する +extern int NS_SetIMEInputString( const TCHAR *String ) ; // IMEで入力中の文字列を変更する( IMEで文字列を入力中ではなかった場合は何も起こりません ) +extern int NS_SetIMEInputStringWithStrLen( const TCHAR *String, size_t StringLength ) ; // IMEで入力中の文字列を変更する( IMEで文字列を入力中ではなかった場合は何も起こりません ) extern int NS_SetKeyInputStringColor( ULONGLONG NmlStr, ULONGLONG NmlCur, ULONGLONG IMEStrBack, ULONGLONG IMECur, ULONGLONG IMELine, ULONGLONG IMESelectStr, ULONGLONG IMEModeStr , ULONGLONG NmlStrE = 0 , ULONGLONG IMESelectStrE = 0 , ULONGLONG IMEModeStrE = 0 , ULONGLONG IMESelectWinE = ULL_PARAM( 0xffffffffffffffff ) , ULONGLONG IMESelectWinF = ULL_PARAM( 0xffffffffffffffff ) , ULONGLONG SelectStrBackColor = ULL_PARAM( 0xffffffffffffffff ) , ULONGLONG SelectStrColor = ULL_PARAM( 0xffffffffffffffff ) , ULONGLONG SelectStrEdgeColor = ULL_PARAM( 0xffffffffffffffff ), ULONGLONG IMEStr = ULL_PARAM( 0xffffffffffffffff ), ULONGLONG IMEStrE = ULL_PARAM( 0xffffffffffffffff ) ) ; // InputString関数使用時の文字の各色を変更する extern int NS_SetKeyInputStringColor2( int TargetColor /* DX_KEYINPSTRCOLOR_NORMAL_STR 等 */, unsigned int Color ) ; // InputString関数使用時の文字の各色を変更する extern int NS_ResetKeyInputStringColor2( int TargetColor /* DX_KEYINPSTRCOLOR_NORMAL_STR 等 */ ) ; // SetKeyInputStringColor2 で設定した色をデフォルトに戻す @@ -896,6 +907,7 @@ namespace DxLib extern int NS_ReStartKeyInput( int InputHandle ) ; // 入力が完了したキー入力を再度編集状態に戻す extern int NS_ProcessActKeyInput( void ) ; // キー入力処理関数 extern int NS_DrawKeyInputString( int x, int y, int InputHandle , int DrawCandidateList = TRUE ) ; // キー入力中データの描画 +extern int NS_DrawKeyInputExtendString( int x, int y, double ExRateX, double ExRateY, int InputHandle , int DrawCandidateList DEFAULTPARAM( = TRUE ) ) ; // キー入力ハンドルの入力中情報の描画( 拡大率指定付き ) extern int NS_SetKeyInputDrawArea( int x1, int y1, int x2, int y2, int InputHandle ) ; // キー入力ハンドルの入力中文字列を描画する際の描画範囲を設定する extern int NS_SetKeyInputSelectArea( int SelectStart, int SelectEnd, int InputHandle ) ; // キー入力データの指定の領域を選択状態にする( SelectStart と SelectEnd に -1 を指定すると選択状態が解除されます ) @@ -941,6 +953,7 @@ namespace DxLib extern int NS_FileRead_open_mem( const void *FileImage, size_t FileImageSize ) ; // メモリに展開されたファイルを開く extern LONGLONG NS_FileRead_size( const TCHAR *FilePath ) ; // ファイルのサイズを得る extern LONGLONG NS_FileRead_size_WithStrLen( const TCHAR *FilePath, size_t FilePathLength ) ; // ファイルのサイズを取得する +extern LONGLONG NS_FileRead_size_handle( int FileHandle ) ; // ファイルのサイズを取得する( ファイルハンドル使用版 ) extern int NS_FileRead_close( int FileHandle ) ; // ファイルを閉じる extern LONGLONG NS_FileRead_tell( int FileHandle ) ; // ファイルポインタの現在位置を得る extern int NS_FileRead_seek( int FileHandle , LONGLONG Offset , int Origin ) ; // ファイルポインタの位置を変更する @@ -1029,10 +1042,13 @@ namespace DxLib extern int NS_SetJoypadInputToKeyInput( int InputType, int PadInput, int KeyInput1, int KeyInput2 = -1 , int KeyInput3 = -1 , int KeyInput4 = -1 ) ; // ジョイパッドの入力に対応したキーボードの入力を設定する( InputType:設定を変更するパッドの識別子( DX_INPUT_PAD1等 )  PadInput:設定を変更するパッドボタンの識別子( PAD_INPUT_1 等 )  KeyInput1:PadInput を押下したことにするキーコード( KEY_INPUT_A など )その1  KeyInput2:その2、-1で設定なし  KeyInput3:その3、-1で設定なし  KeyInput4:その4、-1で設定なし ) extern int NS_SetJoypadDeadZone( int InputType, double Zone ) ; // ジョイパッドの無効ゾーンの設定を行う( InputType:設定を変更するパッドの識別子( DX_INPUT_PAD1等 ) Zone:新しい無効ゾーン( 0.0 〜 1.0 )、デフォルト値は 0.35 ) extern double NS_GetJoypadDeadZone( int InputType ) ; // ジョイパッドの無効ゾーンの設定を取得する( InputType:設定を変更するパッドの識別子( DX_INPUT_PAD1等 ) 戻り値:無効ゾーン( 0.0 〜 1.0 ) +extern int NS_SetJoypadDefaultDeadZoneAll( double Zone ) ; // ジョイパッドのデフォルトの無効ゾーンを設定する( Zone:新しい無効ゾーン( 0.0 〜 1.0 )、デフォルト値は 0.35 ) +extern double NS_GetJoypadDefaultDeadZoneAll( void ) ; // ジョイパッドのデフォルトの無効ゾーンを取得する( 戻り値:無効ゾーン( 0.0 〜 1.0 ) ) extern int NS_StartJoypadVibration( int InputType, int Power, int Time, int EffectIndex = -1 ) ; // ジョイパッドの振動を開始する extern int NS_StopJoypadVibration( int InputType, int EffectIndex = -1 ) ; // ジョイパッドの振動を停止する extern int NS_GetJoypadPOVState( int InputType, int POVNumber ) ; // ジョイパッドのPOV入力の状態を得る( 戻り値 指定のPOVデータの角度、単位は角度の100倍( 90度なら 9000 ) 中心位置にある場合は -1 が返る ) extern int NS_ReSetupJoypad( void ) ; // ジョイパッドの再セットアップを行う( 新たに接続されたジョイパッドがあったら検出される ) +extern int NS_ReSetupInputSystem( void ) ; // 入力システムの再セットアップを行う extern int NS_SetUseJoypadVibrationFlag( int Flag ) ; // ジョイパッドの振動機能を使用するかどうかを設定する( TRUE:使用する  FALSE:使用しない ) @@ -1226,6 +1242,10 @@ namespace DxLib extern int NS_GetCreateGraphChannelBitDepth( void ) ; // 作成するグラフィックの1チャンネル辺りのビット深度を取得する extern int NS_SetCreateGraphInitGraphDelete( int Flag ) ; // 作成するグラフィックハンドルを InitGraph() で削除されるかを設定する( Flag TRUE:InitGraphで削除される(デフォルト) FALSE:InitGraphで削除されない ) extern int NS_GetCreateGraphInitGraphDelete( void ) ; // 作成するグラフィックハンドルを InitGraph() で削除されるかを取得する( Flag TRUE:InitGraphで削除される(デフォルト) FALSE:InitGraphで削除されない ) +extern int NS_SetCreateGraphHandle( int GrHandle ) ; // 作成するグラフィックハンドルのハンドル値を設定する、0以下の値を渡すと設定解除( 存在しないグラフィックハンドルの値の場合のみ有効 ) +extern int NS_GetCreateGraphHandle( void ) ; // 作成するグラフィックハンドルのハンドル値を取得する +extern int NS_SetCreateDivGraphHandle( const int *HandleArray, int HandleNum ) ; // 作成するグラフィックハンドルのハンドル値を設定する、LoadDivGraph 等の分割画像読み込み用、HandleArray に NULL を渡すと設定解除( 存在しないグラフィックハンドルの値の場合のみ有効 ) +extern int NS_GetCreateDivGraphHandle( int *HandleArray ) ; // 作成するグラフィックハンドルのハンドル値を取得する、LoadDivGraph 等の分割画像読み込み用、戻り値は SetCreateDivGraphHandle の引数 HandleNum に渡した値、HandleArray を NULL にすることが可能 extern int NS_SetDrawValidGraphCreateFlag( int Flag ) ; // 描画可能なグラフィックを作成するかどうかのフラグをセットする( TRUE:描画可能 FALSE:描画不可能 ) extern int NS_GetDrawValidGraphCreateFlag( void ) ; // 描画可能なグラフィックを作成するかどうかのフラグを取得する extern int NS_SetDrawValidFlagOf3DGraph( int Flag ) ; // SetDrawValidGraphCreateFlag の旧名称 @@ -1274,6 +1294,8 @@ namespace DxLib extern int NS_SetUseMaxTextureSize( int Size ) ; // 使用するテクスチャーの最大サイズをセット(0でデフォルト) extern int NS_SetUseGraphBaseDataBackup( int Flag ) ; // 画像を作成する際に使用した画像データのバックアップをしてデバイスロスト時に使用するかどうかのフラグをセットする( TRUE:バックアップをする( デフォルト ) FALSE:バックアップをしない ) extern int NS_GetUseGraphBaseDataBackup( void ) ; // 画像を作成する際に使用した画像データのバックアップをしてデバイスロスト時に使用するかどうかのフラグを取得する +extern int NS_SetUseLoadDivGraphSizeCheckFlag( int Flag ) ; // LoadDivGraph 系の分割画像読み込み関数でサイズのチェックを行うかどうかを設定する( Flag:TRUE( チェックを行う(デフォルト) ) FALSE:チェックを行わない ) +extern int NS_GetUseLoadDivGraphSizeCheckFlag( void ) ; // LoadDivGraph 系の分割画像読み込み関数でサイズのチェックを行うかどうかの設定を取得する // 画像情報関係関数 extern const unsigned int* NS_GetFullColorImage( int GrHandle ) ; // 指定の画像のARGB8のフルカラーイメージを取得する @@ -1343,6 +1365,7 @@ namespace DxLib extern int NS_DrawPixelSet( const POINTDATA *PointData, int Num ) ; // 点の集合を描画する extern int NS_DrawLineSet( const LINEDATA *LineData, int Num ) ; // 線の集合を描画する +extern int NS_DrawBoxSet( const RECTDATA *RectData, int Num ) ; // 矩形の集合を描画する extern int NS_DrawPixel3D( VECTOR Pos, unsigned int Color ) ; // 3Dの点を描画する extern int NS_DrawPixel3DD( VECTOR_D Pos, unsigned int Color ) ; // 3Dの点を描画する @@ -1445,8 +1468,11 @@ extern int NS_DrawRectRotaGraph3F( float x, float y, int SrcX, int SrcY, extern int NS_DrawPolygon2D( const VERTEX2D *Vertex, int PolygonNum, int GrHandle, int TransFlag ) ; // 2Dポリゴンを描画する extern int NS_DrawPolygon3D( const VERTEX3D *Vertex, int PolygonNum, int GrHandle, int TransFlag ) ; // 3Dポリゴンを描画する extern int NS_DrawPolygonIndexed2D( const VERTEX2D *Vertex, int VertexNum, const unsigned short *Indices, int PolygonNum, int GrHandle, int TransFlag ) ; // 2Dポリゴンを描画する( 頂点インデックスを使用 ) +extern int NS_DrawPolygon32bitIndexed2D( const VERTEX2D *VertexArray, int VertexNum, const unsigned int *IndexArray, int PolygonNum, int GrHandle, int TransFlag ) ; // 2Dポリゴンを描画する( 頂点インデックスを使用 ) extern int NS_DrawPolygonIndexed3D( const VERTEX3D *Vertex, int VertexNum, const unsigned short *Indices, int PolygonNum, int GrHandle, int TransFlag ) ; // 3Dポリゴンを描画する( 頂点インデックスを使用 ) +extern int NS_DrawPolygon32bitIndexed3D( const VERTEX3D *VertexArray, int VertexNum, const unsigned int *IndexArray, int PolygonNum, int GrHandle, int TransFlag ) ; // 3Dポリゴンを描画する( 頂点インデックスを使用 ) extern int NS_DrawPolygonIndexed3DBase( const VERTEX_3D *Vertex, int VertexNum, const unsigned short *Indices, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) ; // 3Dポリゴンを描画する( 頂点インデックスを使用 )( 旧バージョン用 ) +extern int NS_DrawPolygon32bitIndexed3DBase( const VERTEX_3D *VertexArray, int VertexNum, const unsigned int *IndexArray, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) ; // 3Dポリゴンを描画する( 頂点インデックスを使用 )( 旧バージョン用 ) extern int NS_DrawPolygon3DBase( const VERTEX_3D *Vertex, int VertexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) ; // 3Dポリゴンを描画する( 旧バージョン用 ) #ifndef DX_COMPILE_TYPE_C_LANGUAGE extern int NS_DrawPolygon3D( const VERTEX_3D *Vertex, int PolygonNum, int GrHandle, int TransFlag ) ; // 3Dポリゴンを描画する( 旧バージョン用 ) @@ -1457,7 +1483,9 @@ extern int NS_DrawRectRotaGraph3F( float x, float y, int SrcX, int SrcY, extern int NS_DrawPrimitive2D( const VERTEX2D *Vertex, int VertexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) ; // 2Dプリミティブを描画する extern int NS_DrawPrimitive3D( const VERTEX3D *Vertex, int VertexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) ; // 3Dプリミティブを描画する extern int NS_DrawPrimitiveIndexed2D( const VERTEX2D *Vertex, int VertexNum, const unsigned short *Indices, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) ; // 2Dプリミティブを描画する(頂点インデックス使用) +extern int NS_DrawPrimitive32bitIndexed2D( const VERTEX2D *VertexArray, int VertexNum, const unsigned int *IndexArray, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) ; // 2Dプリミティブを描画する(頂点インデックス使用) extern int NS_DrawPrimitiveIndexed3D( const VERTEX3D *Vertex, int VertexNum, const unsigned short *Indices, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) ; // 3Dプリミティブを描画する(頂点インデックス使用) +extern int NS_DrawPrimitive32bitIndexed3D( const VERTEX3D *VertexArray, int VertexNum, const unsigned int *IndexArray, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) ; // 3Dプリミティブを描画する(頂点インデックス使用) extern int NS_DrawPolygon3D_UseVertexBuffer( int VertexBufHandle, int GrHandle, int TransFlag ) ; // 頂点バッファを使用して3Dポリゴンを描画する extern int NS_DrawPrimitive3D_UseVertexBuffer( int VertexBufHandle, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */, int GrHandle, int TransFlag ) ; // 頂点バッファを使用して3Dプリミティブを描画する @@ -1479,6 +1507,8 @@ extern int NS_DrawRectRotaGraph3F( float x, float y, int SrcX, int SrcY, extern int NS_GetDrawMode( void ) ; // 描画モードを取得する extern int NS_SetDrawBlendMode( int BlendMode, int BlendParam ) ; // 描画ブレンドモードをセットする extern int NS_GetDrawBlendMode( int *BlendMode, int *BlendParam ) ; // 描画ブレンドモードを取得する +extern int NS_SetDrawCustomBlendMode( int BlendEnable, int SrcBlendRGB /* DX_BLEND_SRC_COLOR 等 */, int DestBlendRGB /* DX_BLEND_SRC_COLOR 等 */, int BlendOpRGB /* DX_BLENDOP_ADD 等 */, int SrcBlendA /* DX_BLEND_SRC_COLOR 等 */, int DestBlendA /* DX_BLEND_SRC_COLOR 等 */, int BlendOpA /* DX_BLENDOP_ADD 等 */, int BlendParam ) ; // カスタムブレンドモードを設定する +extern int NS_GetDrawCustomBlendMode( int *BlendEnable, int *SrcBlendRGB, int *DestBlendRGB, int *BlendOpRGB, int *SrcBlendA, int *DestBlendA, int *BlendOpA, int *BlendParam ) ; // カスタムブレンドモードを取得する extern int NS_SetDrawAlphaTest( int TestMode, int TestParam ) ; // 描画時のアルファテストの設定を行う( TestMode:DX_CMP_GREATER等( -1:デフォルト動作に戻す ) TestParam:描画アルファ値との比較に使用する値 ) extern int NS_GetDrawAlphaTest( int *TestMode, int *TestParam ) ; // 描画時のアルファテストの設定を取得する( TestMode:テストモード( DX_CMP_GREATER等 -1でデフォルト動作に戻す ) TestParam:描画アルファ値との比較に使用する値( 0〜255 ) ) extern int NS_SetBlendGraph( int BlendGraph, int BorderParam, int BorderRange ) ; // ( SetBlendGraphParam の BlendType = DX_BLENDGRAPHTYPE_WIPE の処理を行う旧関数 )描画処理時に描画する画像とブレンドするαチャンネル付き画像をセットする( BlendGraph を -1 でブレンド機能を無効 ) @@ -1561,6 +1591,8 @@ extern int NS_DrawRectRotaGraph3F( float x, float y, int SrcX, int SrcY, extern int NS_SetUseCullingFlag( int Flag ) ; // SetUseBackCulling の旧名称 extern int NS_SetUseBackCulling( int Flag /* DX_CULLING_LEFT 等 */ ) ; // ポリゴンカリングの有効、無効をセットする extern int NS_GetUseBackCulling( void ) ; // ポリゴンカリングモードを取得する +extern int NS_SetUseRightHandClippingProcess( int Flag ) ; // 右手座標系のクリッピング処理を行うかを設定する( TRUE:右手座標系のクリッピング処理を行う FALSE:左手座標系のクリッピング処理を行う( デフォルト ) ) +extern int NS_GetUseRightHandClippingProcess( void ) ; // 右手座標系のクリッピング処理を行うかを取得する( TRUE:右手座標系のクリッピング処理を行う FALSE:左手座標系のクリッピング処理を行う( デフォルト ) ) extern int NS_SetTextureAddressMode( int Mode /* DX_TEXADDRESS_WRAP 等 */ , int Stage = -1 ) ; // テクスチャアドレスモードを設定する extern int NS_SetTextureAddressModeUV( int ModeU, int ModeV, int Stage = -1 ) ; // テクスチャアドレスモードを設定する @@ -1608,11 +1640,13 @@ extern int NS_DrawRectRotaGraph3F( float x, float y, int SrcX, int SrcY, extern int NS_SetScreenFlipTargetWindow( HWND TargetWindow, double ScaleX, double ScaleY ) ; // ScreenFlip で画像を転送する先のウインドウを設定する( NULL を指定すると設定解除 ) extern int NS_GetDesktopScreenGraph( int x1, int y1, int x2, int y2, int GrHandle, int DestX = 0 , int DestY = 0 ) ; // デスクトップ画面から指定領域の画像情報をグラフィックハンドルに転送する extern void * NS_GetDesktopScreenGraphMemImage( int x1, int y1, int x2, int y2, int *Width, int *Height, int *Stride, int ColorBitDepth = 32 ) ; // デスクトップ画面から指定領域の画像のメモリイメージの先頭アドレスとイメージの幅・高さ・ストライドを取得する( イメージのフォーマットは ColorBitDepth = 32( バイト順で B8G8R8X8 の 32bitカラー ) ColorBitDepth = 24( バイト順で B8G8R8 の 24bitカラー ) ) +extern int NS_GetOtherWindowGraph( int x1, int y1, int x2, int y2, int GrHandle, int DestX DEFAULTPARAM( = 0 ) , int DestY DEFAULTPARAM( = 0 ) ) ; // 指定のウィンドウの指定領域の画像情報をグラフィックハンドルに転送する #endif // WINDOWS_DESKTOP_OS extern int NS_SetGraphMode( int ScreenSizeX, int ScreenSizeY, int ColorBitDepth, int RefreshRate = 60 ) ; // 画面モードを設定する extern int NS_SetUserScreenImage( void *Image, int PixelFormat /* DX_USER_SCREEN_PIXEL_FORMAT_R5G6B5 等 */ ) ; // 画面のメモリイメージをセットする( DxLib_Init の前で呼ぶ必要がある( DxLib_Init の前に一度でも呼んでいれば、DxLib_Init 後は Image のアドレスのみの変更目的で呼ぶことは可能 )、PixelFormat に DX_USER_SCREEN_PIXEL_FORMAT_R5G6B5 又は DX_USER_SCREEN_PIXEL_FORMAT_X8R8G8B8 の二つ以外を指定した場合はDXライブラリの描画関数は一切使用できなくなります ) extern int NS_SetFullScreenResolutionMode( int ResolutionMode /* DX_FSRESOLUTIONMODE_NATIVE 等 */ ) ; // フルスクリーン解像度モードを設定する extern int NS_GetFullScreenResolutionMode( int *ResolutionMode, int *UseResolutionMode ) ; // フルスクリーン解像度モードを取得する( UseResolutionMode は実際に使用されている解像度モード( 例えば DX_FSRESOLUTIONMODE_NATIVE を指定していてもモニタが指定の解像度に対応していない場合は UseResolutionMode が DX_FSRESOLUTIONMODE_DESKTOP や DX_FSRESOLUTIONMODE_MAXIMUM になります ) ) +extern int NS_GetUseFullScreenResolutionMode( void ) ; // フルスクリーン解像度モードを取得する( GetFullScreenResolutionMode の UseResolutionMode で取得できる値を返す関数 ) extern int NS_SetFullScreenScalingMode( int ScalingMode /* DX_FSSCALINGMODE_NEAREST 等 */ , int FitScaling = FALSE ) ; // フルスクリーンモード時の画面拡大モードを設定する extern int NS_SetEmulation320x240( int Flag ) ; // 640x480の画面で320x240の画面解像度にするかどうかのフラグをセットする、640x480以外の解像度では無効( TRUE:有効 FALSE:無効 ) extern int NS_SetZBufferSize( int ZBufferSizeX, int ZBufferSizeY ) ; // 画面用のZバッファのサイズを設定する @@ -1628,6 +1662,7 @@ extern int NS_DrawRectRotaGraph3F( float x, float y, int SrcX, int SrcY, extern int NS_GetColorBitDepth( void ) ; // 画面の色ビット深度を得る extern int NS_GetChangeDisplayFlag( void ) ; // 画面モードが変更されているかどうかのフラグを取得する extern int NS_GetVideoMemorySize( int *AllSize, int *FreeSize ) ; // ビデオメモリの容量を得る +extern int NS_GetVideoMemorySizeEx( ULONGLONG *TotalSize, ULONGLONG *UseSize ) ; // ビデオメモリの容量を得る( 64bit版 ) extern int NS_GetRefreshRate( void ) ; // 現在の画面のリフレッシュレートを取得する extern int NS_GetDisplayNum( void ) ; // ディスプレイの数を取得 extern int NS_GetDisplayInfo( int DisplayIndex, int *DesktopRectX, int *DesktopRectY, int *DesktopSizeX, int *DesktopSizeY, int *IsPrimary ) ; // ディスプレイのデスクトップ上での矩形位置を取得する @@ -1669,6 +1704,8 @@ extern int NS_DrawRectRotaGraph3F( float x, float y, int SrcX, int SrcY, extern int NS_GetUseDirect3DVersion( void ) ; // 使用している Direct3D のバージョンを取得する( DX_DIRECT3D_9 など ) extern int NS_GetUseDirect3D11FeatureLevel( void ) ; // 使用している Direct3D11 の FeatureLevel ( DX_DIRECT3D_11_FEATURE_LEVEL_9_1 等 )を取得する( 戻り値 -1:エラー -1以外:Feature Level ) extern int NS_SetUseDirect3D11AdapterIndex( int Index ) ; // 使用するグラフィックスデバイスのアダプターのインデックスを設定する +extern int NS_SetUseDirect3D11BGRASupport( int Flag ) ; // D3D11Device 作成時に D3D11_CREATE_DEVICE_BGRA_SUPPORT を指定するかどうか( TRUE:指定する FALSE:指定しない( デフォルト ) ) +extern int NS_GetUseDirect3D11BGRASupport( void ) ; // D3D11Device 作成時に D3D11_CREATE_DEVICE_BGRA_SUPPORT を指定するかどうかを取得する extern int NS_SetUseDirectDrawFlag( int Flag ) ; // ( 同効果のSetUseSoftwareRenderModeFlag を使用して下さい )DirectDrawを使用するかどうかをセットする extern int NS_SetUseGDIFlag( int Flag ) ; // GDI描画を必要とするか、を変更する extern int NS_GetUseGDIFlag( void ) ; // GDI描画を必要とするかの状態を取得する @@ -1809,16 +1846,21 @@ extern int NS_DrawRectRotaGraph3F( float x, float y, int SrcX, int SrcY, extern int NS_CalcPolygonBinormalAndTangentsToShader( VERTEX3DSHADER *Vertex, int PolygonNum ) ; // ポリゴンの頂点の接線と従法線をUV座標から計算してセットする extern int NS_CalcPolygonIndexedBinormalAndTangentsToShader( VERTEX3DSHADER *Vertex, int VertexNum, const unsigned short *Indices, int PolygonNum ) ; // ポリゴンの頂点の接線と従法線をUV座標から計算してセットする( 頂点インデックスを使用する ) +extern int NS_CalcPolygon32bitIndexedBinormalAndTangentsToShader( VERTEX3DSHADER *VertexArray, int VertexNum, const unsigned int *IndexArray, int PolygonNum ) ; // ポリゴンの頂点の接線と従法線をUV座標から計算してセットする( 頂点インデックスを使用する ) extern int NS_DrawBillboard3DToShader( VECTOR Pos, float cx, float cy, float Size, float Angle, int GrHandle, int TransFlag, int ReverseXFlag = FALSE, int ReverseYFlag = FALSE ) ; // シェーダーを使ってビルボードを描画する extern int NS_DrawPolygon2DToShader( const VERTEX2DSHADER *Vertex, int PolygonNum ) ; // シェーダーを使って2Dポリゴンを描画する extern int NS_DrawPolygon3DToShader( const VERTEX3DSHADER *Vertex, int PolygonNum ) ; // シェーダーを使って3Dポリゴンを描画する extern int NS_DrawPolygonIndexed2DToShader( const VERTEX2DSHADER *Vertex, int VertexNum, const unsigned short *Indices, int PolygonNum ) ; // シェーダーを使って2Dポリゴンを描画する( 頂点インデックスを使用する ) +extern int NS_DrawPolygon32bitIndexed2DToShader( const VERTEX2DSHADER *VertexArray, int VertexNum, const unsigned int *IndexArray, int PolygonNum ) ; // シェーダーを使って2Dポリゴンを描画する( 頂点インデックスを使用する ) extern int NS_DrawPolygonIndexed3DToShader( const VERTEX3DSHADER *Vertex, int VertexNum, const unsigned short *Indices, int PolygonNum ) ; // シェーダーを使って3Dポリゴンを描画する( 頂点インデックスを使用する ) +extern int NS_DrawPolygon32bitIndexed3DToShader( const VERTEX3DSHADER *VertexArray, int VertexNum, const unsigned int *IndexArray, int PolygonNum ) ; // シェーダーを使って3Dポリゴンを描画する( 頂点インデックスを使用する ) extern int NS_DrawPrimitive2DToShader( const VERTEX2DSHADER *Vertex, int VertexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って2Dプリミティブを描画する extern int NS_DrawPrimitive3DToShader( const VERTEX3DSHADER *Vertex, int VertexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って3Dプリミティブを描画する extern int NS_DrawPrimitiveIndexed2DToShader( const VERTEX2DSHADER *Vertex, int VertexNum, const unsigned short *Indices, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って2Dプリミティブを描画する( 頂点インデックスを使用する ) +extern int NS_DrawPrimitive32bitIndexed2DToShader( const VERTEX2DSHADER *VertexArray, int VertexNum, const unsigned int *IndexArray, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って2Dプリミティブを描画する( 頂点インデックスを使用する ) extern int NS_DrawPrimitiveIndexed3DToShader( const VERTEX3DSHADER *Vertex, int VertexNum, const unsigned short *Indices, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って3Dプリミティブを描画する( 頂点インデックスを使用する ) +extern int NS_DrawPrimitive32bitIndexed3DToShader( const VERTEX3DSHADER *VertexArray, int VertexNum, const unsigned int *IndexArray, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って3Dプリミティブを描画する( 頂点インデックスを使用する ) extern int NS_DrawPolygon3DToShader_UseVertexBuffer( int VertexBufHandle ) ; // シェーダーを使って3Dポリゴンを描画する( 頂点バッファ使用版 ) extern int NS_DrawPolygonIndexed3DToShader_UseVertexBuffer( int VertexBufHandle, int IndexBufHandle ) ; // シェーダーを使って3Dポリゴンを描画する( 頂点バッファとインデックスバッファ使用版 ) extern int NS_DrawPrimitive3DToShader_UseVertexBuffer( int VertexBufHandle, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 等 */ ) ; // シェーダーを使って3Dプリミティブを描画する( 頂点バッファ使用版 ) @@ -1837,6 +1879,7 @@ extern int NS_DrawRectRotaGraph3F( float x, float y, int SrcX, int SrcY, // フィルター関係関数 #ifndef DX_NON_FILTER extern int NS_SetGraphFilterBltBlendMode( int BlendMode /* DX_BLENDMODE_ALPHA など */ ) ; // GraphFilterBlt や GraphBlendBlt の結果を転送先に転送する際のブレンドモードを設定する( 現状で対応しているのは DX_BLENDMODE_NOBLEND と DX_BLENDMODE_ALPHA のみ ) +extern int NS_SetGraphBlendScalingFilterMode( int IsBilinearFilter ) ; // GraphBlend で GrHandle と BlendGrHandle のサイズが異なる場合に適用される拡大フィルターモードを設定する( IsBilinearFilter TRUE:バイリニアフィルター(デフォルト) FALSE:ニアレストフィルター ) extern int NS_GraphFilter( int GrHandle, int FilterType /* DX_GRAPH_FILTER_GAUSS 等 */ , ... ) ; // 画像にフィルター処理を行う extern int NS_GraphFilterBlt( int SrcGrHandle, int DestGrHandle, int FilterType /* DX_GRAPH_FILTER_GAUSS 等 */ , ... ) ; // 画像のフィルター付き転送を行う extern int NS_GraphFilterRectBlt( int SrcGrHandle, int DestGrHandle, int SrcX1, int SrcY1, int SrcX2, int SrcY2, int DestX, int DestY, int FilterType /* DX_GRAPH_FILTER_GAUSS 等 */ , ... ) ; // 画像のフィルター付き転送を行う( 矩形指定 ) @@ -1851,9 +1894,10 @@ extern int NS_DrawRectRotaGraph3F( float x, float y, int SrcX, int SrcY, // int GraphFilter( int GrHandle, int FilterType = DX_GRAPH_FILTER_TWO_COLOR, int Threshold = 閾値( 0 〜 255 ), int LowColor = 閾値より値が低かったピクセルの変換後の色値( GetColor で取得する ), int LowAlpha = 閾値より値が低かったピクセルの変換後のα値( 0 〜 255 ), int HighColor = 閾値より値が高かったピクセルの変換後の色値( GetColor で取得する ), int HighAlpha = 閾値より値が高かったピクセルの変換後のα値( 0 〜 255 ) ) ; // int GraphFilter( int GrHandle, int FilterType = DX_GRAPH_FILTER_GRADIENT_MAP, int MapGrHandle = グラデーションマップのグラフィックハンドル( 元画像の輝度からグラデーションマップ画像の x 座標を算出しますので縦幅は1dotでもOK ), int Reverse = グラデーションマップ左右反転フラグ( TRUE : グラデーションマップを左右反転して使う FALSE : 左右反転しない ) ) ; -extern int NS_GraphBlend( int GrHandle, int BlendGrHandle, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , ... ) ; // 二つの画像をブレンドする -extern int NS_GraphBlendBlt( int SrcGrHandle, int BlendGrHandle, int DestGrHandle, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , ... ) ; // 二つの画像をブレンドして結果を指定の画像に出力する -extern int NS_GraphBlendRectBlt( int SrcGrHandle, int BlendGrHandle, int DestGrHandle, int SrcX1, int SrcY1, int SrcX2, int SrcY2, int BlendX, int BlendY, int DestX, int DestY, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , ... ) ; // 二つの画像をブレンドして結果を指定の画像に出力する( 矩形指定 ) +extern int NS_GraphBlend( int GrHandle, int BlendGrHandle, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , ... ) ; // 二つの画像をブレンドする +extern int NS_GraphBlendBlt( int SrcGrHandle, int BlendGrHandle, int DestGrHandle, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , ... ) ; // 二つの画像をブレンドして結果を指定の画像に出力する +extern int NS_GraphBlendRectBlt( int SrcGrHandle, int BlendGrHandle, int DestGrHandle, int SrcX1, int SrcY1, int SrcX2, int SrcY2, int BlendX, int BlendY, int DestX, int DestY, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , ... ) ; // 二つの画像をブレンドして結果を指定の画像に出力する( 矩形指定 ) +extern int NS_GraphBlendRectBlt2( int SrcGrHandle, int BlendGrHandle, int DestGrHandle, int SrcX1, int SrcY1, int SrcX2, int SrcY2, int BlendX1, int BlendY1, int BlendX2, int BlendY2, int DestX, int DestY, int BlendRatio /* ブレンド効果の影響度( 0:0% 255:100% ) */ , int BlendType /* DX_GRAPH_BLEND_ADD 等 */ , ... ) ; // 二つの画像をブレンドして結果を指定の画像に出力する( 矩形指定、ブレンド画像も矩形指定 ) // int GraphBlend( int GrHandle, int BlendGrHandle, int BlendRatio, int BlendType = DX_GRAPH_BLEND_NORMAL ) ; // int GraphBlend( int GrHandle, int BlendGrHandle, int BlendRatio, int BlendType = DX_GRAPH_BLEND_RGBA_SELECT_MIX, int SelectR = ( 出力の赤分となる成分 DX_RGBA_SELECT_SRC_R 等 ), int SelectG = ( 出力の緑成分となる成分 DX_RGBA_SELECT_SRC_R 等 ), int SelectB = ( 出力の青成分となる成分 DX_RGBA_SELECT_SRC_R 等 ), int SelectA = ( 出力のα成分となる成分 DX_RGBA_SELECT_SRC_R 等 ) ) ; // int GraphBlend( int GrHandle, int BlendGrHandle, int BlendRatio, int BlendType = DX_GRAPH_BLEND_MULTIPLE ) ; @@ -1987,6 +2031,7 @@ extern int NS_DrawRectRotaGraph3F( float x, float y, int SrcX, int SrcY, extern int NS_SetMaterialParam( MATERIALPARAM Material ) ; // 3D図形描画のライティング計算に使用するマテリアルパラメータを設定する extern int NS_SetUseSpecular( int UseFlag ) ; // 3D図形描画にスペキュラを使用するかどうかを設定する extern int NS_SetGlobalAmbientLight( COLOR_F Color ) ; // グローバルアンビエントライトカラーを設定する +extern int NS_SetUseLightAngleAttenuation( int UseFlag ) ; // 3D描画のライティング計算で角度減衰を行うかどうかを設定する( TRUE:角度減衰を行う( デフォルト ) FALSE:角度減衰を行わない ) extern int NS_ChangeLightTypeDir( VECTOR Direction ) ; // ライトのタイプをディレクショナルライトにする extern int NS_ChangeLightTypeSpot( VECTOR Position, VECTOR Direction, float OutAngle, float InAngle, float Range, float Atten0, float Atten1, float Atten2 ) ; // ライトのタイプをスポットライトにする @@ -2160,6 +2205,7 @@ extern int NS_DrawRectRotaGraph3F( float x, float y, int SrcX, int SrcY, extern int NS_SetFontCacheCharNum( int CharNum ) ; // フォントキャッシュでキャッシュできる文字数を指定する extern int NS_ChangeFont( const TCHAR *FontName, int CharSet = -1 /* DX_CHARSET_SHFTJIS 等 */ ) ; // フォントを変更 extern int NS_ChangeFontWithStrLen( const TCHAR *FontName, size_t FontNameLength, int CharSet = -1 /* DX_CHARSET_SHFTJIS 等 */ ) ; // デフォルトフォントハンドルで使用するフォントを変更 +extern int NS_ChangeFontFromHandle( int FontHandle ) ; // デフォルトフォントハンドルとして使用するフォントハンドルを変更する extern int NS_ChangeFontType( int FontType ) ; // フォントタイプの変更 extern const TCHAR *NS_GetFontName( void ) ; // デフォルトフォントハンドルのフォント名を取得する // FontCacheStringDraw は DrawString を使ってください @@ -2242,6 +2288,8 @@ extern int NS_DrawRectRotaGraph3F( float x, float y, int SrcX, int SrcY, extern int NS_GetFontCacheUsePremulAlphaFlag( void ) ; // フォントキャッシュとして保存する画像の形式を乗算済みαチャンネル付き画像にするかどうかを取得する extern int NS_SetFontUseAdjustSizeFlag( int Flag ) ; // フォントのサイズを補正する処理を行うかどうかを設定する( Flag TRUE:行う( デフォルト ) FALSE:行わない ) extern int NS_GetFontUseAdjustSizeFlag( void ) ; // フォントのサイズを補正する処理を行うかどうかを取得する +extern int NS_SetFontOnlyDrawType( int OnlyType ) ; // フォントの描画で縁のみ、又は本体のみ描画を行うかどうかを設定する( OnlyType 0:通常描画 1:本体のみ描画 2:縁のみ描画 ) +extern int NS_GetFontOnlyDrawType( void ) ; // フォントの描画で縁のみ、又は本体のみ描画を行うかどうかを取得する( 戻り値 0:通常描画 1:本体のみ描画 2:縁のみ描画 ) extern HANDLE NS_AddFontFile( const TCHAR *FontFilePath ) ; // 指定のフォントファイルをシステムに追加する( 戻り値 NULL:失敗 NULL以外:フォントハンドル( WindowsOS のものなので、DXライブラリのフォントハンドルとは別物です ) ) extern HANDLE NS_AddFontFileWithStrLen( const TCHAR *FontFilePath, size_t FontFilePathLength ) ; // 指定のフォントファイルをシステムに追加する( 戻り値 NULL:失敗 NULL以外:フォントハンドル( WindowsOS のものなので、DXライブラリのフォントハンドルとは別物です ) ) @@ -2262,12 +2310,16 @@ extern int NS_DrawRectRotaGraph3F( float x, float y, int SrcX, int SrcY, extern int NS_DrawNVString( int x, int y, const TCHAR *String, size_t StringLength, unsigned int Color, unsigned int EdgeColor = 0 ) ; // デフォルトフォントハンドルを使用して文字列を描画する( 縦書き ) extern int NS_DrawFormatString( int x, int y, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する extern int NS_DrawFormatVString( int x, int y, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縦書き ) +extern int NS_DrawFormatString2( int x, int y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縁の色引数付き ) +extern int NS_DrawFormatVString2( int x, int y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縁の色引数付き )( 縦書き ) extern int NS_DrawExtendString( int x, int y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, unsigned int EdgeColor = 0 ) ; // デフォルトフォントハンドルを使用して文字列の拡大描画 extern int NS_DrawExtendNString( int x, int y, double ExRateX, double ExRateY, const TCHAR *String, size_t StringLength, unsigned int Color, unsigned int EdgeColor = 0 ) ; // デフォルトフォントハンドルを使用して文字列の拡大描画 extern int NS_DrawExtendVString( int x, int y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, unsigned int EdgeColor = 0 ) ; // デフォルトフォントハンドルを使用して文字列の拡大描画( 縦書き ) extern int NS_DrawExtendNVString( int x, int y, double ExRateX, double ExRateY, const TCHAR *String, size_t StringLength, unsigned int Color, unsigned int EdgeColor = 0 ) ; // デフォルトフォントハンドルを使用して文字列の拡大描画( 縦書き ) extern int NS_DrawExtendFormatString( int x, int y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する extern int NS_DrawExtendFormatVString( int x, int y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き ) +extern int NS_DrawExtendFormatString2( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縁の色引数付き ) +extern int NS_DrawExtendFormatVString2( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縁の色引数付き )( 縦書き ) extern int NS_DrawRotaString( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, unsigned int EdgeColor = 0 , int VerticalFlag = FALSE , const TCHAR *String = NULL ) ; // デフォルトフォントハンドルを使用して文字列を回転描画する extern int NS_DrawRotaNString( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, unsigned int EdgeColor = 0 , int VerticalFlag = FALSE , const TCHAR *String = NULL , size_t StringLength = 0 ) ; // デフォルトフォントハンドルを使用して文字列を回転描画する extern int NS_DrawRotaFormatString( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, unsigned int EdgeColor = 0 , int VerticalFlag = FALSE , const TCHAR *FormatString = NULL , ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を回転描画する @@ -2281,12 +2333,16 @@ extern int NS_DrawRectRotaGraph3F( float x, float y, int SrcX, int SrcY, extern int NS_DrawNVStringF( float x, float y, const TCHAR *String, size_t StringLength, unsigned int Color, unsigned int EdgeColor = 0 ) ; // デフォルトフォントハンドルを使用して文字列を描画する( 縦書き )( 座標指定が float 版 ) extern int NS_DrawFormatStringF( float x, float y, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 座標指定が float 版 ) extern int NS_DrawFormatVStringF( float x, float y, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縦書き )( 座標指定が float 版 ) +extern int NS_DrawFormatString2F( float x, float y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縁の色引数付き )( 座標指定が float 版 ) +extern int NS_DrawFormatVString2F( float x, float y, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を描画する( 縁の色引数付き )( 縦書き )( 座標指定が float 版 ) extern int NS_DrawExtendStringF( float x, float y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, unsigned int EdgeColor = 0 ) ; // デフォルトフォントハンドルを使用して文字列の拡大描画( 座標指定が float 版 ) extern int NS_DrawExtendNStringF( float x, float y, double ExRateX, double ExRateY, const TCHAR *String, size_t StringLength, unsigned int Color, unsigned int EdgeColor = 0 ) ; // デフォルトフォントハンドルを使用して文字列の拡大描画( 座標指定が float 版 ) extern int NS_DrawExtendVStringF( float x, float y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, unsigned int EdgeColor = 0 ) ; // デフォルトフォントハンドルを使用して文字列の拡大描画( 縦書き )( 座標指定が float 版 ) extern int NS_DrawExtendNVStringF( float x, float y, double ExRateX, double ExRateY, const TCHAR *String, size_t StringLength, unsigned int Color, unsigned int EdgeColor = 0 ) ; // デフォルトフォントハンドルを使用して文字列の拡大描画( 縦書き )( 座標指定が float 版 ) extern int NS_DrawExtendFormatStringF( float x, float y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 座標指定が float 版 ) extern int NS_DrawExtendFormatVStringF( float x, float y, double ExRateX, double ExRateY, unsigned int Color, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き )( 座標指定が float 版 ) +extern int NS_DrawExtendFormatString2F( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縁の色引数付き )( 座標指定が float 版 ) +extern int NS_DrawExtendFormatVString2F( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, const TCHAR *FormatString, ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を拡大描画する( 縁の色引数付き )( 縦書き )( 座標指定が float 版 ) extern int NS_DrawRotaStringF( float x, float y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, unsigned int EdgeColor = 0 , int VerticalFlag = FALSE , const TCHAR *String = NULL ) ; // デフォルトフォントハンドルを使用して文字列を回転描画する( 座標指定が float 版 ) extern int NS_DrawRotaNStringF( float x, float y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, unsigned int EdgeColor = 0 , int VerticalFlag = FALSE , const TCHAR *String = NULL , size_t StringLength = 0 ) ; // デフォルトフォントハンドルを使用して文字列を回転描画する( 座標指定が float 版 ) extern int NS_DrawRotaFormatStringF( float x, float y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, unsigned int EdgeColor = 0 , int VerticalFlag = FALSE , const TCHAR *FormatString = NULL , ... ) ; // デフォルトフォントハンドルを使用して書式指定文字列を回転描画する( 座標指定が float 版 ) @@ -2325,12 +2381,16 @@ extern int NS_DrawRectRotaGraph3F( float x, float y, int SrcX, int SrcY, extern int NS_DrawNVStringToHandle( int x, int y, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor = 0 ) ; // フォントハンドルを使用して文字列を描画する( 縦書き ) extern int NS_DrawFormatStringToHandle( int x, int y, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を描画する extern int NS_DrawFormatVStringToHandle( int x, int y, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を描画する( 縦書き ) +extern int NS_DrawFormatString2ToHandle( int x, int y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を描画する( 縁の色引数付き ) +extern int NS_DrawFormatVString2ToHandle( int x, int y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を描画する( 縁の色引数付き )( 縦書き ) extern int NS_DrawExtendStringToHandle( int x, int y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, int FontHandle, unsigned int EdgeColor = 0 , int VerticalFlag = FALSE ) ; // フォントハンドルを使用して文字列を拡大描画する extern int NS_DrawExtendNStringToHandle( int x, int y, double ExRateX, double ExRateY, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor = 0 , int VerticalFlag = FALSE ) ; // フォントハンドルを使用して文字列を拡大描画する extern int NS_DrawExtendVStringToHandle( int x, int y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, int FontHandle, unsigned int EdgeColor = 0 ) ; // フォントハンドルを使用して文字列を拡大描画する( 縦書き ) extern int NS_DrawExtendNVStringToHandle( int x, int y, double ExRateX, double ExRateY, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor = 0 ) ; // フォントハンドルを使用して文字列を拡大描画する( 縦書き ) extern int NS_DrawExtendFormatStringToHandle( int x, int y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する extern int NS_DrawExtendFormatVStringToHandle( int x, int y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き ) +extern int NS_DrawExtendFormatString2ToHandle( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 縁の色引数付き ) +extern int NS_DrawExtendFormatVString2ToHandle( int x, int y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 縁の色引数付き )( 縦書き ) extern int NS_DrawRotaStringToHandle( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, const TCHAR *String ) ; // フォントハンドルを使用して文字列を回転描画する extern int NS_DrawRotaNStringToHandle( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, const TCHAR *String, size_t StringLength ) ; // フォントハンドルを使用して文字列を回転描画する extern int NS_DrawRotaFormatStringToHandle( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を回転描画する @@ -2344,12 +2404,16 @@ extern int NS_DrawRectRotaGraph3F( float x, float y, int SrcX, int SrcY, extern int NS_DrawNVStringFToHandle( float x, float y, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor = 0 ) ; // フォントハンドルを使用して文字列を描画する( 縦書き )( 座標指定が float 版 ) extern int NS_DrawFormatStringFToHandle( float x, float y, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を描画する( 座標指定が float 版 ) extern int NS_DrawFormatVStringFToHandle( float x, float y, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を描画する( 縦書き )( 座標指定が float 版 ) +extern int NS_DrawFormatString2FToHandle( float x, float y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を描画する( 縁の色引数付き )( 座標指定が float 版 ) +extern int NS_DrawFormatVString2FToHandle( float x, float y, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を描画する( 縁の色引数付き )( 縦書き )( 座標指定が float 版 ) extern int NS_DrawExtendStringFToHandle( float x, float y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, int FontHandle, unsigned int EdgeColor = 0 , int VerticalFlag = FALSE ) ; // フォントハンドルを使用して文字列を拡大描画する( 座標指定が float 版 ) extern int NS_DrawExtendNStringFToHandle( float x, float y, double ExRateX, double ExRateY, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor = 0 , int VerticalFlag = FALSE ) ; // フォントハンドルを使用して文字列を拡大描画する( 座標指定が float 版 ) extern int NS_DrawExtendVStringFToHandle( float x, float y, double ExRateX, double ExRateY, const TCHAR *String, unsigned int Color, int FontHandle, unsigned int EdgeColor = 0 ) ; // フォントハンドルを使用して文字列を拡大描画する( 縦書き )( 座標指定が float 版 ) extern int NS_DrawExtendNVStringFToHandle( float x, float y, double ExRateX, double ExRateY, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor = 0 ) ; // フォントハンドルを使用して文字列を拡大描画する( 縦書き )( 座標指定が float 版 ) extern int NS_DrawExtendFormatStringFToHandle( float x, float y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 座標指定が float 版 ) extern int NS_DrawExtendFormatVStringFToHandle( float x, float y, double ExRateX, double ExRateY, unsigned int Color, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 縦書き )( 座標指定が float 版 ) +extern int NS_DrawExtendFormatString2FToHandle( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 縁の色引数付き )( 座標指定が float 版 ) +extern int NS_DrawExtendFormatVString2FToHandle( float x, float y, double ExRateX, double ExRateY, unsigned int Color, unsigned int EdgeColor, int FontHandle, const TCHAR *FormatString, ... ) ; // フォントハンドルを使用して書式指定文字列を拡大描画する( 縁の色引数付き )( 縦書き )( 座標指定が float 版 ) extern int NS_DrawRotaStringFToHandle( float x, float y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor = 0 , int VerticalFlag = FALSE , const TCHAR *String = NULL ) ; // フォントハンドルを使用して文字列を回転描画する( 座標指定が float 版 ) extern int NS_DrawRotaNStringFToHandle( float x, float y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor = 0 , int VerticalFlag = FALSE , const TCHAR *String = NULL , size_t StringLength = 0 ) ; // フォントハンドルを使用して文字列を回転描画する( 座標指定が float 版 ) extern int NS_DrawRotaFormatStringFToHandle( float x, float y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor = 0 , int VerticalFlag = FALSE , const TCHAR *FormatString = NULL , ... ) ; // フォントハンドルを使用して書式指定文字列を回転描画する( 座標指定が float 版 ) @@ -2455,6 +2519,9 @@ extern int NS_DrawRectRotaGraph3F( float x, float y, int SrcX, int SrcY, extern int NS_SetGraphDataShavedMode( int ShavedMode /* DX_SHAVEDMODE_NONE 等 */ ) ; // 画像減色時の画像劣化緩和処理モードを設定する( デフォルトでは緩和処理無しの DX_SHAVEDMODE_NONE ) extern int NS_GetGraphDataShavedMode( void ) ; // 画像減色時の画像劣化緩和処理モードを取得する extern int NS_SetUsePremulAlphaConvertLoad( int UseFlag ) ; // 画像ファイル読み込み時に乗算済みアルファ画像に変換するかどうかを設定する( TRUE:変換処理を行う FALSE:変換処理を行わない( デフォルト ) ) +extern int NS_GetUsePremulAlphaConvertLoad( void ) ; // 画像ファイル読み込み時に乗算済みアルファ画像に変換するかどうかを取得する( TRUE:変換処理を行う FALSE:変換処理を行わない( デフォルト ) ) +extern int NS_SetUseConvertNormalFormatLoad( int UseFlag ) ; // 画像ファイル読み込み時に DX_BASEIMAGE_FORMAT_NORMAL 以外の形式のイメージを DX_BASEIMAGE_FORMAT_NORMAL 形式のイメージに変換するかどうかを設定する( TRUE:変換処理を行う FALSE:変換処理を行なわない( デフォルト ) ) +extern int NS_GetUseConvertNormalFormatLoad( void ) ; // 画像ファイル読み込み時に DX_BASEIMAGE_FORMAT_NORMAL 以外の形式のイメージを DX_BASEIMAGE_FORMAT_NORMAL 形式のイメージに変換するかどうかを取得する( TRUE:変換処理を行う FALSE:変換処理を行なわない( デフォルト ) ) // 基本イメージデータ構造体関係 extern int NS_CreateBaseImage( const TCHAR *FileName, const void *FileImage, int FileImageSize, int DataType /*=LOADIMAGE_TYPE_FILE*/ , BASEIMAGE *BaseImage, int ReverseFlag ) ; // 画像ファイル若しくはメモリ上に展開された画像ファイルイメージから基本イメージデータを構築する @@ -2577,6 +2644,7 @@ extern int NS_GraphColorMatchBltVer2( void *DestGraphData, int DestPitch extern int NS_CreateRGBA8ColorData( COLORDATA *ColorDataBuf ) ; // RGBA8カラーのカラーフォーマットを構築する extern int NS_CreateABGR8ColorData( COLORDATA *ColorDataBuf ) ; // ABGR8カラーのカラーフォーマットを構築する extern int NS_CreateBGRA8ColorData( COLORDATA *ColorDataBuf ) ; // BGRA8カラーのカラーフォーマットを構築する +extern int NS_CreateBGR8ColorData( COLORDATA *ColorDataBuf ) ; // BGR8カラーのカラーフォーマットを構築する extern int NS_CreateARGB4ColorData( COLORDATA *ColorDataBuf ) ; // ARGB4カラーのカラーフォーマットを構築する extern int NS_CreateA1R5G5B5ColorData( COLORDATA *ColorDataBuf ) ; // A1R5G5B5カラーのカラーフォーマットを構築する extern int NS_CreateX1R5G5B5ColorData( COLORDATA *ColorDataBuf ) ; // X1R5G5B5カラーのカラーフォーマットを構築する @@ -2733,7 +2801,7 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe extern int NS_SetupStreamSoundMem( int SoundHandle ) ; // ストリーム再生タイプのサウンドハンドルの再生準備をする extern int NS_PlayStreamSoundMem( int SoundHandle, int PlayType = DX_PLAYTYPE_LOOP , int TopPositionFlag = TRUE ) ; // ストリーム再生タイプのサウンドハンドルの再生を開始する extern int NS_CheckStreamSoundMem( int SoundHandle ) ; // ストリーム再生タイプのサウンドハンドルの再生状態を取得する -extern int NS_StopStreamSoundMem( int SoundHandle ) ; // ストリーム再生タイプのサウンドハンドルの再生を停止する +extern int NS_StopStreamSoundMem( int SoundHandle, int IsNextLoopEnd = FALSE ) ; // ストリーム再生タイプのサウンドハンドルの再生を停止する extern int NS_SetStreamSoundCurrentPosition( LONGLONG Byte, int SoundHandle ) ; // サウンドハンドルの再生位置をバイト単位で変更する(再生が止まっている時のみ有効) extern LONGLONG NS_GetStreamSoundCurrentPosition( int SoundHandle ) ; // サウンドハンドルの再生位置をバイト単位で取得する extern int NS_SetStreamSoundCurrentTime( LONGLONG Time, int SoundHandle ) ; // サウンドハンドルの再生位置をミリ秒単位で設定する(圧縮形式の場合は正しく設定されない場合がある) @@ -2767,7 +2835,7 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe extern int NS_DeleteSoundMem( int SoundHandle, int LogOutFlag = FALSE ) ; // サウンドハンドルを削除する extern int NS_PlaySoundMem( int SoundHandle, int PlayType, int TopPositionFlag = TRUE ) ; // サウンドハンドルを再生する -extern int NS_StopSoundMem( int SoundHandle ) ; // サウンドハンドルの再生を停止する +extern int NS_StopSoundMem( int SoundHandle, int IsNextLoopEnd = FALSE ) ; // サウンドハンドルの再生を停止する extern int NS_CheckSoundMem( int SoundHandle ) ; // サウンドハンドルが再生中かどうかを取得する extern int NS_SetPanSoundMem( int PanPal, int SoundHandle ) ; // サウンドハンドルのパンを設定する( 100分の1デシベル単位 0 〜 10000 ) extern int NS_ChangePanSoundMem( int PanPal, int SoundHandle ) ; // サウンドハンドルのパンを設定する( -255 〜 255 ) @@ -2863,7 +2931,10 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe extern int NS_SetEnableWASAPIFlag( int Flag, int IsExclusive = TRUE , int DevicePeriod = -1 , int SamplePerSec = 44100 ) ; // サウンドの再生にWASAPIを使用するかどうかを設定する( Flag TRUE:使用する FALSE:使用しない( デフォルト ), IsExclusive TRUE:排他モードを使用する FALSE:排他モードを使用しない, DevicePeriod 再生遅延時間、100ナノ秒単位( 100000 で 10ミリ秒 )、-1でデフォルト値, SamplePerSec サンプリングレート ) #ifndef DX_NON_ASIO extern int NS_SetEnableASIOFlag( int Flag, int BufferSize = -1 , int SamplePerSec = 44100 ) ; // サウンドの再生にASIOを使用するかどうかを設定する( Flag TRUE:使用する FALSE:使用しない( デフォルト ), BufferSize 再生バッファのサイズ、小さいほど遅延が少なくなりますが、処理が間に合わずにブツブツノイズが発生する可能性も高くなります( -1 でデフォルト値 ), SamplePerSec サンプリングレート ) +extern int NS_SetUseASIODriverIndex( int Index ) ; // サウンドの再生に使用するASIOドライバーの番号を設定する( デフォルトでは 0 ) #endif // DX_NON_ASIO +extern int NS_SetEnableMMEwaveOutFlag( int Flag, int BufferSamples DEFAULTPARAM( = -1 ) , int SamplePerSec DEFAULTPARAM( = 44100 ) ) ; // サウンドの再生にマルチメディアAPIの waveOut を使用するかどうかを設定する( Flag TRUE:使用する FALSE:使用しない( デフォルト ), BufferSize 再生バッファのサイズ、小さいほど遅延が少なくなりますが、処理が間に合わずにブツブツノイズが発生する可能性も高くなります( -1 でデフォルト値 ), SamplePerSec サンプリングレート ) + extern int NS_SetUseOldVolumeCalcFlag( int Flag ) ; // ChangeVolumeSoundMem, ChangeNextPlayVolumeSoundMem, ChangeMovieVolumeToGraph の音量計算式を Ver3.10c以前のものを使用するかどうかを設定する( TRUE:Ver3.10c以前の計算式を使用 FALSE:3.10d以降の計算式を使用( デフォルト ) ) extern int NS_SetSoundCurrentTimeType( int Type /* DX_SOUNDCURRENTTIME_TYPE_LOW_LEVEL など */ ) ; // GetSoundCurrentTime などを使用した場合に取得できる再生時間のタイプを設定する extern int NS_GetSoundCurrentTimeType( void ) ; // GetSoundCurrentTime などを使用した場合に取得できる再生時間のタイプを取得する @@ -3054,6 +3125,12 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe extern int NS_Live2D_DeleteModel( int Live2DModelHandle ) ; // Live2D のモデルを削除する extern int NS_Live2D_InitModel( void ) ; // すべての Live2D のモデルを削除する +extern int NS_Live2D_SetUserShader( int TargetShader /* DX_LIVE2D_SHADER_NORMAL_PIXEL 等 */ , int ShaderHandle DEFAULTPARAM( = -1 ) ) ; // Live2D のモデル描画で使用するシェーダーを設定する( ShaderHandle に -1 を渡すと解除 ) +extern int NS_Live2D_DrawCallback( void ( *Callback )( int Live2DModelHandle, int TextureIndex, void *UserData ), void *UserData ) ; // Live2D のモデル描画の前に呼ばれるコールバック関数を設定する Callback に NULL を渡すと設定を解除 ) +extern int NS_Live2D_SetUseAutoScaling( int UseFlag ) ; // Live2D のモデル描画をする際に、画面サイズに応じたスケーリングを行うかを設定する( UseFlag TRUE:スケーリングを行う( デフォルト ) FALSE:スケーリングを行わない ) +extern int NS_Live2D_SetUseAutoCentering( int UseFlag ) ; // Live2D のモデルを画面の中心に描画するかを設定する( UseFlag TRUE:画面の中心に描画する( デフォルト ) FALSE:画面の中心に描画しない ) +extern int NS_Live2D_SetUseReverseYAxis( int UseFlag ) ; // Live2D_Model_SetTranslate で指定する平行移動値の y の向きを反転するかを設定する( UseFlag TRUE:反転する( デフォルト ) FALSE:反転しない ) + extern int NS_Live2D_Model_Update( int Live2DModelHandle, float DeltaTime ) ; // Live2D のモデルの状態を更新する extern int NS_Live2D_Model_SetTranslate( int Live2DModelHandle, float x, float y ) ; // Live2D のモデルの位置を設定する extern int NS_Live2D_Model_SetExtendRate( int Live2DModelHandle, float ExRateX, float ExRateY ) ; // Live2D のモデルの拡大率を設定する @@ -3062,7 +3139,9 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe extern int NS_Live2D_Model_StartMotion( int Live2DModelHandle, const TCHAR *group, int no ) ; // Live2D のモデルの指定のモーションを再生する extern int NS_Live2D_Model_StartMotionWithStrLen( int Live2DModelHandle, const TCHAR *group, size_t GroupLength, int no ) ; // Live2D のモデルの指定のモーションを再生する +extern int NS_Live2D_Model_GetLastPlayMotionNo( int Live2DModelHandle ) ; // Live2D のモデルで最後に再生したモーションのグループ内の番号を取得する extern int NS_Live2D_Model_IsMotionFinished( int Live2DModelHandle ) ; // Live2D のモデルのモーション再生が終了しているかを取得する +extern float NS_Live2D_Model_GetMotionPlayTime( int Live2DModelHandle ) ; // Live2D のモデルのモーション再生時間を取得する extern int NS_Live2D_Model_SetExpression( int Live2DModelHandle, const TCHAR *expressionID ) ; // Live2D のモデルの指定の表情モーションをセットする extern int NS_Live2D_Model_SetExpressionWithStrLen( int Live2DModelHandle, const TCHAR *expressionID, size_t expressionIDLength ) ; // Live2D のモデルの指定の表情モーションをセットする extern int NS_Live2D_Model_HitTest( int Live2DModelHandle, const TCHAR *hitAreaName, float x, float y ) ; // 指定の座標が Live2D のモデルの指定の当たり判定の矩形範囲内か判定する( TRUE:矩形範囲内 FALSE:矩形範囲外 ) @@ -3099,6 +3178,8 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe extern const TCHAR *NS_Live2D_Model_GetEyeBlinkParameterId( int Live2DModelHandle, int index ) ; // Live2D のモデルの目パチに関連付けられたパラメータのIDを取得する extern int NS_Live2D_Model_GetLipSyncParameterCount( int Live2DModelHandle ) ; // Live2D のモデルのリップシンクに関連付けられたパラメータの数を取得する extern const TCHAR *NS_Live2D_Model_GetLipSyncParameterId( int Live2DModelHandle, int index ) ; // Live2D のモデルのリップシンクに関連付けられたパラメータのIDを取得する +extern float NS_Live2D_Model_GetCanvasWidth( int Live2DModelHandle ) ; // Live2D のモデルのキャンバスの横幅を取得する +extern float NS_Live2D_Model_GetCanvasHeight( int Live2DModelHandle ) ; // Live2D のモデルのキャンバスの縦幅を取得する #endif // DX_NON_LIVE2D_CUBISM4 @@ -3164,11 +3245,13 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_SRand SRand #ifndef DX_NON_MERSENNE_TWISTER +#define NS_GetMersenneTwisterRand GetMersenneTwisterRand #define NS_CreateRandHandle CreateRandHandle #define NS_DeleteRandHandle DeleteRandHandle #define NS_SRandHandle SRandHandle #define NS_GetRandHandle GetRandHandle +#define NS_GetMersenneTwisterRandHandle GetMersenneTwisterRandHandle #endif // DX_NON_MERSENNE_TWISTER @@ -3205,6 +3288,7 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe // ログ出力設定関数 #define NS_SetOutApplicationLogValidFlag SetOutApplicationLogValidFlag +#define NS_SetOutApplicationSystemLogValidFlag SetOutApplicationSystemLogValidFlag #define NS_SetApplicationLogFileName SetApplicationLogFileName #define NS_SetApplicationLogFileNameWithStrLen SetApplicationLogFileNameWithStrLen #define NS_SetApplicationLogSaveDirectory SetApplicationLogSaveDirectory @@ -3285,6 +3369,9 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe // DxHandle.cpp関数プロトタイプ宣言 #define NS_SetDeleteHandleFlag SetDeleteHandleFlag +#define NS_GetHandleNum GetHandleNum +#define NS_GetMaxHandleNum GetMaxHandleNum +#define NS_DumpHandleInfo DumpHandleInfo @@ -3399,6 +3486,7 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_SetValidMousePointerWindowOutClientAreaMoveFlag SetValidMousePointerWindowOutClientAreaMoveFlag #define NS_SetUseBackBufferTransColorFlag SetUseBackBufferTransColorFlag #define NS_SetUseUpdateLayerdWindowFlag SetUseUpdateLayerdWindowFlag +#define NS_SetUseMouseEventTransparentWindowFlag SetUseMouseEventTransparentWindowFlag #define NS_SetResourceModule SetResourceModule #define NS_SetUseDxLibWM_PAINTProcess SetUseDxLibWM_PAINTProcess #define NS_SetWindows10_WM_CHAR_CancelTime SetWindows10_WM_CHAR_CancelTime @@ -3494,6 +3582,7 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe // マウス関係関数 #define NS_SetMouseDispFlag SetMouseDispFlag +#define NS_SetMouseDispIgnoreMenuFlag SetMouseDispIgnoreMenuFlag #ifndef DX_NON_INPUT #define NS_GetMousePoint GetMousePoint #define NS_SetMousePoint SetMousePoint @@ -3672,6 +3761,7 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #ifndef DX_NON_KEYEX #define NS_DrawIMEInputString DrawIMEInputString +#define NS_DrawIMEInputExtendString DrawIMEInputExtendString #define NS_SetUseIMEFlag SetUseIMEFlag #define NS_GetUseIMEFlag GetUseIMEFlag #define NS_SetInputStringMaxLengthIMESync SetInputStringMaxLengthIMESync @@ -3706,6 +3796,8 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_GetIMEInputModeStr GetIMEInputModeStr #define NS_GetIMEInputData GetIMEInputData +#define NS_SetIMEInputString SetIMEInputString +#define NS_SetIMEInputStringWithStrLen SetIMEInputStringWithStrLen #define NS_SetKeyInputStringColor SetKeyInputStringColor #define NS_SetKeyInputStringColor2 SetKeyInputStringColor2 #define NS_ResetKeyInputStringColor2 ResetKeyInputStringColor2 @@ -3722,6 +3814,7 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_ReStartKeyInput ReStartKeyInput #define NS_ProcessActKeyInput ProcessActKeyInput #define NS_DrawKeyInputString DrawKeyInputString +#define NS_DrawKeyInputExtendString DrawKeyInputExtendString #define NS_SetKeyInputDrawArea SetKeyInputDrawArea #define NS_SetKeyInputSelectArea SetKeyInputSelectArea @@ -3763,6 +3856,7 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_FileRead_open_mem FileRead_open_mem #define NS_FileRead_size FileRead_size #define NS_FileRead_size_WithStrLen FileRead_size_WithStrLen +#define NS_FileRead_size_handle FileRead_size_handle #define NS_FileRead_close FileRead_close #define NS_FileRead_tell FileRead_tell #define NS_FileRead_seek FileRead_seek @@ -3845,12 +3939,15 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_SetJoypadInputToKeyInput SetJoypadInputToKeyInput #define NS_SetJoypadDeadZone SetJoypadDeadZone #define NS_GetJoypadDeadZone GetJoypadDeadZone +#define NS_SetJoypadDefaultDeadZoneAll SetJoypadDefaultDeadZoneAll +#define NS_GetJoypadDefaultDeadZoneAll GetJoypadDefaultDeadZoneAll #define NS_StartJoypadVibration StartJoypadVibration #define NS_StopJoypadVibration StopJoypadVibration #define NS_GetJoypadPOVState GetJoypadPOVState #define NS_GetJoypadName GetJoypadName #define NS_GetJoypadType GetJoypadType #define NS_ReSetupJoypad ReSetupJoypad +#define NS_ReSetupInputSystem ReSetupInputSystem #define NS_SetKeyboardNotDirectInputFlag SetKeyboardNotDirectInputFlag #define NS_SetUseDirectInputFlag SetUseDirectInputFlag @@ -4024,6 +4121,10 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_GetCreateGraphChannelBitDepth GetCreateGraphChannelBitDepth #define NS_SetCreateGraphInitGraphDelete SetCreateGraphInitGraphDelete #define NS_GetCreateGraphInitGraphDelete GetCreateGraphInitGraphDelete +#define NS_SetCreateGraphHandle SetCreateGraphHandle +#define NS_GetCreateGraphHandle GetCreateGraphHandle +#define NS_SetCreateDivGraphHandle SetCreateDivGraphHandle +#define NS_GetCreateDivGraphHandle GetCreateDivGraphHandle #define NS_SetDrawValidGraphCreateFlag SetDrawValidGraphCreateFlag #define NS_GetDrawValidGraphCreateFlag GetDrawValidGraphCreateFlag #define NS_SetDrawValidFlagOf3DGraph SetDrawValidFlagOf3DGraph @@ -4072,6 +4173,8 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_SetUseMaxTextureSize SetUseMaxTextureSize #define NS_SetUseGraphBaseDataBackup SetUseGraphBaseDataBackup #define NS_GetUseGraphBaseDataBackup GetUseGraphBaseDataBackup +#define NS_SetUseLoadDivGraphSizeCheckFlag SetUseLoadDivGraphSizeCheckFlag +#define NS_GetUseLoadDivGraphSizeCheckFlag GetUseLoadDivGraphSizeCheckFlag // 画像情報関係関数 #define NS_GetFullColorImage GetFullColorImage @@ -4137,6 +4240,7 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_DrawPixelSet DrawPixelSet #define NS_DrawLineSet DrawLineSet +#define NS_DrawBoxSet DrawBoxSet #define NS_DrawPixel3D DrawPixel3D #define NS_DrawPixel3DD DrawPixel3DD @@ -4236,8 +4340,11 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_DrawPolygon2D DrawPolygon2D #define NS_DrawPolygon3D DrawPolygon3D #define NS_DrawPolygonIndexed2D DrawPolygonIndexed2D +#define NS_DrawPolygon32bitIndexed2D DrawPolygon32bitIndexed2D #define NS_DrawPolygonIndexed3D DrawPolygonIndexed3D +#define NS_DrawPolygon32bitIndexed3D DrawPolygon32bitIndexed3D #define NS_DrawPolygonIndexed3DBase DrawPolygonIndexed3DBase +#define NS_DrawPolygon32bitIndexed3DBase DrawPolygon32bitIndexed3DBase #define NS_DrawPolygon3DBase DrawPolygon3DBase #define NS_DrawPolygon3D2 DrawPolygon3D2 @@ -4245,7 +4352,9 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_DrawPrimitive2D DrawPrimitive2D #define NS_DrawPrimitive3D DrawPrimitive3D #define NS_DrawPrimitiveIndexed2D DrawPrimitiveIndexed2D +#define NS_DrawPrimitive32bitIndexed2D DrawPrimitive32bitIndexed2D #define NS_DrawPrimitiveIndexed3D DrawPrimitiveIndexed3D +#define NS_DrawPrimitive32bitIndexed3D DrawPrimitive32bitIndexed3D #define NS_DrawPolygon3D_UseVertexBuffer DrawPolygon3D_UseVertexBuffer #define NS_DrawPrimitive3D_UseVertexBuffer DrawPrimitive3D_UseVertexBuffer @@ -4266,6 +4375,8 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_GetDrawMode GetDrawMode #define NS_SetDrawBlendMode SetDrawBlendMode #define NS_GetDrawBlendMode GetDrawBlendMode +#define NS_SetDrawCustomBlendMode SetDrawCustomBlendMode +#define NS_GetDrawCustomBlendMode GetDrawCustomBlendMode #define NS_SetDrawAlphaTest SetDrawAlphaTest #define NS_GetDrawAlphaTest GetDrawAlphaTest #define NS_SetBlendGraph SetBlendGraph @@ -4347,6 +4458,8 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_SetUseCullingFlag SetUseCullingFlag #define NS_SetUseBackCulling SetUseBackCulling #define NS_GetUseBackCulling GetUseBackCulling +#define NS_SetUseRightHandClippingProcess SetUseRightHandClippingProcess +#define NS_GetUseRightHandClippingProcess GetUseRightHandClippingProcess #define NS_SetTextureAddressMode SetTextureAddressMode #define NS_SetTextureAddressModeUV SetTextureAddressModeUV @@ -4391,11 +4504,13 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_SetScreenFlipTargetWindow SetScreenFlipTargetWindow #define NS_GetDesktopScreenGraph GetDesktopScreenGraph #define NS_GetDesktopScreenGraphMemImage GetDesktopScreenGraphMemImage +#define NS_GetOtherWindowGraph GetOtherWindowGraph #endif // WINDOWS_DESKTOP_OS #define NS_SetGraphMode SetGraphMode #define NS_SetUserScreenImage SetUserScreenImage #define NS_SetFullScreenResolutionMode SetFullScreenResolutionMode #define NS_GetFullScreenResolutionMode GetFullScreenResolutionMode +#define NS_GetUseFullScreenResolutionMode GetUseFullScreenResolutionMode #define NS_SetFullScreenScalingMode SetFullScreenScalingMode #define NS_SetEmulation320x240 SetEmulation320x240 #define NS_SetZBufferSize SetZBufferSize @@ -4411,6 +4526,7 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_GetColorBitDepth GetColorBitDepth #define NS_GetChangeDisplayFlag GetChangeDisplayFlag #define NS_GetVideoMemorySize GetVideoMemorySize +#define NS_GetVideoMemorySizeEx GetVideoMemorySizeEx #define NS_GetRefreshRate GetRefreshRate #define NS_GetDisplayNum GetDisplayNum #define NS_GetDisplayInfo GetDisplayInfo @@ -4453,6 +4569,8 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_GetUseDirect3DVersion GetUseDirect3DVersion #define NS_GetUseDirect3D11FeatureLevel GetUseDirect3D11FeatureLevel #define NS_SetUseDirect3D11AdapterIndex SetUseDirect3D11AdapterIndex +#define NS_SetUseDirect3D11BGRASupport SetUseDirect3D11BGRASupport +#define NS_GetUseDirect3D11BGRASupport GetUseDirect3D11BGRASupport #define NS_SetUseDirectDrawFlag SetUseDirectDrawFlag #define NS_SetUseGDIFlag SetUseGDIFlag #define NS_GetUseGDIFlag GetUseGDIFlag @@ -4591,16 +4709,21 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_CalcPolygonBinormalAndTangentsToShader CalcPolygonBinormalAndTangentsToShader #define NS_CalcPolygonIndexedBinormalAndTangentsToShader CalcPolygonIndexedBinormalAndTangentsToShader +#define NS_CalcPolygon32bitIndexedBinormalAndTangentsToShader CalcPolygon32bitIndexedBinormalAndTangentsToShader #define NS_DrawBillboard3DToShader DrawBillboard3DToShader #define NS_DrawPolygon2DToShader DrawPolygon2DToShader #define NS_DrawPolygon3DToShader DrawPolygon3DToShader #define NS_DrawPolygonIndexed2DToShader DrawPolygonIndexed2DToShader +#define NS_DrawPolygon32bitIndexed2DToShader DrawPolygon32bitIndexed2DToShader #define NS_DrawPolygonIndexed3DToShader DrawPolygonIndexed3DToShader +#define NS_DrawPolygon32bitIndexed3DToShader DrawPolygon32bitIndexed3DToShader #define NS_DrawPrimitive2DToShader DrawPrimitive2DToShader #define NS_DrawPrimitive3DToShader DrawPrimitive3DToShader #define NS_DrawPrimitiveIndexed2DToShader DrawPrimitiveIndexed2DToShader +#define NS_DrawPrimitive32bitIndexed2DToShader DrawPrimitive32bitIndexed2DToShader #define NS_DrawPrimitiveIndexed3DToShader DrawPrimitiveIndexed3DToShader +#define NS_DrawPrimitive32bitIndexed3DToShader DrawPrimitive32bitIndexed3DToShader #define NS_DrawPolygon3DToShader_UseVertexBuffer DrawPolygon3DToShader_UseVertexBuffer #define NS_DrawPolygonIndexed3DToShader_UseVertexBuffer DrawPolygonIndexed3DToShader_UseVertexBuffer #define NS_DrawPrimitive3DToShader_UseVertexBuffer DrawPrimitive3DToShader_UseVertexBuffer @@ -4620,12 +4743,14 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #ifndef DX_NON_FILTER #define NS_SetGraphFilterBltBlendMode SetGraphFilterBltBlendMode +#define NS_SetGraphBlendScalingFilterMode SetGraphBlendScalingFilterMode #define NS_GraphFilter GraphFilter #define NS_GraphFilterBlt GraphFilterBlt #define NS_GraphFilterRectBlt GraphFilterRectBlt #define NS_GraphBlend GraphBlend #define NS_GraphBlendBlt GraphBlendBlt #define NS_GraphBlendRectBlt GraphBlendRectBlt +#define NS_GraphBlendRectBlt2 GraphBlendRectBlt2 #endif // DX_NON_FILTER @@ -4745,6 +4870,7 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_SetMaterialParam SetMaterialParam #define NS_SetUseSpecular SetUseSpecular #define NS_SetGlobalAmbientLight SetGlobalAmbientLight +#define NS_SetUseLightAngleAttenuation SetUseLightAngleAttenuation #define NS_ChangeLightTypeDir ChangeLightTypeDir #define NS_ChangeLightTypeSpot ChangeLightTypeSpot @@ -4923,6 +5049,7 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_SetFontCacheCharNum SetFontCacheCharNum #define NS_ChangeFont ChangeFont #define NS_ChangeFontWithStrLen ChangeFontWithStrLen +#define NS_ChangeFontFromHandle ChangeFontFromHandle #define NS_ChangeFontType ChangeFontType #define NS_GetFontName GetFontName @@ -5005,6 +5132,8 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_GetFontCacheUsePremulAlphaFlag GetFontCacheUsePremulAlphaFlag #define NS_SetFontUseAdjustSizeFlag SetFontUseAdjustSizeFlag #define NS_GetFontUseAdjustSizeFlag GetFontUseAdjustSizeFlag +#define NS_SetFontOnlyDrawType SetFontOnlyDrawType +#define NS_GetFontOnlyDrawType GetFontOnlyDrawType #define NS_AddFontFile AddFontFile #define NS_AddFontFileWithStrLen AddFontFileWithStrLen @@ -5021,12 +5150,16 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_DrawNVString DrawNVString #define NS_DrawFormatString DrawFormatString #define NS_DrawFormatVString DrawFormatVString +#define NS_DrawFormatString2 DrawFormatString2 +#define NS_DrawFormatVString2 DrawFormatVString2 #define NS_DrawExtendString DrawExtendString #define NS_DrawExtendNString DrawExtendNString #define NS_DrawExtendVString DrawExtendVString #define NS_DrawExtendNVString DrawExtendNVString #define NS_DrawExtendFormatString DrawExtendFormatString #define NS_DrawExtendFormatVString DrawExtendFormatVString +#define NS_DrawExtendFormatString2 DrawExtendFormatString2 +#define NS_DrawExtendFormatVString2 DrawExtendFormatVString2 #define NS_DrawRotaString DrawRotaString #define NS_DrawRotaNString DrawRotaNString #define NS_DrawRotaFormatString DrawRotaFormatString @@ -5040,12 +5173,16 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_DrawNVStringF DrawNVStringF #define NS_DrawFormatStringF DrawFormatStringF #define NS_DrawFormatVStringF DrawFormatVStringF +#define NS_DrawFormatString2F DrawFormatString2F +#define NS_DrawFormatVString2F DrawFormatVString2F #define NS_DrawExtendStringF DrawExtendStringF #define NS_DrawExtendNStringF DrawExtendNStringF #define NS_DrawExtendVStringF DrawExtendVStringF #define NS_DrawExtendNVStringF DrawExtendNVStringF #define NS_DrawExtendFormatStringF DrawExtendFormatStringF #define NS_DrawExtendFormatVStringF DrawExtendFormatVStringF +#define NS_DrawExtendFormatString2F DrawExtendFormatString2F +#define NS_DrawExtendFormatVString2F DrawExtendFormatVString2F #define NS_DrawRotaStringF DrawRotaStringF #define NS_DrawRotaNStringF DrawRotaNStringF #define NS_DrawRotaFormatStringF DrawRotaFormatStringF @@ -5084,12 +5221,16 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_DrawNVStringToHandle DrawNVStringToHandle #define NS_DrawFormatStringToHandle DrawFormatStringToHandle #define NS_DrawFormatVStringToHandle DrawFormatVStringToHandle +#define NS_DrawFormatString2ToHandle DrawFormatString2ToHandle +#define NS_DrawFormatVString2ToHandle DrawFormatVString2ToHandle #define NS_DrawExtendStringToHandle DrawExtendStringToHandle #define NS_DrawExtendNStringToHandle DrawExtendNStringToHandle #define NS_DrawExtendVStringToHandle DrawExtendVStringToHandle #define NS_DrawExtendNVStringToHandle DrawExtendNVStringToHandle #define NS_DrawExtendFormatStringToHandle DrawExtendFormatStringToHandle #define NS_DrawExtendFormatVStringToHandle DrawExtendFormatVStringToHandle +#define NS_DrawExtendFormatString2ToHandle DrawExtendFormatString2ToHandle +#define NS_DrawExtendFormatVString2ToHandle DrawExtendFormatVString2ToHandle #define NS_DrawRotaStringToHandle DrawRotaStringToHandle #define NS_DrawRotaNStringToHandle DrawRotaNStringToHandle #define NS_DrawRotaFormatStringToHandle DrawRotaFormatStringToHandle @@ -5103,12 +5244,16 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_DrawNVStringFToHandle DrawNVStringFToHandle #define NS_DrawFormatStringFToHandle DrawFormatStringFToHandle #define NS_DrawFormatVStringFToHandle DrawFormatVStringFToHandle +#define NS_DrawFormatString2FToHandle DrawFormatString2FToHandle +#define NS_DrawFormatVString2FToHandle DrawFormatVString2FToHandle #define NS_DrawExtendStringFToHandle DrawExtendStringFToHandle #define NS_DrawExtendNStringFToHandle DrawExtendNStringFToHandle #define NS_DrawExtendVStringFToHandle DrawExtendVStringFToHandle #define NS_DrawExtendNVStringFToHandle DrawExtendNVStringFToHandle #define NS_DrawExtendFormatStringFToHandle DrawExtendFormatStringFToHandle #define NS_DrawExtendFormatVStringFToHandle DrawExtendFormatVStringFToHandle +#define NS_DrawExtendFormatString2FToHandle DrawExtendFormatString2FToHandle +#define NS_DrawExtendFormatVString2FToHandle DrawExtendFormatVString2FToHandle #define NS_DrawRotaStringFToHandle DrawRotaStringFToHandle #define NS_DrawRotaNStringFToHandle DrawRotaNStringFToHandle #define NS_DrawRotaFormatStringFToHandle DrawRotaFormatStringFToHandle @@ -5204,6 +5349,10 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_GetGraphDataShavedMode GetGraphDataShavedMode #define NS_SetGraphDataShavedMode SetGraphDataShavedMode #define NS_SetUsePremulAlphaConvertLoad SetUsePremulAlphaConvertLoad +#define NS_GetUsePremulAlphaConvertLoad GetUsePremulAlphaConvertLoad +#define NS_SetUseConvertNormalFormatLoad SetUseConvertNormalFormatLoad +#define NS_GetUseConvertNormalFormatLoad GetUseConvertNormalFormatLoad + //基本イメージデータ構造体関係 #define NS_CreateBaseImage CreateBaseImage @@ -5319,6 +5468,7 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_CreateRGBA8ColorData CreateRGBA8ColorData #define NS_CreateABGR8ColorData CreateABGR8ColorData #define NS_CreateBGRA8ColorData CreateBGRA8ColorData +#define NS_CreateBGR8ColorData CreateBGR8ColorData #define NS_CreateARGB4ColorData CreateARGB4ColorData #define NS_CreateA1R5G5B5ColorData CreateA1R5G5B5ColorData #define NS_CreateX1R5G5B5ColorData CreateX1R5G5B5ColorData @@ -5605,7 +5755,10 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_SetEnableWASAPIFlag SetEnableWASAPIFlag #ifndef DX_NON_ASIO #define NS_SetEnableASIOFlag SetEnableASIOFlag +#define NS_SetUseASIODriverIndex SetUseASIODriverIndex #endif // DX_NON_ASIO +#define NS_SetEnableMMEwaveOutFlag SetEnableMMEwaveOutFlag + #define NS_SetUseOldVolumeCalcFlag SetUseOldVolumeCalcFlag #define NS_SetSoundCurrentTimeType SetSoundCurrentTimeType #define NS_GetSoundCurrentTimeType GetSoundCurrentTimeType @@ -5790,6 +5943,12 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_Live2D_DeleteModel Live2D_DeleteModel #define NS_Live2D_InitModel Live2D_InitModel +#define NS_Live2D_SetUserShader Live2D_SetUserShader +#define NS_Live2D_DrawCallback Live2D_DrawCallback +#define NS_Live2D_SetUseAutoScaling Live2D_SetUseAutoScaling +#define NS_Live2D_SetUseAutoCentering Live2D_SetUseAutoCentering +#define NS_Live2D_SetUseReverseYAxis Live2D_SetUseReverseYAxis + #define NS_Live2D_Model_Update Live2D_Model_Update #define NS_Live2D_Model_SetTranslate Live2D_Model_SetTranslate #define NS_Live2D_Model_SetExtendRate Live2D_Model_SetExtendRate @@ -5798,7 +5957,9 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_Live2D_Model_StartMotion Live2D_Model_StartMotion #define NS_Live2D_Model_StartMotionWithStrLen Live2D_Model_StartMotionWithStrLen +#define NS_Live2D_Model_GetLastPlayMotionNo Live2D_Model_GetLastPlayMotionNo #define NS_Live2D_Model_IsMotionFinished Live2D_Model_IsMotionFinished +#define NS_Live2D_Model_GetMotionPlayTime Live2D_Model_GetMotionPlayTime #define NS_Live2D_Model_SetExpression Live2D_Model_SetExpression #define NS_Live2D_Model_SetExpressionWithStrLen Live2D_Model_SetExpressionWithStrLen #define NS_Live2D_Model_HitTest Live2D_Model_HitTest @@ -5835,6 +5996,8 @@ extern int NS_CreateColorData( COLORDATA *ColorDataBuf, int ColorBitDe #define NS_Live2D_Model_GetEyeBlinkParameterId Live2D_Model_GetEyeBlinkParameterId #define NS_Live2D_Model_GetLipSyncParameterCount Live2D_Model_GetLipSyncParameterCount #define NS_Live2D_Model_GetLipSyncParameterId Live2D_Model_GetLipSyncParameterId +#define NS_Live2D_Model_GetCanvasWidth Live2D_Model_GetCanvasWidth +#define NS_Live2D_Model_GetCanvasHeight Live2D_Model_GetCanvasHeight #endif // DX_NON_LIVE2D_CUBISM4 diff --git a/DxSystem.cpp b/DxSystem.cpp index c87cace..3b67ccd 100644 --- a/DxSystem.cpp +++ b/DxSystem.cpp @@ -2,7 +2,7 @@ // // DXライブラリ システムプログラム // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -1209,6 +1209,12 @@ extern int NS_GetRand( int RandMax ) return Result ; } +// メルセンヌ・ツイスターアルゴリズムで生成された乱数値を無加工で取得する +extern DWORD NS_GetMersenneTwisterRand( void ) +{ + return randMT() ; +} + // 乱数ハンドルを作成する( 戻り値 0以外:乱数ハンドル 0:エラー ) extern DWORD_PTR NS_CreateRandHandle( int Seed ) { @@ -1277,6 +1283,12 @@ extern int NS_GetRandHandle( DWORD_PTR RandHandle, int RandMax ) return Result ; } +// 乱数ハンドルを使用してメルセンヌ・ツイスターアルゴリズムで生成された乱数値を無加工で取得する +extern DWORD NS_GetMersenneTwisterRandHandle( DWORD_PTR RandHandle ) +{ + return randMTData( ( MERSENNE_TWISTER_DATA * )RandHandle ) ; +} + #else // DX_NON_MERSENNE_TWISTER // 乱数の初期値を設定する diff --git a/DxSystem.h b/DxSystem.h index be2e3f7..9d3b854 100644 --- a/DxSystem.h +++ b/DxSystem.h @@ -2,7 +2,7 @@ // // DXライブラリ システムプログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxThread.cpp b/DxThread.cpp index 128a490..d1c224d 100644 --- a/DxThread.cpp +++ b/DxThread.cpp @@ -2,7 +2,7 @@ // // DXライブラリ スレッド関係プログラム // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- diff --git a/DxThread.h b/DxThread.h index f3d7ccc..3e882b1 100644 --- a/DxThread.h +++ b/DxThread.h @@ -2,7 +2,7 @@ // // DXライブラリ スレッド関係プログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git "a/DxUseCLib \203X\203^\203e\203B\203b\203N\203\212\203\223\203N\203\211\203C\203u\203\211\203\212\202\311\202\302\202\242\202\304.txt" "b/DxUseCLib \203X\203^\203e\203B\203b\203N\203\212\203\223\203N\203\211\203C\203u\203\211\203\212\202\311\202\302\202\242\202\304.txt" new file mode 100644 index 0000000..04ea893 --- /dev/null +++ "b/DxUseCLib \203X\203^\203e\203B\203b\203N\203\212\203\223\203N\203\211\203C\203u\203\211\203\212\202\311\202\302\202\242\202\304.txt" @@ -0,0 +1,99 @@ +DxUseCLib.lib について + +  DxUseCLib.lib はDXライブラリ中の libpng や libjpeg などの外部ライブラリを + 使用している部分を抜き出し、一つの lib ファイルとしてものです。 +  このようにする利点はDXライブラリに手を加えてみようと思った方が、 + 外部ライブラリを用意しなくても DxLib.lib のコンパイルが出来るという事です。 +  外部ライブラリを使用している部分を改造したい、又は DxCompileConfig.h の中の + 使用したいオプションが DxUseCLib.lib の再コンパイルを必要とする場合は + DXライブラリが使用している外部ライブラリを用意して DxUseClib.lib を + コンパイルする必要があります。 + + +DxUseCLib.lib のコンパイルについて + +  DxUseCLib.lib は以下のファイルをコンパイルして静的リンクライブラリ + (スタティックリンクライブラリ) にしたものです。 + + DxUseCLib.cpp + DxUseCLibLive2DCubism4.cpp + DxUseCLibOgg.cpp + DxUseCLibPhysics.cpp + Windows\DxUseCLibOggD3D9.cpp + Windows\DxUseCLibOggD3D11.cpp + Windows\DxUseCLibOggWin.cpp + Windows\DxUseCStrmBaseFilter.cpp + +  DxUseCLib.lib をコンパイルする場合は以下の外部ライブラリを用意して、 + 必要なヘッダファイルをインクルードできるようにする必要があります。 + +  以下は 2014/10/6 現在での情報です。 + + + + ・Bullet Physics 2.75 ( ファイル名 bullet-2.75.zip ) + +  http://bulletphysics.org/wordpress/ + +  DXライブラリでは Bullet Physics のクラス名などの先頭に D_ を付けて + コンパイルした libファイルを使用しています。これはモーションの再生でしか + Bullet Physics を使用しないDXライブラリとは別に、独自に Bullet Physics を + 使用しようとした場合にクラス名などの衝突が発生しないようにするためです。 +  リネームするために作成したコンソールアプリケーションは以下のファイルを + コンパイルすることで作成できます。 + + Tool\bullet_rename.cpp + Tool\FileLib.cpp + +  尚、バージョン2.75 のみで正常に動作するやっつけプログラムなので、 + 他のバージョンでは使用できません。 + + + + ・libpng 1.6.12 ( ファイル名 lpng1612.zip ) + +  http://www.libpng.org/pub/png/libpng.html + + + + ・zlib 1.2.8 ( ファイル名 zlib128.zip ) + +  http://www.zlib.net/ + + + + ・libjpeg 9 ( ファイル名 jpegsr9.zip ) + +  http://www.ijg.org/ + +  パッケージのフォルダ内に初期状態では jconfig.h がありませんので、 + 以下のファイルを jconfig.h にリネームしてください。 + ( Visual C++ 用ですが、Borland C++ や gcc でも使用できます ) + +  jconfig.vc + + + + ・libtiff 4.0.3 ( ファイル名 tiff-4.0.3.zip ) + +  http://www.libtiff.org/ + + + + ・Ogg, Ogg Vorbis, Ogg Theora + +  SVN( Apache Subversion ) を使用して以下のリポジトリからダウンロードできます。 + + http://svn.xiph.org/trunk/ogg 使用リビジョン 19150 + http://svn.xiph.org/trunk/vorbis 使用リビジョン 19171 + http://svn.xiph.org/trunk/theora 使用リビジョン 19181 + + + + ・libopus 1.1.1 ( ファイル名 opus-1.1.1.tar.gz ) + ・opusfile 0.7 ( ファイル名 opusfile-0.7.zip ) + +  http://opus-codec.org/downloads/ + + +  \ No newline at end of file diff --git a/DxUseCLib.cpp b/DxUseCLib.cpp index 195510d..ebc0d0a 100644 --- a/DxUseCLib.cpp +++ b/DxUseCLib.cpp @@ -2,7 +2,7 @@ // // DXライブラリ 標準Cライブラリ使用コード // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -50,11 +50,8 @@ #ifndef DX_NON_PNGREAD #include "png.h" // #include "pngpriv.h" -#endif - -#ifndef DX_NON_MODEL #include "zlib.h" -#endif // DX_NON_MODEL +#endif #ifndef DX_NON_JPEGREAD #ifdef DX_GCC_COMPILE @@ -876,6 +873,2590 @@ extern int LoadPngImage( STREAMDATA *Src, BASEIMAGE *BaseImage, int GetFormatOnl return 0; } + +// PNG画像の読みこみ( 高速版 ) +#define READ_4BYTE( x ) ( ( ( ( BYTE * )( x ) )[ 0 ] << 24 ) | ( ( ( BYTE * )( x ) )[ 1 ] << 16 ) | ( ( ( BYTE * )( x ) )[ 2 ] << 8 ) | ( ( ( BYTE * )( x ) )[ 3 ] ) ) + +#define PAETH_CODE( x ) up = UpP[ x ] ;\ + \ + upleft = UpLeftP[ x ] ;\ + left = LeftP[ x ] ;\ + \ + up_upleft = up - upleft ;\ + left_upleft = left - upleft ;\ + \ + abs_up_upleft = up_upleft < 0 ? -up_upleft : up_upleft ;\ + abs_left_upleft = left_upleft < 0 ? -left_upleft : left_upleft ;\ + abs_up_upleft_left_upleft = ( up_upleft + left_upleft ) < 0 ? -( up_upleft + left_upleft ) : up_upleft + left_upleft ;\ + \ + result = ( abs_up_upleft <= abs_left_upleft && abs_up_upleft <= abs_up_upleft_left_upleft ) ? left : ( abs_left_upleft <= abs_up_upleft_left_upleft ) ? up : upleft ; + +#define BYTE_FILTER_CODE \ + TmpP = SrcP ;\ + switch( SrcP[ -1 ] )\ + {\ + case 0 :\ + break ;\ +\ + case 1 :\ + TmpP += 1 ;\ + for( j = 1 ; j < SrcPitch - 1 ; j ++, TmpP += 1 )\ + {\ + TmpP[ 0 ] = ( BYTE )( ( int )TmpP[ 0 ] + ( int )( ( TmpP - 1 )[ 0 ] ) ) ;\ + }\ + break ;\ +\ + case 2 :\ + if( i != 0 )\ + {\ + for( j = 0 ; j < SrcPitch - 1 ; j ++, TmpP += 1 )\ + {\ + TmpP[ 0 ] = ( BYTE )( ( int )TmpP[ 0 ] + ( int )( ( TmpP - SrcPitch )[ 0 ] ) ) ;\ + }\ + }\ + break ;\ +\ + case 3 :\ + if( i == 0 )\ + {\ + TmpP += 1 ;\ + for( j = 1 ; j < SrcPitch - 1 ; j ++, TmpP += 1 )\ + {\ + TmpP[ 0 ] = ( BYTE )( ( int )TmpP[ 0 ] + ( int )( ( TmpP - 1 )[ 0 ] ) ) ;\ + }\ + }\ + else\ + {\ + TmpP[ 0 ] = ( BYTE )( ( int )TmpP[ 0 ] + ( ( TmpP - SrcPitch )[ 0 ] ) / 2 ) ;\ +\ + TmpP += 1 ;\ + for( j = 1 ; j < SrcPitch - 1 ; j ++, TmpP += 1 )\ + {\ + TmpP[ 0 ] = ( BYTE )( ( int )TmpP[ 0 ] + ( ( TmpP - 1 )[ 0 ] + ( TmpP - SrcPitch )[ 0 ] ) / 2 ) ;\ + }\ + }\ + break ;\ +\ + case 4 :\ + {\ + if( i == 0 )\ + {\ + TmpP += 1 ;\ + for( j = 1 ; j < SrcPitch - 1 ; j ++, TmpP += 1 )\ + {\ + TmpP[ 0 ] = ( BYTE )( ( int )TmpP[ 0 ] + ( int )( ( TmpP - 1 )[ 0 ] ) ) ;\ + }\ + }\ + else\ + {\ + int left, up, upleft, abs_up_upleft, abs_left_upleft, left_upleft, up_upleft, abs_up_upleft_left_upleft, result ;\ +\ + TmpP[ 0 ] = ( BYTE )( ( int )TmpP[ 0 ] + ( TmpP - SrcPitch )[ 0 ] ) ;\ + TmpP += 1 ;\ +\ + for( j = 1 ; j < SrcPitch - 1 ; j ++, TmpP += 1 )\ + {\ + BYTE *UpP = TmpP - SrcPitch ;\ + BYTE *UpLeftP = TmpP - SrcPitch - 1 ;\ + BYTE *LeftP = TmpP - 1 ;\ +\ + {\ + PAETH_CODE( 0 )\ +\ + TmpP[ 0 ] = ( BYTE )( ( int )TmpP[ 0 ] + result ) ;\ + }\ + }\ + }\ + }\ + break ;\ + } + + + +extern int LoadPngImage_Fast( STREAMDATA *Src, BASEIMAGE *BaseImage, int GetFormatOnly ) +{ + size_t FileBytes ; + BYTE *SrcP = NULL ; + BYTE *TmpP = NULL ; + BYTE *DestP = NULL ; + BYTE *IHDR = NULL ; + BYTE *tRNS = NULL ; + DWORD tRNSBytes = 0 ; + BYTE *IDAT = NULL ; + DWORD IDATBytes = 0 ; + BYTE *PLTE = NULL ; + DWORD PLTEBytes = 0 ; + DWORD PLTECount = 0 ; + BYTE *FilterImage = NULL ; + DWORD FilterImageBytes ; + DWORD FilterImagePitch ; + DWORD ChunkBytes ; + int IsLoop = 1 ; + BYTE BitDepth ; + DWORD PixelBits ; + BYTE ColorType ; + BYTE CompressionMethod ; + BYTE FilterMethod ; + BYTE InterlaceMethod ; + z_stream ZStream ; + int ZStreamInit = 0 ; + int status = Z_OK ; + DWORD i ; + BYTE tr = 0, tg = 0, tb = 0 ; + static BYTE Table1bit[ 2 ] = { 0, 255 } ; + static BYTE Table2bit[ 4 ] = { 0, 85, 170, 255 } ; + static BYTE Table4bit[ 16 ] = { 0, 17, 34, 51, 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255 } ; + + // メモリに読み込まれたデータではない場合は処理しない + if( GetMemStreamDataShredStruct()->Read != Src->ReadShred.Read ) + { + return -1 ; + } + + // メモリの読み込まれたデータのアドレスを取得 + SrcP = *( ( BYTE ** )Src->DataPoint ) ; + FileBytes = *( ( size_t * )( ( BYTE ** )Src->DataPoint + 1 ) ) ; + + // 最初の8バイトでPNGファイルかどうかをチェック + if( FileBytes < 8 || + SrcP[ 0 ] != 0x89 || SrcP[ 1 ] != 0x50 || SrcP[ 2 ] != 0x4E || SrcP[ 3 ] != 0x47 || + SrcP[ 4 ] != 0x0D || SrcP[ 5 ] != 0x0A || SrcP[ 6 ] != 0x1A || SrcP[ 7 ] != 0x0A ) + { + return -1 ; + } + + // 各チャンクを検出 + SrcP += 8 ; + while( IsLoop ) + { + ChunkBytes = READ_4BYTE( SrcP ) ; + switch( *( ( DWORD * )( SrcP + 4 ) ) ) + { + case 0x52444849 : // IHDR + if( IHDR != NULL ) + { + goto ERR ; + } + IHDR = SrcP + 8 ; + break ; + + case 0x54414449 : // IDAT + IDAT = SrcP + 8 ; + IDATBytes = ChunkBytes ; + break ; + + case 0x45544C50 : // PLTE + if( PLTE != NULL ) + { + return -1 ; + } + PLTE = SrcP + 8 ; + PLTEBytes = ChunkBytes ; + break ; + + case 0x534E5274 : // tRNS + tRNS = SrcP + 8 ; + tRNSBytes = ChunkBytes ; + break ; + + case 0x444E4549 : // IEND + IsLoop = 0 ; + break ; + + case 0x74585469 : // iTXt + case 0x74584574 : // tEXt + case 0x7458547A : // zTXt + case 0x454D4974 : // tIME + break ; + + default : + break ; + } + + SrcP += ChunkBytes + 12 ; + } + + // 必須チャンクが無かったらエラー + if( IHDR == NULL || IDAT == NULL ) + { + goto ERR ; + } + + // ヘッダ読み込み + BaseImage->Width = ( int )READ_4BYTE( IHDR + 0 ) ; + BaseImage->Height = ( int )READ_4BYTE( IHDR + 4 ) ; + BitDepth = IHDR[ 8 ] ; + ColorType = IHDR[ 9 ] ; + CompressionMethod = IHDR[ 10 ] ; + FilterMethod = IHDR[ 11 ] ; + InterlaceMethod = IHDR[ 12 ] ; + + // インターレースには非対応 + if( InterlaceMethod != 0 ) + { + goto ERR ; + } + + // 圧縮方法は Deflate のみ対応 + if( CompressionMethod != 0 ) + { + goto ERR ; + } + + // 標準のフィルター手法のみ対応 + if( FilterMethod != 0 ) + { + goto ERR ; + } + + // 対応しているカラータイプは 2( RGB ) か 6( RGBA ) のみ + switch( ColorType ) + { + case 0 : // GRAY + if( BitDepth != 1 && BitDepth != 2 && BitDepth != 4 && BitDepth != 8 && BitDepth != 16 ) + { + goto ERR ; + } + PixelBits = BitDepth ; + if( tRNS != NULL ) + { + NS_CreateARGB8ColorData( &BaseImage->ColorData ) ; + if( BitDepth == 16 ) + { + tg = tRNS[ 0 ] ; + } + else + { + tg = tRNS[ 1 ] ; + } + } + else + { + NS_CreateGrayColorData( &BaseImage->ColorData ) ; + } + break ; + + case 2 : // RGB + if( BitDepth != 8 && BitDepth != 16 ) + { + goto ERR ; + } + + if( tRNS != NULL ) + { + PixelBits = BitDepth * 3 ; + NS_CreateARGB8ColorData( &BaseImage->ColorData ) ; + if( BitDepth == 8 ) + { + tr = tRNS[ 1 ] ; + tg = tRNS[ 3 ] ; + tb = tRNS[ 5 ] ; + } + else + { + tr = tRNS[ 0 ] ; + tg = tRNS[ 2 ] ; + tb = tRNS[ 4 ] ; + } + } + else + { + PixelBits = BitDepth * 3 ; + NS_CreateFullColorData( &BaseImage->ColorData ) ; + } + break ; + + case 3 : // PLT + PixelBits = BitDepth ; + if( PLTE == NULL ) + { + goto ERR ; + } + PLTECount = PLTEBytes / 3 ; + NS_CreatePal8ColorData( &BaseImage->ColorData, tRNS != NULL ? TRUE : FALSE ) ; + BaseImage->ColorData.MaxPaletteNo = ( int )( PLTECount - 1 ) ; + for( i = 0 ; i < PLTECount ; i ++ ) + { + BaseImage->ColorData.Palette[ i ].Red = PLTE[ 0 ] ; + BaseImage->ColorData.Palette[ i ].Green = PLTE[ 1 ] ; + BaseImage->ColorData.Palette[ i ].Blue = PLTE[ 2 ] ; + PLTE += 3 ; + } + if( tRNS != NULL ) + { + for( i = 0 ; i < tRNSBytes ; i ++ ) + { + BaseImage->ColorData.Palette[ i ].Alpha = tRNS[ i ] ; + } + for( ; i < 256 ; i ++ ) + { + BaseImage->ColorData.Palette[ i ].Alpha = 255 ; + } + } + else + { + for( i = 0 ; i < 256 ; i ++ ) + { + BaseImage->ColorData.Palette[ i ].Alpha = 0 ; + } + } + break ; + + case 4 : // GRAY + A + if( BitDepth != 8 && BitDepth != 16 ) + { + goto ERR ; + } + PixelBits = BitDepth * 2 ; + NS_CreateARGB8ColorData( &BaseImage->ColorData ) ; + break ; + + case 6 : // RGBA + if( BitDepth != 8 && BitDepth != 16 ) + { + goto ERR ; + } + PixelBits = BitDepth * 4 ; + NS_CreateARGB8ColorData( &BaseImage->ColorData ) ; + break ; + + default : + goto ERR ; + } + + // ピッチの計算 + BaseImage->Pitch = BaseImage->Width * BaseImage->ColorData.PixelByte ; + + if( GetFormatOnly == FALSE ) + { + // 画像保存用のバッファを確保 + BaseImage->GraphData = DXALLOC( BaseImage->Pitch * BaseImage->Height ) ; + if( BaseImage->GraphData == NULL ) + { + goto ERR ; + } + + // フィルターイメージのバッファを確保 + FilterImagePitch = ( BaseImage->Width * PixelBits + 7 ) / 8 + 1 ; + FilterImageBytes = ( DWORD )( FilterImagePitch * BaseImage->Height ) ; + FilterImage = ( BYTE * )DXALLOC( FilterImageBytes ) ; + if( FilterImage == NULL ) + { + goto ERR ; + } + + // 圧縮データの解凍準備 + _MEMSET( &ZStream, 0, sizeof( ZStream ) ) ; + if( inflateInit( &ZStream ) != Z_OK ) + { + goto ERR ; + } + ZStreamInit = 1 ; + ZStream.next_out = FilterImage ; + ZStream.avail_out = FilterImageBytes ; + + // 圧縮データの解凍 + SrcP = *( ( BYTE ** )Src->DataPoint ) + 8 ; + IsLoop = 1 ; + while( IsLoop ) + { + ChunkBytes = READ_4BYTE( SrcP ) ; + switch( *( ( DWORD * )( SrcP + 4 ) ) ) + { + case 0x54414449 : // IDAT + IDAT = SrcP + 8 ; + IDATBytes = ChunkBytes ; + + // IDATデータの解凍 + ZStream.next_in = IDAT ; + ZStream.avail_in = IDATBytes ; + status = inflate( &ZStream, Z_NO_FLUSH ) ; + if( status != Z_OK && status != Z_STREAM_END ) + { + goto ERR ; + } + if( status == Z_STREAM_END ) + { + IsLoop = 0 ; + } + break ; + + case 0x444E4549 : // IEND + IsLoop = 0 ; + break ; + + default : + break ; + } + + SrcP += ChunkBytes + 12 ; + } + + // 圧縮データが足りていなかったらエラー + if( status != Z_STREAM_END || ZStream.total_out != FilterImageBytes ) + { + goto ERR ; + } + + // 解凍処理の後始末 + inflateEnd( &ZStream ) ; + _MEMSET( &ZStream, 0, sizeof( ZStream ) ) ; + ZStreamInit = 0 ; + + // フィルターを解除 + { + DWORD Width = ( DWORD )BaseImage->Width ; + DWORD Height = ( DWORD )BaseImage->Height ; + DWORD DestPitch = ( DWORD )BaseImage->Pitch ; + DWORD SrcPitch = FilterImagePitch ; + DWORD SrcAddPitch = SrcPitch - Width * PixelBits / 8 ; + DWORD DestAddPitch = DestPitch - Width * BaseImage->ColorData.PixelByte ; + DWORD i, j ; + + SrcP = FilterImage + 1 ; + DestP = ( BYTE * )BaseImage->GraphData ; + switch( ColorType ) + { + case 0 : // GRAY + case 3 : // PLTE + if( tRNS != NULL && ColorType == 0 ) + { + if( BitDepth == 1 ) + { + for( i = 0 ; i < Height ; i ++, SrcP += SrcAddPitch, DestP += DestAddPitch ) + { + BYTE_FILTER_CODE + + for( j = 0 ;; ) + { + if( j >= Width ) break ; + DestP[ 0 ] = SrcP[ 0 ] >> 7 ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + DestP[ 0 ] = Table1bit[ DestP[ 0 ] ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP += 4 ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = ( SrcP[ 0 ] >> 6 ) & 0x1 ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + DestP[ 0 ] = Table1bit[ DestP[ 0 ] ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP += 4 ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = ( SrcP[ 0 ] >> 5 ) & 0x1 ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + DestP[ 0 ] = Table1bit[ DestP[ 0 ] ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP += 4 ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = ( SrcP[ 0 ] >> 4 ) & 0x1 ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + DestP[ 0 ] = Table1bit[ DestP[ 0 ] ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP += 4 ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = ( SrcP[ 0 ] >> 3 ) & 0x1 ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + DestP[ 0 ] = Table1bit[ DestP[ 0 ] ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP += 4 ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = ( SrcP[ 0 ] >> 2 ) & 0x1 ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + DestP[ 0 ] = Table1bit[ DestP[ 0 ] ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP += 4 ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = ( SrcP[ 0 ] >> 1 ) & 0x1 ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + DestP[ 0 ] = Table1bit[ DestP[ 0 ] ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP += 4 ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = SrcP[ 0 ] & 0x1 ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + DestP[ 0 ] = Table1bit[ DestP[ 0 ] ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP += 4 ; + j ++ ; + + SrcP ++ ; + } + } + } + else + if( BitDepth == 2 ) + { + for( i = 0 ; i < Height ; i ++, SrcP += SrcAddPitch, DestP += DestAddPitch ) + { + BYTE_FILTER_CODE + + for( j = 0 ;; ) + { + if( j >= Width ) break ; + DestP[ 0 ] = SrcP[ 0 ] >> 6 ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + DestP[ 0 ] = Table2bit[ DestP[ 0 ] ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP += 4 ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = ( SrcP[ 0 ] >> 4 ) & 0x3 ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + DestP[ 0 ] = Table2bit[ DestP[ 0 ] ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP += 4 ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = ( SrcP[ 0 ] >> 2 ) & 0x3 ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + DestP[ 0 ] = Table2bit[ DestP[ 0 ] ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP += 4 ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = SrcP[ 0 ] & 0x3 ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + DestP[ 0 ] = Table2bit[ DestP[ 0 ] ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP += 4 ; + j ++ ; + + SrcP ++ ; + } + } + } + else + if( BitDepth == 4 ) + { + for( i = 0 ; i < Height ; i ++, SrcP += SrcAddPitch, DestP += DestAddPitch ) + { + BYTE_FILTER_CODE + + for( j = 0 ;; ) + { + if( j >= Width ) break ; + DestP[ 0 ] = SrcP[ 0 ] >> 4 ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + DestP[ 0 ] = Table4bit[ DestP[ 0 ] ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP += 4 ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = SrcP[ 0 ] & 0xf ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + DestP[ 0 ] = Table4bit[ DestP[ 0 ] ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP += 4 ; + j ++ ; + + SrcP ++ ; + } + } + } + else + if( BitDepth == 8 ) + { + for( i = 0 ; i < Height ; i ++, SrcP += SrcAddPitch, DestP += DestAddPitch ) + { + switch( SrcP[ -1 ] ) + { + case 0 : + for( j = 0 ; j < Width ; j ++, SrcP += 1, DestP += 4 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + } + break ; + + case 1 : + DestP[ 0 ] = SrcP[ 0 ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + + SrcP += 1 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 1, DestP += 4 ) + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 4 )[ 0 ] ) ) ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + } + break ; + + case 2 : + if( i == 0 ) + { + for( j = 0 ; j < Width ; j ++, SrcP += 1, DestP += 4 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + } + } + else + { + for( j = 0 ; j < Width ; j ++, SrcP += 1, DestP += 4 ) + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - DestPitch )[ 0 ] ) ) ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + } + } + break ; + + case 3 : + if( i == 0 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + + SrcP += 1 ; + DestP += 4 ; + for( j = 1 ; j < Width ; j ++, SrcP += 1, DestP += 4 ) + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - 4 )[ 0 ] / 2 ) ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + } + } + else + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + + SrcP += 1 ; + DestP += 4 ; + for( j = 1 ; j < Width ; j ++, SrcP += 1, DestP += 4 ) + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - 4 )[ 0 ] + ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + } + } + break ; + + case 4 : + if( i == 0 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + + SrcP += 1 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 1, DestP += 4 ) + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 4 )[ 0 ] ) ) ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + } + } + else + { + int left, up, upleft, abs_up_upleft, abs_left_upleft, left_upleft, up_upleft, abs_up_upleft_left_upleft, result ; + + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - DestPitch )[ 0 ] ) ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + SrcP += 1 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 1, DestP += 4 ) + { + BYTE *UpP = DestP - DestPitch ; + BYTE *UpLeftP = DestP - DestPitch - 4 ; + BYTE *LeftP = DestP - 4 ; + + { + PAETH_CODE( 0 ) + + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + result ) ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + } + } + } + break ; + } + } + } + else + if( BitDepth == 16 ) + { + for( i = 0 ; i < Height ; i ++, SrcP += SrcAddPitch, DestP += DestAddPitch ) + { + switch( SrcP[ -1 ] ) + { + case 0 : + for( j = 0 ; j < Width ; j ++, SrcP += 2, DestP += 4 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + } + break ; + + case 1 : + DestP[ 0 ] = SrcP[ 0 ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + + SrcP += 2 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 2, DestP += 4 ) + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 4 )[ 0 ] ) ) ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + } + break ; + + case 2 : + if( i == 0 ) + { + for( j = 0 ; j < Width ; j ++, SrcP += 2, DestP += 4 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + } + } + else + { + for( j = 0 ; j < Width ; j ++, SrcP += 2, DestP += 4 ) + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - DestPitch )[ 0 ] ) ) ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + } + } + break ; + + case 3 : + if( i == 0 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + + SrcP += 2 ; + DestP += 4 ; + for( j = 1 ; j < Width ; j ++, SrcP += 2, DestP += 4 ) + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - 4 )[ 0 ] / 2 ) ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + } + } + else + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + + SrcP += 2 ; + DestP += 4 ; + for( j = 1 ; j < Width ; j ++, SrcP += 2, DestP += 4 ) + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - 4 )[ 0 ] + ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + } + } + break ; + + case 4 : + if( i == 0 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + + SrcP += 2 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 2, DestP += 4 ) + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 4 )[ 0 ] ) ) ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + } + } + else + { + int left, up, upleft, abs_up_upleft, abs_left_upleft, left_upleft, up_upleft, abs_up_upleft_left_upleft, result ; + + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - DestPitch )[ 0 ] ) ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + SrcP += 2 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 2, DestP += 4 ) + { + BYTE *UpP = DestP - DestPitch ; + BYTE *UpLeftP = DestP - DestPitch - 4 ; + BYTE *LeftP = DestP - 4 ; + + { + PAETH_CODE( 0 ) + + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + result ) ; + DestP[ 1 ] = DestP[ 0 ] ; + DestP[ 2 ] = DestP[ 0 ] ; + DestP[ 3 ] = DestP[ 0 ] == tg ? 0 : 255 ; + } + } + } + break ; + } + } + } + } + else + { + if( BitDepth == 1 ) + { + for( i = 0 ; i < Height ; i ++, SrcP += SrcAddPitch, DestP += DestAddPitch ) + { + BYTE_FILTER_CODE + + for( j = 0 ;; ) + { + if( j >= Width ) break ; + DestP[ 0 ] = SrcP[ 0 ] >> 7 ; + DestP ++ ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = ( SrcP[ 0 ] >> 6 ) & 0x1 ; + DestP ++ ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = ( SrcP[ 0 ] >> 5 ) & 0x1 ; + DestP ++ ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = ( SrcP[ 0 ] >> 4 ) & 0x1 ; + DestP ++ ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = ( SrcP[ 0 ] >> 3 ) & 0x1 ; + DestP ++ ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = ( SrcP[ 0 ] >> 2 ) & 0x1 ; + DestP ++ ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = ( SrcP[ 0 ] >> 1 ) & 0x1 ; + DestP ++ ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = SrcP[ 0 ] & 0x1 ; + DestP ++ ; + j ++ ; + + SrcP ++ ; + } + } + } + else + if( BitDepth == 2 ) + { + for( i = 0 ; i < Height ; i ++, SrcP += SrcAddPitch, DestP += DestAddPitch ) + { + BYTE_FILTER_CODE + + for( j = 0 ;; ) + { + if( j >= Width ) break ; + DestP[ 0 ] = SrcP[ 0 ] >> 6 ; + DestP ++ ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = ( SrcP[ 0 ] >> 4 ) & 0x3 ; + DestP ++ ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = ( SrcP[ 0 ] >> 2 ) & 0x3 ; + DestP ++ ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = SrcP[ 0 ] & 0x3 ; + DestP ++ ; + j ++ ; + + SrcP ++ ; + } + } + } + else + if( BitDepth == 4 ) + { + for( i = 0 ; i < Height ; i ++, SrcP += SrcAddPitch, DestP += DestAddPitch ) + { + BYTE_FILTER_CODE + + for( j = 0 ;; ) + { + if( j >= Width ) break ; + DestP[ 0 ] = SrcP[ 0 ] >> 4 ; + DestP ++ ; + j ++ ; + + if( j >= Width ) break ; + DestP[ 0 ] = SrcP[ 0 ] & 0xf ; + DestP ++ ; + j ++ ; + + SrcP ++ ; + } + } + } + else + if( BitDepth == 8 ) + { + for( i = 0 ; i < Height ; i ++, SrcP += SrcAddPitch, DestP += DestAddPitch ) + { + switch( SrcP[ -1 ] ) + { + case 0 : + for( j = 0 ; j < Width ; j ++, SrcP += 1, DestP += 1 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + } + break ; + + case 1 : + DestP[ 0 ] = SrcP[ 0 ] ; + + SrcP += 1 ; + DestP += 1 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 1, DestP += 1 ) + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 1 )[ 0 ] ) ) ; + } + break ; + + case 2 : + if( i == 0 ) + { + for( j = 0 ; j < Width ; j ++, SrcP += 1, DestP += 1 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + } + } + else + { + for( j = 0 ; j < Width ; j ++, SrcP += 1, DestP += 1 ) + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - DestPitch )[ 0 ] ) ) ; + } + } + break ; + + case 3 : + if( i == 0 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + + SrcP += 1 ; + DestP += 1 ; + for( j = 1 ; j < Width ; j ++, SrcP += 1, DestP += 1 ) + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - 1 )[ 0 ] / 2 ) ; + } + } + else + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + + SrcP += 1 ; + DestP += 1 ; + for( j = 1 ; j < Width ; j ++, SrcP += 1, DestP += 1 ) + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - 1 )[ 0 ] + ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + } + } + break ; + + case 4 : + if( i == 0 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + + SrcP += 1 ; + DestP += 1 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 1, DestP += 1 ) + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 1 )[ 0 ] ) ) ; + } + } + else + { + int left, up, upleft, abs_up_upleft, abs_left_upleft, left_upleft, up_upleft, abs_up_upleft_left_upleft, result ; + + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - DestPitch )[ 0 ] ) ; + SrcP += 1 ; + DestP += 1 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 1, DestP += 1 ) + { + BYTE *UpP = DestP - DestPitch ; + BYTE *UpLeftP = DestP - DestPitch - 1 ; + BYTE *LeftP = DestP - 1 ; + + { + PAETH_CODE( 0 ) + + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + result ) ; + } + } + } + break ; + } + } + } + else + if( BitDepth == 16 ) + { + for( i = 0 ; i < Height ; i ++, SrcP += SrcAddPitch, DestP += DestAddPitch ) + { + switch( SrcP[ -1 ] ) + { + case 0 : + for( j = 0 ; j < Width ; j ++, SrcP += 2, DestP += 1 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + } + break ; + + case 1 : + DestP[ 0 ] = SrcP[ 0 ] ; + + SrcP += 2 ; + DestP += 1 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 2, DestP += 1 ) + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 1 )[ 0 ] ) ) ; + } + break ; + + case 2 : + if( i == 0 ) + { + for( j = 0 ; j < Width ; j ++, SrcP += 2, DestP += 1 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + } + } + else + { + for( j = 0 ; j < Width ; j ++, SrcP += 2, DestP += 1 ) + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - DestPitch )[ 0 ] ) ) ; + } + } + break ; + + case 3 : + if( i == 0 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + + SrcP += 2 ; + DestP += 1 ; + for( j = 1 ; j < Width ; j ++, SrcP += 2, DestP += 1 ) + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - 1 )[ 0 ] / 2 ) ; + } + } + else + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + + SrcP += 2 ; + DestP += 1 ; + for( j = 1 ; j < Width ; j ++, SrcP += 2, DestP += 1 ) + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - 1 )[ 0 ] + ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + } + } + break ; + + case 4 : + if( i == 0 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + + SrcP += 2 ; + DestP += 1 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 2, DestP += 1 ) + { + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 1 )[ 0 ] ) ) ; + } + } + else + { + int left, up, upleft, abs_up_upleft, abs_left_upleft, left_upleft, up_upleft, abs_up_upleft_left_upleft, result ; + + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - DestPitch )[ 0 ] ) ; + SrcP += 2 ; + DestP += 1 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 2, DestP += 1 ) + { + BYTE *UpP = DestP - DestPitch ; + BYTE *UpLeftP = DestP - DestPitch - 1 ; + BYTE *LeftP = DestP - 1 ; + + { + PAETH_CODE( 0 ) + + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + result ) ; + } + } + } + break ; + } + } + } + } + break ; + + case 2 : // RGB + if( tRNS != NULL ) + { + if( BitDepth == 8 ) + { + for( i = 0 ; i < Height ; i ++, SrcP += SrcAddPitch, DestP += DestAddPitch ) + { + switch( SrcP[ -1 ] ) + { + case 0 : + for( j = 0 ; j < Width ; j ++, SrcP += 3, DestP += 4 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 1 ] ; + DestP[ 0 ] = SrcP[ 2 ] ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + } + break ; + + case 1 : + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 1 ] ; + DestP[ 0 ] = SrcP[ 2 ] ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + + SrcP += 3 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 3, DestP += 4 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 4 )[ 2 ] ) ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( int )( ( DestP - 4 )[ 1 ] ) ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - 4 )[ 0 ] ) ) ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + } + break ; + + case 2 : + if( i == 0 ) + { + for( j = 0 ; j < Width ; j ++, SrcP += 3, DestP += 4 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 1 ] ; + DestP[ 0 ] = SrcP[ 2 ] ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + } + } + else + { + for( j = 0 ; j < Width ; j ++, SrcP += 3, DestP += 4 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - DestPitch )[ 2 ] ) ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( int )( ( DestP - DestPitch )[ 1 ] ) ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - DestPitch )[ 0 ] ) ) ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + } + } + break ; + + case 3 : + if( i == 0 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 1 ] ; + DestP[ 0 ] = SrcP[ 2 ] ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + + SrcP += 3 ; + DestP += 4 ; + for( j = 1 ; j < Width ; j ++, SrcP += 3, DestP += 4 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - 4 )[ 2 ] / 2 ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( DestP - 4 )[ 1 ] / 2 ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( DestP - 4 )[ 0 ] / 2 ) ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + } + } + else + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - DestPitch )[ 2 ] ) / 2 ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( ( DestP - DestPitch )[ 1 ] ) / 2 ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + + SrcP += 3 ; + DestP += 4 ; + for( j = 1 ; j < Width ; j ++, SrcP += 3, DestP += 4 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - 4 )[ 2 ] + ( DestP - DestPitch )[ 2 ] ) / 2 ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( ( DestP - 4 )[ 1 ] + ( DestP - DestPitch )[ 1 ] ) / 2 ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( ( DestP - 4 )[ 0 ] + ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + } + } + break ; + + case 4 : + if( i == 0 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 1 ] ; + DestP[ 0 ] = SrcP[ 2 ] ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + + SrcP += 3 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 3, DestP += 4 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 4 )[ 2 ] ) ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( int )( ( DestP - 4 )[ 1 ] ) ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - 4 )[ 0 ] ) ) ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + } + } + else + { + int left, up, upleft, abs_up_upleft, abs_left_upleft, left_upleft, up_upleft, abs_up_upleft_left_upleft, result ; + + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - DestPitch )[ 2 ] ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( DestP - DestPitch )[ 1 ] ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( DestP - DestPitch )[ 0 ] ) ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + SrcP += 3 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 3, DestP += 4 ) + { + BYTE *UpP = DestP - DestPitch ; + BYTE *UpLeftP = DestP - DestPitch - 4 ; + BYTE *LeftP = DestP - 4 ; + PAETH_CODE( 2 ) DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + result ) ; + PAETH_CODE( 1 ) DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + result ) ; + PAETH_CODE( 0 ) DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + result ) ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + } + } + break ; + } + } + } + else + if( BitDepth == 16 ) + { + for( i = 0 ; i < Height ; i ++, SrcP += SrcAddPitch, DestP += DestAddPitch ) + { + switch( SrcP[ -1 ] ) + { + case 0 : + for( j = 0 ; j < Width ; j ++, SrcP += 6, DestP += 4 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 2 ] ; + DestP[ 0 ] = SrcP[ 4 ] ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + } + break ; + + case 1 : + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 2 ] ; + DestP[ 0 ] = SrcP[ 4 ] ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + + SrcP += 6 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 6, DestP += 4 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 4 )[ 2 ] ) ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - 4 )[ 1 ] ) ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( int )( ( DestP - 4 )[ 0 ] ) ) ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + } + break ; + + case 2 : + if( i == 0 ) + { + for( j = 0 ; j < Width ; j ++, SrcP += 6, DestP += 4 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 2 ] ; + DestP[ 0 ] = SrcP[ 4 ] ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + } + } + else + { + for( j = 0 ; j < Width ; j ++, SrcP += 6, DestP += 4 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - DestPitch )[ 2 ] ) ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - DestPitch )[ 1 ] ) ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( int )( ( DestP - DestPitch )[ 0 ] ) ) ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + } + } + break ; + + case 3 : + if( i == 0 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 2 ] ; + DestP[ 0 ] = SrcP[ 4 ] ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + + SrcP += 6 ; + DestP += 4 ; + for( j = 1 ; j < Width ; j ++, SrcP += 6, DestP += 4 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - 4 )[ 2 ] / 2 ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( DestP - 4 )[ 1 ] / 2 ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( DestP - 4 )[ 0 ] / 2 ) ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + } + } + else + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - DestPitch )[ 2 ] ) / 2 ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( ( DestP - DestPitch )[ 1 ] ) / 2 ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + + SrcP += 6 ; + DestP += 4 ; + for( j = 1 ; j < Width ; j ++, SrcP += 6, DestP += 4 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - 4 )[ 2 ] + ( DestP - DestPitch )[ 2 ] ) / 2 ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( ( DestP - 4 )[ 1 ] + ( DestP - DestPitch )[ 1 ] ) / 2 ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( ( DestP - 4 )[ 0 ] + ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + } + } + break ; + + case 4 : + if( i == 0 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 2 ] ; + DestP[ 0 ] = SrcP[ 4 ] ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + + SrcP += 6 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 6, DestP += 4 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 4 )[ 2 ] ) ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - 4 )[ 1 ] ) ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( int )( ( DestP - 4 )[ 0 ] ) ) ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + } + } + else + { + int left, up, upleft, abs_up_upleft, abs_left_upleft, left_upleft, up_upleft, abs_up_upleft_left_upleft, result ; + + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - DestPitch )[ 2 ] ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( DestP - DestPitch )[ 1 ] ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( DestP - DestPitch )[ 0 ] ) ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + SrcP += 6 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 6, DestP += 4 ) + { + BYTE *UpP = DestP - DestPitch ; + BYTE *UpLeftP = DestP - DestPitch - 4 ; + BYTE *LeftP = DestP - 4 ; + PAETH_CODE( 2 ) DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + result ) ; + PAETH_CODE( 1 ) DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + result ) ; + PAETH_CODE( 0 ) DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + result ) ; + if( DestP[ 2 ] == tr && + DestP[ 1 ] == tg && + DestP[ 0 ] == tb ) + { + DestP[ 3 ] = 0 ; + } + else + { + DestP[ 3 ] = 255 ; + } + } + } + break ; + } + } + } + } + else + { + if( BitDepth == 8 ) + { + for( i = 0 ; i < Height ; i ++, SrcP += SrcAddPitch, DestP += DestAddPitch ) + { + switch( SrcP[ -1 ] ) + { + case 0 : + for( j = 0 ; j < Width ; j ++, SrcP += 3, DestP += 3 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 1 ] ; + DestP[ 0 ] = SrcP[ 2 ] ; + } + break ; + + case 1 : + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 1 ] ; + DestP[ 0 ] = SrcP[ 2 ] ; + + SrcP += 3 ; + DestP += 3 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 3, DestP += 3 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 3 )[ 2 ] ) ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( int )( ( DestP - 3 )[ 1 ] ) ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - 3 )[ 0 ] ) ) ; + } + break ; + + case 2 : + if( i == 0 ) + { + for( j = 0 ; j < Width ; j ++, SrcP += 3, DestP += 3 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 1 ] ; + DestP[ 0 ] = SrcP[ 2 ] ; + } + } + else + { + for( j = 0 ; j < Width ; j ++, SrcP += 3, DestP += 3 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - DestPitch )[ 2 ] ) ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( int )( ( DestP - DestPitch )[ 1 ] ) ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - DestPitch )[ 0 ] ) ) ; + } + } + break ; + + case 3 : + if( i == 0 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 1 ] ; + DestP[ 0 ] = SrcP[ 2 ] ; + + SrcP += 3 ; + DestP += 3 ; + for( j = 1 ; j < Width ; j ++, SrcP += 3, DestP += 3 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - 3 )[ 2 ] / 2 ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( DestP - 3 )[ 1 ] / 2 ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( DestP - 3 )[ 0 ] / 2 ) ; + } + } + else + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - DestPitch )[ 2 ] ) / 2 ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( ( DestP - DestPitch )[ 1 ] ) / 2 ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + + SrcP += 3 ; + DestP += 3 ; + for( j = 1 ; j < Width ; j ++, SrcP += 3, DestP += 3 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - 3 )[ 2 ] + ( DestP - DestPitch )[ 2 ] ) / 2 ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( ( DestP - 3 )[ 1 ] + ( DestP - DestPitch )[ 1 ] ) / 2 ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( ( DestP - 3 )[ 0 ] + ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + } + } + break ; + + case 4 : + if( i == 0 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 1 ] ; + DestP[ 0 ] = SrcP[ 2 ] ; + + SrcP += 3 ; + DestP += 3 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 3, DestP += 3 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 3 )[ 2 ] ) ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( int )( ( DestP - 3 )[ 1 ] ) ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - 3 )[ 0 ] ) ) ; + } + } + else + { + int left, up, upleft, abs_up_upleft, abs_left_upleft, left_upleft, up_upleft, abs_up_upleft_left_upleft, result ; + + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - DestPitch )[ 2 ] ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( DestP - DestPitch )[ 1 ] ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( DestP - DestPitch )[ 0 ] ) ; + SrcP += 3 ; + DestP += 3 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 3, DestP += 3 ) + { + BYTE *UpP = DestP - DestPitch ; + BYTE *UpLeftP = DestP - DestPitch - 3 ; + BYTE *LeftP = DestP - 3 ; + PAETH_CODE( 2 ) DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + result ) ; + PAETH_CODE( 1 ) DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + result ) ; + PAETH_CODE( 0 ) DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + result ) ; + } + } + break ; + } + } + } + else + if( BitDepth == 16 ) + { + for( i = 0 ; i < Height ; i ++, SrcP += SrcAddPitch, DestP += DestAddPitch ) + { + switch( SrcP[ -1 ] ) + { + case 0 : + for( j = 0 ; j < Width ; j ++, SrcP += 6, DestP += 3 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 2 ] ; + DestP[ 0 ] = SrcP[ 4 ] ; + } + break ; + + case 1 : + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 2 ] ; + DestP[ 0 ] = SrcP[ 4 ] ; + + SrcP += 6 ; + DestP += 3 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 6, DestP += 3 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 3 )[ 2 ] ) ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - 3 )[ 1 ] ) ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( int )( ( DestP - 3 )[ 0 ] ) ) ; + } + break ; + + case 2 : + if( i == 0 ) + { + for( j = 0 ; j < Width ; j ++, SrcP += 6, DestP += 3 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 2 ] ; + DestP[ 0 ] = SrcP[ 4 ] ; + } + } + else + { + for( j = 0 ; j < Width ; j ++, SrcP += 6, DestP += 3 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - DestPitch )[ 2 ] ) ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - DestPitch )[ 1 ] ) ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( int )( ( DestP - DestPitch )[ 0 ] ) ) ; + } + } + break ; + + case 3 : + if( i == 0 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 2 ] ; + DestP[ 0 ] = SrcP[ 4 ] ; + + SrcP += 6 ; + DestP += 3 ; + for( j = 1 ; j < Width ; j ++, SrcP += 6, DestP += 3 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - 3 )[ 2 ] / 2 ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( DestP - 3 )[ 1 ] / 2 ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( DestP - 3 )[ 0 ] / 2 ) ; + } + } + else + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - DestPitch )[ 2 ] ) / 2 ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( ( DestP - DestPitch )[ 1 ] ) / 2 ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + + SrcP += 6 ; + DestP += 3 ; + for( j = 1 ; j < Width ; j ++, SrcP += 6, DestP += 3 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - 3 )[ 2 ] + ( DestP - DestPitch )[ 2 ] ) / 2 ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( ( DestP - 3 )[ 1 ] + ( DestP - DestPitch )[ 1 ] ) / 2 ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( ( DestP - 3 )[ 0 ] + ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + } + } + break ; + + case 4 : + if( i == 0 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 2 ] ; + DestP[ 0 ] = SrcP[ 4 ] ; + + SrcP += 6 ; + DestP += 3 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 6, DestP += 3 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 3 )[ 2 ] ) ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - 3 )[ 1 ] ) ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( int )( ( DestP - 3 )[ 0 ] ) ) ; + } + } + else + { + int left, up, upleft, abs_up_upleft, abs_left_upleft, left_upleft, up_upleft, abs_up_upleft_left_upleft, result ; + + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - DestPitch )[ 2 ] ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( DestP - DestPitch )[ 1 ] ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( DestP - DestPitch )[ 0 ] ) ; + SrcP += 6 ; + DestP += 3 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 6, DestP += 3 ) + { + BYTE *UpP = DestP - DestPitch ; + BYTE *UpLeftP = DestP - DestPitch - 3 ; + BYTE *LeftP = DestP - 3 ; + PAETH_CODE( 2 ) DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + result ) ; + PAETH_CODE( 1 ) DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + result ) ; + PAETH_CODE( 0 ) DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + result ) ; + } + } + break ; + } + } + } + } + break ; + + case 4 : // GRAY + A + if( BitDepth == 8 ) + { + for( i = 0 ; i < Height ; i ++, SrcP += SrcAddPitch, DestP += DestAddPitch ) + { + switch( SrcP[ -1 ] ) + { + case 0 : + for( j = 0 ; j < Width ; j ++, SrcP += 2, DestP += 4 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 0 ] ; + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 3 ] = SrcP[ 1 ] ; + } + break ; + + case 1 : + DestP[ 0 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 0 ] ; + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 3 ] = SrcP[ 1 ] ; + + SrcP += 2 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 2, DestP += 4 ) + { + DestP[ 2 ] = DestP[ 1 ] = DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 4 )[ 0 ] ) ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( int )( ( DestP - 4 )[ 3 ] ) ) ; + } + break ; + + case 2 : + if( i == 0 ) + { + for( j = 0 ; j < Width ; j ++, SrcP += 2, DestP += 4 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 0 ] ; + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 3 ] = SrcP[ 1 ] ; + } + } + else + { + for( j = 0 ; j < Width ; j ++, SrcP += 2, DestP += 4 ) + { + DestP[ 2 ] = DestP[ 1 ] = DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - DestPitch )[ 0 ] ) ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( int )( ( DestP - DestPitch )[ 3 ] ) ) ; + } + } + break ; + + case 3 : + if( i == 0 ) + { + DestP[ 2 ] = DestP[ 1 ] = DestP[ 0 ] = SrcP[ 0 ] ; + DestP[ 3 ] = SrcP[ 1 ] ; + + SrcP += 2 ; + DestP += 4 ; + for( j = 1 ; j < Width ; j ++, SrcP += 2, DestP += 4 ) + { + DestP[ 2 ] = DestP[ 1 ] = DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - 4 )[ 0 ] / 2 ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( DestP - 4 )[ 3 ] / 2 ) ; + } + } + else + { + DestP[ 2 ] = DestP[ 1 ] = DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( ( DestP - DestPitch )[ 3 ] ) / 2 ) ; + + SrcP += 2 ; + DestP += 4 ; + for( j = 1 ; j < Width ; j ++, SrcP += 2, DestP += 4 ) + { + DestP[ 2 ] = DestP[ 1 ] = DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - 4 )[ 0 ] + ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( ( DestP - 4 )[ 3 ] + ( DestP - DestPitch )[ 3 ] ) / 2 ) ; + } + } + break ; + + case 4 : + if( i == 0 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 0 ] ; + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 3 ] = SrcP[ 1 ] ; + + SrcP += 2 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 2, DestP += 4 ) + { + DestP[ 2 ] = DestP[ 1 ] = DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 4 )[ 0 ] ) ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( int )( ( DestP - 4 )[ 3 ] ) ) ; + } + } + else + { + int left, up, upleft, abs_up_upleft, abs_left_upleft, left_upleft, up_upleft, abs_up_upleft_left_upleft, result ; + + DestP[ 2 ] = DestP[ 1 ] = DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - DestPitch )[ 0 ] ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( DestP - DestPitch )[ 3 ] ) ; + SrcP += 2 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 2, DestP += 4 ) + { + BYTE *UpP = DestP - DestPitch ; + BYTE *UpLeftP = DestP - DestPitch - 4 ; + BYTE *LeftP = DestP - 4 ; + { + PAETH_CODE( 0 ) + + DestP[ 2 ] = DestP[ 1 ] = DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + result ) ; + } + { + PAETH_CODE( 3 ) + + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 1 ] + result ) ; + } + } + } + break ; + } + } + } + else + if( BitDepth == 16 ) + { + for( i = 0 ; i < Height ; i ++, SrcP += SrcAddPitch, DestP += DestAddPitch ) + { + switch( SrcP[ -1 ] ) + { + case 0 : + for( j = 0 ; j < Width ; j ++, SrcP += 4, DestP += 4 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 0 ] ; + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 3 ] = SrcP[ 2 ] ; + } + break ; + + case 1 : + DestP[ 0 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 0 ] ; + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 3 ] = SrcP[ 2 ] ; + + SrcP += 4 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 4, DestP += 4 ) + { + DestP[ 2 ] = DestP[ 1 ] = DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 4 )[ 0 ] ) ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - 4 )[ 3 ] ) ) ; + } + break ; + + case 2 : + if( i == 0 ) + { + for( j = 0 ; j < Width ; j ++, SrcP += 4, DestP += 4 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 0 ] ; + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 3 ] = SrcP[ 2 ] ; + } + } + else + { + for( j = 0 ; j < Width ; j ++, SrcP += 4, DestP += 4 ) + { + DestP[ 2 ] = DestP[ 1 ] = DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - DestPitch )[ 0 ] ) ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - DestPitch )[ 3 ] ) ) ; + } + } + break ; + + case 3 : + if( i == 0 ) + { + DestP[ 2 ] = DestP[ 1 ] = DestP[ 0 ] = SrcP[ 0 ] ; + DestP[ 3 ] = SrcP[ 2 ] ; + + SrcP += 4 ; + DestP += 4 ; + for( j = 1 ; j < Width ; j ++, SrcP += 4, DestP += 4 ) + { + DestP[ 2 ] = DestP[ 1 ] = DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - 4 )[ 0 ] / 2 ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( DestP - 4 )[ 3 ] / 2 ) ; + } + } + else + { + DestP[ 2 ] = DestP[ 1 ] = DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( ( DestP - DestPitch )[ 3 ] ) / 2 ) ; + + SrcP += 4 ; + DestP += 4 ; + for( j = 1 ; j < Width ; j ++, SrcP += 4, DestP += 4 ) + { + DestP[ 2 ] = DestP[ 1 ] = DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - 4 )[ 0 ] + ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( ( DestP - 4 )[ 3 ] + ( DestP - DestPitch )[ 3 ] ) / 2 ) ; + } + } + break ; + + case 4 : + if( i == 0 ) + { + DestP[ 0 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 0 ] ; + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 3 ] = SrcP[ 2 ] ; + + SrcP += 4 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 4, DestP += 4 ) + { + DestP[ 2 ] = DestP[ 1 ] = DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 4 )[ 0 ] ) ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - 4 )[ 3 ] ) ) ; + } + } + else + { + int left, up, upleft, abs_up_upleft, abs_left_upleft, left_upleft, up_upleft, abs_up_upleft_left_upleft, result ; + + DestP[ 2 ] = DestP[ 1 ] = DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - DestPitch )[ 0 ] ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( DestP - DestPitch )[ 3 ] ) ; + SrcP += 4 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 4, DestP += 4 ) + { + BYTE *UpP = DestP - DestPitch ; + BYTE *UpLeftP = DestP - DestPitch - 4 ; + BYTE *LeftP = DestP - 4 ; + { + PAETH_CODE( 0 ) + + DestP[ 2 ] = DestP[ 1 ] = DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 0 ] + result ) ; + } + { + PAETH_CODE( 3 ) + + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 2 ] + result ) ; + } + } + } + break ; + } + } + } + break ; + + case 6 : // RGBA + if( BitDepth == 8 ) + { + for( i = 0 ; i < Height ; i ++, SrcP += SrcAddPitch, DestP += DestAddPitch ) + { + switch( SrcP[ -1 ] ) + { + case 0 : + for( j = 0 ; j < Width ; j ++, SrcP += 4, DestP += 4 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 1 ] ; + DestP[ 0 ] = SrcP[ 2 ] ; + DestP[ 3 ] = SrcP[ 3 ] ; + } + break ; + + case 1 : + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 1 ] ; + DestP[ 0 ] = SrcP[ 2 ] ; + DestP[ 3 ] = SrcP[ 3 ] ; + + SrcP += 4 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 4, DestP += 4 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 4 )[ 2 ] ) ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( int )( ( DestP - 4 )[ 1 ] ) ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - 4 )[ 0 ] ) ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 3 ] + ( int )( ( DestP - 4 )[ 3 ] ) ) ; + } + break ; + + case 2 : + if( i == 0 ) + { + for( j = 0 ; j < Width ; j ++, SrcP += 4, DestP += 4 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 1 ] ; + DestP[ 0 ] = SrcP[ 2 ] ; + DestP[ 3 ] = SrcP[ 3 ] ; + } + } + else + { + for( j = 0 ; j < Width ; j ++, SrcP += 4, DestP += 4 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - DestPitch )[ 2 ] ) ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( int )( ( DestP - DestPitch )[ 1 ] ) ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - DestPitch )[ 0 ] ) ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 3 ] + ( int )( ( DestP - DestPitch )[ 3 ] ) ) ; + } + } + break ; + + case 3 : + if( i == 0 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 1 ] ; + DestP[ 0 ] = SrcP[ 2 ] ; + DestP[ 3 ] = SrcP[ 3 ] ; + + SrcP += 4 ; + DestP += 4 ; + for( j = 1 ; j < Width ; j ++, SrcP += 4, DestP += 4 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - 4 )[ 2 ] ) / 2 ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( ( DestP - 4 )[ 1 ] ) / 2 ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( ( DestP - 4 )[ 0 ] ) / 2 ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 3 ] + ( ( DestP - 4 )[ 3 ] ) / 2 ) ; + } + } + else + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - DestPitch )[ 2 ] ) / 2 ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( ( DestP - DestPitch )[ 1 ] ) / 2 ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 3 ] + ( ( DestP - DestPitch )[ 3 ] ) / 2 ) ; + + SrcP += 4 ; + DestP += 4 ; + for( j = 1 ; j < Width ; j ++, SrcP += 4, DestP += 4 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - 4 )[ 2 ] + ( DestP - DestPitch )[ 2 ] ) / 2 ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( ( DestP - 4 )[ 1 ] + ( DestP - DestPitch )[ 1 ] ) / 2 ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( ( DestP - 4 )[ 0 ] + ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 3 ] + ( ( DestP - 4 )[ 3 ] + ( DestP - DestPitch )[ 3 ] ) / 2 ) ; + } + } + break ; + + case 4 : + if( i == 0 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 1 ] ; + DestP[ 0 ] = SrcP[ 2 ] ; + DestP[ 3 ] = SrcP[ 3 ] ; + + SrcP += 4 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 4, DestP += 4 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 4 )[ 2 ] ) ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( int )( ( DestP - 4 )[ 1 ] ) ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - 4 )[ 0 ] ) ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 3 ] + ( int )( ( DestP - 4 )[ 3 ] ) ) ; + } + } + else + { + int left, up, upleft, abs_up_upleft, abs_left_upleft, left_upleft, up_upleft, abs_up_upleft_left_upleft, result ; + + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - DestPitch )[ 2 ] ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + ( DestP - DestPitch )[ 1 ] ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( DestP - DestPitch )[ 0 ] ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 3 ] + ( DestP - DestPitch )[ 3 ] ) ; + SrcP += 4 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 4, DestP += 4 ) + { + BYTE *UpP = DestP - DestPitch ; + BYTE *UpLeftP = DestP - DestPitch - 4 ; + BYTE *LeftP = DestP - 4 ; + PAETH_CODE( 2 ) DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + result ) ; + PAETH_CODE( 1 ) DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 1 ] + result ) ; + PAETH_CODE( 0 ) DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 2 ] + result ) ; + PAETH_CODE( 3 ) DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 3 ] + result ) ; + } + } + break ; + } + } + } + else + if( BitDepth == 16 ) + { + for( i = 0 ; i < Height ; i ++, SrcP += SrcAddPitch, DestP += DestAddPitch ) + { + switch( SrcP[ -1 ] ) + { + case 0 : + for( j = 0 ; j < Width ; j ++, SrcP += 8, DestP += 4 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 2 ] ; + DestP[ 0 ] = SrcP[ 4 ] ; + DestP[ 3 ] = SrcP[ 6 ] ; + } + break ; + + case 1 : + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 2 ] ; + DestP[ 0 ] = SrcP[ 4 ] ; + DestP[ 3 ] = SrcP[ 6 ] ; + + SrcP += 8 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 8, DestP += 4 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 4 )[ 2 ] ) ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - 4 )[ 1 ] ) ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( int )( ( DestP - 4 )[ 0 ] ) ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 6 ] + ( int )( ( DestP - 4 )[ 3 ] ) ) ; + } + break ; + + case 2 : + if( i == 0 ) + { + for( j = 0 ; j < Width ; j ++, SrcP += 8, DestP += 4 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 2 ] ; + DestP[ 0 ] = SrcP[ 4 ] ; + DestP[ 3 ] = SrcP[ 6 ] ; + } + } + else + { + for( j = 0 ; j < Width ; j ++, SrcP += 8, DestP += 4 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - DestPitch )[ 2 ] ) ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - DestPitch )[ 1 ] ) ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( int )( ( DestP - DestPitch )[ 0 ] ) ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 6 ] + ( int )( ( DestP - DestPitch )[ 3 ] ) ) ; + } + } + break ; + + case 3 : + if( i == 0 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 2 ] ; + DestP[ 0 ] = SrcP[ 4 ] ; + DestP[ 3 ] = SrcP[ 6 ] ; + + SrcP += 8 ; + DestP += 4 ; + for( j = 1 ; j < Width ; j ++, SrcP += 8, DestP += 4 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - 4 )[ 2 ] / 2 ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( DestP - 4 )[ 1 ] / 2 ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( DestP - 4 )[ 0 ] / 2 ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 6 ] + ( DestP - 4 )[ 3 ] / 2 ) ; + } + } + else + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - DestPitch )[ 2 ] ) / 2 ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( ( DestP - DestPitch )[ 1 ] ) / 2 ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 6 ] + ( ( DestP - DestPitch )[ 3 ] ) / 2 ) ; + + SrcP += 8 ; + DestP += 4 ; + for( j = 1 ; j < Width ; j ++, SrcP += 8, DestP += 4 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( ( DestP - 4 )[ 2 ] + ( DestP - DestPitch )[ 2 ] ) / 2 ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( ( DestP - 4 )[ 1 ] + ( DestP - DestPitch )[ 1 ] ) / 2 ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( ( DestP - 4 )[ 0 ] + ( DestP - DestPitch )[ 0 ] ) / 2 ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 6 ] + ( ( DestP - 4 )[ 3 ] + ( DestP - DestPitch )[ 3 ] ) / 2 ) ; + } + } + break ; + + case 4 : + if( i == 0 ) + { + DestP[ 2 ] = SrcP[ 0 ] ; + DestP[ 1 ] = SrcP[ 2 ] ; + DestP[ 0 ] = SrcP[ 4 ] ; + DestP[ 3 ] = SrcP[ 6 ] ; + + SrcP += 8 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 8, DestP += 4 ) + { + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( int )( ( DestP - 4 )[ 2 ] ) ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( int )( ( DestP - 4 )[ 1 ] ) ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( int )( ( DestP - 4 )[ 0 ] ) ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 6 ] + ( int )( ( DestP - 4 )[ 3 ] ) ) ; + } + } + else + { + int left, up, upleft, abs_up_upleft, abs_left_upleft, left_upleft, up_upleft, abs_up_upleft_left_upleft, result ; + + DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + ( DestP - DestPitch )[ 2 ] ) ; + DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + ( DestP - DestPitch )[ 1 ] ) ; + DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + ( DestP - DestPitch )[ 0 ] ) ; + DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 6 ] + ( DestP - DestPitch )[ 3 ] ) ; + SrcP += 8 ; + DestP += 4 ; + + for( j = 1 ; j < Width ; j ++, SrcP += 8, DestP += 4 ) + { + BYTE *UpP = DestP - DestPitch ; + BYTE *UpLeftP = DestP - DestPitch - 4 ; + BYTE *LeftP = DestP - 4 ; + PAETH_CODE( 2 ) DestP[ 2 ] = ( BYTE )( ( int )SrcP[ 0 ] + result ) ; + PAETH_CODE( 1 ) DestP[ 1 ] = ( BYTE )( ( int )SrcP[ 2 ] + result ) ; + PAETH_CODE( 0 ) DestP[ 0 ] = ( BYTE )( ( int )SrcP[ 4 ] + result ) ; + PAETH_CODE( 3 ) DestP[ 3 ] = ( BYTE )( ( int )SrcP[ 6 ] + result ) ; + } + } + break ; + } + } + } + break ; + } + } + + if( FilterImage != NULL ) + { + DXFREE( FilterImage ) ; + FilterImage = NULL ; + } + } + + return 0 ; + +ERR : + if( ZStreamInit ) + { + inflateEnd( &ZStream ) ; + _MEMSET( &ZStream, 0, sizeof( ZStream ) ) ; + ZStreamInit = 0 ; + } + + if( FilterImage != NULL ) + { + DXFREE( FilterImage ) ; + FilterImage = NULL ; + } + + if( BaseImage->GraphData != NULL ) + { + DXFREE( BaseImage->GraphData ) ; + BaseImage->GraphData = NULL ; + } + + return -1 ; +} +#undef PAETH_CODE +#undef READ_4BYTE + + #ifndef DX_NON_SAVEFUNCTION static void png_general_flush( png_structp /* png_ptr */ ) @@ -905,7 +3486,7 @@ extern int SaveBaseImageToPngBase( const char *pFilePathW, const char *pFilePath DWORD_PTR fp ; png_structp png_ptr; png_infop info_ptr; - png_bytepp buffer; + png_bytepp buffer = NULL ; png_bytep sample; int r, g, b, a, i, j; @@ -1047,7 +3628,6 @@ extern int SaveBaseImageToPngBase( const char *pFilePathW, const char *pFilePath #ifndef DX_NON_JPEGREAD // (殆ど jdatasrc.c の流用) -#include "jinclude.h" #include "jpeglib.h" #include "jerror.h" @@ -1169,11 +3749,11 @@ jpeg_general_src (j_decompress_ptr cinfo, STREAMDATA *Data ) /* first time for this JPEG object? */ cinfo->src = (struct jpeg_source_mgr *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, - SIZEOF(my_source_general_mgr)); + sizeof(my_source_general_mgr)); src = (my_src_general_ptr) cinfo->src; src->buffer = (JOCTET *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, - INPUT_BUF_SIZE * SIZEOF(JOCTET)); + INPUT_BUF_SIZE * sizeof(JOCTET)); } // 関数ポインタなどをセットする @@ -1216,7 +3796,7 @@ extern int LoadJpegImageBase( STREAMDATA *Src, BASEIMAGE *BaseImage, int GetForm unsigned char *pImg ; unsigned int OutPitch ; unsigned char Check ; - unsigned int PixelByte ; + unsigned int PixelByte = 0 ; // 先頭の1バイトが 0xFF ではなかったらJPEGファイルではない STREAD( &Check, 1, 1, Src ) ; @@ -1323,30 +3903,36 @@ extern int LoadJpegImageBase( STREAMDATA *Src, BASEIMAGE *BaseImage, int GetForm (void) jpeg_read_scanlines(&cinfo, buffer, 1); // データを出力データに変換して、またはそのまま転送 - for( i = 0 ; i < InPitch ; ) + switch( cinfo.output_components ) { - switch( cinfo.output_components ) + case 1 : // グレースケール + for( i = 0 ; i < InPitch ; ) { - case 1 : // グレースケール *pImg = *( buffer[0] + i ) ; pImg ++ ; i ++ ; - break ; + } + break ; - case 3 : // RGB + case 3 : // RGB + for( i = 0 ; i < InPitch ; ) + { *pImg = *( buffer[0] + i + 2 ) ; pImg ++ ; *pImg = *( buffer[0] + i + 1 ) ; pImg ++ ; *pImg = *( buffer[0] + i ) ; pImg ++ ; i += 3 ; - break ; + } + break ; - case 4 : // CMYK? + case 4 : // CMYK? + for( i = 0 ; i < InPitch ; ) + { pImg[ 0 ] = ( unsigned char )( *( buffer[0] + i + 2 ) * *( buffer[0] + i + 3 ) / 255 ) ; pImg[ 1 ] = ( unsigned char )( *( buffer[0] + i + 1 ) * *( buffer[0] + i + 3 ) / 255 ) ; pImg[ 2 ] = ( unsigned char )( *( buffer[0] + i + 0 ) * *( buffer[0] + i + 3 ) / 255 ) ; pImg += 3 ; i += 4 ; - break ; } + break ; } } @@ -1411,7 +3997,7 @@ init_destination_general (j_compress_ptr cinfo) /* Allocate the output buffer --- it will be released when done with image */ dest->buffer = (JOCTET *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - OUTPUT_BUF_SIZE * SIZEOF(JOCTET)); + OUTPUT_BUF_SIZE * sizeof(JOCTET)); dest->pub.next_output_byte = dest->buffer; dest->pub.free_in_buffer = OUTPUT_BUF_SIZE; @@ -1456,7 +4042,7 @@ jpeg_general_dest (j_compress_ptr cinfo, DWORD_PTR outfile) if (cinfo->dest == NULL) { /* first time for this JPEG object? */ cinfo->dest = (struct jpeg_destination_mgr *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, - SIZEOF(my_destination_mgr)); + sizeof(my_destination_mgr)); } dest = (my_dest_ptr) cinfo->dest; diff --git a/DxUseCLib.h b/DxUseCLib.h index dffeb2a..568d984 100644 --- a/DxUseCLib.h +++ b/DxUseCLib.h @@ -2,7 +2,7 @@ // // DXライブラリ 標準Cライブラリ使用プログラムヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -81,7 +81,8 @@ extern unsigned int randMTData( MERSENNE_TWISTER_DATA *MTData ) ; extern int LoadTiffImage( STREAMDATA *Src, BASEIMAGE *BaseImage, int GetFormatOnly ) ; // TIFF画像の読みこみ #endif #ifndef DX_NON_PNGREAD -extern int LoadPngImage( STREAMDATA *Src, BASEIMAGE *BaseImage, int GetFormatOnly ) ; // PNG画像の読みこみ +extern int LoadPngImage( STREAMDATA *Src, BASEIMAGE *BaseImage, int GetFormatOnly ) ; // PNG画像の読みこみ +extern int LoadPngImage_Fast( STREAMDATA *Src, BASEIMAGE *BaseImage, int GetFormatOnly ) ; // PNG画像の読みこみ( 少し高速版 ) #ifndef DX_NON_SAVEFUNCTION extern int SaveBaseImageToPngBase( const char *FilePathW, const char *FilePathA, BASEIMAGE *BaseImage, int CompressionLevel ) ; // 基本画像データをPNG画像として保存する #endif diff --git a/DxUseCLibLive2DCubism4.cpp b/DxUseCLibLive2DCubism4.cpp index 73a6de9..5f4c51d 100644 --- a/DxUseCLibLive2DCubism4.cpp +++ b/DxUseCLibLive2DCubism4.cpp @@ -2,7 +2,7 @@ // // DXライブラリ 標準Cライブラリ使用コード Live2D Cubism4 関係 // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -98,6 +98,28 @@ const int VertexStep = 2; const D_CubismMotionQueueEntryHandle InvalidMotionQueueEntryHandleValue = ( D_CubismMotionQueueEntryHandle * )( -1 ) ; +int Live2D_VertexShaderToDxLibShader_Table[ 7 ] = +{ + DX_LIVE2D_SHADER_SETUP_MASK_VERTEX, // D_ShaderNames_SetupMask = 0, + DX_LIVE2D_SHADER_NORMAL_VERTEX, // D_ShaderNames_Normal = 1, + DX_LIVE2D_SHADER_NORMAL_VERTEX_MASKED, // D_ShaderNames_NormalMasked = 2, + DX_LIVE2D_SHADER_NORMAL_VERTEX_MASKED, // D_ShaderNames_NormalMaskedInverted = 3, + DX_LIVE2D_SHADER_NORMAL_VERTEX, // D_ShaderNames_NormalPremultipliedAlpha = 4, + DX_LIVE2D_SHADER_NORMAL_VERTEX_MASKED, // D_ShaderNames_NormalMaskedPremultipliedAlpha = 5, + DX_LIVE2D_SHADER_NORMAL_VERTEX_MASKED, // D_ShaderNames_NormalMaskedInvertedPremultipliedAlpha = 6, +} ; + +int Live2D_PixelShaderToDxLibShader_Table[ 7 ] = +{ + DX_LIVE2D_SHADER_SETUP_MASK_PIXEL, // D_ShaderNames_SetupMask = 0, + DX_LIVE2D_SHADER_NORMAL_PIXEL, // D_ShaderNames_Normal = 1, + DX_LIVE2D_SHADER_NORMAL_PIXEL_MASKED, // D_ShaderNames_NormalMasked = 2, + DX_LIVE2D_SHADER_NORMAL_PIXEL_MASKED_INVERTED, // D_ShaderNames_NormalMaskedInverted = 3, + DX_LIVE2D_SHADER_NORMAL_PIXEL_PREMULALPHA, // D_ShaderNames_NormalPremultipliedAlpha = 4, + DX_LIVE2D_SHADER_NORMAL_PIXEL_MASKED_PREMULALPHA, // D_ShaderNames_NormalMaskedPremultipliedAlpha = 5, + DX_LIVE2D_SHADER_NORMAL_PIXEL_MASKED_INVERTEX_PREMULALPHA, // D_ShaderNames_NormalMaskedInvertedPremultipliedAlpha = 6, +} ; + // 関数プロトタイプ宣言 ---------------------------------------------------------- // プログラム -------------------------------------------------------------------- @@ -3380,6 +3402,24 @@ float D_CubismModel::GetCanvasHeight() const return tmpSizeInPixels.Y / tmpPixelsPerUnit; } +// キャンバスの情報を取得する +void D_CubismModel::GetCanvasInfo( D_CubismVector2 *SizeInPixels, D_CubismVector2 *OriginInPixels, float *PixelsPerUnit ) +{ + if( _model == NULL ) + { + return; + } + + D_CubismVector2 tmpSizeInPixels; + D_CubismVector2 tmpOriginInPixels; + float tmpPixelsPerUnit; + + CALL_csmReadCanvasInfo( ( _model, &tmpSizeInPixels, &tmpOriginInPixels, &tmpPixelsPerUnit ) ); + if( SizeInPixels != NULL ) *SizeInPixels = tmpSizeInPixels ; + if( OriginInPixels != NULL ) *OriginInPixels = tmpOriginInPixels ; + if( PixelsPerUnit != NULL ) *PixelsPerUnit = tmpPixelsPerUnit ; +} + int D_CubismModel::GetDrawableIndex( D_CubismIdHandle drawableId ) const { const int drawableCount = CALL_csmGetDrawableCount( ( _model ) ); @@ -3812,6 +3852,7 @@ void D_CubismMotionQueueEntry::SetLastCheckEventTime( float checkTime ) D_CubismMotionQueueManager::D_CubismMotionQueueManager() : _userTimeSeconds( 0.0f ) + , _motionPlayTime( 0.0f ) , _eventCallback( NULL ) , _eventCustomData( NULL ) {} @@ -3854,6 +3895,8 @@ D_CubismMotionQueueEntryHandle D_CubismMotionQueueManager::StartMotion( D_ACubis _motions.PushBack( motionQueueEntry, false ); + _motionPlayTime = 0.0f; + return motionQueueEntry->_motionQueueEntryHandle; } @@ -5369,6 +5412,7 @@ D_CubismMotionQueueEntryHandle D_CubismMotionManager::StartMotionPriority(D_ACub bool D_CubismMotionManager::UpdateMotion(D_CubismModel* model, float deltaTimeSeconds) { _userTimeSeconds += deltaTimeSeconds; + _motionPlayTime += deltaTimeSeconds; const bool updated = D_CubismMotionQueueManager::DoUpdateMotion(model, _userTimeSeconds); @@ -8353,6 +8397,12 @@ void D_CubismRenderer_DxLib::ExecuteDraw( int vertexBuffer, int indexBuffer, int return; // モデルが参照するテクスチャがバインドされていない場合は描画をスキップする } + // コールバックが設定されている場合は呼び出し + if( LIVE2DSYS.DrawUserCallback != NULL ) + { + LIVE2DSYS.DrawUserCallback( LIVE2DSYS.NowDrawLive2DModelHandle, textureNo, LIVE2DSYS.DrawUserCallbackData ) ; + } + D_CubismConstantBufferDxLib *cb = NULL ; D_CubismConstantBufferDxLib TempConstantBuffer ; if( LIVE2DSYS.EnableConstantBuffer ) @@ -11009,7 +11059,7 @@ void D_LAppModel::DoDraw() ( ( D_CubismRenderer_DxLib * )GetRenderer() )->DrawModel() ; } -void D_LAppModel::Draw( D_CubismMatrix44& matrix ) +void D_LAppModel::Draw( D_CubismMatrix44& matrix, bool isMultModelMatrix ) { D_CubismRenderer_DxLib* renderer = ( D_CubismRenderer_DxLib * )GetRenderer(); @@ -11019,7 +11069,10 @@ void D_LAppModel::Draw( D_CubismMatrix44& matrix ) } // 投影行列と乗算 - matrix.MultiplyByMatrix( _modelMatrix ); + if( isMultModelMatrix ) + { + matrix.MultiplyByMatrix( _modelMatrix ); + } renderer->SetMvpMatrix( &matrix ); diff --git a/DxUseCLibLive2DCubism4.h b/DxUseCLibLive2DCubism4.h index 6f2e229..0cde2fb 100644 --- a/DxUseCLibLive2DCubism4.h +++ b/DxUseCLibLive2DCubism4.h @@ -2,7 +2,7 @@ // // DXライブラリ 標準Cライブラリ使用コード Live2D Cubism4 関係ヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -902,6 +902,7 @@ class D_CubismModel void Update() const ; // モデルのパラメータの更新 float GetCanvasWidth() const ; // キャンバスの幅の取得 float GetCanvasHeight() const ; // キャンバスの高さの取得 + void GetCanvasInfo( D_CubismVector2 *SizeInPixels, D_CubismVector2 *OriginInPixels, float *PixelsPerUnit ) ; // キャンバスの情報を取得する int GetPartIndex( D_CubismIdHandle partId ) ; // パーツのインデックスの取得 int GetPartCount() const ; // パーツの個数の取得 void SetPartOpacity( D_CubismIdHandle partId, float opacity ) ; // パーツの不透明度の設定 @@ -1032,11 +1033,13 @@ class D_CubismMotionQueueManager void StopAllMotions() ; // すべてのモーションの停止 D_CubismMotionQueueEntry * GetCubismMotionQueueEntry( D_CubismMotionQueueEntryHandle motionQueueEntryNumber ) ; // 指定したD_CubismMotionQueueEntryの取得 void SetEventCallback( D_CubismMotionEventFunction callback, void* customData = NULL ) ; // イベントを受け取るCallbackの登録 + float GetMotionPlayTime(){ return _motionPlayTime; } protected: virtual bool DoUpdateMotion( D_CubismModel* model, float userTimeSeconds ) ; // モーションの更新 float _userTimeSeconds ; // デルタ時間の積算値[秒] + float _motionPlayTime ; // モーション再生時間 private: D_csmVector< D_CubismMotionQueueEntry * > _motions ; // モーション @@ -2221,7 +2224,7 @@ class D_LAppModel : public D_CubismUserModel bool LoadAssets( const BYTE/*wchar_t*/ * dir, const BYTE/*wchar_t*/ * fileName, int ASyncThread ) ; // model3.jsonが置かれたディレクトリとファイルパスからモデルを生成する void ReloadRenderer( int ASyncThread ) ; // レンダラを再構築する void Update( float deltaTimeSeconds ) ; // モデルの更新処理。モデルのパラメータから描画状態を決定する。 - void Draw( D_CubismMatrix44& matrix ) ; // モデルを描画する処理。モデルを描画する空間のView-Projection行列を渡す。 + void Draw( D_CubismMatrix44& matrix, bool isMultModelMatrix ) ; // モデルを描画する処理。モデルを描画する空間のView-Projection行列を渡す。 D_CubismMotionQueueEntryHandle StartMotion( const char* group, int no, int priority ) ; // 引数で指定したモーションの再生を開始する。 D_CubismMotionQueueEntryHandle StartRandomMotion( const char* group, int priority ) ; // ランダムに選ばれたモーションの再生を開始する。 void SetExpression( const BYTE/*wchar_t*/ * expressionID ) ; // 引数で指定した表情モーションをセットする @@ -2266,6 +2269,9 @@ class D_LAppModel : public D_CubismUserModel // テーブル----------------------------------------------------------------------- +extern int Live2D_VertexShaderToDxLibShader_Table[ 7 ] ; +extern int Live2D_PixelShaderToDxLibShader_Table[ 7 ] ; + // 内部大域変数宣言 -------------------------------------------------------------- // 関数プロトタイプ宣言----------------------------------------------------------- diff --git a/DxUseCLibOgg.cpp b/DxUseCLibOgg.cpp index d346231..301e75d 100644 --- a/DxUseCLibOgg.cpp +++ b/DxUseCLibOgg.cpp @@ -2,7 +2,7 @@ // // DXライブラリ 標準Cライブラリ使用コード Ogg関係 // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxUseCLibOgg.h b/DxUseCLibOgg.h index 245fcdc..cc8f821 100644 --- a/DxUseCLibOgg.h +++ b/DxUseCLibOgg.h @@ -2,7 +2,7 @@ // // DXライブラリ 標準Cライブラリ使用コード Ogg関係ヘッダファイル // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/DxUseCLibPhysics.cpp b/DxUseCLibPhysics.cpp index 1dc4aa6..9e17c76 100644 --- a/DxUseCLibPhysics.cpp +++ b/DxUseCLibPhysics.cpp @@ -2,7 +2,7 @@ // // DXライブラリ 物理演算処理 // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- From c530053357df243907bc8e27ce8e51484c899f32 Mon Sep 17 00:00:00 2001 From: DxLib Update Bot Date: Sun, 14 May 2023 13:55:22 +0900 Subject: [PATCH 2/5] [Bot] Create Patch of 3.24b (Android) --- HTML5/DxBaseFuncHTML5.cpp | 2 +- HTML5/DxBaseFuncHTML5.h | 2 +- HTML5/DxBaseImageHTML5.cpp | 2 +- HTML5/DxBaseImageHTML5.h | 2 +- HTML5/DxFileHTML5.cpp | 8 +++++--- HTML5/DxFileHTML5.h | 2 +- HTML5/DxFontHTML5.cpp | 2 +- HTML5/DxFontHTML5.h | 2 +- HTML5/DxInputHTML5.cpp | 16 +++++++++------- HTML5/DxInputHTML5.h | 13 ++++++++++++- HTML5/DxLive2DCubism4HTML5.cpp | 2 +- HTML5/DxLive2DCubism4HTML5.h | 2 +- HTML5/DxLogHTML5.cpp | 2 +- HTML5/DxLogHTML5.h | 2 +- HTML5/DxMemoryHTML5.cpp | 2 +- HTML5/DxMemoryHTML5.h | 2 +- HTML5/DxNetworkHTML5.cpp | 2 +- HTML5/DxNetworkHTML5.h | 2 +- HTML5/DxThreadHTML5.cpp | 2 +- HTML5/DxThreadHTML5.h | 2 +- HTML5/DxUseCLibOggHTML5.cpp | 2 +- HTML5/DxUseCLibOggHTML5.h | 2 +- 22 files changed, 45 insertions(+), 30 deletions(-) diff --git a/HTML5/DxBaseFuncHTML5.cpp b/HTML5/DxBaseFuncHTML5.cpp index 485ff3f..2bef605 100644 --- a/HTML5/DxBaseFuncHTML5.cpp +++ b/HTML5/DxBaseFuncHTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ讓呎コ夜未謨ー縺ョ莠呈鋤髢「謨ー繝励Ο繧ー繝ゥ繝 // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- diff --git a/HTML5/DxBaseFuncHTML5.h b/HTML5/DxBaseFuncHTML5.h index 3b7cd26..ea34da1 100644 --- a/HTML5/DxBaseFuncHTML5.h +++ b/HTML5/DxBaseFuncHTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ讓呎コ夜未謨ー縺ョ莠呈鋤髢「謨ー繝励Ο繧ー繝ゥ繝繝倥ャ繝繝輔ぃ繧、繝ォ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxBaseImageHTML5.cpp b/HTML5/DxBaseImageHTML5.cpp index fd4cfbc..6be0e50 100644 --- a/HTML5/DxBaseImageHTML5.cpp +++ b/HTML5/DxBaseImageHTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィBaseImage繝励Ο繧ー繝ゥ繝 // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- diff --git a/HTML5/DxBaseImageHTML5.h b/HTML5/DxBaseImageHTML5.h index f33c29b..a5678ca 100644 --- a/HTML5/DxBaseImageHTML5.h +++ b/HTML5/DxBaseImageHTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィBaseImage繝励Ο繧ー繝ゥ繝繝倥ャ繝繝輔ぃ繧、繝ォ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxFileHTML5.cpp b/HTML5/DxFileHTML5.cpp index 4807d8f..5816465 100644 --- a/HTML5/DxFileHTML5.cpp +++ b/HTML5/DxFileHTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ繝輔ぃ繧、繝ォ髢「菫ゅ励Ο繧ー繝ゥ繝 // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- @@ -39,12 +39,14 @@ namespace DxLib int g_EnableRootDirName = 0 ; // 霑ス蜉縺ョ繝峨Λ繧、繝門錐縺ョ謨ー -int g_AddDriveNameNum = 0 ; +int g_AddDriveNameNum = 3 ; // 霑ス蜉縺ョ繝峨Λ繧、繝門錐 const char * g_AddDriveName[ 16 ] = { - NULL + "/data/", + "/mnt/", + "/storage/", } ; // 髢「謨ー螳」險 ------------------------------------------------------------------- diff --git a/HTML5/DxFileHTML5.h b/HTML5/DxFileHTML5.h index 083b047..0a81623 100644 --- a/HTML5/DxFileHTML5.h +++ b/HTML5/DxFileHTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ繝輔ぃ繧、繝ォ髢「菫ゅ励Ο繧ー繝ゥ繝繝倥ャ繝繝輔ぃ繧、繝ォ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxFontHTML5.cpp b/HTML5/DxFontHTML5.cpp index 458bb1f..d33ddd1 100644 --- a/HTML5/DxFontHTML5.cpp +++ b/HTML5/DxFontHTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ繝輔か繝ウ繝磯未菫ゅ励Ο繧ー繝ゥ繝 // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- diff --git a/HTML5/DxFontHTML5.h b/HTML5/DxFontHTML5.h index a213d04..41c85ae 100644 --- a/HTML5/DxFontHTML5.h +++ b/HTML5/DxFontHTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ繝輔か繝ウ繝磯未菫ゅ励Ο繧ー繝ゥ繝繝倥ャ繝繝輔ぃ繧、繝ォ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxInputHTML5.cpp b/HTML5/DxInputHTML5.cpp index d87678e..9217645 100644 --- a/HTML5/DxInputHTML5.cpp +++ b/HTML5/DxInputHTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ蜈・蜉帶ュ蝣ア繝励Ο繧ー繝ゥ繝 // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- @@ -32,8 +32,6 @@ namespace DxLib // 繝槭け繝ュ螳夂セゥ------------------------------------------------------------------ -#define DEADZONE_D (0.35) -#define DEADZONE (DWORD)( DEADZONE_D * 65536 ) #define DEADZONE_XINPUT( ZONE ) (short)( 32767 * (ZONE) / 65536) #define DEADZONE_XINPUT_TRIGGER( ZONE ) (short)( 255 * (ZONE) / 65536) #define VALIDRANGE_XINPUT( ZONE ) ( 32767 - DEADZONE_XINPUT(ZONE)) @@ -206,8 +204,8 @@ extern int InitializeInputSystem_PF_Timing0( void ) // 辟。蜉ケ繧セ繝シ繝ウ縺ョ繧サ繝繝 for( i = 0 ; i < MAX_JOYPAD_NUM ; i ++ ) { - InputSysData.Pad[ i ].DeadZone = DEADZONE ; - InputSysData.Pad[ i ].DeadZoneD = DEADZONE_D ; + InputSysData.Pad[ i ].DeadZone = InputSysData.PadDefaultDeadZone ; + InputSysData.Pad[ i ].DeadZoneD = InputSysData.PadDefaultDeadZoneD ; } // 繧ュ繝シ繝懊シ繝峨→繧ク繝ァ繧、繝代ャ繝峨ョ蜈・蜉帙ョ繝繝輔か繝ォ繝医ョ蟇セ蠢懆。ィ繧定ィュ螳壹☆繧 @@ -521,10 +519,11 @@ extern int GetJoypadType_PF( int InputType ) extern int GetMouseInput_PF( void ) { int res = 0 ; + int i ; - if( InputSysData.PF.SourceNum[ HTML5_INPUT_SOURCE_MOUSE ] > 0 ) + for( i = 0 ; i < InputSysData.PF.SourceNum[ HTML5_INPUT_SOURCE_MOUSE ] ; i ++ ) { - INPUT_HTML5_DEVICE_INFO *Info = &InputSysData.PF.InputInfo[ InputSysData.PF.SourceNoToInputInfoTable[ HTML5_INPUT_SOURCE_MOUSE ][ 0 ] ] ; + INPUT_HTML5_DEVICE_INFO *Info = &InputSysData.PF.InputInfo[ InputSysData.PF.SourceNoToInputInfoTable[ HTML5_INPUT_SOURCE_MOUSE ][ i ] ] ; if( ( Info->ButtonState & 0x01 ) != 0 ) res |= MOUSE_INPUT_1 ; if( ( Info->ButtonState & 0x02 ) != 0 ) res |= MOUSE_INPUT_2 ; @@ -615,6 +614,9 @@ extern int GetMousePoint_PF( int *XBuf, int *YBuf ) ScreenX = ( int )Info->AxisX ; ScreenY = ( int )Info->AxisY ; + + ScreenX = ( int )InputSysData.PF.MouseX ; + ScreenY = ( int )InputSysData.PF.MouseY ; ConvScreenPositionToDxScreenPosition( ScreenX, ScreenY, XBuf, YBuf ) ; } diff --git a/HTML5/DxInputHTML5.h b/HTML5/DxInputHTML5.h index cc901ad..668e115 100644 --- a/HTML5/DxInputHTML5.h +++ b/HTML5/DxInputHTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ蜈・蜉帶ュ蝣ア繝励Ο繧ー繝ゥ繝繝倥ャ繝繝輔ぃ繧、繝ォ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -76,6 +76,15 @@ struct INPUT_HTML5_DEVICE_INFO float Wheel ; float VScroll ; float HScroll ; + float Pressure ; + float Size ; + float TouchMajor ; + float TouchMinor ; + float ToolMajor ; + float ToolMinor ; + float Orientation ; + float Tilt ; + float Distance ; } ; // 蜈・蜉帙す繧ケ繝繝逕ィ迺ー蠅萓晏ュ倥ョ繝シ繧ソ讒矩菴灘梛 @@ -89,6 +98,8 @@ struct INPUTSYSTEMDATA_PF int GamePadSourceNum ; // 繧イ繝シ繝繝代ャ繝峨ョ謨ー int GamePadSourceNoToInputInfoTable[ HTML5_DEVICE_MAX_NUM ] ; // 繧イ繝シ繝繝代ャ繝峨ョ繝翫Φ繝舌シ縺ィ InputInfoTable 縺ョ蟇セ蠢懊ユ繝シ繝悶Ν TOUCHINPUTDATA TouchInputData ; + float MouseX ; // 繝槭え繧ケ繧ォ繝シ繧ス繝ォ縺ョX蠎ァ讓 + float MouseY ; // 繝槭え繧ケ繧ォ繝シ繧ス繝ォ縺ョY蠎ァ讓 } ; // 蜀驛ィ螟ァ蝓溷、画焚螳」險 -------------------------------------------------------------- diff --git a/HTML5/DxLive2DCubism4HTML5.cpp b/HTML5/DxLive2DCubism4HTML5.cpp index c6fb91b..3578372 100644 --- a/HTML5/DxLive2DCubism4HTML5.cpp +++ b/HTML5/DxLive2DCubism4HTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ Live2D Cubism4髢「菫ゅ励Ο繧ー繝ゥ繝( HTML5 ) // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- diff --git a/HTML5/DxLive2DCubism4HTML5.h b/HTML5/DxLive2DCubism4HTML5.h index dc743d0..b45d834 100644 --- a/HTML5/DxLive2DCubism4HTML5.h +++ b/HTML5/DxLive2DCubism4HTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ Live2D Cubism4髢「菫ゅ倥ャ繝繝輔ぃ繧、繝ォ( HTML5 ) // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxLogHTML5.cpp b/HTML5/DxLogHTML5.cpp index 53d62b1..26f69ed 100644 --- a/HTML5/DxLogHTML5.cpp +++ b/HTML5/DxLogHTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ繝ュ繧ー繝励Ο繧ー繝ゥ繝 // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- diff --git a/HTML5/DxLogHTML5.h b/HTML5/DxLogHTML5.h index ab49673..cdf3552 100644 --- a/HTML5/DxLogHTML5.h +++ b/HTML5/DxLogHTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ繝ュ繧ー繝励Ο繧ー繝ゥ繝繝倥ャ繝繝輔ぃ繧、繝ォ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxMemoryHTML5.cpp b/HTML5/DxMemoryHTML5.cpp index 8c19021..33cacf3 100644 --- a/HTML5/DxMemoryHTML5.cpp +++ b/HTML5/DxMemoryHTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ繝。繝「繝ェ髢「菫ゅ励Ο繧ー繝ゥ繝 // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- diff --git a/HTML5/DxMemoryHTML5.h b/HTML5/DxMemoryHTML5.h index b057efb..8fdd5d1 100644 --- a/HTML5/DxMemoryHTML5.h +++ b/HTML5/DxMemoryHTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ繝。繝「繝ェ髢「菫ゅ励Ο繧ー繝ゥ繝繝倥ャ繝繝輔ぃ繧、繝ォ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxNetworkHTML5.cpp b/HTML5/DxNetworkHTML5.cpp index 5fc8198..a0b9a54 100644 --- a/HTML5/DxNetworkHTML5.cpp +++ b/HTML5/DxNetworkHTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ騾壻ソ。繝励Ο繧ー繝ゥ繝 // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- diff --git a/HTML5/DxNetworkHTML5.h b/HTML5/DxNetworkHTML5.h index 5b7d871..aa48126 100644 --- a/HTML5/DxNetworkHTML5.h +++ b/HTML5/DxNetworkHTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ騾壻ソ。繝励Ο繧ー繝ゥ繝繝倥ャ繝繝輔ぃ繧、繝ォ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxThreadHTML5.cpp b/HTML5/DxThreadHTML5.cpp index 191c321..9164cdf 100644 --- a/HTML5/DxThreadHTML5.cpp +++ b/HTML5/DxThreadHTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ繧ケ繝ャ繝繝蛾未菫ゅ励Ο繧ー繝ゥ繝 // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- diff --git a/HTML5/DxThreadHTML5.h b/HTML5/DxThreadHTML5.h index 0d9592e..5697ddc 100644 --- a/HTML5/DxThreadHTML5.h +++ b/HTML5/DxThreadHTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ繧ケ繝ャ繝繝蛾未菫ゅ励Ο繧ー繝ゥ繝繝倥ャ繝繝輔ぃ繧、繝ォ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxUseCLibOggHTML5.cpp b/HTML5/DxUseCLibOggHTML5.cpp index a36d5d7..e68577a 100644 --- a/HTML5/DxUseCLibOggHTML5.cpp +++ b/HTML5/DxUseCLibOggHTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィOgg髢「菫ゅ励Ο繧ー繝ゥ繝 // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- diff --git a/HTML5/DxUseCLibOggHTML5.h b/HTML5/DxUseCLibOggHTML5.h index f804dd4..d71083e 100644 --- a/HTML5/DxUseCLibOggHTML5.h +++ b/HTML5/DxUseCLibOggHTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィOgg髢「菫ゅ倥ャ繝繝輔ぃ繧、繝ォ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- From 03dd33d6ace3a45ddbfed7c7c848cc86a19a963b Mon Sep 17 00:00:00 2001 From: DxLib Update Bot Date: Sun, 14 May 2023 13:57:01 +0900 Subject: [PATCH 3/5] [Bot] Create Patch of 3.24b (iOS) --- HTML5/DxGraphicsFilterHTML5.cpp | 18 +- HTML5/DxGraphicsFilterHTML5.h | 2 +- HTML5/DxGraphicsHTML5.cpp | 784 ++++++++++++++++-- HTML5/DxGraphicsHTML5.h | 22 +- HTML5/DxMaskHTML5.cpp | 2 +- HTML5/DxMaskHTML5.h | 2 +- HTML5/DxModelHTML5.cpp | 22 +- HTML5/DxModelHTML5.h | 2 +- HTML5/DxMovieHTML5.cpp | 2 +- HTML5/DxMovieHTML5.h | 2 +- HTML5/DxShaderCodeBin_Base3D_HTML5.cpp | 2 +- HTML5/DxShaderCodeBin_Base_HTML5.cpp | 2 +- HTML5/DxShaderCodeBin_Filter_HTML5.cpp | 2 +- .../DxShaderCodeBin_Live2D_Cubism4_HTML5.cpp | 2 +- HTML5/DxShaderCodeBin_Model_HTML5.cpp | 2 +- HTML5/DxShaderCodeBin_RgbaMix_HTML5.cpp | 2 +- HTML5/DxShader_Common_HTML5.h | 2 +- HTML5/DxShader_DataType_HTML5.h | 2 +- HTML5/DxShader_FS_HTML5.h | 2 +- HTML5/DxShader_VS_HTML5.h | 2 +- HTML5/DxSoundConvertHTML5.cpp | 2 +- HTML5/DxSoundConvertHTML5.h | 2 +- HTML5/DxSoundHTML5.cpp | 10 +- HTML5/DxSoundHTML5.h | 2 +- HTML5/DxSystemHTML5.cpp | 5 +- HTML5/DxSystemHTML5.h | 2 +- 26 files changed, 809 insertions(+), 92 deletions(-) diff --git a/HTML5/DxGraphicsFilterHTML5.cpp b/HTML5/DxGraphicsFilterHTML5.cpp index 9965613..3026190 100644 --- a/HTML5/DxGraphicsFilterHTML5.cpp +++ b/HTML5/DxGraphicsFilterHTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィGraphFilter邉サ繝励Ο繧ー繝ゥ繝 // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- @@ -219,9 +219,17 @@ static int HTML5_FilterStretchBlt( GRAPHICS_HTML5_SHADER *UseShader, GRAPHFILTER if( Info->BlendPosEnable ) { BlendRect.left = BlendImage->Hard.Draw[ 0 ].UsePosXF + Info->BlendX ; - BlendRect.right = BlendImage->Hard.Draw[ 0 ].UsePosXF + Info->BlendX + SrcWidth ; BlendRect.top = BlendImage->Hard.Draw[ 0 ].UsePosYF + Info->BlendY ; - BlendRect.bottom = BlendImage->Hard.Draw[ 0 ].UsePosYF + Info->BlendY + SrcHeight ; + if( Info->BlendPos2Enable ) + { + BlendRect.right = BlendImage->Hard.Draw[ 0 ].UsePosXF + Info->BlendX2 ; + BlendRect.bottom = BlendImage->Hard.Draw[ 0 ].UsePosYF + Info->BlendY2 ; + } + else + { + BlendRect.right = BlendImage->Hard.Draw[ 0 ].UsePosXF + Info->BlendX + SrcWidth ; + BlendRect.bottom = BlendImage->Hard.Draw[ 0 ].UsePosYF + Info->BlendY + SrcHeight ; + } } else { @@ -1828,7 +1836,7 @@ extern int GraphBlend_Basic_PF( GRAPHFILTER_INFO *Info, int IsPMA ) UNIFORM_SET_INT1( Graphics_HTML5_Shader_GetUniformIndex( UseHTML5Shader, "uBlendTex" ), 1 ) ; UNIFORM_SET_FLOAT4( Graphics_HTML5_Shader_GetUniformIndex( UseHTML5Shader, "uBlendRatio" ), ParamF4[ 0 ] ) ; - HTML5_FilterStretchBlt( UseHTML5Shader, Info ) ; + HTML5_FilterStretchBlt( UseHTML5Shader, Info, Info->BlendGraphScalingFilterIsBilinear ) ; // 豁」蟶ク邨ゆコ return 0 ; @@ -2019,7 +2027,7 @@ extern int GraphBlend_RGBA_Select_Mix_PF( GRAPHFILTER_INFO *Info, int SelectR, i UNIFORM_SET_INT1( Graphics_HTML5_Shader_GetUniformIndex( UseHTML5Shader, "uBlendTex" ), 1 ) ; UNIFORM_SET_FLOAT4( Graphics_HTML5_Shader_GetUniformIndex( UseHTML5Shader, "uRGBASelect" ), ParamF4[ 0 ] ) ; - HTML5_FilterStretchBlt( UseHTML5Shader, Info, FALSE ) ; + HTML5_FilterStretchBlt( UseHTML5Shader, Info, Info->BlendGraphScalingFilterIsBilinear ) ; if( SrcBlendReverse ) { diff --git a/HTML5/DxGraphicsFilterHTML5.h b/HTML5/DxGraphicsFilterHTML5.h index 84f26b6..c01a682 100644 --- a/HTML5/DxGraphicsFilterHTML5.h +++ b/HTML5/DxGraphicsFilterHTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィGraphFilter邉サ繝励Ο繧ー繝ゥ繝繝倥ャ繝繝輔ぃ繧、繝ォ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxGraphicsHTML5.cpp b/HTML5/DxGraphicsHTML5.cpp index 6d7d080..cf3edae 100644 --- a/HTML5/DxGraphicsHTML5.cpp +++ b/HTML5/DxGraphicsHTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ 謠冗判蜃ヲ逅繝励Ο繧ー繝ゥ繝( HTML5 ) // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- @@ -359,6 +359,34 @@ DX_HTML5_RENDER_BLEND_INFO g_DefaultBlendDescArray[ DX_BLENDMODE_NUM ] = { HTML5_RENDER_TYPE_NORMAL, TRUE, GL_SRC_ALPHA, GL_ONE, GL_FUNC_ADD, GL_ONE, GL_ONE, GL_FUNC_ADD, FALSE }, // DX_BLENDMODE_SPINE_ADDITIVE Spine 縺ョ繝悶Ξ繝ウ繝峨Δ繝シ繝 Additive { HTML5_RENDER_TYPE_NORMAL, TRUE, GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA, GL_FUNC_ADD, GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_FUNC_ADD, FALSE }, // DX_BLENDMODE_SPINE_MULTIPLY Spine 縺ョ繝悶Ξ繝ウ繝峨Δ繝シ繝 Multiply { HTML5_RENDER_TYPE_NORMAL, TRUE, GL_ONE, GL_ONE_MINUS_SRC_COLOR, GL_FUNC_ADD, GL_ONE_MINUS_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_FUNC_ADD, FALSE }, // DX_BLENDMODE_SPINE_SCREEN Spine 縺ョ繝悶Ξ繝ウ繝峨Δ繝シ繝 Screen 逕ィ + + { HTML5_RENDER_TYPE_NORMAL, TRUE, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_FUNC_ADD, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_FUNC_ADD, FALSE }, // DX_BLENDMODE_CUSTOM 繧ォ繧ケ繧ソ繝繝悶Ξ繝ウ繝 +} ; + +// シ、シク繝ゥ繧、繝悶Λ繝ェ縺ョ繝悶Ξ繝ウ繝芽ヲ∫エ繧ソ繧、繝励r OpenGL ES 縺ョ隕∫エ繧ソ繧、繝励↓螟画鋤縺吶k縺溘a縺ョ繝繝シ繝悶Ν +static const GLenum DxBlendTypeToGLTable[ DX_BLEND_NUM ] = +{ + GL_ZERO, // DX_BLEND_ZERO + GL_ONE, // DX_BLEND_ONE + GL_SRC_COLOR, // DX_BLEND_SRC_COLOR + GL_ONE_MINUS_SRC_COLOR, // DX_BLEND_INV_SRC_COLOR + GL_SRC_ALPHA, // DX_BLEND_SRC_ALPHA + GL_ONE_MINUS_SRC_ALPHA, // DX_BLEND_INV_SRC_ALPHA + GL_DST_COLOR, // DX_BLEND_DEST_COLOR + GL_ONE_MINUS_DST_COLOR, // DX_BLEND_INV_DEST_COLOR + GL_DST_ALPHA, // DX_BLEND_DEST_ALPHA + GL_ONE_MINUS_DST_ALPHA, // DX_BLEND_INV_DEST_ALPHA + GL_SRC_ALPHA_SATURATE, // DX_BLEND_SRC_ALPHA_SAT +} ; + +// シ、シク繝ゥ繧、繝悶Λ繝ェ縺ョ繝悶Ξ繝ウ繝牙ヲ逅繧ソ繧、繝励r OpenGL ES 縺ョ蜃ヲ逅繧ソ繧、繝励↓螟画鋤縺吶k縺溘a縺ョ繝繝シ繝悶Ν +static const GLenum DxBlendOpToGLTable[ DX_BLENDOP_NUM ] = +{ + GL_FUNC_ADD, // DX_BLENDOP_ADD + GL_FUNC_SUBTRACT, // DX_BLENDOP_SUBTRACT + GL_FUNC_REVERSE_SUBTRACT, // DX_BLENDOP_REV_SUBTRACT + GL_FUNC_ADD, // DX_BLENDOP_MIX + GL_FUNC_ADD, // DX_BLENDOP_MAX } ; // 鬆らせ繝舌ャ繝輔ぃ縺ォ譬シ邏阪〒縺阪k鬆らせ縺ョ譛螟ァ謨ー縺ョ繝繝シ繝悶Ν @@ -3028,6 +3056,13 @@ extern int Graphics_HTML5_StretchRect( RECT DestRectTemp ; RECT BlendRectTemp ; int BlendMode ; + int BlendEnable ; + int BlendRGBSrc ; + int BlendRGBDest ; + int BlendRGBOp ; + int BlendASrc ; + int BlendADest ; + int BlendAOp ; int NotWriteAlphaChannelFlag ; if( HTML5_CHECKVALID_HARDWARE == FALSE ) @@ -3228,9 +3263,16 @@ extern int Graphics_HTML5_StretchRect( } // 繝悶Ξ繝ウ繝峨Δ繝シ繝峨r螟画峩 - BlendMode = GHTML5.Device.State.BlendMode ; + BlendMode = GHTML5.Device.State.BlendMode ; + BlendEnable = GHTML5.Device.State.BlendEnable ; + BlendRGBSrc = GHTML5.Device.State.BlendRGBSrc ; + BlendRGBDest = GHTML5.Device.State.BlendRGBDest ; + BlendRGBOp = GHTML5.Device.State.BlendRGBOp ; + BlendASrc = GHTML5.Device.State.BlendASrc ; + BlendADest = GHTML5.Device.State.BlendADest ; + BlendAOp = GHTML5.Device.State.BlendAOp ; NotWriteAlphaChannelFlag = GHTML5.Device.State.NotWriteAlphaChannelFlag ; - Graphics_HTML5_DeviceState_SetBlendMode( AlphaBlend ? DX_BLENDMODE_ALPHA : DX_BLENDMODE_NOBLEND, FALSE ) ; + Graphics_HTML5_DeviceState_SetBlendMode( AlphaBlend ? DX_BLENDMODE_ALPHA : DX_BLENDMODE_NOBLEND, FALSE, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, FALSE ) ; // 鬆らせ繝繝シ繧ソ縺ョ繧サ繝繝医い繝繝 Graphics_HTML5_DeviceState_SetupShaderVertexData( @@ -3247,7 +3289,17 @@ extern int Graphics_HTML5_StretchRect( // 險ュ螳壹r蜈縺ォ謌サ縺 { // 繝悶Ξ繝ウ繝峨Δ繝シ繝峨r螟画峩 - Graphics_HTML5_DeviceState_SetBlendMode( BlendMode, NotWriteAlphaChannelFlag ) ; + Graphics_HTML5_DeviceState_SetBlendMode( + BlendMode, + BlendEnable, + BlendRGBSrc, + BlendRGBDest, + BlendRGBOp, + BlendASrc, + BlendADest, + BlendAOp, + NotWriteAlphaChannelFlag + ) ; // 莉翫∪縺ァ縺ョ險ュ螳壹r蠕ゥ蟶ー縺吶k Graphics_HTML5_DeviceState_RefreshRenderState() ; @@ -4088,7 +4140,7 @@ extern int Graphics_HTML5_Device_Initialize( void ) // ) ; // 繝悶Ξ繝ウ繝峨Δ繝シ繝芽ィュ螳 - Graphics_HTML5_DeviceState_SetBlendMode( DX_BLENDMODE_NOBLEND, FALSE ) ; + Graphics_HTML5_DeviceState_SetBlendMode( DX_BLENDMODE_NOBLEND, FALSE, DX_BLEND_ZERO, DX_BLEND_ZERO, DX_BLENDOP_ADD, DX_BLEND_ZERO, DX_BLEND_ZERO, DX_BLENDOP_ADD, FALSE ) ; // 繧「繝ォ繝輔ぃ繝繧ケ繝郁ィュ螳壹r蛻晄悄蛹 Graphics_HTML5_DrawSetting_SetDrawAlphaTest( -1, 0 ) ; @@ -4162,7 +4214,18 @@ extern int Graphics_HTML5_Device_ReInitialize( void ) GHTML5.Device.DrawInfo.VertexNum = 0 ; // 謠冗判繝悶Ξ繝ウ繝峨Δ繝シ繝峨ョ險ュ螳 - Graphics_HTML5_DrawSetting_SetDrawBlendMode( GHTML5.Device.DrawSetting.BlendMode, GHTML5.Device.DrawSetting.AlphaTestValidFlag, GHTML5.Device.DrawSetting.AlphaChannelValidFlag ) ; + Graphics_HTML5_DrawSetting_SetDrawBlendMode( + GHTML5.Device.DrawSetting.BlendMode, + GHTML5.Device.DrawSetting.BlendEnable, + GHTML5.Device.DrawSetting.BlendRGBSrc, + GHTML5.Device.DrawSetting.BlendRGBDest, + GHTML5.Device.DrawSetting.BlendRGBOp, + GHTML5.Device.DrawSetting.BlendASrc, + GHTML5.Device.DrawSetting.BlendADest, + GHTML5.Device.DrawSetting.BlendAOp, + GHTML5.Device.DrawSetting.AlphaTestValidFlag, + GHTML5.Device.DrawSetting.AlphaChannelValidFlag + ) ; // 謠冗判逕サ蜒上ョシイシァシ「繧堤┌隕悶☆繧九°縺ゥ縺縺九r繧サ繝繝医☆繧 Graphics_HTML5_DrawSetting_SetIgnoreDrawGraphColor( GHTML5.Device.DrawSetting.IgnoreGraphColorFlag ) ; @@ -4389,19 +4452,19 @@ extern int Graphics_HTML5_DeviceState_SetSampleFilterMode( GLenum Filter, int Sa { glActiveTexture( g_TextureEnum[ i ] ) ; glBindTexture( GL_TEXTURE_2D, GHTML5.Device.State.SetTexture[ i ]->TextureBuffer ) ; - if( GHTML5.Device.State.SetTexture[ i ]->MagFilter != GHTML5.Device.State.TexMagFilter[ i ] ) + // if( GHTML5.Device.State.SetTexture[ i ]->MagFilter != GHTML5.Device.State.TexMagFilter[ i ] ) { GHTML5.Device.State.SetTexture[ i ]->MagFilter = GHTML5.Device.State.TexMagFilter[ i ] ; glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GHTML5.Device.State.SetTexture[ i ]->MagFilter ) ; } - if( GHTML5.Device.State.SetTexture[ i ]->MinFilter != GHTML5.Device.State.TexMinFilter[ i ] ) + // if( GHTML5.Device.State.SetTexture[ i ]->MinFilter != GHTML5.Device.State.TexMinFilter[ i ] ) { GLenum MinFilterTmp = MinFilter ; if( GHTML5.Device.State.SetTexture[ i ]->MipMapCount <= 1 && MinFilter == GL_LINEAR_MIPMAP_LINEAR ) { MinFilterTmp = GL_LINEAR ; } - if( GHTML5.Device.State.SetTexture[ i ]->MinFilter != MinFilterTmp ) + // if( GHTML5.Device.State.SetTexture[ i ]->MinFilter != MinFilterTmp ) { GHTML5.Device.State.SetTexture[ i ]->MinFilter = MinFilterTmp ; glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GHTML5.Device.State.SetTexture[ i ]->MinFilter ) ; @@ -4435,19 +4498,19 @@ extern int Graphics_HTML5_DeviceState_SetSampleFilterMode( GLenum Filter, int Sa { glActiveTexture( g_TextureEnum[ Sampler ] ) ; glBindTexture( GL_TEXTURE_2D, GHTML5.Device.State.SetTexture[ Sampler ]->TextureBuffer ) ; - if( GHTML5.Device.State.SetTexture[ Sampler ]->MagFilter != GHTML5.Device.State.TexMagFilter[ Sampler ] ) + // if( GHTML5.Device.State.SetTexture[ Sampler ]->MagFilter != GHTML5.Device.State.TexMagFilter[ Sampler ] ) { GHTML5.Device.State.SetTexture[ Sampler ]->MagFilter = GHTML5.Device.State.TexMagFilter[ Sampler ] ; glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GHTML5.Device.State.SetTexture[ Sampler ]->MagFilter ) ; } - if( GHTML5.Device.State.SetTexture[ Sampler ]->MinFilter != GHTML5.Device.State.TexMinFilter[ Sampler ] ) + // if( GHTML5.Device.State.SetTexture[ Sampler ]->MinFilter != GHTML5.Device.State.TexMinFilter[ Sampler ] ) { GLenum MinFilterTmp = MinFilter ; if( GHTML5.Device.State.SetTexture[ Sampler ]->MipMapCount <= 1 && MinFilter == GL_LINEAR_MIPMAP_LINEAR ) { MinFilterTmp = GL_LINEAR ; } - if( GHTML5.Device.State.SetTexture[ Sampler ]->MinFilter != MinFilterTmp ) + // if( GHTML5.Device.State.SetTexture[ Sampler ]->MinFilter != MinFilterTmp ) { GHTML5.Device.State.SetTexture[ Sampler ]->MinFilter = MinFilterTmp ; glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GHTML5.Device.State.SetTexture[ Sampler ]->MinFilter ) ; @@ -5932,7 +5995,7 @@ extern int Graphics_HTML5_DeviceState_SetToonOutLineSize( float Size ) } // 謠冗判繝悶Ξ繝ウ繝峨Δ繝シ繝峨ョ繧サ繝繝 -extern int Graphics_HTML5_DeviceState_SetBlendMode( int BlendMode, int NotWriteAlphaChannelFlag ) +extern int Graphics_HTML5_DeviceState_SetBlendMode( int BlendMode, int BlendEnable, int BlendRGBSrc, int BlendRGBDest, int BlendRGBOp, int BlendASrc, int BlendADest, int BlendAOp, int NotWriteAlphaChannelFlag ) { DX_HTML5_RENDER_BLEND_INFO *BlendInfo ; @@ -5941,7 +6004,14 @@ extern int Graphics_HTML5_DeviceState_SetBlendMode( int BlendMode, int NotWrite return -1 ; } - if( GHTML5.Device.State.BlendMode == BlendMode && + if( GHTML5.Device.State.BlendMode == BlendMode && + GHTML5.Device.State.BlendEnable == BlendEnable && + GHTML5.Device.State.BlendRGBSrc == BlendRGBSrc && + GHTML5.Device.State.BlendRGBDest == BlendRGBDest && + GHTML5.Device.State.BlendRGBOp == BlendRGBOp && + GHTML5.Device.State.BlendASrc == BlendASrc && + GHTML5.Device.State.BlendADest == BlendADest && + GHTML5.Device.State.BlendAOp == BlendAOp && GHTML5.Device.State.NotWriteAlphaChannelFlag == NotWriteAlphaChannelFlag && GHTML5.Device.DrawSetting.CancelSettingEqualCheck == FALSE ) { @@ -5950,40 +6020,83 @@ extern int Graphics_HTML5_DeviceState_SetBlendMode( int BlendMode, int NotWrite DRAWSTOCKINFO - GHTML5.Device.State.BlendMode = BlendMode ; + GHTML5.Device.State.BlendMode = BlendMode ; + GHTML5.Device.State.BlendEnable = BlendEnable ; + GHTML5.Device.State.BlendRGBSrc = BlendRGBSrc ; + GHTML5.Device.State.BlendRGBDest = BlendRGBDest ; + GHTML5.Device.State.BlendRGBOp = BlendRGBOp ; + GHTML5.Device.State.BlendASrc = BlendASrc ; + GHTML5.Device.State.BlendADest = BlendADest ; + GHTML5.Device.State.BlendAOp = BlendAOp ; GHTML5.Device.State.NotWriteAlphaChannelFlag = NotWriteAlphaChannelFlag ; BlendInfo = &g_DefaultBlendDescArray[ BlendMode ] ; - if( BlendInfo->BlendEnable ) + if( BlendMode == DX_BLENDMODE_CUSTOM ) { - glEnable( GL_BLEND ) ; - if( GHTML5.Device.State.NotWriteAlphaChannelFlag ) + if( BlendEnable ) { - glBlendEquationSeparate( - BlendInfo->ColorBlendFunc, - GL_FUNC_ADD - ) ; - glBlendFuncSeparate( - BlendInfo->ColorSourceMul, BlendInfo->ColorDestMul, - GL_ZERO, GL_ONE - ) ; + glEnable( GL_BLEND ) ; + if( NotWriteAlphaChannelFlag ) + { + glBlendEquationSeparate( + DxBlendOpToGLTable[ BlendRGBOp ], + GL_FUNC_ADD + ) ; + glBlendFuncSeparate( + DxBlendTypeToGLTable[ BlendRGBSrc ], DxBlendTypeToGLTable[ BlendRGBDest ], + GL_ZERO, GL_ONE + ) ; + } + else + { + glBlendEquationSeparate( + DxBlendOpToGLTable[ BlendRGBOp ], + DxBlendOpToGLTable[ BlendAOp ] + ) ; + glBlendFuncSeparate( + DxBlendTypeToGLTable[ BlendRGBSrc ], DxBlendTypeToGLTable[ BlendRGBDest ], + DxBlendTypeToGLTable[ BlendASrc ], DxBlendTypeToGLTable[ BlendADest ] + ) ; + } } else { - glBlendEquationSeparate( - BlendInfo->ColorBlendFunc, - BlendInfo->AlphaBlendFunc - ) ; - glBlendFuncSeparate( - BlendInfo->ColorSourceMul, BlendInfo->ColorDestMul, - BlendInfo->AlphaSourceMul, BlendInfo->AlphaDestMul - ) ; + glDisable( GL_BLEND ) ; } } else { - glDisable( GL_BLEND ) ; + if( BlendInfo->BlendEnable ) + { + glEnable( GL_BLEND ) ; + if( GHTML5.Device.State.NotWriteAlphaChannelFlag ) + { + glBlendEquationSeparate( + BlendInfo->ColorBlendFunc, + GL_FUNC_ADD + ) ; + glBlendFuncSeparate( + BlendInfo->ColorSourceMul, BlendInfo->ColorDestMul, + GL_ZERO, GL_ONE + ) ; + } + else + { + glBlendEquationSeparate( + BlendInfo->ColorBlendFunc, + BlendInfo->AlphaBlendFunc + ) ; + glBlendFuncSeparate( + BlendInfo->ColorSourceMul, BlendInfo->ColorDestMul, + BlendInfo->AlphaSourceMul, BlendInfo->AlphaDestMul + ) ; + } + } + else + { + glDisable( GL_BLEND ) ; + } } GHTML5.Device.DrawSetting.DrawPrepAlwaysFlag = TRUE ; @@ -6487,19 +6600,19 @@ extern int Graphics_HTML5_DeviceState_SetTexture( int SlotIndex, GRAPHICS_HTML5_ Texture->WrapT = GHTML5.Device.State.TexAddressModeV[ SlotIndex ] ; glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, Texture->WrapT ) ; } - if( Texture->MagFilter != GHTML5.Device.State.TexMagFilter[ SlotIndex ] ) + // if( Texture->MagFilter != GHTML5.Device.State.TexMagFilter[ SlotIndex ] ) { Texture->MagFilter = GHTML5.Device.State.TexMagFilter[ SlotIndex ] ; glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, Texture->MagFilter ) ; } - if( Texture->MinFilter != GHTML5.Device.State.TexMinFilter[ SlotIndex ] ) + // if( Texture->MinFilter != GHTML5.Device.State.TexMinFilter[ SlotIndex ] ) { GLenum MinFilterTmp = GHTML5.Device.State.TexMinFilter[ SlotIndex ] ; if( Texture->MipMapCount <= 1 && MinFilterTmp == GL_LINEAR_MIPMAP_LINEAR ) { MinFilterTmp = GL_LINEAR ; } - if( Texture->MinFilter != MinFilterTmp ) + // if( Texture->MinFilter != MinFilterTmp ) { Texture->MinFilter = MinFilterTmp ; glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, Texture->MinFilter ) ; @@ -6517,6 +6630,13 @@ extern int Graphics_HTML5_DeviceState_NormalDrawSetup( void ) { int IgnoreTextureAlpha ; int NextBlendMode ; + int NextBlendEnable ; + int NextBlendRGBSrc ; + int NextBlendRGBDest ; + int NextBlendRGBOp ; + int NextBlendASrc ; + int NextBlendADest ; + int NextBlendAOp ; int UseFloatFactorColor = FALSE ; DX_HTML5_SHADER_FLOAT4 FloatFactorColor ; int AlphaTestRef = 0 ; @@ -6540,7 +6660,14 @@ extern int Graphics_HTML5_DeviceState_NormalDrawSetup( void ) // 繝悶Ξ繝ウ繝峨Δ繝シ繝峨ョ豎コ螳 { - NextBlendMode = GHTML5.Device.DrawSetting.BlendMode ; + NextBlendMode = GHTML5.Device.DrawSetting.BlendMode ; + NextBlendEnable = GHTML5.Device.DrawSetting.BlendEnable ; + NextBlendRGBSrc = GHTML5.Device.DrawSetting.BlendRGBSrc ; + NextBlendRGBDest = GHTML5.Device.DrawSetting.BlendRGBDest ; + NextBlendRGBOp = GHTML5.Device.DrawSetting.BlendRGBOp ; + NextBlendASrc = GHTML5.Device.DrawSetting.BlendASrc ; + NextBlendADest = GHTML5.Device.DrawSetting.BlendADest ; + NextBlendAOp = GHTML5.Device.DrawSetting.BlendAOp ; switch( GHTML5.Device.DrawSetting.BlendMode ) { case DX_BLENDMODE_SUB : @@ -6987,7 +7114,17 @@ extern int Graphics_HTML5_DeviceState_NormalDrawSetup( void ) Graphics_HTML5_DeviceState_SetFactorColor( &FloatFactorColor ) ; } - Graphics_HTML5_DeviceState_SetBlendMode( NextBlendMode, GHTML5.Device.DrawSetting.NotWriteAlphaChannelFlag ) ; + Graphics_HTML5_DeviceState_SetBlendMode( + NextBlendMode, + NextBlendEnable, + NextBlendRGBSrc, + NextBlendRGBDest, + NextBlendRGBOp, + NextBlendASrc, + NextBlendADest, + NextBlendAOp, + GHTML5.Device.DrawSetting.NotWriteAlphaChannelFlag + ) ; Graphics_HTML5_DeviceState_SetShader( *UseShader, TRUE ) ; // 邨ゆコ @@ -7022,10 +7159,17 @@ extern int Graphics_HTML5_DeviceState_NormalDrawSetup( void ) // 謠冗判險ュ螳夐未菫る未謨ー // 謠冗判繝悶Ξ繝ウ繝峨Δ繝シ繝峨ョ險ュ螳 -extern int Graphics_HTML5_DrawSetting_SetDrawBlendMode( int BlendMode, int AlphaTestValidFlag, int AlphaChannelValidFlag ) +extern int Graphics_HTML5_DrawSetting_SetDrawBlendMode( int BlendMode, int BlendEnable, int BlendRGBSrc, int BlendRGBDest, int BlendRGBOp, int BlendASrc, int BlendADest, int BlendAOp, int AlphaTestValidFlag, int AlphaChannelValidFlag ) { if( GHTML5.Device.DrawSetting.CancelSettingEqualCheck == FALSE && GHTML5.Device.DrawSetting.BlendMode == BlendMode && + GHTML5.Device.DrawSetting.BlendEnable == BlendEnable && + GHTML5.Device.DrawSetting.BlendRGBSrc == BlendRGBSrc && + GHTML5.Device.DrawSetting.BlendRGBDest == BlendRGBDest && + GHTML5.Device.DrawSetting.BlendRGBOp == BlendRGBOp && + GHTML5.Device.DrawSetting.BlendASrc == BlendASrc && + GHTML5.Device.DrawSetting.BlendADest == BlendADest && + GHTML5.Device.DrawSetting.BlendAOp == BlendAOp && GHTML5.Device.DrawSetting.AlphaTestValidFlag == AlphaTestValidFlag && GHTML5.Device.DrawSetting.AlphaChannelValidFlag == AlphaChannelValidFlag ) { @@ -7036,6 +7180,13 @@ extern int Graphics_HTML5_DrawSetting_SetDrawBlendMode( int BlendMode, int Alpha DRAWSTOCKINFO GHTML5.Device.DrawSetting.BlendMode = BlendMode ; + GHTML5.Device.DrawSetting.BlendEnable = BlendEnable ; + GHTML5.Device.DrawSetting.BlendRGBSrc = BlendRGBSrc ; + GHTML5.Device.DrawSetting.BlendRGBDest = BlendRGBDest ; + GHTML5.Device.DrawSetting.BlendRGBOp = BlendRGBOp ; + GHTML5.Device.DrawSetting.BlendASrc = BlendASrc ; + GHTML5.Device.DrawSetting.BlendADest = BlendADest ; + GHTML5.Device.DrawSetting.BlendAOp = BlendAOp ; GHTML5.Device.DrawSetting.AlphaChannelValidFlag = AlphaChannelValidFlag ; GHTML5.Device.DrawSetting.AlphaTestValidFlag = AlphaTestValidFlag ; GHTML5.Device.DrawSetting.DrawPrepAlwaysFlag = TRUE ; @@ -7639,10 +7790,28 @@ extern void FASTCALL Graphics_HTML5_DrawPreparation( int ParamFlag ) } if( GHTML5.Device.DrawSetting.BlendMode != GSYS.DrawSetting.BlendMode || + GHTML5.Device.DrawSetting.BlendEnable != GSYS.DrawSetting.BlendEnable || + GHTML5.Device.DrawSetting.BlendRGBSrc != GSYS.DrawSetting.BlendRGBSrc || + GHTML5.Device.DrawSetting.BlendRGBDest != GSYS.DrawSetting.BlendRGBDest || + GHTML5.Device.DrawSetting.BlendRGBOp != GSYS.DrawSetting.BlendRGBOp || + GHTML5.Device.DrawSetting.BlendASrc != GSYS.DrawSetting.BlendASrc || + GHTML5.Device.DrawSetting.BlendADest != GSYS.DrawSetting.BlendADest || + GHTML5.Device.DrawSetting.BlendAOp != GSYS.DrawSetting.BlendAOp || GHTML5.Device.DrawSetting.AlphaTestValidFlag != AlphaTest || GHTML5.Device.DrawSetting.AlphaChannelValidFlag != AlphaChannel ) { - Graphics_HTML5_DrawSetting_SetDrawBlendMode( GSYS.DrawSetting.BlendMode, AlphaTest, AlphaChannel ) ; + Graphics_HTML5_DrawSetting_SetDrawBlendMode( + GSYS.DrawSetting.BlendMode, + GSYS.DrawSetting.BlendEnable, + GSYS.DrawSetting.BlendRGBSrc, + GSYS.DrawSetting.BlendRGBDest, + GSYS.DrawSetting.BlendRGBOp, + GSYS.DrawSetting.BlendASrc, + GSYS.DrawSetting.BlendADest, + GSYS.DrawSetting.BlendAOp, + AlphaTest, + AlphaChannel + ) ; } if( GHTML5.Device.DrawSetting.AlphaTestMode != GSYS.DrawSetting.AlphaTestMode || @@ -15284,6 +15453,183 @@ extern int Graphics_Hardware_DrawLineSet_PF( const LINEDATA *LineData, int Num } +// 繝上シ繝峨え繧ィ繧「繧「繧ッ繧サ繝ゥ繝ャ繝シ繧ソ菴ソ逕ィ迚 DrawBoxSet +extern int Graphics_Hardware_DrawBoxSet_PF( const RECTDATA *RectData, int Num ) +{ + int i ; + VERTEX_NOTEX_2D *VectData ; + COLORDATA ColorData ; + int MaxRed, MaxGreen, MaxBlue ; + unsigned int Color ; + int Flag ; + DWORD drawz ; + + if( HTML5_CHECKVALID_HARDWARE == FALSE ) + { + return -1 ; + } + + // 謠冗判蠕讖溘@縺ヲ縺繧区緒逕サ迚ゥ繧呈緒逕サ + DRAWSTOCKINFO + + // 謠冗判縺ョ貅門y + Flag = DX_HTML5_DRAWPREP_DIFFUSERGB ; + DX_HTML5_DRAWPREP_NOTEX( Flag ) + + // シコ繝舌ャ繝輔ぃ縺ォ譖ク縺崎セシ繧シコ蛟、繧偵そ繝繝医☆繧 + drawz = *((DWORD *)&GSYS.DrawSetting.DrawZ); + + // 繝吶け繝医Ν蝓コ譛ャ繧ケ繝繝シ繧ソ繧ケ繧貞叙蠕 + ColorData = *( ( COLORDATA * )NS_GetDispColorData() ) ; + + if( ColorData.AlphaMask == 0xff000000 && + ColorData.RedMask == 0x000000ff && + ColorData.GreenMask == 0x0000ff00 && + ColorData.BlueMask == 0x00ff0000 ) + { + for( i = 0 ; i < Num ; i ++, RectData ++ ) + { + int x1, y1, x2, y2 ; + + if( RectData->x1 > RectData->x2 ) + { + x1 = RectData->x2 ; + x2 = RectData->x1 ; + } + else + { + x1 = RectData->x1 ; + x2 = RectData->x2 ; + } + + if( RectData->y1 > RectData->y2 ) + { + y1 = RectData->y2 ; + y2 = RectData->y1 ; + } + else + { + y1 = RectData->y1 ; + y2 = RectData->y2 ; + } + + GETVERTEX_QUAD( VectData ) ; + + Color = ( RectData->color & 0x00ffffff ) | ( RectData->pal << 24 ) ; + VectData[0].color = Color ; + VectData[1].color = Color ; + VectData[2].color = Color ; + VectData[3].color = Color ; + VectData[4].color = Color ; + VectData[5].color = Color ; + VectData[0].pos.x = ( float )RectData->x1 ; + VectData[0].pos.y = ( float )RectData->y1 ; + VectData[1].pos.x = ( float )RectData->x2 ; + VectData[1].pos.y = ( float )RectData->y1 ; + VectData[2].pos.x = ( float )RectData->x1 ; + VectData[2].pos.y = ( float )RectData->y2 ; + VectData[3].pos.x = ( float )RectData->x2 ; + VectData[3].pos.y = ( float )RectData->y2 ; + VectData[4].pos.x = ( float )RectData->x1 ; + VectData[4].pos.y = ( float )RectData->y2 ; + VectData[5].pos.x = ( float )RectData->x2 ; + VectData[5].pos.y = ( float )RectData->y1 ; + *((DWORD *)&VectData[0].pos.z) = drawz ; + *((DWORD *)&VectData[1].pos.z) = drawz ; + *((DWORD *)&VectData[2].pos.z) = drawz ; + *((DWORD *)&VectData[3].pos.z) = drawz ; + *((DWORD *)&VectData[4].pos.z) = drawz ; + *((DWORD *)&VectData[5].pos.z) = drawz ; + VectData[0].rhw = 1.0f ; + VectData[1].rhw = 1.0f ; + VectData[2].rhw = 1.0f ; + VectData[3].rhw = 1.0f ; + VectData[4].rhw = 1.0f ; + VectData[5].rhw = 1.0f ; + + // 鬆らせ縺ョ霑ス蜉 + ADD4VERTEX_NOTEX + } + } + else + { + MaxRed = ( 1 << ColorData.RedWidth ) - 1 ; + MaxGreen = ( 1 << ColorData.GreenWidth ) - 1 ; + MaxBlue = ( 1 << ColorData.BlueWidth ) - 1 ; + + for( i = 0 ; i < Num ; i ++, RectData ++ ) + { + int x1, y1, x2, y2 ; + + if( RectData->x1 > RectData->x2 ) + { + x1 = RectData->x2 ; + x2 = RectData->x1 ; + } + else + { + x1 = RectData->x1 ; + x2 = RectData->x2 ; + } + + if( RectData->y1 > RectData->y2 ) + { + y1 = RectData->y2 ; + y2 = RectData->y1 ; + } + else + { + y1 = RectData->y1 ; + y2 = RectData->y2 ; + } + + GETVERTEX_QUAD( VectData ) ; + + Color = RectData->color ; + Color = ( RectData->pal << 24 ) | + ( ( ( ( ( ( Color & ColorData.RedMask ) >> ColorData.RedLoc ) << 8 ) - 1 ) / MaxRed ) ) | + ( ( ( ( ( ( Color & ColorData.GreenMask ) >> ColorData.GreenLoc ) << 8 ) - 1 ) / MaxGreen ) << 8 ) | + ( ( ( ( ( ( Color & ColorData.BlueMask ) >> ColorData.BlueLoc ) << 8 ) - 1 ) / MaxBlue ) << 16 ) ; + VectData[0].color = Color ; + VectData[1].color = Color ; + VectData[2].color = Color ; + VectData[3].color = Color ; + VectData[4].color = Color ; + VectData[5].color = Color ; + VectData[0].pos.x = ( float )RectData->x1 ; + VectData[0].pos.y = ( float )RectData->y1 ; + VectData[1].pos.x = ( float )RectData->x2 ; + VectData[1].pos.y = ( float )RectData->y1 ; + VectData[2].pos.x = ( float )RectData->x1 ; + VectData[2].pos.y = ( float )RectData->y2 ; + VectData[3].pos.x = ( float )RectData->x2 ; + VectData[3].pos.y = ( float )RectData->y2 ; + VectData[4].pos.x = ( float )RectData->x1 ; + VectData[4].pos.y = ( float )RectData->y2 ; + VectData[5].pos.x = ( float )RectData->x2 ; + VectData[5].pos.y = ( float )RectData->y1 ; + *((DWORD *)&VectData[0].pos.z) = drawz ; + *((DWORD *)&VectData[1].pos.z) = drawz ; + *((DWORD *)&VectData[2].pos.z) = drawz ; + *((DWORD *)&VectData[3].pos.z) = drawz ; + *((DWORD *)&VectData[4].pos.z) = drawz ; + *((DWORD *)&VectData[5].pos.z) = drawz ; + VectData[0].rhw = 1.0f ; + VectData[1].rhw = 1.0f ; + VectData[2].rhw = 1.0f ; + VectData[3].rhw = 1.0f ; + VectData[4].rhw = 1.0f ; + VectData[5].rhw = 1.0f ; + + // 鬆らせ縺ョ霑ス蜉 + ADD4VERTEX_NOTEX + } + } + + // 邨ゆコ + return 0 ; +} + @@ -15460,6 +15806,73 @@ extern int Graphics_Hardware_DrawIndexedPrimitive_PF( const VERTEX_3D *Vertex, return 0 ; } +extern int Graphics_Hardware_Draw32bitIndexedPrimitive_PF( const VERTEX_3D *Vertex, int VertexNum, const DWORD *Indices, int IndexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag ) +{ + int i ; + VERTEX_3D *VertP ; + unsigned char tmp ; + int BackupUse3DVertex ; + + if( HTML5_CHECKVALID_HARDWARE == FALSE ) + { + return -1 ; + } + + if( PrimitiveType < DX_PRIMTYPE_MIN || PrimitiveType > DX_PRIMTYPE_MAX ) + { + return -1 ; + } + + if( Graphics_HTML5_DrawPrimitive3DPreparation( 0, Image, TransFlag ) < 0 ) + { + return -1 ; + } + + if( GSYS.HardInfo.UseVertexColorBGRAFormat == FALSE ) + { + VertP = ( VERTEX_3D * )Vertex ; + for( i = 0 ; i < VertexNum ; i ++, VertP ++ ) + { + tmp = VertP->b ; + VertP->b = VertP->r ; + VertP->r = tmp ; + } + } + + BackupUse3DVertex = GHTML5.Device.DrawInfo.Use3DVertex ; + GHTML5.Device.DrawInfo.Use3DVertex = 1 ; + Graphics_HTML5_DeviceState_NormalDrawSetup() ; + GHTML5.Device.DrawInfo.Use3DVertex = BackupUse3DVertex ; + + // Uniform 縺ョ譖エ譁ー + Graphics_HTML5_DeviceState_UpdateShaderUniform( GHTML5.Device.State.SetShader, 3 ) ; + + // 鬆らせ繝繝シ繧ソ縺ョ繧サ繝繝医い繝繝 + Graphics_HTML5_DeviceState_SetupShaderVertexData( + GHTML5.Device.State.SetShader, + &g_BaseSimpleVertexShaderInfo[ HTML5_VERTEX_INPUTLAYOUT_3D ].InputInfo, + Vertex + ) ; + + // 謠冗判 + glDrawElements( g_DXPrimitiveTypeToGLES2PrimitiveType[ PrimitiveType ], IndexNum, GL_UNSIGNED_INT, Indices ); + GSYS.PerformanceInfo.NowFrameDrawCallCount ++ ; + + if( GSYS.HardInfo.UseVertexColorBGRAFormat == FALSE ) + { + VertP = ( VERTEX_3D * )Vertex ; + for( i = 0 ; i < VertexNum ; i ++, VertP ++ ) + { + tmp = VertP->b ; + VertP->b = VertP->r ; + VertP->r = tmp ; + } + } + + // 邨ゆコ + return 0 ; +} + extern int Graphics_Hardware_DrawPrimitiveLight_PF( const VERTEX3D *Vertex, int VertexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag ) { int i ; @@ -15610,6 +16023,81 @@ extern int Graphics_Hardware_DrawIndexedPrimitiveLight_PF( const VERTEX3D *Vert return 0 ; } +extern int Graphics_Hardware_Draw32bitIndexedPrimitiveLight_PF( const VERTEX3D *Vertex, int VertexNum, const DWORD *Indices, int IndexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag ) +{ + int i ; + VERTEX3D *VertP ; + unsigned char tmp ; + + if( HTML5_CHECKVALID_HARDWARE == FALSE ) + { + return -1 ; + } + + if( PrimitiveType < DX_PRIMTYPE_MIN || PrimitiveType > DX_PRIMTYPE_MAX ) + { + return -1 ; + } + + if( Graphics_HTML5_DrawPrimitive3DPreparation( DX_HTML5_DRAWPREP_LIGHTING | DX_HTML5_DRAWPREP_SPECULAR, Image, TransFlag ) < 0 ) + { + return -1 ; + } + + if( GSYS.HardInfo.UseVertexColorBGRAFormat == FALSE ) + { + VertP = ( VERTEX3D * )Vertex ; + for( i = 0 ; i < VertexNum ; i ++, VertP ++ ) + { + tmp = VertP->dif.b ; + VertP->dif.b = VertP->dif.r ; + VertP->dif.r = tmp ; + + tmp = VertP->spc.b ; + VertP->spc.b = VertP->spc.r ; + VertP->spc.r = tmp ; + } + } + + // 繧キ繧ァ繝シ繝繝シ繧偵そ繝繝 + if( Graphics_HTML5_Shader_Normal3DDraw_Setup() == FALSE ) + { + return -1 ; + } + + // Uniform 縺ョ譖エ譁ー + Graphics_HTML5_DeviceState_UpdateShaderUniform( GHTML5.Device.State.SetShader, 3 ) ; + + // 鬆らせ繝繝シ繧ソ縺ョ繧サ繝繝医い繝繝 + Graphics_HTML5_DeviceState_SetupShaderVertexData( + GHTML5.Device.State.SetShader, + &g_BaseSimpleVertexShaderInfo[ HTML5_VERTEX_INPUTLAYOUT_3D_LIGHT ].InputInfo, + Vertex + ) ; + + // 謠冗判 + glDrawElements( g_DXPrimitiveTypeToGLES2PrimitiveType[ PrimitiveType ], IndexNum, GL_UNSIGNED_INT, Indices ); + GSYS.PerformanceInfo.NowFrameDrawCallCount ++ ; + + if( GSYS.HardInfo.UseVertexColorBGRAFormat == FALSE ) + { + VertP = ( VERTEX3D * )Vertex ; + for( i = 0 ; i < VertexNum ; i ++, VertP ++ ) + { + tmp = VertP->dif.b ; + VertP->dif.b = VertP->dif.r ; + VertP->dif.r = tmp ; + + tmp = VertP->spc.b ; + VertP->spc.b = VertP->spc.r ; + VertP->spc.r = tmp ; + } + } + + // 邨ゆコ + return 0 ; +} + extern int Graphics_Hardware_DrawPrimitiveLight_UseVertexBuffer_PF( VERTEXBUFFERHANDLEDATA *VertexBuffer, int PrimitiveType, @@ -16041,6 +16529,76 @@ extern int Graphics_Hardware_DrawIndexedPrimitive2DUser_PF( const VERTEX2D *Ver return 0 ; } +extern int Graphics_Hardware_Draw32bitIndexedPrimitive2DUser_PF( const VERTEX2D *Vertex, int VertexNum, const DWORD *Indices, int IndexNum, int PrimitiveType, IMAGEDATA *Image, int TransFlag ) +{ + int Flag ; + int i ; + VERTEX2D *VertP ; + unsigned char tmp ; + + if( HTML5_CHECKVALID_HARDWARE == FALSE ) + { + return -1 ; + } + + if( PrimitiveType < DX_PRIMTYPE_MIN || PrimitiveType > DX_PRIMTYPE_MAX ) + { + return -1 ; + } + + // 謠冗判蠕讖溘@縺ヲ縺繧区緒逕サ迚ゥ繧呈緒逕サ + DRAWSTOCKINFO + + // 謠冗判縺ョ貅門y + Flag = TransFlag | DX_HTML5_DRAWPREP_TEXADDRESS | DX_HTML5_DRAWPREP_CULLING ; + if( Image ) + { + DX_HTML5_DRAWPREP_TEX( Image->Orig, &Image->Hard.Draw[ 0 ].Tex->PF->Texture, Flag ) + } + else + { + DX_HTML5_DRAWPREP_NOTEX( Flag ) + } + + if( GSYS.HardInfo.UseVertexColorBGRAFormat == FALSE ) + { + VertP = ( VERTEX2D * )Vertex ; + for( i = 0 ; i < VertexNum ; i ++, VertP ++ ) + { + tmp = VertP->dif.b ; + VertP->dif.b = VertP->dif.r ; + VertP->dif.r = tmp ; + } + } + + // Uniform 縺ョ譖エ譁ー + Graphics_HTML5_DeviceState_UpdateShaderUniform( GHTML5.Device.State.SetShader, 3 ) ; + + // 鬆らせ繝繝シ繧ソ縺ョ繧サ繝繝医い繝繝 + Graphics_HTML5_DeviceState_SetupShaderVertexData( + GHTML5.Device.State.SetShader, + &g_BaseSimpleVertexShaderInfo[ HTML5_VERTEX_INPUTLAYOUT_2D ].InputInfo, + Vertex + ) ; + + // 謠冗判 + glDrawElements( g_DXPrimitiveTypeToGLES2PrimitiveType[ PrimitiveType ], IndexNum, GL_UNSIGNED_INT, Indices ); + GSYS.PerformanceInfo.NowFrameDrawCallCount ++ ; + + if( GSYS.HardInfo.UseVertexColorBGRAFormat == FALSE ) + { + VertP = ( VERTEX2D * )Vertex ; + for( i = 0 ; i < VertexNum ; i ++, VertP ++ ) + { + tmp = VertP->dif.b ; + VertP->dif.b = VertP->dif.r ; + VertP->dif.r = tmp ; + } + } + + // 邨ゆコ + return 0 ; +} @@ -16061,7 +16619,17 @@ extern void Graphics_HTML5_DrawPreparationToShader( int ParamFlag, int Is2D ) Flag = ParamFlag | DX_HTML5_DRAWPREP_SPECULAR | DX_HTML5_DRAWPREP_TEXADDRESS | DX_HTML5_DRAWPREP_NOBLENDSETTING | DX_HTML5_DRAWPREP_CULLING | ( Is2D ? 0 : DX_HTML5_DRAWPREP_3D ) ; DX_HTML5_DRAWPREP_NOTEX( Flag ) - Graphics_HTML5_DeviceState_SetBlendMode( GSYS.DrawSetting.BlendMode, GHTML5.Device.DrawSetting.NotWriteAlphaChannelFlag ) ; + Graphics_HTML5_DeviceState_SetBlendMode( + GSYS.DrawSetting.BlendMode, + GSYS.DrawSetting.BlendEnable, + GSYS.DrawSetting.BlendRGBSrc, + GSYS.DrawSetting.BlendRGBDest, + GSYS.DrawSetting.BlendRGBOp, + GSYS.DrawSetting.BlendASrc, + GSYS.DrawSetting.BlendADest, + GSYS.DrawSetting.BlendAOp, + GHTML5.Device.DrawSetting.NotWriteAlphaChannelFlag + ) ; } // 繧キ繧ァ繝シ繝繝シ繧剃スソ縺」縺ヲシ抵シ、繝励Μ繝溘ユ繧」繝悶r謠冗判縺吶k @@ -16180,6 +16748,43 @@ extern int Graphics_Hardware_DrawPrimitiveIndexed2DToShader_PF( const VERTEX2DS return 0 ; } +// 繧キ繧ァ繝シ繝繝シ繧剃スソ縺」縺ヲシ抵シ、繝励Μ繝溘ユ繧」繝悶r謠冗判縺吶k( 鬆らせ繧、繝ウ繝繝繧ッ繧ケ繧剃スソ逕ィ縺吶k ) +extern int Graphics_Hardware_DrawPrimitive32bitIndexed2DToShader_PF( const VERTEX2DSHADER *Vertex, int VertexNum, const unsigned int *Indices, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 遲 */ ) +{ + if( HTML5_CHECKVALID_HARDWARE == FALSE ) + { + return -1 ; + } + + if( PrimitiveType < DX_PRIMTYPE_MIN || PrimitiveType > DX_PRIMTYPE_MAX ) + { + return -1 ; + } + + // 謠冗判蠕讖溘@縺ヲ縺繧区緒逕サ迚ゥ繧呈緒逕サ + DRAWSTOCKINFO + + // 謠冗判縺ョ貅門y + Graphics_HTML5_DrawPreparationToShader( 0, TRUE ) ; + + // Uniform 縺ョ譖エ譁ー + Graphics_HTML5_DeviceState_UpdateShaderUniform( GHTML5.Device.State.SetShader, 3 ) ; + + // 鬆らせ繝繝シ繧ソ縺ョ繧サ繝繝医い繝繝 + Graphics_HTML5_DeviceState_SetupShaderVertexData( + GHTML5.Device.State.SetShader, + &g_BaseSimpleVertexShaderInfo[ HTML5_VERTEX_INPUTLAYOUT_BLENDTEX_2D ].InputInfo, + Vertex + ) ; + + // 謠冗判 + glDrawElements( g_DXPrimitiveTypeToGLES2PrimitiveType[ PrimitiveType ], IndexNum, GL_UNSIGNED_INT, Indices ); + GSYS.PerformanceInfo.NowFrameDrawCallCount ++ ; + + // 邨ゆコ + return 0 ; +} + // 繧キ繧ァ繝シ繝繝シ繧剃スソ縺」縺ヲシ難シ、繝励Μ繝溘ユ繧」繝悶r謠冗判縺吶k( 鬆らせ繧、繝ウ繝繝繧ッ繧ケ繧剃スソ逕ィ縺吶k ) extern int Graphics_Hardware_DrawPrimitiveIndexed3DToShader_PF( const VERTEX3DSHADER *Vertex, int VertexNum, const unsigned short *Indices, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 遲 */ ) { @@ -16221,6 +16826,47 @@ extern int Graphics_Hardware_DrawPrimitiveIndexed3DToShader_PF( const VERTEX3DS return 0 ; } +// 繧キ繧ァ繝シ繝繝シ繧剃スソ縺」縺ヲシ難シ、繝励Μ繝溘ユ繧」繝悶r謠冗判縺吶k( 鬆らせ繧、繝ウ繝繝繧ッ繧ケ繧剃スソ逕ィ縺吶k ) +extern int Graphics_Hardware_DrawPrimitive32bitIndexed3DToShader_PF( const VERTEX3DSHADER *Vertex, int VertexNum, const unsigned int *Indices, int IndexNum, int PrimitiveType /* DX_PRIMTYPE_TRIANGLELIST 遲 */ ) +{ + if( HTML5_CHECKVALID_HARDWARE == FALSE ) + { + return -1 ; + } + + if( PrimitiveType < DX_PRIMTYPE_MIN || PrimitiveType > DX_PRIMTYPE_MAX ) + { + return -1 ; + } + + // 謠冗判蠕讖溘@縺ヲ縺繧区緒逕サ迚ゥ繧呈緒逕サ + DRAWSTOCKINFO + + // 謠冗判縺ョ貅門y + Graphics_HTML5_DrawPreparationToShader( DX_HTML5_DRAWPREP_LIGHTING | DX_HTML5_DRAWPREP_FOG, FALSE ) ; + + // シ難シ、陦悟励r繝上シ繝峨え繧ィ繧「縺ォ蜿肴丐縺吶k + if( GSYS.DrawSetting.MatchHardware3DMatrix == FALSE ) + Graphics_DrawSetting_ApplyLib3DMatrixToHardware() ; + + // Uniform 縺ョ譖エ譁ー + Graphics_HTML5_DeviceState_UpdateShaderUniform( GHTML5.Device.State.SetShader, 3 ) ; + + // 鬆らせ繝繝シ繧ソ縺ョ繧サ繝繝医い繝繝 + Graphics_HTML5_DeviceState_SetupShaderVertexData( + GHTML5.Device.State.SetShader, + &g_BaseSimpleVertexShaderInfo[ HTML5_VERTEX_INPUTLAYOUT_SHADER_3D ].InputInfo, + Vertex + ) ; + + // 謠冗判 + glDrawElements( g_DXPrimitiveTypeToGLES2PrimitiveType[ PrimitiveType ], IndexNum, GL_UNSIGNED_INT, Indices ); + GSYS.PerformanceInfo.NowFrameDrawCallCount ++ ; + + // 邨ゆコ + return 0 ; +} + // 繧キ繧ァ繝シ繝繝シ繧剃スソ縺」縺ヲシ難シ、繝励Μ繝溘ユ繧」繝悶r謠冗判縺吶k( 鬆らせ繝舌ャ繝輔ぃ菴ソ逕ィ迚 ) extern int Graphics_Hardware_DrawPrimitive3DToShader_UseVertexBuffer2_PF( int VertexBufHandle, @@ -16760,6 +17406,16 @@ extern int Graphics_Hardware_SetDrawBlendMode_PF( int BlendMode, int BlendParam return 0 ; } +// 繧ォ繧ケ繧ソ繝繝悶Ξ繝ウ繝峨Δ繝シ繝峨r險ュ螳壹☆繧 +extern int Graphics_Hardware_SetDrawCustomBlendMode_PF(int BlendEnable, int SrcBlendRGB, int DestBlendRGB, int BlendOpRGB, int SrcBlendA, int DestBlendA, int BlendOpA, int BlendParam) +{ + // 繝繧」繝輔シ繧コ繧ォ繝ゥ繝シ縺ョ譖エ譁ー + GHTML5.Device.DrawInfo.DiffuseColor = GetDiffuseColor(); + + // 豁」蟶ク邨ゆコ + return 0; +} + // 謠冗判譎ゅョ繧「繝ォ繝輔ぃ繝繧ケ繝医ョ險ュ螳壹r陦後≧( TestMode:DX_CMP_GREATER遲( -1:繝繝輔か繝ォ繝亥虚菴懊↓謌サ縺 ) TestParam:謠冗判繧「繝ォ繝輔ぃ蛟、縺ィ縺ョ豈碑シ縺ォ菴ソ逕ィ縺吶k蛟、 ) extern int Graphics_Hardware_SetDrawAlphaTest_PF( int TestMode, int TestParam ) { @@ -17160,13 +17816,13 @@ extern int Graphics_Hardware_SetGraphicsDeviceLostCallbackFunction_PF( void (* // 騾壼クク謠冗判縺ォ繝励Ο繧ー繝ゥ繝槭ヶ繝ォ繧キ繧ァ繝シ繝繝シ繧剃スソ逕ィ縺吶k縺九←縺縺九r險ュ螳壹☆繧( TRUE:菴ソ逕ィ縺吶k( 繝繝輔か繝ォ繝 ) FALSE:菴ソ逕ィ縺励↑縺 ) extern int Graphics_Hardware_SetUseNormalDrawShader_PF( int Flag ) { - return 0 ; + return -1 ; } // 繝薙ョ繧ェ繝。繝「繝ェ縺ョ螳ケ驥上r蠕励k -extern int Graphics_Hardware_GetVideoMemorySize_PF( int *AllSize, int *FreeSize ) +extern int Graphics_Hardware_GetVideoMemorySizeEx_PF( ULONGLONG *TotalSize, ULONGLONG *UseSize ) { - return 0 ; + return -1 ; } // Vista莉・髯阪ョ Windows Aero 繧堤┌蜉ケ縺ォ縺吶k縺九←縺縺九r繧サ繝繝医☆繧九ゝRUE:辟。蜉ケ縺ォ縺吶k FALSE:譛牙柑縺ォ縺吶k( DxLib_Init 縺ョ蜑阪↓蜻シ縺カ蠢隕√′縺ゅj縺セ縺 ) @@ -17614,6 +18270,13 @@ extern int Graphics_ScreenFlipBase_PF( void ) GLuint ViewFrameBuffer ; GLint RenderBuffer; int BlendMode ; + int BlendEnable ; + int BlendRGBSrc ; + int BlendRGBDest ; + int BlendRGBOp ; + int BlendASrc ; + int BlendADest ; + int BlendAOp ; int NotWriteAlphaChannelFlag ; float VertexData[ 4 ][ 4 ] = { @@ -17648,9 +18311,16 @@ extern int Graphics_ScreenFlipBase_PF( void ) DestRect.bottom = DestRect.top + DestH ; // 繝悶Ξ繝ウ繝峨Δ繝シ繝峨r繝悶Ξ繝ウ繝臥┌縺励↓螟画峩 - BlendMode = GHTML5.Device.State.BlendMode ; + BlendMode = GHTML5.Device.State.BlendMode ; + BlendEnable = GHTML5.Device.State.BlendEnable ; + BlendRGBSrc = GHTML5.Device.State.BlendRGBSrc ; + BlendRGBDest = GHTML5.Device.State.BlendRGBDest ; + BlendRGBOp = GHTML5.Device.State.BlendRGBOp ; + BlendASrc = GHTML5.Device.State.BlendASrc ; + BlendADest = GHTML5.Device.State.BlendADest ; + BlendAOp = GHTML5.Device.State.BlendAOp ; NotWriteAlphaChannelFlag = GHTML5.Device.State.NotWriteAlphaChannelFlag ; - Graphics_HTML5_DeviceState_SetBlendMode( DX_BLENDMODE_NOBLEND, FALSE ) ; + Graphics_HTML5_DeviceState_SetBlendMode( DX_BLENDMODE_NOBLEND, FALSE, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, FALSE ) ; // 謠冗判蜈医r繝輔Ξ繝シ繝繝舌ャ繝輔ぃ縺ォ螟画峩( 險ュ螳壹ッ Graphics_HTML5_DeviceState_RefreshRenderState 縺ァ謌サ縺 ) // glBindFramebuffer( GL_FRAMEBUFFER, ViewFrameBuffer ) ; @@ -17826,7 +18496,17 @@ extern int Graphics_ScreenFlipBase_PF( void ) GSYS.PerformanceInfo.NowFrameDrawCallCount ++ ; // 繝悶Ξ繝ウ繝峨Δ繝シ繝峨r蜈縺ォ謌サ縺 - Graphics_HTML5_DeviceState_SetBlendMode( BlendMode, NotWriteAlphaChannelFlag ) ; + Graphics_HTML5_DeviceState_SetBlendMode( + BlendMode, + BlendEnable, + BlendRGBSrc, + BlendRGBDest, + BlendRGBOp, + BlendASrc, + BlendADest, + BlendAOp, + NotWriteAlphaChannelFlag + ) ; } // シカシウシケショシ」蠕縺。繝輔Λ繧ー繧堤ォ九※繧 @@ -19347,6 +20027,12 @@ extern int Graphics_Hardware_Light_SetEnable_PF( int LightNumber, int EnableSta return Graphics_HTML5_DeviceState_SetLightEnable( LightNumber, EnableState ) ; } +// 繝ゥ繧、繝医ョ險育ョ励〒隗貞コヲ貂幄。ー繧定。後o縺ェ縺繧医≧縺ォ縺吶k縺九←縺縺九r險ュ螳壹☆繧 +extern int Graphics_Hardware_Light_SetNoAngleAttenuation_PF( int NoAngleAttenuation ) +{ + // 譛ェ螳溯」 + return 0 ; +} diff --git a/HTML5/DxGraphicsHTML5.h b/HTML5/DxGraphicsHTML5.h index 1415bbb..3173d7c 100644 --- a/HTML5/DxGraphicsHTML5.h +++ b/HTML5/DxGraphicsHTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ 謠冗判蜃ヲ逅繝励Ο繧ー繝ゥ繝( HTML5 )繝倥ャ繝繝輔ぃ繧、繝ォ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -17,12 +17,12 @@ // 繧、繝ウ繧ッ繝ォ繝シ繝 ------------------------------------------------------------------ #include "../DxLib.h" #include "../DxGraphics.h" -#include "../DxArchive_.h" #include #include #include "DxShader_DataType_HTML5.h" #include "DxShader_FS_HTML5.h" #include "DxShader_VS_HTML5.h" +#include "../DxArchive_.h" #ifndef DX_NON_NAMESPACE @@ -841,6 +841,13 @@ struct GRAPHICS_HARDDATA_HTML5_DEVICE_STATE GLenum DepthFunc ; // 豺ア蠎ヲ蛟、縺ョ豈碑シ繝「繝シ繝( GL_LEQUAL 縺ェ縺ゥ ) int BlendMode ; // 迴セ蝨ィ繝繝舌う繧ケ縺ォ險ュ螳壹&繧後※縺繧九ヶ繝ャ繝ウ繝峨Δ繝シ繝峨√励Μ繧サ繝繝医ョ繝悶Ξ繝ウ繝峨Δ繝シ繝我サ・螟悶ョ蝣エ蜷医ッ -1 縺悟・繧 + int BlendEnable ; // 繝悶Ξ繝ウ繝牙ヲ逅繧定。後≧縺九←縺縺( DX_BLENDMODE_CUSTOM 逕ィ ) + int BlendRGBSrc ; // RGB縺ョ繧ス繝シ繧ケ繝悶Ξ繝ウ繝( DX_BLENDMODE_CUSTOM 逕ィ ) + int BlendRGBDest ; // RGB縺ョ繝繧ケ繝医ヶ繝ャ繝ウ繝( DX_BLENDMODE_CUSTOM 逕ィ ) + int BlendRGBOp ; // RGB縺ョ繝悶Ξ繝ウ繝牙ヲ逅( DX_BLENDMODE_CUSTOM 逕ィ ) + int BlendASrc ; // A縺ョ繧ス繝シ繧ケ繝悶Ξ繝ウ繝( DX_BLENDMODE_CUSTOM 逕ィ ) + int BlendADest ; // A縺ョ繝繧ケ繝医ヶ繝ャ繝ウ繝( DX_BLENDMODE_CUSTOM 逕ィ ) + int BlendAOp ; // A縺ョ繝悶Ξ繝ウ繝牙ヲ逅( DX_BLENDMODE_CUSTOM 逕ィ ) int NotWriteAlphaChannelFlag ; // 繧「繝ォ繝輔ぃ繝√Ε繝ウ繝阪Ν縺ョ蜀螳ケ繧呈嶌縺肴鋤縺医↑縺縺九←縺縺九ョ繝輔Λ繧ー GRAPHICS_HTML5_TEXTURE *SetTexture[ USE_TEXTURESTAGE_NUM ] ; // 謠冗判譎ゅ↓菴ソ逕ィ縺吶k繝繧ッ繧ケ繝√Ε @@ -921,6 +928,13 @@ struct GRAPHICS_HARDDATA_HTML5_DRAWSETTING int AlphaTestMode ; // 繧「繝ォ繝輔ぃ繝繧ケ繝医Δ繝シ繝 int AlphaTestParam ; // 繧「繝ォ繝輔ぃ繝繧ケ繝医ヱ繝ゥ繝。繝シ繧ソ int BlendMode ; // 繝悶Ξ繝ウ繝峨Δ繝シ繝 + int BlendEnable ; // 繝悶Ξ繝ウ繝牙ヲ逅繧定。後≧縺九←縺縺( DX_BLENDMODE_CUSTOM 逕ィ ) + int BlendRGBSrc ; // RGB縺ョ繧ス繝シ繧ケ繝悶Ξ繝ウ繝( DX_BLENDMODE_CUSTOM 逕ィ ) + int BlendRGBDest ; // RGB縺ョ繝繧ケ繝医ヶ繝ャ繝ウ繝( DX_BLENDMODE_CUSTOM 逕ィ ) + int BlendRGBOp ; // RGB縺ョ繝悶Ξ繝ウ繝牙ヲ逅( DX_BLENDMODE_CUSTOM 逕ィ ) + int BlendASrc ; // A縺ョ繧ス繝シ繧ケ繝悶Ξ繝ウ繝( DX_BLENDMODE_CUSTOM 逕ィ ) + int BlendADest ; // A縺ョ繝繧ケ繝医ヶ繝ャ繝ウ繝( DX_BLENDMODE_CUSTOM 逕ィ ) + int BlendAOp ; // A縺ョ繝悶Ξ繝ウ繝牙ヲ逅( DX_BLENDMODE_CUSTOM 逕ィ ) int ChangeBlendParamFlag ; // 繝悶Ξ繝ウ繝芽ィュ螳壹↓髢「繧上k驛ィ蛻縺ョ螟画峩縺後≠縺」縺溘°縲√ヵ繝ゥ繧ー int ChangeTextureFlag ; // 繝繧ッ繧ケ繝√Ε縺悟、画峩縺輔l縺溘°縲√ヵ繝ゥ繧ー int NotWriteAlphaChannelFlag ; // 繧「繝ォ繝輔ぃ繝√Ε繝ウ繝阪Ν縺ョ蜀螳ケ繧呈嶌縺肴鋤縺医↑縺縺九←縺縺九ョ繝輔Λ繧ー @@ -1557,7 +1571,7 @@ extern int Graphics_HTML5_DeviceState_SetMulAlphaColor( int UseMulAlphaColor ) extern int Graphics_HTML5_DeviceState_SetBackgroundColor( int Red, int Green, int Blue, int Alpha ) ; // 閭梧勹濶イ繧定ィュ螳壹☆繧 extern int Graphics_HTML5_DeviceState_SetFactorColor( const DX_HTML5_SHADER_FLOAT4 *FactorColor ) ; // Factor Color 繧定ィュ螳壹☆繧 extern int Graphics_HTML5_DeviceState_SetToonOutLineSize( float Size ) ; // 繝医ぇ繝シ繝ウ繝ャ繝ウ繝繝ェ繝ウ繧ー縺ョ霈ェ驛ュ邱壹ョ螟ェ縺輔r險ュ螳壹☆繧 -extern int Graphics_HTML5_DeviceState_SetBlendMode( int BlendMode, int NotWriteAlphaChannelFlag ) ; // 謠冗判繝悶Ξ繝ウ繝峨Δ繝シ繝峨ョ繧サ繝繝 +extern int Graphics_HTML5_DeviceState_SetBlendMode( int BlendMode, int BlendEnable, int BlendRGBSrc, int BlendRGBDest, int BlendRGBOp, int BlendASrc, int BlendADest, int BlendAOp, int NotWriteAlphaChannelFlag ) ; // 謠冗判繝悶Ξ繝ウ繝峨Δ繝シ繝峨ョ繧サ繝繝 extern int Graphics_HTML5_DeviceState_SetRenderTarget( GLuint TargetFrameBuffer, GLuint TargetFrameBufferWidth, GLuint TargetFrameBufferHeight ) ; // 謠冗判蟇セ雎。縺ョ螟画峩 extern int Graphics_HTML5_DeviceState_SetShader( GRAPHICS_HTML5_SHADER *Shader, int NormalVertexShader = FALSE ) ; // 菴ソ逕ィ縺吶k繧キ繧ァ繝シ繝繝シ繧貞、画峩縺吶k extern int Graphics_HTML5_DeviceState_ResetShader( int SetNormalShaderCancel = FALSE ) ; // 繧キ繧ァ繝シ繝繝シ縺ョ菴ソ逕ィ繧呈ュ「繧√k @@ -1574,7 +1588,7 @@ extern int Graphics_HTML5_DeviceState_NormalDrawSetup( void ) ; // // 謠冗判險ュ螳夐未菫る未謨ー -extern int Graphics_HTML5_DrawSetting_SetDrawBlendMode( int BlendMode, int AlphaTestValidFlag, int AlphaChannelValidFlag ) ; // 謠冗判繝悶Ξ繝ウ繝峨Δ繝シ繝峨ョ險ュ螳 +extern int Graphics_HTML5_DrawSetting_SetDrawBlendMode( int BlendMode, int BlendEnable, int BlendRGBSrc, int BlendRGBDest, int BlendRGBOp, int BlendASrc, int BlendADest, int BlendAOp, int AlphaTestValidFlag, int AlphaChannelValidFlag ) ; // 謠冗判繝悶Ξ繝ウ繝峨Δ繝シ繝峨ョ險ュ螳 extern int Graphics_HTML5_DrawSetting_SetIgnoreDrawGraphColor( int EnableFlag ) ; // 謠冗判譎ゅョ逕サ蜒上ョシイシァシ「繧堤┌隕悶☆繧九°縺ゥ縺縺九r險ュ螳壹☆繧 extern int Graphics_HTML5_DrawSetting_SetIgnoreDrawGraphAlpha( int EnableFlag ) ; // 謠冗判譎ゅョ逕サ蜒上ョシ。繧堤┌隕悶☆繧九°縺ゥ縺縺九r險ュ螳壹☆繧 extern int Graphics_HTML5_DrawSetting_SetWriteAlphaChannelFlag( int NotFlag ) ; // 謠冗判蜈医ョ繧「繝ォ繝輔ぃ繝√Ε繝ウ繝阪Ν縺ョ蜀螳ケ繧呈嶌縺肴鋤縺医k縺九r險ュ螳壹☆繧 diff --git a/HTML5/DxMaskHTML5.cpp b/HTML5/DxMaskHTML5.cpp index 97c7312..133e32a 100644 --- a/HTML5/DxMaskHTML5.cpp +++ b/HTML5/DxMaskHTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ繝槭せ繧ッ繝繝シ繧ソ邂。逅繝励Ο繧ー繝ゥ繝 // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- diff --git a/HTML5/DxMaskHTML5.h b/HTML5/DxMaskHTML5.h index 1a05525..9939717 100644 --- a/HTML5/DxMaskHTML5.h +++ b/HTML5/DxMaskHTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ繝槭せ繧ッ繝繝シ繧ソ邂。逅繝励Ο繧ー繝ゥ繝繝倥ャ繝繝輔ぃ繧、繝ォ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxModelHTML5.cpp b/HTML5/DxModelHTML5.cpp index ea988ac..3ce0122 100644 --- a/HTML5/DxModelHTML5.cpp +++ b/HTML5/DxModelHTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ 繝「繝繝ォ繝繝シ繧ソ蛻カ蠕。繝励Ο繧ー繝ゥ繝( HTML5 ) // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- @@ -2125,28 +2125,28 @@ static bool MV1_HTML5_SetupMeshDrawMaterialCommon( MV1_MESH *Mesh ) case DX_BLENDMODE_MULA : case DX_BLENDMODE_SRCCOLOR : case DX_BLENDMODE_NOBLEND : - Graphics_HTML5_DeviceState_SetBlendMode( BlendMode, GSYS.DrawSetting.NotWriteAlphaChannelFlag ) ; + Graphics_HTML5_DeviceState_SetBlendMode( BlendMode, FALSE, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, GSYS.DrawSetting.NotWriteAlphaChannelFlag ) ; break ; case DX_BLENDMODE_ALPHA : if( Frame->Container->UseDrawMulAlphaColor ) { - Graphics_HTML5_DeviceState_SetBlendMode( DX_BLENDMODE_PMA_ALPHA, GSYS.DrawSetting.NotWriteAlphaChannelFlag ) ; + Graphics_HTML5_DeviceState_SetBlendMode( DX_BLENDMODE_PMA_ALPHA, FALSE, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, GSYS.DrawSetting.NotWriteAlphaChannelFlag ) ; } else { - Graphics_HTML5_DeviceState_SetBlendMode( DX_BLENDMODE_ALPHA, GSYS.DrawSetting.NotWriteAlphaChannelFlag ) ; + Graphics_HTML5_DeviceState_SetBlendMode( DX_BLENDMODE_ALPHA, FALSE, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, GSYS.DrawSetting.NotWriteAlphaChannelFlag ) ; } break ; case DX_BLENDMODE_ADD : if( Frame->Container->UseDrawMulAlphaColor ) { - Graphics_HTML5_DeviceState_SetBlendMode( DX_BLENDMODE_PMA_ADD, GSYS.DrawSetting.NotWriteAlphaChannelFlag ) ; + Graphics_HTML5_DeviceState_SetBlendMode( DX_BLENDMODE_PMA_ADD, FALSE, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, GSYS.DrawSetting.NotWriteAlphaChannelFlag ) ; } else { - Graphics_HTML5_DeviceState_SetBlendMode( DX_BLENDMODE_ADD, GSYS.DrawSetting.NotWriteAlphaChannelFlag ) ; + Graphics_HTML5_DeviceState_SetBlendMode( DX_BLENDMODE_ADD, FALSE, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, GSYS.DrawSetting.NotWriteAlphaChannelFlag ) ; } break ; } @@ -2225,28 +2225,28 @@ static void MV1_HTML5_SetupToonOutLineMeshDrawMaterialCommon( MV1_MESH *Mesh, fl case DX_BLENDMODE_MULA : case DX_BLENDMODE_SRCCOLOR : case DX_BLENDMODE_NOBLEND : - Graphics_HTML5_DeviceState_SetBlendMode( BlendMode, GSYS.DrawSetting.NotWriteAlphaChannelFlag ) ; + Graphics_HTML5_DeviceState_SetBlendMode( BlendMode, FALSE, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, GSYS.DrawSetting.NotWriteAlphaChannelFlag ) ; break ; case DX_BLENDMODE_ALPHA : if( Frame->Container->UseDrawMulAlphaColor ) { - Graphics_HTML5_DeviceState_SetBlendMode( DX_BLENDMODE_PMA_ALPHA, GSYS.DrawSetting.NotWriteAlphaChannelFlag ) ; + Graphics_HTML5_DeviceState_SetBlendMode( DX_BLENDMODE_PMA_ALPHA, FALSE, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, GSYS.DrawSetting.NotWriteAlphaChannelFlag ) ; } else { - Graphics_HTML5_DeviceState_SetBlendMode( DX_BLENDMODE_ALPHA, GSYS.DrawSetting.NotWriteAlphaChannelFlag ) ; + Graphics_HTML5_DeviceState_SetBlendMode( DX_BLENDMODE_ALPHA, FALSE, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, GSYS.DrawSetting.NotWriteAlphaChannelFlag ) ; } break ; case DX_BLENDMODE_ADD : if( Frame->Container->UseDrawMulAlphaColor ) { - Graphics_HTML5_DeviceState_SetBlendMode( DX_BLENDMODE_PMA_ADD, GSYS.DrawSetting.NotWriteAlphaChannelFlag ) ; + Graphics_HTML5_DeviceState_SetBlendMode( DX_BLENDMODE_PMA_ADD, FALSE, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, GSYS.DrawSetting.NotWriteAlphaChannelFlag ) ; } else { - Graphics_HTML5_DeviceState_SetBlendMode( DX_BLENDMODE_ADD, GSYS.DrawSetting.NotWriteAlphaChannelFlag ) ; + Graphics_HTML5_DeviceState_SetBlendMode( DX_BLENDMODE_ADD, FALSE, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, DX_BLEND_ONE, DX_BLEND_ZERO, DX_BLENDOP_ADD, GSYS.DrawSetting.NotWriteAlphaChannelFlag ) ; } break ; } diff --git a/HTML5/DxModelHTML5.h b/HTML5/DxModelHTML5.h index aae7123..4d887ad 100644 --- a/HTML5/DxModelHTML5.h +++ b/HTML5/DxModelHTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ繝「繝繝ォ繝繝シ繧ソ蛻カ蠕。繝励Ο繧ー繝ゥ繝繝倥ャ繝繝輔ぃ繧、繝ォ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxMovieHTML5.cpp b/HTML5/DxMovieHTML5.cpp index c7ff493..f5b7d0f 100644 --- a/HTML5/DxMovieHTML5.cpp +++ b/HTML5/DxMovieHTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ蜍慕判繝励Ο繧ー繝ゥ繝 // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- diff --git a/HTML5/DxMovieHTML5.h b/HTML5/DxMovieHTML5.h index 1f65987..536b1b5 100644 --- a/HTML5/DxMovieHTML5.h +++ b/HTML5/DxMovieHTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ蜍慕判繝励Ο繧ー繝ゥ繝繝倥ャ繝繝輔ぃ繧、繝ォ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxShaderCodeBin_Base3D_HTML5.cpp b/HTML5/DxShaderCodeBin_Base3D_HTML5.cpp index d778065..66e9136 100644 --- a/HTML5/DxShaderCodeBin_Base3D_HTML5.cpp +++ b/HTML5/DxShaderCodeBin_Base3D_HTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ 蝗コ螳壽ゥ溯ス繝代う繝励Λ繧、繝ウ縺ョ莉」繧上j逕ィシ難シ、繧キ繧ァ繝シ繝繝シ繝舌う繝翫Μ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxShaderCodeBin_Base_HTML5.cpp b/HTML5/DxShaderCodeBin_Base_HTML5.cpp index 0a24b90..d59caf7 100644 --- a/HTML5/DxShaderCodeBin_Base_HTML5.cpp +++ b/HTML5/DxShaderCodeBin_Base_HTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ 蝗コ螳壽ゥ溯ス繝代う繝励Λ繧、繝ウ縺ョ莉」繧上j逕ィ繧キ繧ァ繝シ繝繝シ繝舌う繝翫Μ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxShaderCodeBin_Filter_HTML5.cpp b/HTML5/DxShaderCodeBin_Filter_HTML5.cpp index 88b3880..fa4449d 100644 --- a/HTML5/DxShaderCodeBin_Filter_HTML5.cpp +++ b/HTML5/DxShaderCodeBin_Filter_HTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ 繝輔ぅ繝ォ繧ソ繝シ逕ィ繧キ繧ァ繝シ繝繝シ繝舌う繝翫Μ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxShaderCodeBin_Live2D_Cubism4_HTML5.cpp b/HTML5/DxShaderCodeBin_Live2D_Cubism4_HTML5.cpp index b3f82df..5a30027 100644 --- a/HTML5/DxShaderCodeBin_Live2D_Cubism4_HTML5.cpp +++ b/HTML5/DxShaderCodeBin_Live2D_Cubism4_HTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ Live2D Cubism4 逕ィ繧キ繧ァ繝シ繝繝シ繝舌う繝翫Μ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxShaderCodeBin_Model_HTML5.cpp b/HTML5/DxShaderCodeBin_Model_HTML5.cpp index 8cda847..f5659c4 100644 --- a/HTML5/DxShaderCodeBin_Model_HTML5.cpp +++ b/HTML5/DxShaderCodeBin_Model_HTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ シ難シ、繝「繝繝ォ逕ィ繧キ繧ァ繝シ繝繝シ繝舌う繝翫Μ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxShaderCodeBin_RgbaMix_HTML5.cpp b/HTML5/DxShaderCodeBin_RgbaMix_HTML5.cpp index 036f03e..bab484c 100644 --- a/HTML5/DxShaderCodeBin_RgbaMix_HTML5.cpp +++ b/HTML5/DxShaderCodeBin_RgbaMix_HTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ RGBA繝悶Ξ繝ウ繝臥畑繧キ繧ァ繝シ繝繝シ繝舌う繝翫Μ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxShader_Common_HTML5.h b/HTML5/DxShader_Common_HTML5.h index f133262..86c8f13 100644 --- a/HTML5/DxShader_Common_HTML5.h +++ b/HTML5/DxShader_Common_HTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5 繧キ繧ァ繝シ繝繝シ蜈ア騾壼ョ夂セゥ繧ウ繝シ繝 // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxShader_DataType_HTML5.h b/HTML5/DxShader_DataType_HTML5.h index 0102e2d..727020f 100644 --- a/HTML5/DxShader_DataType_HTML5.h +++ b/HTML5/DxShader_DataType_HTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ繧キ繧ァ繝シ繝繝シ繝繝シ繧ソ蝙句ョ夂セゥ繝倥ャ繝 // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxShader_FS_HTML5.h b/HTML5/DxShader_FS_HTML5.h index cb453ac..dd9597e 100644 --- a/HTML5/DxShader_FS_HTML5.h +++ b/HTML5/DxShader_FS_HTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ 繝輔Λ繧ー繝。繝ウ繝医す繧ァ繝シ繝繝シ髢「騾」螳夂セゥ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxShader_VS_HTML5.h b/HTML5/DxShader_VS_HTML5.h index d4965d9..a87333b 100644 --- a/HTML5/DxShader_VS_HTML5.h +++ b/HTML5/DxShader_VS_HTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ 繝舌シ繝繝繧ッ繧ケ繧キ繧ァ繝シ繝繝シ髢「騾」螳夂セゥ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxSoundConvertHTML5.cpp b/HTML5/DxSoundConvertHTML5.cpp index eda44ab..f06dec7 100644 --- a/HTML5/DxSoundConvertHTML5.cpp +++ b/HTML5/DxSoundConvertHTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ繧オ繧ヲ繝ウ繝峨ョ繝シ繧ソ螟画鋤繝励Ο繧ー繝ゥ繝 // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- diff --git a/HTML5/DxSoundConvertHTML5.h b/HTML5/DxSoundConvertHTML5.h index 5966607..d9397a0 100644 --- a/HTML5/DxSoundConvertHTML5.h +++ b/HTML5/DxSoundConvertHTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ繧オ繧ヲ繝ウ繝峨ョ繝シ繧ソ螟画鋤繝励Ο繧ー繝ゥ繝繝倥ャ繝繝輔ぃ繧、繝ォ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxSoundHTML5.cpp b/HTML5/DxSoundHTML5.cpp index 0618a70..db5886f 100644 --- a/HTML5/DxSoundHTML5.cpp +++ b/HTML5/DxSoundHTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ繧オ繧ヲ繝ウ繝峨励Ο繧ー繝ゥ繝 // -// Ver 3.23 +// Ver 3.24b // //----------------------------------------------------------------------------- @@ -399,6 +399,9 @@ static int SoundReleaseInfo_Process( void ) // 遐エ譽縺吶∋縺阪し繧ヲ繝ウ繝峨′辟。縺蝣エ蜷医ッ菴輔b縺帙★縺ォ邨ゆコ if( ind == -1 ) { + // 繧ッ繝ェ繝繧」繧ォ繝ォ繧サ繧ッ繧キ繝ァ繝ウ縺ョ隗」謾セ + CriticalSection_Unlock( &SoundSysData.PF.SoundReleaseCriticalSection ) ; + return 0 ; } @@ -647,7 +650,7 @@ static void UpdateALBuffer() { // 繧オ繧ヲ繝ウ繝峨ヰ繝繝輔ぃ蜀咲函蜃ヲ逅逕ィ繧ケ繝ャ繝繝 static void *ALBufferPlayThreadFunction( void *argc ) { - while( SoundSysData.PF.ProcessSoundThreadEndRequest == FALSE ) + while( SoundSysData.PF.ProcessALBufferThreadEndRequest == FALSE ) { UpdateALBuffer(); @@ -674,6 +677,9 @@ static void UpdateStreamSound() { // シ難シ、繧オ繧ヲ繝ウ繝峨r蜀咲函縺励※縺繧九し繧ヲ繝ウ繝峨ワ繝ウ繝峨Ν縺ォ蟇セ縺吶k蜃ヲ逅繧定。後≧ ProcessPlay3DSoundMemAll() ; + // 蜀咲函縺励※縺繧九し繧ヲ繝ウ繝峨ワ繝ウ繝峨Ν縺ォ蟇セ縺吶k蜃ヲ逅繧定。後≧ + ProcessPlaySoundMemAll() ; + // 繧ッ繝ェ繝繧」繧ォ繝ォ繧サ繧ッ繧キ繝ァ繝ウ縺ョ隗」謾セ CriticalSection_Unlock( &HandleManageArray[ DX_HANDLETYPE_SOUND ].CriticalSection ) ; diff --git a/HTML5/DxSoundHTML5.h b/HTML5/DxSoundHTML5.h index f0aeb51..8c49820 100644 --- a/HTML5/DxSoundHTML5.h +++ b/HTML5/DxSoundHTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ繧オ繧ヲ繝ウ繝峨励Ο繧ー繝ゥ繝繝倥ャ繝繝輔ぃ繧、繝ォ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- diff --git a/HTML5/DxSystemHTML5.cpp b/HTML5/DxSystemHTML5.cpp index 25b8568..039ea6f 100644 --- a/HTML5/DxSystemHTML5.cpp +++ b/HTML5/DxSystemHTML5.cpp @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ繧キ繧ケ繝繝繝励Ο繧ー繝ゥ繝 // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- @@ -848,6 +848,9 @@ extern int NS_ProcessMessage( void ) NS_ProcessNetMessage( TRUE ) ; #endif + // 繝。繝「繝ェ髢「菫ゅョ蜻ィ譛溽噪蜃ヲ逅繧定。後≧ + MemoryProcess() ; + #ifndef DX_NON_SOUND // 繧オ繧ヲ繝ウ繝蛾未菫ゅョ蜻ィ譛溽噪蜃ヲ逅繧定。後≧ ProcessSoundSystem() ; diff --git a/HTML5/DxSystemHTML5.h b/HTML5/DxSystemHTML5.h index 0423366..eeee61e 100644 --- a/HTML5/DxSystemHTML5.h +++ b/HTML5/DxSystemHTML5.h @@ -2,7 +2,7 @@ // // シ、シク繝ゥ繧、繝悶Λ繝ェ HTML5逕ィ繧キ繧ケ繝繝繝励Ο繧ー繝ゥ繝繝倥ャ繝繝輔ぃ繧、繝ォ // -// Ver 3.23 +// Ver 3.24b // // ------------------------------------------------------------------------------- From 980b22e2400f25f8d3e1852857446a05e01d19a8 Mon Sep 17 00:00:00 2001 From: DxLib Update Bot Date: Sun, 14 May 2023 15:43:11 +0900 Subject: [PATCH 4/5] use multithread --- Build.sh | 4 ++-- DxCompileConfig.h | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Build.sh b/Build.sh index 4219454..93bae82 100755 --- a/Build.sh +++ b/Build.sh @@ -7,5 +7,5 @@ cd build echo "# Start Building" -emcmake cmake .. -DCMAKE_CXX_FLAGS="-O2" -emmake make -j4 \ No newline at end of file +emcmake cmake .. -DCMAKE_CXX_FLAGS="-O2 -pthread" +emmake make - diff --git a/DxCompileConfig.h b/DxCompileConfig.h index 9705fe4..e00c45a 100644 --- a/DxCompileConfig.h +++ b/DxCompileConfig.h @@ -56,11 +56,11 @@ // JPEG画像の読みこみ機能がいらない方は次のコメントを外してください // ※DxUseCLib.lib も再コンパイルする必要があります -#define DX_NON_JPEGREAD +// #define DX_NON_JPEGREAD // PNG画像の読みこみ機能がいらない方は次のコメントを外してください // ※DxUseCLib.lib も再コンパイルする必要があります -#define DX_NON_PNGREAD +// #define DX_NON_PNGREAD // TIFF画像の読みこみ機能がいらない方は次のコメントを外してください // ※DxUseCLib.lib も再コンパイルする必要があります @@ -151,13 +151,13 @@ //#define DX_NON_PRINTF_DX // 非同期読み込みを無効にする場合は次のコメントを外して下さい -#define DX_NON_ASYNCLOAD +//#define DX_NON_ASYNCLOAD // ファイル保存機能を無効にする場合は次のコメントを外して下さい //#define DX_NON_SAVEFUNCTION // ソフトウェアで扱うイメージを無効にする場合は次のコメントを外して下さい -#define DX_NON_SOFTIMAGE +// #define DX_NON_SOFTIMAGE // フォント描画機能を無効にする場合は次のコメントを外して下さい //#define DX_NON_FONT @@ -172,7 +172,7 @@ //#define DX_NON_INPUT // マルチスレッドを使用しない場合は次のコメントを外してください -#define DX_NON_MULTITHREAD +//#define DX_NON_MULTITHREAD // 各ハンドルのエラーチェックを無効にする場合は次のコメントを外してください( 若干高速化される代わりに無効なハンドルを関数に渡すと即不正なメモリアクセスエラーが発生するようになります ) // #define DX_NON_HANDLE_ERROR_CHECK @@ -252,9 +252,9 @@ #define DX_NON_DIRECT3D9 #endif -#ifdef EMSCRIPTEN -#define DX_NON_MULTITHREAD -#endif +// #ifdef EMSCRIPTEN +// #define DX_NON_MULTITHREAD +// #endif From 0b6ea96b323360a315e9d975c6c49cf8d08fd7c4 Mon Sep 17 00:00:00 2001 From: DxLib Update Bot Date: Sun, 14 May 2023 16:39:42 +0900 Subject: [PATCH 5/5] fix mousemove --- HTML5/DxInputHTML5.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/HTML5/DxInputHTML5.cpp b/HTML5/DxInputHTML5.cpp index 9217645..b370116 100644 --- a/HTML5/DxInputHTML5.cpp +++ b/HTML5/DxInputHTML5.cpp @@ -967,6 +967,9 @@ static EM_BOOL onMouseWheel(int eventType, const EmscriptenWheelEvent *wheelEven InputSysData.PF.InputInfo[ InputNo ].AxisX = wheelEvent->mouse.targetX ; InputSysData.PF.InputInfo[ InputNo ].AxisY = wheelEvent->mouse.targetY ; InputSysData.PF.InputInfo[ InputNo ].Wheel = wheelEvent->deltaX ; + + InputSysData.PF.MouseX = InputSysData.PF.InputInfo[ InputNo ].AxisX ; + InputSysData.PF.MouseY = InputSysData.PF.InputInfo[ InputNo ].AxisY ; InputSysData.MouseMoveZ += InputSysData.PF.InputInfo[ InputNo ].Wheel ;