トップページ > 記事閲覧
DxアーカイブはDirectXで使える?
名前:中田 日時: 2021/04/15 20:10

こんにちは中田です。 私はゲームを途中まで完成させており、DXライブラリを使ってではなくDirectX9を使ってゲームを作っています。 今まではリソースから読み込んだり普通にファイルパスを指定して読み込んだりしていましたが、 先日DXアーカイブというすばらしい機能を聞き、私も使ってみたいなと思いました。 そこで質問なのですがDXアーカイブはDirectX9でも使えるのでしょうか? DXライブラリはDirectXの内部処理を簡単にライブラリ化したものと聞きましたので不可能ということはないと私は思いました。
メンテ

Page: 1 |

Re: DxアーカイブはDirectXで使える? ( No.1 )
名前:管理人 日時:2021/04/16 01:31

DXアーカイブの機能のみを使用されたいということでしょうか? DXライブラリでDXアーカイブ機能のみを使用する場合に使用できる関数は以下の通りです // ファイルを開く int FileRead_open( const TCHAR *FilePath ) ; // ファイルのサイズを取得する LONGLONG FileRead_size( const TCHAR *FilePath ) ; // ファイルを閉じる int FileRead_close( int FileHandle ) ; // ファイルポインタの読み込み位置を取得する LONGLONG FileRead_tell( int FileHandle ) ; // ファイルポインタの読み込み位置を変更する int FileRead_seek( int FileHandle , LONGLONG Offset , int Origin ) ; // ファイルからデータを読み込む int FileRead_read( void *Buffer , int ReadSize , int FileHandle ) ; // ファイルの読み込み位置が終端に達しているかどうかを取得する int FileRead_eof( int FileHandle ) ; // ファイルの文字コード形式を設定する( テキストファイル用 ) int FileRead_set_format( int FileHandle, int CharCodeFormat /* DX_CHARCODEFORMAT_SHIFTJIS 等 */ ) ; // ファイルから文字列を読み出す int FileRead_gets( TCHAR *Buffer , int BufferSize , int FileHandle ) ; // ファイルから一文字読み出す TCHAR FileRead_getc( int FileHandle ) ; // ファイルから書式化されたデータを読み出す int FileRead_scanf( int FileHandle , const TCHAR *Format , ... ) ; ↑これらはC言語の標準関数の fopen や fclose, fread, ftell などとほぼ同じ機能となっています それ以外のDXアーカイブ専用の関数としては以下のものがあります // 同名のDXアーカイブファイルとフォルダが存在した場合、 // どちらを優先させるかを設定する( 1:フォルダを優先  0:DXアーカイブファイルを優先( デフォルト ) ) int SetDXArchivePriority( int Priority ) ; // 検索するDXアーカイブファイルの拡張子を設定する( Extension:拡張子名文字列 ) int SetDXArchiveExtension( const TCHAR *Extension ) ; // DXアーカイブファイルの鍵文字列を設定する( KeyString:鍵文字列 ) int SetDXArchiveKeyString( const TCHAR *KeyString ) ; DXライブラリの関数は基本的に DxLib_Init を呼ばないと機能しないようになっているのですが、 上記の関数達だけなら DxLib_Init を呼ばなくても機能するので、DXアーカイブの機能のみを 使用することは可能です 例えば Dドライブの直下に TextureData.dxa という、中に Test.dds というファイルのみ入っている DXアーカイブファイルがあるとして、Test.dds を丸ごと全部メモリに読み込む処理は以下のようになります #include "DxLib.h" #include <malloc.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int FileHandle ; void *TextureImage ; LONGLONG FileSize ; // TextureData.dxa 内の Test.dds のサイズを取得する FileSize = FileRead_size( "D:\\TextureData\\Test.dds" ) ; // Test.dds を格納するためのメモリ領域を確保 TextureImage = malloc( FileSize ) ; // TextureData.dxa 内の Test.dds を開く FileHandle = FileRead_open( "D:\\TextureData\\Test.dds" ) ; // Test.dds を確保したメモリに読み込み FileRead_read( TextureImage, FileSize, FileHandle ) ; // ファイルを閉じる FileRead_close( FileHandle ); // 確保したメモリを開放 free( TextureImage ) ; // ソフトの終了 return 0 ; } ↑こちらだけでは単に ddsファイルをメモリに読み込んですぐ開放するだけなので、実際に DirectX9 で使用するには 読み込んだddsファイルを解析して IDirectTexture9 を作成した上で Lock してピクセルデータを転送する必要がありますが…
メンテ
Re: DxアーカイブはDirectXで使える? ( No.2 )
名前:中田 日時:2021/04/16 10:13

ご返答ありがとうございます。 上記のコードを使用しCreateTextureで空のテクスチャを作った後、メモリに読み込んでおいたものをテクスチャとして使用すると、 見事に動作いたしました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存