ページ 11

DXライブラリとJava

Posted: 2014年1月07日(火) 20:41
by クーゲルシュライバー
DirectX環境によって同じ2Dゲームでもjavaのほうが速度が速い事はあるんでしょうか?
DirectXを利用したゲームを行うと、必ずパソコンの音がうるさくなって動作が鈍くなります。
3DはDirectXが必須みたいな感じですが、同じ内容のゲームでそこまでグラフィックのレベルが高く
ないならばjavaのほうが良いですかね?

Re: DXライブラリとJava

Posted: 2014年1月07日(火) 21:21
by softya(ソフト屋)
メモリが足らない可能性はありませんか?
そのうるさい音がHDDから出ているのなら、メモリが足らないと思います。

あと実際に「javaのほうが良いですかね?」と比較できるゲームがあるのでしょうか。

Re: DXライブラリとJava

Posted: 2014年1月07日(火) 21:29
by クーゲルシュライバー
Vectorで無料のシューティングゲーム(java制)とかダウンロードして実行するんですが、
何の問題もありません。

Re: DXライブラリとJava

Posted: 2014年1月07日(火) 21:32
by softya(ソフト屋)
まったく同じゲームなら、ある特定の条件を除けばDirectXの方が早いです。
特定の条件は、DirectXに対応できていないハードウェアでは逆に遅くなる(CPUがエミュレートするため)可能性はあります。その場合はDirectX版のほうが負荷が高いかと。
DXライブラリの出すLog.txtを貼ってもらうと大体の動作状況は分かりますよ。

Re: DXライブラリとJava

Posted: 2014年1月07日(火) 21:49
by クーゲルシュライバー
スピードの差というのは、2Dでも顕著なのでしょうか?
具体的にどうjavaが遅いのか知りたいです、ネットでは遅い遅いと聞くので。
確かゲームボーイはjavaですが、遅いとは思いません。

Re: DXライブラリとJava

Posted: 2014年1月07日(火) 21:50
by クーゲルシュライバー
ゲームボーイはjavaじゃなかったかもしれません、すいません。

Re: DXライブラリとJava

Posted: 2014年1月07日(火) 21:58
by softya(ソフト屋)
クーゲルシュライバー さんが書きました:スピードの差というのは、2Dでも顕著なのでしょうか?
具体的にどうjavaが遅いのか知りたいです、ネットでは遅い遅いと聞くので。
確かゲームボーイはjavaですが、遅いとは思いません。
描画するもの次第です。
半透明が多いとDirectXやOpenGLには勝てないと思います。
Windows上のjavaは結局のところWin32APIかDirectXかOpenGLを使って描画するしか無いのですが、同じ描画システムを使った場合ネイティブなC言語の方が早くなります。
まぁ、プログラムの組み方が悪かったらjavaが勝つ場合も有り得ます。
と言うことでC言語のDirectXのゲームとjavaのゲームがOpenGLを使っていた場合、描画の仕組みが違うのでどちらが早いかとか評価に困ります。
ハードウェア次第と言えるかもしれません。

今までの所、ハードウェアの仕様も不明ですし、そのjavaのゲームも不明ですので何とも比較しようがないといった感じでしょうか。

Re: DXライブラリとJava

Posted: 2014年1月07日(火) 21:59
by softya(ソフト屋)
クーゲルシュライバー さんが書きました:ゲームボーイはjavaじゃなかったかもしれません、すいません。
Androidの間違いでは?
ちなみにAndroidにもC/C++の開発環境はありますよ。

Re: DXライブラリとJava

Posted: 2014年1月07日(火) 22:14
by クーゲルシュライバー
ゲームボーイ(初代)ですね。最近はAndroidなんですか。

Re: DXライブラリとJava

Posted: 2014年1月07日(火) 22:16
by softya(ソフト屋)
クーゲルシュライバー さんが書きました:ゲームボーイ(初代)ですね。最近はAndroidなんですか。
ゲームボーイ初代はZ80系マイコンでアセンブラですよ。

【補足】
ゲームボーイは、1989年に発売。
Javaは公開されたのが1995年。

【補足の補足】
javaが動く携帯のものはガラケーからですね。
iアプリってやつです。

No: 7も読んでくださいね~。

Re: DXライブラリとJava

Posted: 2014年1月07日(火) 22:33
by クーゲルシュライバー
>Windows上のjavaは結局のところWin32APIかDirectXかOpenGLを使って描画する

softyaさん、Win32APIとDirectXやOpenGLって同列なんですか?
どんな関数も最終的にはWin32APIになるって勝手な僕の思い込みだったのかな…

Re: DXライブラリとJava

Posted: 2014年1月07日(火) 22:38
by softya(ソフト屋)
クーゲルシュライバー さんが書きました:>Windows上のjavaは結局のところWin32APIかDirectXかOpenGLを使って描画する

softyaさん、Win32APIとDirectXやOpenGLって同列なんですか?
どんな関数も最終的にはWin32APIになるって勝手な僕の思い込みだったのかな…
はい。Win32APIを経由せずに画面に書き込めるのでDirectXやOpenGLには高速性があります。
その代わり、Win32APIの描画とは喧嘩する可能性がありますよ。

Re: DXライブラリとJava

Posted: 2014年1月07日(火) 22:48
by クーゲルシュライバー
DXライブラリを3年使っていてjavaもDXライブラリも同じ仕組みのライブラリだと思ってました...
DirectXがOSの機能、win32apiを使わないって事は、実行時はOS自体を全く使わない事ですよね?
そんなことができるなんて全然知りませんでした。

Re: DXライブラリとJava

Posted: 2014年1月07日(火) 23:07
by softya(ソフト屋)
まぁ、DirectXも今となってはOSの一部です。Vista以降のOSが使ってますからね。DirectXも立場的にはWin32APIの拡張です。
OpenGLはマイクロソフトと独自に発展してます。

Win32APIとDirectXとOpenGLは、全てグラフィックドライバと直接インターフェイスしていますよ。
ちなみにjavaがWin32APIとDirectXとOpenGLなのかは使うライブラリ次第です。
java2DだとWin32APIで、LWJGLなどを使うとOpenGLです。他にも色々ライブラリはあって、DirectXのもあったはず(うろ覚え)。
java自体がC言語で書かれているので、高速性が必要なライブラリの場合、部分的にはJNIで呼び出すC言語/C++で書きます。
「Java Native Interface - Wikipedia」
http://ja.wikipedia.org/wiki/Java_Native_Interface

【補足】
※ ビデオカード次第ですが、WindowsVista以降はOpenGLもWin32API(GDI)もDirectXでラップした機構で動いている様です。つまり、まずDirectXありきです。

Re: DXライブラリとJava

Posted: 2014年1月07日(火) 23:19
by クーゲルシュライバー
softyaさん詳しくありがとうございます、OSを介さないってことはDirectXのセキュリティとかはどうしてるんでしょうか?気にすることないですか?

動作スピードよりライブラリの仕組みのほうに話が移った感じになってすいません。

Re: DXライブラリとJava

Posted: 2014年1月07日(火) 23:23
by softya(ソフト屋)
セキュリティですか? 詳しくないですがビデオカードのドライバが担当しているはずです。
※ 正確にはドライバ自体にはWindowsOSのセキュリティ機能が絡んでいます。
ビデオカードでセキュリティ上問題に成るのは著作権保護の有る漫画とか映画とかTVの再生中でしょうかね。
そっちは詳しくないんでよく分かりません。

【補足】
OSを介さないと言うのは語弊があって、Win32APIを介さないだけでWindowsOSはアチコチに潜んでいます。
ドライバもWindowsOSの監視下です。

Re: DXライブラリとJava

Posted: 2014年1月08日(水) 00:39
by クーゲルシュライバー
セキュリティはドライバによって監視されてて、Win32api以外のOSの部分もちゃんと活動してるんですね。
良くわかりました。

Re: DXライブラリとJava

Posted: 2014年1月08日(水) 00:58
by ISLe
いまはJava2DもDirect3Dの機能を使っています。
デフォルトでDirect3Dですが、OpenGLやソフトウェアエミュレーションに切り替えることもできます。

パソコンの音がうるさくなるというのは、無駄にCPU使用率が上がっているのではないでしょうかね。
そうであればプログラムの組み方次第なので、必ずというのは不思議ですし動作が鈍くなるというのも謎です。

ウチにはJava版とDirectX版でまったく同じ内容のゲームソフトがあります。
中身は古いアーケードゲームで、速度的にはJavaが不利ですが、コンテンツとしては問題ないレベルのものです。
どちらを起動しても特に違いはなく、うるさくなったり鈍くなったりすることもありません。

DirectXはグラフィックだけではないので単純に比較はできませんね。
Javaだとキーボード入力を変換するフリーソフトなどを併用しないとゲームコントローラーを使えませんしサウンド周りも弱いですし。

Re: DXライブラリとJava

Posted: 2014年1月08日(水) 01:13
by ISLe
実質的に何もしないプログラムでも組み方次第で簡単にCPU使用率を100%にできます。
そういうプログラムを動かすとウチのマシンも途端にファンの回転が速くなります。

動作が鈍くなるというのはアンチウィルスソフトとか関係してる可能性はないでしょうかね。

Re: DXライブラリとJava

Posted: 2014年1月08日(水) 19:12
by ISLe
デバイスドライバはウィンドウズが規定する設計モデルで作られるので、OSの管理下にあります。
グラフィックドライバであればいまはWDDMという設計モデルが使用されます。
また署名によるバイナリの改ざんなどのチェックが行われ、チェックをパスしないと読み込まれない仕組みもあります。

Win32 APIはGDIを指していると思いますが、GDIはディスプレイ以外にもプリンターなど描画可能デバイスを抽象化しています。
Direct3Dであればグラフィックボード専用のAPIという意味でDirectです。
アプリケーションがデバイスを制限なしに自由に直接叩けるという意味ではありません。