ルギア君の戯言

雑多な記事。

東方地霊殿に関するメモ

やはり遅いのが気に食わず、いろいろ試してみた結果を書いてみる(テストは

wine のバージョンを 0.9.59 から 1.1.1 にあげてみた結果

シンプルかつオーソドックスな対処法である。


変化なし。無念じゃ。
ちなみに、どちらのバージョンでも Windows から d3dx9_36.dll をコピーしないと動かないよ。

winecfg でいろいろ弄ってみる

設定を間違えると東方の起動時に X が死ぬので注意が必要。

さて、いろいろ弄ってみた結果。
まずは、スローの東方地霊殿起動時のメッセージ
fixme:win:EnumDisplayDevicesW ((null),0,0x33f8d4,0x00000000), stub!
fixme:d3d:WineD3D_ChoosePixelFormat Add OpenGL context recreation support to SetDepthStencilSurface
err:d3d:WineD3D_ChoosePixelFormat Can't find a suitable iPixelFormat
fixme:d3d:WineD3D_ChoosePixelFormat Add OpenGL context recreation support to SetDepthStencilSurface
fixme:win:WINNLSEnableIME hUnknown1 (nil) bUnknown2 0: stub!
fixme:d3d:IWineD3DSwapChainImpl_GetRasterStatus (0x1e3928) : stub (once)
fixme:d3d:WineD3D_ChoosePixelFormat Add OpenGL context recreation support to SetDepthStencilSurface
err:d3d:WineD3D_ChoosePixelFormat Can't find a suitable iPixelFormat
fixme:d3d:WineD3D_ChoosePixelFormat Add OpenGL context recreation support to SetDepthStencilSurface
fixme:win:WINNLSEnableIME hUnknown1 (nil) bUnknown2 1: stub!


非常に気になるのが、調度良いピクセルフォーマットが見付からないというエラー。
mesa のバージョンが古いものと思われるが、mesa に依存するソフトが多いためパス。

DLL のオーバーライドの変更

d3dx9_36.dll のオーバーライドの変更の結果

デフォルトは Native。
Built-in や Built-in → Native にすると d3dx9_36.dll を入れる前の状態に戻る。


そのときのメッセージ。

fixme:win:EnumDisplayDevicesW ((null),0,0x33f8d4,0x00000000), stub!
fixme:d3d:WineD3D_ChoosePixelFormat Add OpenGL context recreation support to SetDepthStencilSurface
err:d3d:WineD3D_ChoosePixelFormat Can't find a suitable iPixelFormat
fixme:d3d:WineD3D_ChoosePixelFormat Add OpenGL context recreation support to SetDepthStencilSurface
fixme:d3d:IWineD3DSwapChainImpl_GetRasterStatus (0x17c5e8) : stub (once)
wine: Call from 0x7b842310 to unimplemented function d3dx9_36.dll.D3DXCreateTexture, aborting
wine: Unimplemented function d3dx9_36.dll.D3DXCreateTexture called at address 0x7b842310 (thread 001a), starting debugger...
Unhandled exception: unimplemented function d3dx9_36.dll.D3DXCreateTexture called in 32-bit code (0x7b842388).
Register dump:
 CS:0073 SS:007b DS:007b ES:007b FS:0033 GS:003b
 EIP:7b842388 ESP:0033fb3c EBP:0033fba0 EFLAGS:00200212(   - 00      - -IA1)
 EAX:7b82c499 EBX:7b8b09a4 ECX:00000000 EDX:01770134
 ESI:01770134 EDI:006f35c8
Stack dump:
0x0033fb3c:  0033fbc8 00000008 6049d568 0033fc00
0x0033fb4c:  80000100 00000001 00000000 7b842310
0x0033fb5c:  00000002 60830980 60831204 00000000
0x0033fb6c:  0033fb9c 60798e8e 00000000 00000100
0x0033fb7c:  00000000 00000000 00000000 00000000
0x0033fb8c:  00000000 00000000 00000000 00000000
Backtrace:
=>1 0x7b842388 RaiseException+0x78(code=0x80000100, flags=0x1, nbargs=0x1770134, args=0x33fbc8) [/home/lugia/wine-1.1.1/dlls/kernel32/except.c:85] in kernel32 (0x0033fba0)
  2 0x60830925 __wine_spec_unimplemented_stub+0x35(module=0x60830980, function=0x60831204) [/home/lugia/wine-1.1.1/dlls/winecrt0/stub.c:35] in d3dx9_36 (0x0033fbd0)
  3 0x6082df4c __wine_stub_D3DXCreateTextureFromFileA() in d3dx9_36 (0x01770028)
  4 0x00010001 (0x00000007)
  5 0x00000000 (0x00000000)
0x7b842388 RaiseException+0x78 [/home/lugia/wine-1.1.1/dlls/kernel32/except.c:85] in kernel32: movl0xfffffffc(%ebp),%ebx
85      }
Modules:
Module  Address                 Debug info      Name (86 modules)
PE        400000-  4c6000       Deferred        th11
ELF     60000000-6001d000       Deferred        ld-linux.so.2
ELF     6001d000-60153000       Deferred        libwine.so.1
ELF     60153000-6016b000       Deferred        libpthread.so.0
ELF     6016b000-602bf000       Deferred        libc.so.6
ELF     602bf000-602c4000       Deferred        libdl.so.2
ELF     602c4000-602ed000       Deferred        libm.so.6
ELF     602ed000-602f9000       Deferred        libnss_files.so.2
ELF     602f9000-60311000       Deferred        dinput8<elf>
  \-PE  60300000-60311000       \               dinput8
ELF     60311000-603b3000       Deferred        ole32<elf>
  \-PE  60320000-603b3000       \               ole32
ELF     603b3000-604f7000       Deferred        user32<elf>
  \-PE  603d0000-604f7000       \               user32
ELF     604f7000-60593000       Deferred        gdi32<elf>
  \-PE  60510000-60593000       \               gdi32
ELF     60593000-605f4000       Deferred        rpcrt4<elf>
  \-PE  605a0000-605f4000       \               rpcrt4
ELF     605f4000-60612000       Deferred        iphlpapi<elf>
  \-PE  60600000-60612000       \               iphlpapi
ELF     60612000-60626000       Deferred        libresolv.so.2
ELF     60626000-60670000       Deferred        dsound<elf>
  \-PE  60630000-60670000       \               dsound
ELF     60670000-60701000       Deferred        winmm<elf>
  \-PE  60680000-60701000       \               winmm
ELF     60701000-60801000       Deferred        wined3d<elf>
  \-PE  60710000-60801000       \               wined3d
ELF     60801000-6081b000       Deferred        libjis.so
ELF     6081b000-60838000       Dwarf           d3dx9_36<elf>
  \-PE  60820000-60838000       \               d3dx9_36
ELF     60838000-60857000       Deferred        d3dx8<elf>
  \-PE  60840000-60857000       \               d3dx8
ELF     60857000-608c6000       Deferred        libfreetype.so.6
ELF     608c6000-608d8000       Deferred        libz.so.1
ELF     608d8000-60902000       Deferred        libfontconfig.so.1
ELF     60902000-60922000       Deferred        libexpat.so.1
ELF     60922000-60930000       Deferred        libxext.so.6
ELF     60930000-60a19000       Deferred        libx11.so.6
ELF     60a19000-60a1e000       Deferred        libxdmcp.so.6
ELF     60a1e000-60a20000       Deferred        libxcb-xlib.so.0
ELF     60a20000-60a23000       Deferred        libxau.so.6
ELF     60a23000-60a3a000       Deferred        libxcb.so.1
ELF     60a3a000-60a5a000       Deferred        imm32<elf>
  \-PE  60a40000-60a5a000       \               imm32
ELF     60a5a000-60a5d000       Deferred        libxinerama.so.1
ELF     60a5d000-60a62000       Deferred        libxxf86vm.so.1
ELF     60a62000-60a6a000       Deferred        libxrender.so.1
ELF     60a6a000-60a70000       Deferred        libxrandr.so.2
ELF     60a70000-60a73000       Deferred        libxcomposite.so.1
ELF     60a73000-60a78000       Deferred        libxfixes.so.3
ELF     60a78000-60a81000       Deferred        libxcursor.so.1
ELF     60a81000-60ab5000       Deferred        winealsa<elf>
  \-PE  60a90000-60ab5000       \               winealsa
ELF     60ab5000-60b7a000       Deferred        libasound.so.2
ELF     60b7a000-60b91000       Deferred        msacm32<elf>
  \-PE  60b80000-60b91000       \               msacm32
ELF     60b91000-60bb7000       Deferred        msacm32<elf>
  \-PE  60ba0000-60bb7000       \               msacm32
ELF     60bb7000-60bcb000       Deferred        winejoystick<elf>
  \-PE  60bc0000-60bcb000       \               winejoystick
ELF     60bcb000-60bd6000       Deferred        libgcc_s.so.1
ELF     60bd6000-60deb000       Deferred        i915_dri.so
ELF     60deb000-60e03000       Deferred        libselinux.so.1
ELF     61ab6000-61abb000       Deferred        euc-jp.so
ELF     6413b000-6416b000       Deferred        d3d9<elf>
  \-PE  64140000-6416b000       \               d3d9
ELF     6bde5000-6bde8000       Deferred        libxdamage.so.1
ELF     6bdea000-6bdf2000       Deferred        libdrm.so.2
ELF     6be41000-6bea0000       Deferred        libgl.so.1
ELF     6c90a000-6c95b000       Deferred        advapi32<elf>
  \-PE  6c920000-6c95b000       \               advapi32
ELF     70a30000-70a38000       Deferred        libsm.so.6
ELF     70a40000-70a58000       Deferred        libice.so.6
ELF     70abe000-70b54000       Deferred        winex11<elf>
  \-PE  70ad0000-70b54000       \               winex11
ELF     76c67000-76c7b000       Deferred        midimap<elf>
  \-PE  76c70000-76c7b000       \               midimap
ELF     77809000-77822000       Deferred        d3dx9_37<elf>
  \-PE  77810000-77822000       \               d3dx9_37
ELF     7b069000-7b0a0000       Deferred        dinput<elf>
  \-PE  7b070000-7b0a0000       \               dinput
ELF     7b800000-7b92d000       Dwarf           kernel32<elf>
  \-PE  7b820000-7b92d000       \               kernel32
ELF     7bc00000-7bca2000       Deferred        ntdll<elf>
  \-PE  7bc10000-7bca2000       \               ntdll
ELF     7bf00000-7bf03000       Deferred        <wine-loader>
Threads:
process  tid      prio (all id:s are in hex)
0000000c
        00000012    0
        0000000e    0
        0000000d    0
0000000f
        00000016    0
        00000015    0
        00000011    0
        00000010    0
00000019 (D) J:\hajime\th11tr\th11.exe
        00000023    0
        00000022    0
        00000021    0
        00000020   15
        0000001f    0
        0000001a    0 <==
0000001b
        0000001c    0
Backtrace:
=>1 0x7b842388 RaiseException+0x78(code=0x80000100, flags=0x1, nbargs=0x1770134, args=0x33fbc8) [/home/lugia/wine-1.1.1/dlls/kernel32/except.c:85] in kernel32 (0x0033fba0)
  2 0x60830925 __wine_spec_unimplemented_stub+0x35(module=0x60830980, function=0x60831204) [/home/lugia/wine-1.1.1/dlls/winecrt0/stub.c:35] in d3dx9_36 (0x0033fbd0)
  3 0x6082df4c __wine_stub_D3DXCreateTextureFromFileA() in d3dx9_36 (0x01770028)
  4 0x00010001 (0x00000007)
  5 0x00000000 (0x00000000)
wine: Call from 0x7b842310 to unimplemented function d3dx9_36.dll.D3DXCreateTextureFromFileA, aborting
Windows のバージョンの変更

変化なし。デフォルトは XP。


3.1 とかに設定しても変わらないwww

Vertex Shader を None に

しても変わらない。

Pixel Shader を 無効 に

しても変わらない。

X の設定を変えてみる

デフォルトのドライバは intel


ドライバを i915 に・・・って入ってない(汗


ドライバを i810 にすると画面本体の解像度が悪くなるだけで変化なし。

X の AIGLX をオフにしてみる

変化なし。うーん・・・

mesa の設定を変えてみる

一番有力かも知れないが、場所が解からない(駄

[lugia@raralu-ra etc]$ yum list mesa*
Loading "installonlyn" plugin
Excluding Packages in global exclude list
Finished
Installed Packages
mesa-libGL.i686                          7.0.3-1m.mo4           installed
mesa-libGL-devel.i686                    7.0.3-1m.mo4           installed
mesa-libGLU.i686                         7.0.3-1m.mo4           installed
mesa-libGLU-devel.i686                   7.0.3-1m.mo4           installed
Available Packages
mesa-libGLw.i686                         7.0.3-1m.mo4           updates-released
mesa-libGLw-devel.i686                   7.0.3-1m.mo4           updates-released
mesa-libOSMesa.i686                      7.0.3-1m.mo4           updates-released
mesa-libOSMesa-devel.i686                7.0.3-1m.mo4           updates-released
mesa-source.i686                         7.0.3-1m.mo4           updates-released

とりあえず、インストールされていないパッケージがあるのでインストールしてみた


が、変化はなかった (逆にあったら困るレベルに達しているが

東方自体を 16 ビットで起動してみる

custom.exe が wine で起動しないか、未実装のため変更できず。
(エラーメッセージもない)

東方のログ

東方動作記録 --------------------------------------------- 
使えるパッドが存在しないようです、残念
DirectInput SetCooperativeLevel が使用できません
リフレッシュレートを60Hzに変更を試みます
T&L HAL で動作しま〜す
DirectSound は正常に初期化されました
---------------------------------------------------------- 

SetCooperativeLevel はキーボードなどの占有にかんする設定なので、描画には影響しない・・・はず。

Windows Native の DirectX をインストールする

http://d.hatena.ne.jp/kakurasan/20080331/p1
の方法を利用することで wine に DirectX をインストールできる。


その結果・・・「少女祈祷中」の画面が早くなったが長くなった(ぇ
タイトル画面に行ってからは変化なし。


dsound.dll も Native のを使用しないと動かない。


上のぺーじでは dsound.dll は built-in になっている。


うんぬ〜〜〜〜(壊


さらに言うと終了時に東方が落ちるようになった(駄
(正常に終了しなくなった)


余談だが、音楽は通常の速度で再生されている。


地霊殿の漢字が間違ってました(^_^;