2010-12-16 13 views
1

私は単純なピクセルアートスプライトを持つゲームに取り組んでいます。私はそれをスケーラブル(私は全体のゲームグラフィックスカイズを意味しているので)、私はピクセルのアートに適した良いスケーリングアルゴリズムを実装したいと考えています。これは私がすべてのスプライトをスケールできるようにHQXを見つけました。リアルタイムで)これらの新しいバージョンを使用してください。JavaでCコードを使用するためのクイックステップ

CコードでこのHQXアルゴリズムの実装が見つかりました。すべてがソースイメージのuint32_t配列をとり、スプライトのスケーリングされたバージョンで既に割り当てられている新しいuint32_t配列を埋め込む単純な関数になります。ターゲットはスタンドアロンまたはライブラリとして構築することができるように、二つのシンボルが

#if defined(__GNUC__) 
    #ifdef __MINGW32__ 
     #define HQX_CALLCONV __stdcall 
    #else 
     #define HQX_CALLCONV 
    #endif 
#else 
    #define HQX_CALLCONV 
#endif 

#if defined(_WIN32) 
    #ifdef DLL_EXPORT 
     #define HQX_API __declspec(dllexport) 
    #else 
     #define HQX_API __declspec(dllimport) 
    #endif 
#else 
    #define HQX_API 
#endif 

として宣言されている場合

署名はちょうど

HQX_API void HQX_CALLCONV hq2x_32(uint32_t * sp, uint32_t * dp, int Xres, int Yres) 

です。

私がしたいことは、Javaのthorugh JNIからこのメソッドを呼び出すことです。どのタスクを実行する必要がありますか?さらに、パフォーマンスが問題になるかどうかを知りたいので、JNI呼び出しが高価な場合でも、すべてのスプライトに対して呼び出しが行われます(しかし、おそらく、 JVMとネイティブコードから前後にコピーされます)。

..私は両方の言語(JavaとCを)知っているので、私はちょうどそう私はちょうどJNI参照を取得し、それを勉強よ、それは簡単な十分だと仮定すると、この作業を行う際に必要な手順を知っておく必要があります

ありがとうございます

答えて

2

スプライトを頻繁に拡大しない場合は、JNA(Javaネイティブアクセス)をJNIより簡単に使用できます。はるかに優しいが、遅い。 JNAでは、ネイティブコードを追加する必要はありません。

JNIを使​​用する場合は、通常、Javaで「ネイティブメソッド」を作成し(「ネイティブ」修飾子を持つ空のメソッド)、javahを使用してCヘッダーファイルを生成し、対応するCソースファイルを実行時に「ネイティブメソッド」を実装、あなたがSystem.loadLibrary()とあなたのネイティブライブラリをロードする必要があります。(あなたがMac上であれば、動的ライブラリの拡張子は.jnilibする必要があります。)

JNI呼び出しを測定することができます。今年の初めに、100,000要素配列のint型に対して約80マイクロ秒で測定しましたが、これはjava.io型のDirectByteBufferで避けることができます。

+0

実際には、アプリケーションの起動時にスプライトを書くことは決してありません。私はJNAを短期間で確認します。その間にありがとうございます:) – Jack

+0

すべてのプラットフォームに異なるコンパイル済みのものを提供する必要がありますか?私はそれがまだ何かを知らないので、JNIではいと思う、JNAではわからない。 – Jack

+0

Javaコードのコンパイルを1回行うことはできますが、プラットフォームごとに異なるネイティブライブラリが必要になります。 JNIでは、JNIネイティブメソッドを実装するためのネイティブライブラリと、HQXに必要なネイティブライブラリが必要です。 JNAでは、HQX用に入手または構築したネイティブライブラリ以外のネイティブライブラリは必要ありません。 –

4

なぜCコードをJavaに変換しないのですか?ポインタが関与していない限り、変換にはほとんど影響がない可能性があります。

+0

私はそのためにステップを尋ねました。それを直接翻訳する代わりに、既存のコードでJavaにインターフェースするためにどれだけの労力を費やす必要があるのか​​を測定するのです。 – Jack

3

私は、 d fo wallykの提案をまず受け入れて、既存のJava実装を2番目に探すか、もし失われた場合は、すべてthe tutorialと読んでください。

関連する問題