今夜も Wine で乾杯! - 21本目at LINUX
今夜も Wine で乾杯! - 21本目 - 暇つぶし2ch414:login:Penguin
18/02/17 17:40:09.90 KjUUJ1nJ.net
 call set_window_pos()
--> wine/dlls/user32/winpos.c
--> X11DRV_WindowPosChanging()
--> X11DRV_create_win_data()
--> dlls/winex11.drv/window.c :
  static void create_whole_window( struct x11drv_win_data *data )
--->
data->whole_window = XCreateWindow(
       data->display, root_window, pos.x, pos.y,
       cx, cy, 0, data->vis.depth, InputOutput,
       data->vis.visual, mask, &attr );
という流れのようです。

415:login:Penguin
18/02/17 17:41:22.28 KjUUJ1nJ.net
以下を見ると、親が、DesktopWindow の時のみ、create_whole_window() が呼び出されている
らしいことが分かります。
static struct x11drv_win_data *X11DRV_create_win_data( HWND hwnd, const RECT *window_rect,
                            const RECT *client_rect ) {
  Display *display;
  struct x11drv_win_data *data;
  HWND parent;
  if (!(parent = GetAncestor( hwnd, GA_PARENT ))) return NULL; /* desktop */
  /* don't create win data for HWND_MESSAGE windows */
  if (parent != GetDesktopWindow() && !GetAncestor( parent, GA_PARENT )) return NULL;
  if (GetWindowThreadProcessId( hwnd, NULL ) != GetCurrentThreadId()) return NULL;
  display = thread_init_display();
  init_clip_window(); /* make sure the clip window is initialized in this thread */
  if (!(data = alloc_win_data( display, hwnd ))) return NULL;
  data->whole_rect = data->window_rect = *window_rect;
  data->client_rect = *client_rect;
  if (parent == GetDesktopWindow()){
    create_whole_window( data );
    TRACE( "win %p/%lx window %s whole %s client %s\n",
        hwnd, data->whole_window, wine_dbgstr_rect( &data->window_rect ),
        wine_dbgstr_rect( &data->whole_rect ), wine_dbgstr_rect( &data->client_rect ));
  }
  return data;
}

416:login:Penguin
18/02/17 17:42:23.86 KjUUJ1nJ.net
>>403 の訂正:
CreateWindowExW()
--->
WIN_CreateWindowEx()
 call set_window_pos()
--> wine/dlls/user32/winpos.c
--> X11DRV_WindowPosChanging()
--> X11DRV_create_win_data()
--> dlls/winex11.drv/window.c :
  static void create_whole_window( struct x11drv_win_data *data )
--->
data->whole_window = XCreateWindow(
       data->display, root_window, pos.x, pos.y,
       cx, cy, 0, data->vis.depth, InputOutput,
       data->vis.visual, mask, &attr );

417:login:Penguin
18/02/17 18:08:08.76 KjUUJ1nJ.net
ちなみに、
1. ~/.wine
2. ~/wine
は別物です。1は、binary をインストールした際に出来るデフォルトのフォルダ
ですよね。2. は、git からソースを持ってきた時にできるディレクトリです。
まずは、バイナリをインストールして動作してから、ソースを持ってきてください。

418:login:Penguin
18/02/17 18:27:32.24 1JDlaACg.net
半透明化はWin32API側でどうやっているの? Linuxネイティブなアプリでは?
SetLayeredWindowAttributesであれば、user32.dllからUSER_Driverを介してwinex11.drvが呼ばれて、
window.c内のsync_window_opacityで_NET_WM_WINDOW_OPACITYにα値を設定している様子が見て取れる
URLリンク(github.com)
TRACEで表示しているメッセージを確認するには環境変数WINEDEBUGを使って、
WINEDEBUG=win,x11 みたいにカンマ区切りで指定する。細かくは
URLリンク(wiki.winehq.org) に書いてある。
あとは、dlls配下の各ディレクトリでもmake && sudo make instlallできるので
特定のDLLファイルしか変更しないのであれば、この方法でビルド時間を短縮できるぞ。

419:login:Penguin
18/02/17 18:42:48.23 cvAP0C15.net
デバッグ大変だな。めんどくさそう。
仕事じゃないと俺はやらないだろうな。

420:login:Penguin
18/02/17 19:41:54.60 J9G7l4mf.net
自分はimm32関連(日本語入力)APIを修正しようとeclipceでコンパイル環境作ったはいいけど
ネイティブのウィンドウマネージャ関連の知識不足でソースの意味がわからず寝かせてある・・・

421:login:Penguin
18/02/17 19:54:02.08 Tf7u8zkg.net
>>407
Linux Nativeアプリの場合、32BIT COLOR にすると、A,R,G,B の 4つの値を
ドットの「色」として指定できます。Aがα値です。このようなことは、Windows
では出来ないと思います。Windowsの場合、CreateWindowExのdwExStyle に
WS_EX_LAYEREDを指定すると透明、半透明が扱えるようになります。
1.完全に「透明になる色」を24BIT値で1色指定できます。この色で描いたドットは、
 デスクトップまで透けて見えるようになります。見た目だけではなく、Windowメッ
 セージも下のWindowに伝達されてしまうことになりますが。
2.ドットごとではなく、Window全体のα値を1つ(1BYTE)だけ指定できます。
 ドットごとでは無いので、全体的に透明度が決まってしまいます。
1と2は完全に別の概念です。

LinuxのARGB値は、ドット毎に指定できるので、Windowsの機能を包含していると
言えます。逆に Windowsでは、同じ事は出来ないはずです。

422:login:Penguin
18/02/17 19:57:46.46 Tf7u8zkg.net
/wine/dlls/winex11.drv/x11drv.h
に次のような構造体があり、この whole_window というのが大事らしい:
/* x11drv private window data */
struct x11drv_win_data {
Display *display; /* display connection for the thread owning the window */
XVisualInfo vis; /* X visual used by this window */
Colormap colormap; /* colormap if non-default visual */
HWND hwnd; /* hwnd that this private data belongs to */
Window whole_window; /* X window for the complete window */
Window client_window; /* X window for the client area */
RECT window_rect; /* USER window rectangle relative to parent */
RECT whole_rect; /* X window rectangle for the whole window relative to parent */
RECT client_rect; /* client area relative to parent */
XIC xic; /* X input context */
BOOL managed : 1; /* is window managed? */
BOOL mapped : 1; /* is window mapped? (in either normal or iconic state) */
BOOL iconic : 1; /* is window in


423:iconic state? */ BOOL embedded : 1; /* is window an XEMBED client? */ BOOL shaped : 1; /* is window using a custom region shape? */ BOOL layered : 1; /* is window layered and with valid attributes? */ BOOL use_alpha : 1; /* does window use an alpha channel? */ int wm_state; /* current value of the WM_STATE property */ DWORD net_wm_state; /* bit mask of active x11drv_net_wm_state values */ Window embedder; /* window id of embedder */ unsigned long configure_serial; /* serial number of last configure request */ struct window_surface *surface; Pixmap icon_pixmap; Pixmap icon_mask; unsigned long *icon_bits; unsigned int icon_size; };



424:login:Penguin
18/02/17 20:00:42.49 Tf7u8zkg.net
>>407
後半の二つ。自分に取っては、かなり貴重な情報です。助かります。

425:login:Penguin
18/02/17 20:11:22.91 Tf7u8zkg.net
>>407
XWindow で透明化。これはやってみて実際に出来ました:
URLリンク(stackoverflow.com)
how-to-create-semi-transparent-white-window-in-xlib
子ウィンドウを入れてみても、ちゃんと出来ました。
ただし、子ウィンドウには、Win32のような、タイトルバーは付ききませんでした。
XWindow に詳しい人によれば、XWindow の Window Manager は、
Win32 の MDI のような事は、サポートしていないらしいです。絶対か
どうかは分かりませんが。
実験してみると、子ウィンドウも、親ウィンドウも、ABI で、XMoveWindow
でスムーズに動かせました。
ただし、Wineの場合、子ウィンドウに直線や文字が書かれていて、かつ、背景が透明な場合、
スムーズには動かせません。

426:login:Penguin
18/02/17 21:31:43.98 cvAP0C15.net
Win32APIだけじゃなく、X Windowについても知っておかないといけないのか
面倒臭っ・・・
普段使ってるだけでずいぶん楽してたんだな。

427:login:Penguin
18/02/17 22:08:41.04 eqmjcJnH.net
面白そうだけど時間ねえな……
>>411を見る限りだとuse_alphaは持ってるけどAlpha値自体はもうX11の構造体にいれてるのかな?
まあ遅くなる理由とか検討つかんけど……

428:396
18/02/18 01:13:22.20 DznsC7ZZ.net
WINEにおいて、
1. MDIのCMDIChildWndのCViewのCLIENT領域全体(子ウィンドウの
  中全体と言ってもよい) に >>410の1.の色を塗って、完全透明
  にしている時は、CMDIChildWndのタイトルバー(子ウィンドウの
  タイトルバー)をドラッグしても高速に動かせる。
2. 1のCViewの中に、pDC->LineTo()で直線を一本描いた状態にしてから
  同じ事をしようとすると、とても遅くなる。
3. 2.は、直線の代わりに pDC->TextOut() で文字を描いても同様に遅く
  なる。
4. 推定では、Wineは、Win32のCreateWindow系で、Parent Window が
  Desktop 以外の場合、XWindow の Window を使わず、自前で
  Parent Window の中に画像を合成して子Windowを模倣している。
5. 4.の様にしている理由は、推定だと Window Manager の種類による
  挙動の違いに患わされずに安定して Emulation するためかも知れ
  ない。
6. その結果、XWindow の ARGB 値による高速な透明処理を利用できな
  くなり、低速になる。
7. しかし、なるべく低速にならないようにするため、少なくとも、
  子ウィンドウの中全体が完全透明な場合については、対策が取ら
  れており、高速にドラッグできるようになっている。
8. その結果、2, 3 のような条件の時のみ遅くなると推定される。

429:login:Penguin
18/02/18 01:24:45.49 smHwezpH.net
推定じゃなくて直接聞いたら?

430:login:Penguin
18/02/18 01:56:23.18 HH6qVqdM.net
>>417
どうやって?

431:406
18/02/18 02:29:31.78 dARugMLm.net
>>416
すまん、ウィンドウの半透明化処理(LWA_ALPHA)と勘違いしてた。
ウィンドウ領域内の特定色で書いた箇所を透過させる場合(LWA_COLORKEY)ね。
ソースを調べたら、WineではX11のShape Extensionを使ってウィンドウの形状を変更することで、
「見た目だけではなく、Windowメッセージも下のWindowに伝達すること」を実現しているようだ。
具体的にはupdate_surface_region()で1ピクセルごとにピクセル値を比較して、
XShapeCombineRectanglesに指定する矩形領域を作っている。
URLリンク(github.com)
415の2.,3.の条件だと遅くなるとすると、ピクセル値を比較する処理は1.と同じなので、
矩形が大量になったときに、X側で描画性能が低下するのではないかと思うぞ。
StackOverflowの記事はShape Extensionを使っていないので筋違いだ。

432:login:Penguin
18/02/18 04:20:47.62 HH6qVqdM.net
>>419
なるほど。
1つ質問です。
はっきりとは書いてなかったのですが、>>416の遅くなる条件であるところの 2,3 の場合
においても、CMainFrame、つまり、アプリケーション全体の Main の Window のタイトルバーを
ドラッグした場合は、遅くなりません。いたって高速にドラッグできます。
>>419 が正しいなら、どうして、X は、この場合だけは速く、CMDIChildWnd の場合だけは
遅く動作するのでしょうか???

433:login:Penguin
18/02/18 04:57:21.33 HH6qVqdM.net
↓の構造体の dc_rect の矩形が子ウィンドウを模倣するために使われているかも知れません:
/* X physical device */
typedef struct {
  struct gdi_physdev dev;
  GC      gc;     /* X Window GC */
  Drawable   drawable;
  RECT     dc_rect;    /* DC rectangle relative to drawable */
  RECT     *bounds;    /* Graphics bounds */
  HRGN     region;    /* Device region (visible region & clip region) */
  X_PHYSPEN   pen;
  X_PHYSBRUSH  brush;
  int      depth;    /* bit depth of the DC */
  ColorShifts *color_shifts; /* color shifts of the DC */
  int      exposures;  /* count of graphics exposures operations */
} X11DRV_PDEVICE;
BOOL X11DRV_LineTo( PHYSDEV dev, INT x, INT y ) {
  X11DRV_PDEVICE *physDev = get_x11drv_dev( dev );
  POINT pt[2];
  GetCurrentPositionEx( dev->hdc, &pt[0] );
  pt[1].x = x;
  pt[1].y = y;
  LPtoDP( dev->hdc, pt, 2 );
  add_pen_device_bounds( physDev, pt, 2 );
  if (X11DRV_SetupGCForPen( physDev ))
    XDrawLine(gdi_display, physDev->drawable, physDev->gc,
         physDev->dc_rect.left + pt[0].x, physDev->dc_rect.top + pt[0].y,
         physDev->dc_rect.left + pt[1].x, physDev->dc_rect.top + pt[1].y );
  return TRUE;
}

434:login:Penguin
18/02/18 05:32:50.78 HH6qVqdM.net
/wine/dlls/user32/painting.c の中の、
// Set the visible region and X11 drawable for the DC associated to a given window.
static void update_visible_region( struct dce *dce )
の中に、
USER_Driver->pGetDC( dce->hdc, dce->hwnd, top_win, &win_rect, &top_rect, flags );
とあって、
void CDECL X11DRV_GetDC( HDC hdc, HWND hwnd, HWND top, const RECT *win_rect,
const RECT *top_rect, DWORD flags )
が呼び出される。引数に hwnd と top、win_rect と top_rect が対になっているらしいことに注意。
この関数の中で、x11drv_escape_set_drawable escape; の
escape.dc_rect に、win_rect の top_rect の (left, top) からの相対座標が入れられる。
そして、ExtEscape( hdc, X11DRV_ESCA


435:PE, sizeof(escape), (LPSTR)&escape, 0, NULL ); と ExtEscape() が呼び出される。 escape = X11DRV_ESCAPE; escape.code = X11DRV_SET_DRAWABLE; in_data = &escape; の状態で、 X11DRV_PDEVICE *physDev = get_x11drv_dev( dev ); const struct x11drv_escape_set_drawable *data = in_data; physDev->dc_rect = data->dc_rect; となる。physDev->dc_rect が、>>421 の dc_rect に他ならない。 つまり、HWND hwndのwin_rectの、HWND topの左上座標からの相対座標が、 physDev->dc_rect に入ることになると思われる。hwndの「最上位の親」が topだとすると、topだけが XCreateWindow()された本物のWindowであって、 hwnd は 擬似Windowであるとして辻褄が合う。hwndへの描画は、 実は座標だけを修正して top の(本物の X )Window に書き込まれているだけ かも知れない。



436:login:Penguin
18/02/18 12:58:43.05 HH6qVqdM.net
結論的には、Wine では、完全透明色が設定されている全ての LAYERED_WINDOW に
対して、Idle状態の時か、または、50(ms) 毎に、Windowアプリのメッセージループ
の中から自動的に、>>419 の update_surface_region() が呼び出されるようになっ
ているらしいです。この条件のWindowがあって、かつ、update_surface_region() の
処理が重い場合に、動作が遅くなる可能性が高いです。Dirty Bitのようなものは、
今のところ見つかっていませんので、何もしなくても常に重くなるのでしょうか。
【詳細】
flush_window_surfaces() なる関数が、定期的に呼び出される。
典型的なタイミングは、PeekMessage() の中からであり、GetMessage()では、
check_for_driver_events() を介して呼び出される。
flush_window_surfaces() の中に次のようなマクロ呼び出しがある :
LIST_FOR_EACH_ENTRY( surface, &window_surfaces, struct window_surface, entry )
surface->funcs->flush( surface );
ここで、
/* iterate through the list using a list entry */
#define LIST_FOR_EACH_ENTRY(elem, list, type, field) \
for ((elem) = LIST_ENTRY((list)->next, type, field); \
&(elem)->field != (list); \
(elem) = LIST_ENTRY((elem)->field.next, type, field))
であり、上記は、window_surfaces リストに登録されている全ての
window_surface *surface について、window_surface_funcs *funcs の
関数ポインタ flush の関数を呼び出すことになり、結局、
関数 x11drv_surface_flush() が呼び出されることになる。
関数 x11drv_surface_flush() の中に
if (surface->is_argb || surface->color_key != CLR_INVALID) update_surface_region( surface );
とある。update_surface_region() は、>>419 に書かれている関数。

437:396=422
18/02/18 13:53:01.38 HH6qVqdM.net
該当の条件の時、新たには何の描画もしていない静止状態でも、Linuxのシステム・モニターで
CPUパワーが膨大に消費されていることを確認しました。このことは、>>423 を裏付ける物です。
だとすると、Dirty Bit を導入して、update_surface_region()の頻度を下げれば、この低速化
は修正できる可能性が出てきました。LineTo, TextOut, MoveWindow, SetWindowPos,
ShowWindow などを使ったときだけ、DirtyBit を 1にして、1の時だけ update_surface_region()
を呼び出し、呼び出した後には 0 にすれば良いのではないかということです。
条件は:
1. WINEを使用して Windowsアプリを走らせていること。
2. アプリ内で CreateWindowEx() のdwExStyle に WS_EX_LAYERED を指定して Windowを作成
  済みであること。
3. さらに、SetLayeredWindowAttribute() に LWA_COLORKEY を指定して「完全透明色」を
  指定していること。
4. その Window の背景を「完全透明色」で消去していること。
5. その Window 内部に通常色で、LineTo() や TextOut() によって図形や文字を
  描いた後であること。
です。
MDIを使っている事や、CMDIChildWnd 動かすかどうかは関係ない様です。
CMainFrame をドラッグした時には遅く感じないのは、その動作についてはシステムが CPU
の優先順位を上げているからではないかと思います。

438:396
18/02/18 14:19:00.83 HH6qVqdM.net
>>419 さんの指摘は凄く役立ちました。有難うございます。
ただし、こっちの調査不足のせいが大きいのでしょうが、以下の部分は、今回の
結果とは違っていたようです:
>416の2.,3.の条件だと遅くなるとすると、ピクセル値を比較する処理は1.と同じなので、
>矩形が大量になったときに、X側で描画性能が低下するのではないかと思うぞ。
「X側の描画性能の低下」が原因ではなく、「ピクセル値を比較する処理」自体が、
実は「静止状態」でも、常時、大幅に増加していた、ということです。
何の変化がないときにでも、百万ピクセルを比較し、ランレングスを導き出す処理を、
原則的には秒間20回もやっています。
また、図形が複雑だと、システムコールを呼び出す回数がランレングスの変化の回数倍
されます。例えば、直線をN本引いた場合、システムコールの回数が原則 3N (倍)になります。
縦方向が500ドットのWindowで、1本の直線を引いた場合、一回の処理で、最低でも
6,000回のシステムコールが呼び出されます。これが秒間20回も行われますので、
最低で、秒間12万回のシステムコールとなります。1回のシステムコールは、5(μs)
くらいはどうしてもかかるので、これだけで、0.6(秒)もかかってしまいます。
つまり、1秒間に0.6秒も無駄なシステムコールに時間を取られていると見積もれます。
直線を2本にすると、これだけでCPUがフルパワー状態になります。

439:396
18/02/18 14:38:25.11 HH6qVqdM.net
【厳密化】
1. 多分、6,000回ではなく、4,500回程度でした。
2. 比較処理自体は、図形の複雑さとは無関係にほぼ一定の重さです。
3. 図形が複雑な場合、システムコールの回数が増えます。
4. 横方向の1つのランレングスで、3つのシステムコールが呼ばれます。
5. 図形が何も描かれていない場合、1つのy座標に対して、1つのランレングスです。
6. N 本の直線の場合、大体で言えば、3N 個のランレングスになります。
7. だから、1つのy座標に対し、9N 個のシステムコールが呼ばれることになります。
8. 縦 500 ドットの場合、500*9N = 4500 N 回のシステムコールとなります。
9. よって、中に描かれている直線の本数が増えると、大体 O(N) で処理時間が
  増えます。
10. 文字を描いた場合、大体、文字の複雑さに比例して処理時間が増えます。

440:396
18/02/18 15:25:59.15 HH6qVqdM.net
>>426
【訂正】
「6.」のランレングスの個数は、3N個ではなく、2N+1 個でした。
お騒がせしました。

441:login:Penguin
18/02/18 16:08:39.77 dARugMLm.net
>>426
update_surface_regionの方が効率悪そうなので、X側の描画性能が原因と推測した部分は撤回する。
Shape Extensionの仕様を見ると、
矩形領域ではなくマスク用のPixmapを指定する方法も採れるから、
BitBltで効率よくマスクを作ればそっちの方が早くなるかもと思ってみたり。
あと、MDIウィンドウがXのWindowではないことは、xwininfoコマンドの結果でも確認できる。

442:396
18/02/18 17:01:36.91 hqeoLLBF.net
>>428
>矩形領域ではなくマスク用のPixmapを指定する方法も採れるから、
>BitBltで効率よくマスクを作ればそっちの方が早くなるかもと思ってみたり。
少なくともその方法だと、図形の複雑さによらずに安定して同じ処理時間で
済みますね。それと当然、BitBlt はハードウェアの補助が得られます。
あと、システムコールも全体で数回しか呼ばなて済みますし。

443:396
18/02/19 12:40:07.08 v4nZjJQ1.net
特定のアプリの場合にだけは、自作の user32.dll.so を読み込ませる事が出来ない。
WINEDLLPATH, WINEPATH を試してみたが、今のところ上手く行かない。

444:396
18/02/19 15:28:56.74 v4nZjJQ1.net
調べてみると、/wine/libs/wine/loader.c の中の build_dll_path()
関数の中で、環境変数 WINEDLLPATH が、読み取られ、: を 0x00に
変えてから、dll_paths[] 配列に : で区切られたそれぞれの文字列
の先頭アドレスを代入している。
しかし、その処理に入る前に、get_dlldir() 関数が NULL 以外を返した場合、
dll_paths[0] にその関数が返した文字列のアドレスを入れてしまう。
そして、実際の get_dlldir() は、"/usr/local/bin/../lib/wine"
という文字列を返してくるので、そっちのパスの方が、WINEDLLPATH
の優先順位よりも上になってしまう。そして、
/* retrieve the default dll dir */
const char *get_dlldir( const char **default_dlldir )
{
*default_dlldir = DLLDIR;
return dlldir;
}
となっているが、DLLDIR が全ての拡張子の全ファイルを全文検索しても
どこにも定義されておらず、参照されているのも唯一この関数だけだった。
これだと、WINEDLLPATH で「Override」できないのも当然だけど、
そもそも、DLLDIR がどこで定義されているのかが分からないので
誰かの教えをいただきたいです。

445:login:Penguin
18/02/19 15:47:21.84 qkc2SRTD.net
見つかりました。wine/libs/wine/Makefileの中で、
config_EXTRADEFS = \
  -DBINDIR='"${bindir}"' \
  -DDLLDIR='"${dlldir}"' \
  -DLIB_TO_BINDIR=\"`$(MAKEDEP) -R ${libdir} ${bindir}`\" \
  -DLIB_TO_DLLDIR=\"`$(MAKEDEP) -R ${libdir} ${dlldir}`\" \
  -DBIN_TO_DLLDIR=\"`$(MAKEDEP) -R ${bindir} ${dlldir}`\" \
  -DBIN_TO_DATADIR=\"`$(MAKEDEP) -R ${bindir} ${datadir}/wine`\"
というのが。単語検索していたのが鬼門でした。

446:396
18/02/19 19:22:56.55 WuPPo4Ry.net
loader.c の build_dll_path() の修正と、user32.dll.so の修正を、
自分のアプリだけに適用する事に成功しました。

447:396
18/02/20 03:10:39.77 nCkYsCc8.net
surface が NULL ではない場合、xxx->pLineTo() は、X11DRV_LineTo()
ではなく、dibdrv_LineTo() が呼び出されるような・・・。

448:396
18/02/20 05:59:07.45 nCkYsCc8.net
DirtyBit を使って、例の update_surface_region() は、
描画してないときには全く呼ばれないようにできたんですが、
まだかなり遅いです。何もしてないときにも CPU パワーがかなり消費されています。
その間、update_surface_region() が呼び出されていないことは、FIXME で
表示して確認が取れています。
なお、>>434は、windrv_LineTo() の方の間違いでした。windrv_LineTo() の場合、
簡単に surface にアクセスできるので、surface に bNeedToUpdate のような
フラグを追加して、それを 1 にして dirty bit にしています。
なぜ遅いままなのかは謎です。

449:login:Penguin
18/02/20 06:05:44.26 AmaI1OSV.net
2ch(5ch?)は人は多いけど基本的にユーザーレベルの人ばかりだから技術的な書き込みしても反応は鈍いね
Qiitaにでも書いてみたらどう?

450:login:Penguin
18/02/20 18:28:22.71 QMmYbOOf.net
本家にパッチ投稿もお願いしますw

451:396
18/02/20 18:49:16.00 nCkYsCc8.net
遅い原因の1つは、Onldle の中にあることが分かりました。
1. 必要があって、外部ツールによるファイルの更新チェックをしていたところ、
  それがとんでもなく重い事が判明。
2. SetTimer で CMainFrame にタイマーをしかけていると、CMainFrame::OnCmdMsg()
  が、WM_TIMER メッセージが来る度に、それを何倍にも掛け算した回数だけ呼び
  出される事が判明。例えば、秒間 N 回のタイマーを仕掛けると、OnCmdMsg が、
  10*N 回 呼び出されるような感じです。タイマーメッセージがくる度に、
  メニューなどを更新するためのメッセージが来ているような気がします。
  多分、本家 Windows では、タイマーメッセージが来ても、そのような事には
  ならないんじゃないかと思います。 通常、OnCmdMsg は頻度が低いことが
  前提になっているので、その中で多少重い処理をしていると、とんでもなく
  重たくなる。
なお、透明色を使っている場合、update_surface_region の中の処理の軽重に
よって、描画速度が大幅に変わることも確認しました。
ランレングスを数えてリージョンを add_row している箇所を、単純に何も
数えずに行全体で、1個だけ add_row するように


452:修正してみると、描画が だいぶ速くなりました(透明にはなりませんが。)。



453:login:Penguin
18/02/20 18:56:15.10 nCkYsCc8.net
>>437
そうしたいんですが、何かと大変なんです。
1. メールアドレスの登録するのが、Linuxからだと大変。
2. git の仕様が良く分からない。
3. 回線が遅いので、Project を Fork して、git が Tree 全体を
 アップロードしようとしてしまったりなんかすると大変な事になる。
4. だから、一部のファイルだけを UL したいが、コミュニケーションの
 問題から事情を伝えて、そこまで行くかどうか分からない。
5. だから、独自にオーバーライドしようとしたのが、先日からここでも
 書いていたことです。loader を修正して、かつ、環境変数を変えて
 やれば、本家と統合しなくても、部分書き変えのような事が出来る。

454:login:Penguin
18/02/20 18:59:20.15 TT83z4l8.net
>>439
githubからでもプルリクエスト受け付けてるよ

455:login:Penguin
18/02/20 19:09:08.87 LN/W3cN7.net
先にURLリンク(bugs.winehq.org)に書いた方がいい
報告してあるとパッチ送る時説明が楽になるから

456:login:Penguin
18/02/20 19:12:23.54 hMkWg0ue.net
描画が早くなるならありがたい
素のWindowsより異様に遅いゲームとかあるし

457:396
18/02/20 20:06:46.63 ErFPSqeX.net
結論だけ書いておくと、surfaceが非NULLの時の LineTo の実体は、
windrv_LineToで、surface を lock する以外は、dibdrv_LineTo と同じ。
dibdrv_LineToは、bits なるpixel配列に 32BITの色値を書き込む。
実際は汎用性のため、必ずandしてからxorする。SOLIDモードの場合、and値は0。
xor値は、00RRGGBB で、最上位バイトは0。
実際への画面の反映は、定期的に「xxx->flush」なる関数ポインタを介して、
x11drv_surface_flush() を呼び出す事で行う。その中で、議題になっている
update_surface_region() も呼ばれる。最後に bits の内容を実画面に反映させる
ため、XShmPutImage()または、XPutImage(), XFlush()を行う。
surface->image の pixel バッファは、bits[] 配列と共通らしい。
つまり、Linux の描画関数は全く使わずに自前で画像をpixel配列に合成してから、
定期的に、XPutImage() などで実が面に描き込む、というようなことをやっているらしい。

458:396
18/02/21 16:48:35.77 SJPTXnf1.net
update_surface_region() が遅いんだと思って、
XShape の作成を、XShapeCombineRectangles() を使う方式から、
XCreateBitmapFromData() と XShapeCombineMask()
を使う方式へと変えた。
すると、1146 x 745 のサイズの Window で、
1. 自前のコードによる 1bit の mask bitmap 作成にかかる時間 :
796 (us)
2. XCreateBitmapFromData() と XShapeCombineMask() にかかる時間 :
38 (us)
3. XShmPutImage() と XFlush() ; x11drv_surface_flush()内 の両方にかかる時間 :
94 (us)
4. MDI Child Wnd をドラッグするときに、x11drv_surface_flush() が
  呼び出される時間間隔 :
  3~100 (ms) ---> 秒間 10回~330回
5. 肉眼で描画が更新されるまでに x11drv_surface_flush() が呼び出される回数 :
数10回 以上あることが多い。

1.~4. だけみると、高速に処理されている様に見えるけど、5. だけが理解できない。
カウンタを設けて数えてみると、実際に目では更新が起きてないのに、
ちゃんと、1~3 の全ての関数が数十回も呼び出されている。
ちゃんと「XFlush()」されているのに、なぜだろう????

459:login:Penguin
18/02/21 17:03:51.93 SJPTXnf1.net
XSync() を追加しても、XShmPutImage() を XPutImage() に修正しても、
何をやっても見た目だけが更新されない。

460:login:Penguin
18/02/21 17:09:56.25 iuEniYB2.net
>>444
> update_surface_region() が遅いんだと思って、
> XShape の作成を、XShapeCombineRectangles() を使う方式から、
> XCreateBitmapFromData() と XShapeCombineMask()
> を使う方式へと変えた。
こうするとなんで速くなるの?

461:396
18/02/21 17:35


462::51.39 ID:SJPTXnf1.net



463:login:Penguin
18/02/21 17:39:34.11 SJPTXnf1.net
X の同期の問題ではなく、MDI Child Wnd の TITLE BAR をドラッグするとき、
なぜか、数秒経ってから、x11drv_surface_flush() がまとめて何十回も呼び出されている
可能性があるかも・・・。
デバッグ表示をリアルタイムで見ていると、見た目が変化する直前までデバッグ表示が
全く出ず、見た目が変化する直前に、どどっと、数十回分の x11drv_surface_flush()
がまとめて出てくる、という現象が起きている。

464:login:Penguin
18/02/21 17:56:34.37 iuEniYB2.net
>>448
flushしてないだけではなく?

465:396
18/02/21 17:57:13.78 SJPTXnf1.net
以下のコードが気になる。
message_count を減少させるのは唯一、wait_message() しか見つからなかった。
後は、check_for_driver_events() の中で単調増加してしまう。
メッセージがたまって初めて、flush_window_surfaces() が呼び出されるような
コードにも
/* check for driver events if we detect that the app is not properly consuming messages */
static inline void check_for_driver_events( UINT msg )
{
  if (get_user_thread_info()->message_count > 200) {
    flush_window_surfaces( FALSE );
    USER_Driver->pMsgWaitForMultipleObjectsEx( 0, NULL, 0, QS_ALLINPUT, 0 );
  }
  else if (msg == WM_TIMER || msg == WM_SYSTIMER) {
    /* driver events should have priority over timers, so make sure we'll check for them soon */
    get_user_thread_info()->message_count += 100;
  }
  else get_user_thread_info()->message_count++;
}
static DWORD wait_message( DWORD count, const HANDLE *handles, DWORD timeout, DWORD mask, DWORD flags )
{
  DWORD ret = USER_Driver->pMsgWaitForMultipleObjectsEx( count, handles, timeout, mask, flags );
  if (ret == WAIT_TIMEOUT && !count && !timeout) NtYieldExecution();
  if ((mask & QS_INPUT) == QS_INPUT) get_user_thread_info()->message_count = 0;
  return ret;
}

466:396
18/02/21 17:58:18.49 SJPTXnf1.net
BOOL WINAPI DECLSPEC_HOTPATCH PeekMessageW( MSG *msg_out, HWND hwnd, UINT first, UINT last, UINT flags )
{
  MSG msg;
  USER_CheckNotLock();
  check_for_driver_events( 0 );
  if (!peek_message( &msg, hwnd, first, last, flags, 0 ))
  {
    DWORD ret;
    flush_window_surfaces( TRUE );
    ret = wow_handlers.wait_message( 0, NULL, 0, QS_ALLINPUT, 0 );
    /* if we received driver events, check again for a pending message */
    if (ret == WAIT_TIMEOUT || !peek_message( &msg, hwnd, first, last, flags, 0 )) return FALSE;
  }
  check_for_driver_events( msg.message );
  /* copy back our internal safe copy of message data to msg_out.
   * msg_out is a variable from the *program*, so it can't be used
   * internally as it can get "corrupted" by our use of SendMessage()
   * (back to the program) inside the message handling itself. */
  if (!msg_out)
  {
    SetLastError( ERROR_NOACCESS );
    return FALSE;
  }
  *msg_out = msg;
  return TRUE;
}

467:396
18/02/21 18:24:27.09 SJPTXnf1.net
>>449
PeekMessage()を回しているだけの時で、メッセージがキューに残り続けている場合、
メッセージを 200回 (100回?) PeekMessage するまでは、flush_window_surfaces()
されないコードになっている気がしませんか・・・。

468:login:Penguin
18/02/21 18:32:33.53 SJPTXnf1.net
GetMessage() の方もほぼ同じような感じかも。。
とにかく、flush_window_surfaces() がとてつもなく長い間、呼ばれないことが
あるコードになっている様に見えて、実際、実験してもそう思える。

469:login:Penguin
18/02/21 18:38:45.85 SJPTXnf1.net
そうか、もともとは、dirty bit 方式じゃないから、flush_window_surfaces() を呼ぶと、
再計算する必要が無いのに必ず再計算されてしまうから、呼び出す頻度を下げるしか
高速化する方法が無いために、そんな風なコードになっているのかもしれない。

470:login:Penguin
18/02/21 18:41:37


471:.14 ID:SJPTXnf1.net



472:396
18/02/21 18:58:29.00 SJPTXnf1.net
元々の Windows では、LineTo などを実行すると瞬間的に実画面に反映される。
だから、そもそも Flush せずに見えないままの描画が残っているなんて時間は
ほぼ 0。
そう考えると、。Wine のこの実装はおかしいな・・・。
1. そもそもメッセージループを回している時しか flush される可能性が全くない
  実装になってしまっているらしい。
2. メッセージループを回していても、メッセージがキューに残っている時は、
  100回程度メッセージを読まない限り、flush されない。

Windows を「エミュレート」するのであれば、例えば、描いてから 50(ms) 経てば、
必ず flush する、という実装でなくてはならないはず。
Linux では、タイマー処理が難しいのかな???

473:login:Penguin
18/02/21 19:03:48.84 SJPTXnf1.net
1. Windows (もちろん、NT系) の場合は、メッセージ・ループ長く帰ってこないプログラムも
 絶対ダメというわけではない。
2. そういうプログラムの場合、Wine 側は、描画を、一定時間間隔で、別スレッドの
  タイマー割り込みの中などで flush するようにしないと、 正しく、Emulation 出来
  ないはず。

474:login:Penguin
18/02/21 19:05:31.10 SJPTXnf1.net
割り込みなら、別スレッドを起こす必要が無かった。スマソ。
あと、誤字訂正:
誤: メッセージ・ループ長く帰ってこないプログラムも
正: メッセージ・ループに長く帰ってこないプログラムも

475:login:Penguin
18/02/21 19:13:35.32 iuEniYB2.net
うーん
これがボトルネックになっているようには見えない
申し訳ないんだけど描画が遅くなる条件をもう一度書いてもらっていいですか?

476:396
18/02/21 23:23:31.14 4g3iPm6d.net
うーんと。それはまあちょっと置いておいて、、、。
MDI Child Wnd の TITLE BAR を Drag している最中、メッセージループは一つも
回ってないんじゃないかと思う。
だから、>>456 の「1.」に書いた「flushされる必要条件」が満たされてない。
そのため、surface の pixel配列の内容が実画面に反映されないのではなかろうか。

477:396
18/02/21 23:38:56.14 4g3iPm6d.net
ドラッグ中にマウスを静止させてしばらく待っていると、 x11drv_surface_flush() と
flush_surface_region() の両方が呼び出された事が FIXME 出力で確認できた。
静止させずにマウスをドラッグし続けると、FIXME 出力が全くでない。
しかも、それを行った時間が長いと、マウスボタンを離した後も、非常に長い間
システム全体がハングアップした様な状態になる。そして、長い沈黙の後、FIXME出力が
出る。
この沈黙の時間は、それまでドラッグしていた時間に比例しているように思える。
なぜだろう??? これはどこかに「何かが溜まっている」時の現象の様に思える。
しかし、>>450 を見ると、message_cnt は、減らされるときは、一期に 0 になるのであって、
少しずつ減らされるわけではない。
謎だ・・・。

478:login:Penguin
18/02/21 23:42:58.43 iuEniYB2.net
単にイベントを送信する側でバッファリングしてるんじゃないの?

479:login:Penguin
18/02/21 23:50:18.32 iuEniYB2.net
まあ最初からマルチスレッド意識して書いた感じではないなと思うけど90年代から開発されてるわけだしそのへんはご愛嬌じゃない

480:396
18/02/22 00:35:51.88 9+xI5ulA.net
>>450-451 辺りのソースを見ていて、背理法で語ってみたい。
仮定1:「Drag 中でも、PeekMessage されている。」 と仮定する。
仮定2. 透明化した際に重くなるのは、flush_window_surfaces() と、
    そこから呼び出される update_surface_region() のみだと仮定する。
補足: update_surface_region() は、透明化のための Shape の作成の処理が
    されるので、重い。
    flush_window_surfaces() は、update_surface_region() を呼び出す
    以外にも、XPutImage() 系の処理が入るので、さらに重い。
仮定2については、透明化時に、それ以外に重い関数が出現する可能性を否定は
できない。なぜなら、surface の処理は、透明化しない時には行われないかも
知れないからである。その場合、LineTo の関数が切り替わる。
1. FIXME で見ている限り、ドラッグ中は、それらの関数は全く呼び出されない。
2. >>451 を見ると、PeekMessage した際に、キューにメッセージが残ってないなら、
  flush_window_surfaces() が呼び出されるはず。
3. 「仮定2」 の関数は呼ばれてないのだから、キューのメッセージは、透明化され
 てない場合と同程度に高速に処理されてもおかしくない。
4. もしそうであれば、キューのメッセージはあっという間に「空」になるはず。
5. 空になったとしたら、「2.」の通りに、flush_window_surfaces() が呼び出されるはず。
6. しかし、「1.」で述べたように、実験的には、flush_window_surfaces() は呼び出されてない。
7. 矛盾である。
8. 背理法により、これは、仮定の少なくとも一方が間違っている事を意味する。

481:396
18/02/22 00:45:26.84 9+xI5ulA.net
あるいは、Peek されるだけで、一部のメッセージは取り残されるなら・・・。

482:396
18/02/22 01:30:28.67 9+xI5ulA.net
Wine で、MDI Child Wnd の TITLE BAR をドラッグしたときの処理について。
DEFWND_DefWinProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
-->case WM_NCLBUTTONDOWN
-->NC_HandleNCLButtonDown()
-->case HTCAPTION
-->SendMessageW( hwnd, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, lParam )
-->DEFWND_DefWinProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
-->case WM_SYSCOMMAND
-->NC_HandleSysCommand()
-->WINPOS_SysCommandSizeMove()
最後の関数は、タイトルバーをドラッグを開始直後に一回だけ呼び出される事
を確認した。その後のドラッグ中は呼び出されず、この関数の内部でドラッグ
の処理がされている可能性が高い。
この最後の関数の中に、次のような、メッセージ・ループがある:
if (!GetMessageW( &msg, 0, 0, 0 )) break;
if (CallMsgFilterW( &msg, MSGF_SIZE )) continue;
/* Exit on button-up, Return, or Esc */
if ((msg.message == WM_LBUTTONUP) ||
((msg.message == WM_KEYDOWN) &&
((msg.wParam == VK_RETURN) || (msg.wParam == VK_ESCAPE)))) break;
if ((msg.message != WM_KEYDOWN) && (msg.message != WM_MOUSEMOVE)) {
TranslateMessage( &msg );
DispatchMessageW( &msg );
continue; /* We are not interested in other messages */
}

483:396
18/02/22 01:32:06.83 9+xI5ulA.net
さらに次のような、枠だけを書くか、実際に動かしてしまうコードが続く :
if (!DragFullWindows)
draw_moving_frame( parent, hdc, &sizingRect, thickframe );
else {
RECT rect = sizingRect;
MapWindowPoints( 0, parent, (POINT *)&rect, 2 );
SetWindowPos( hwnd, 0, rect.left, rect.top,
rect.right - rect.left, rect.bottom - rect.top,
( hittest == HTCAPTION ) ? SWP_NOSIZE : 0 );
}

484:396
18/02/22 02:01:49.71 9+xI5ulA.net
あー。
FIXMEを消してしまっていただけだった・・・。
update_surface_region() や、flush_window_surfaces() は、
ドラッグ中でも、マウスを静止してしばらくすると呼ばれるようです。
マウスを動かしつづけていると呼ばれないらしい。

485:396
18/02/22 02:44:50.36 9+xI5ulA.net
【やっと原因判明】
CMainFrame を WS_EX_LAYERED で透明化していて、今回の条件に当てはま


486:る時に、 CMDIClientWnd のタイトルバー上でマウスの左ボタンを押し始め、そのまま マウスをずっと動かし続けると、WINPOS_SysCommandSizeMove() の中の if (!GetMessageW( &msg, 0, 0, 0 )) break; の部分の GetMessageW() 関数の中で停止してしまう。詳細は、GetMessageW() の 中で、メッセージキューが空だった場合に呼び出されるところの、 wait_objects()    ;dlls/user32/message.c -->wow_handlers.wait_message() -->wait_message()  ;dll/user32/winproc.c -->USER_Driver->pMsgWaitForMultipleObjectsEx() -->X11DRV_MsgWaitForMultipleObjectsEx() の最後の関数の中で停止してしまう。 正常なら、WM_NCMOUSEMOVE メッセージが到着することによって、関数から 戻って来るはずだと思われる。



487:396
18/02/22 10:45:19.02 9+xI5ulA.net
>>469
2つ目の WaitForMultipleObjectsEx() の中で停止してしまっていることが判明。
本来、先頭に Msg が付く方の API は、メッセージと HANDLE の両方を同時に
監視するようなコードでなくてはならないハズなのに、そうなってないらしい。
process_events() が、MotionNotify の XEvent が来ていたら WM_MOUSEMOVE
メッセージをキューにポストするらしいが、最初に一度だけ調べて XEvent が
来ていない場合は、以後、全く XEvent を調査せずに他の HANDLE 群の変化だけ
を待機してしまうらしい。
DWORD CDECL X11DRV_MsgWaitForMultipleObjectsEx( DWORD count, const HANDLE *handles,
                        DWORD timeout, DWORD mask, DWORD flags )
{
  DWORD ret;
  struct x11drv_thread_data *data = TlsGetValue( thread_data_tls_index );
  if (!data) {
    if (!count && !timeout) return WAIT_TIMEOUT;
    return WaitForMultipleObjectsEx( count, handles, flags & MWMO_WAITALL,
                     timeout, flags & MWMO_ALERTABLE );
  }
  if (data->current_event) mask = 0; /* don't process nested events */
  if (process_events( data->display, filter_event, mask )) ret = count - 1;
  else if (count || timeout) {
    ret = WaitForMultipleObjectsEx( count, handles, flags & MWMO_WAITALL,
                    timeout, flags & MWMO_ALERTABLE );
    if (ret == count - 1) process_events( data->display, filter_event, mask );
  }
  else ret = WAIT_TIMEOUT;
  return ret;
}

488:396
18/02/22 10:46:53.05 9+xI5ulA.net
【通常時、WM_MOUSEMOVE がキューへ追加される時の実行経路】
X11DRV_MsgWaitForMultipleObjectsEx()
--> process_events()
---> call_event_handler( Display *display, XEvent *event )
---> handlers[event->type]( hwnd, event );
event->type = MotionNotify (6)
---> X11DRV_MotionNotify( HWND hwnd, XEvent *xev )
XMotionEvent *event = &xev->xmotion;
INPUT input;
---> send_mouse_input( hwnd, event->window, event->state, &input );
---> __wine_send_input( HWND hwnd, const INPUT *input )
---> send_hardware_message( hwnd, input, 0 );
SERVER_START_REQ( send_hardware_message ) {
switch (input->type)
case INPUT_MOUSE:
}
---> wine_server_call( req );
---> DECL_HANDLER(send_hardware_message)
(send a hardware message to a thread queue)
---> queue_mouse_message( desktop, req->win, &req->input, req->flags, sender );
messages[MOUSEEVENTF_MOVE (1)] = WM_MOUSEMOVE
---> queue_hardware_message() : WM_MOUSEMOVE
list_add_tail( &input->msg_list, &msg->entry );
set_queue_bits( thread->queue, get_hardware_msg_bit(msg) );
--->
if (!always_queue || merge_message( input, msg )) free_message( msg );
else {
msg->unique_id = 0; /* will be set once we return it to the app */
list_add_tail( &input->msg_list, &msg->entry );
set_queue_bits( thread->queue, get_hardware_msg_bit(msg) );
}

489:396
18/02/22 10:47:48.18 9+xI5ulA.net
【WM_NCMOUSEMOVE は WM_MOUSEMOVE から修正される】
PeekMessageW() または GetMessageW() の中で、hittest が HTCLIENT 以外
の場合は、WM_MOUSEMOVE が WM_NCMOUSEMOVE に修正される :
PeekMessageW() または、GetMessageW()
---> peek_message()
---> switch(info.type)
   case MSG_HARDWARE :
---> process_hardware_message()
---> process_mouse_message() {
   if (hittest != HTCLIENT) {
    message += WM_NCMOUSEMOVE - WM_MOUSEMOVE;
    wparam = hittest;
   }

490:login:Penguin
18/02/22 15:16:45.32 9+xI5ulA.net
頭に Msg が付かない方の WaitForMultipleObjecstEx() も
挙動がおかしい。 timeout に 0 を指定しても、無限に
待機してしまうことがある。

491:396
18/02/22 16:31:11.62 9+xI5ulA.net
Msg が付く方の WaitXxxx で、usleep() で、0.3�


492:bほど停止しながら、 Polling (Loop) するようにしてから、FIXMEでメッセージを観察してみた。 普段は、usleep() 命令は、呼び出してから 0.3 秒で戻ってくる。 ところが、先日からの遅くなる条件でドラッグし続けた場合、単純な usleep() の 1命令が、呼び出してから、永久に戻ってこなくなる。ドラッグをやめると、 人間が長く感じるほどの長い時間が経過してから戻ってくる。 これは、WINEの問題ではなく、Linux Kernel の問題だろうか???



493:396
18/02/22 16:45:23.34 9+xI5ulA.net
やったことをもうちょっと詳しく書いておくと、
>>470 の X11DRV_MsgWaitForMultipleObjectsEx() の関数の2番目の
WaitForMultipleObjectsEx() の呼び出しの箇所を次の様に修正してみた。
(FIXME はもっと付けてあるが省略):
if ( timeout == INFINITE ) {
  //*中略*
  for ( ;; ) { // 苦肉の polling loop :
    ret = WaitForMultipleObjectsEx( count, handles, bWaitAll,
        0, // (ms) (指定しても上手く行かないので0にしてみた)
        bAlertable );
    if ( ret == WAIT_TIMEOUT ) {
      if ( process_events( data->display, filter_event, mask ) ) {
        ret = count;
        break;
      }
    }
    else {
      break;
    }
    FIXME( "call usleep\n" ); //(1)
    usleep(1000 * 300);    //(2) 仕様上は、300(ms)後に戻る。
    FIXME( "returned from usleep\n" ); //(3)
  }
}
else {
  ret = WaitForMultipleObjectsEx( count, handles, flags & MWMO_WAITALL,
                  timeout, flags & MWMO_ALERTABLE );
}
該当の条件の時にマウスを動かし続けると、(1)のメッセージが出た後、
(3)のメッセージが、事実上、無限に待っても出てこなくなった。ドラッグして
ないときには、usleep()の仕様通り、300(ms)後にメッセージが出てくる。

494:396
18/02/22 17:29:11.00 9+xI5ulA.net
かなり色々やったつもりだけど、ちょっとこれ以上深入りは難しいので、もう諦めようかも。
以下の上京からするとLinuxカーネルの問題かも知れない:
1. タスクバーも操作不能になる。
2. 単純な usleep() も無限に帰ってこない。

495:396
18/02/22 17:39:46.66 9+xI5ulA.net
Wineでは、昔の MSDN Library の CD もインストールは出来ただが見られなかった。
hh.exe が xxx.COL ファイルを開けないと言ってくる。
yyy.CHM ファイルは、開くことはできたが、右のペーンだけが見えて、左側の目次や
検索のぺーンには何も表示されない。
今回 WINEのソースを見て思うのは、意外とちゃんと書かれていないということ。
MsgWaitXxxx にも、戻り値が明らかに間違っている部分を発見した。
また、TRUE (1)を引数に渡す必要があるところで、1ではない非0 の値を渡している
箇所も見つかった。そのようなコードは後々問題を来すかも知れない。
それに、MsgWaitXxx もちゃんと書かれていない。同時に待機するのは、アプリ・プログラマ
がどんだけ頑張ってもかけないから API が用意されているのだが、そこに明らかな
ロジックの間違いがある。
有名なアプリだけはちゃんと動作するが、実は模倣の程度が意外と低いかも。
有名なアプリだけは動くように調整されている・・・。

496:396
18/02/22 18:45:28.30 9+xI5ulA.net
usleep() の部分を setitimer(), pause() に変えてみたら、そこは指定した
時間でちゃんと帰ってくるようになった。でも、Linux全体が停止に近い状態に
なる症状は変わらない。端末内の FIXME の表示が途中の文字まで書かれた状態で
改行までいく前に長い間停止する現象が起きてしまっている。

497:396
18/02/22 23:32:51.41 9+xI5ulA.net
X Window System は、Server と Client で通信を行っているから、Client側では処理が
一瞬で帰って来ているように見えても、Server側では処理に凄く時間がかかっている可能性
があるかもしれない。だから Client側で、関数の呼び出しの前後の時間を計測をしても
それは単にServer にコマンドを送る処理の時間を計測しているに過ぎないのかも
知れない。イメージのバイト


498:数が多いいときには、通信時のデータ・コピーに時間がかかる から多少時間がかかるかも知れないが、それはまだ表面上の時間に過ぎず、Server 側は Shapeのくり抜き処理(?)や重ね合わせの処理に膨大な時間がかかっている可能性も否定できない。 だから、XCreateBitmapFromData(), XShapeCombineMask(), XPutImage() の前後の時間を 計測しているだけでは速く見えても、見えない場所でCPUパワーを全開にしてがんばっても まだ処理を終えてないのかもしれない。 だから、Linux Kernel は、X Serverに CPU パワーを全開まで与えようとしている・・・。 Client側で計測した時間は見せかけの時間であって、処理全体の時間ではない・・・。 だから、タスクバーなども動かず、デバッグ表示の端末の文字も中途半端な場所でWAIT 状態になってしまう・・・。 これが真相だろうか?



499:396
18/02/22 23:41:51.80 9+xI5ulA.net
そういえば、update_surface_region() が呼び出されたことを示すデバッグ文字列は、後からまとめて
ドドッと出てくる。それは、文字列が「出てない」間には関数が呼ばれてないことを意味する
訳ではなく、実は呼ばれてはいるが、文字列が flush されてないか、または、flush
されていても、端末に CPU リソースが割り当てられないから、文字表示だけが行われずに
文字列がバッファに溜まった状態になってしまっている・・・・。
こう考えれば辻褄が合うかも。

500:396
18/02/23 00:00:03.49 rGoiNTvu.net
本家の Windowsでは、描画処理が重いときには、OnPaint や OnDraw の関数が終わるまで
の時間も長い。だから、メッセージがたくさんたまっているのに描画が追いついていない事は、
メッセージ・キューに残っているメッセージの個数が多い事で大体の判断が付く。だから、
InvalidateRect(NULL)をしておけば、描画が追いついてない場合は、メッセージループ
が WM_PAINTメッセージを送るタイミングを自動的に後回しにしてくれる。
ところが、X Window System の場合、実際の描画がまだ終わってない場合でも、
「描画関数」自体は一瞬にして戻ってきてしまうから、上記のアルゴリズムが「勘違い」を
起こしてしまうことがある・・・。
そらに悪い事に、WINEが、内部で Surface を持っているときには、LineTo 関数自体は高速に
処理を終えるのに、アプリが予想もしないタイミングで、時間の掛かる flush の処理が行われ
てしまう。
そうすると、OnPaint は高速に終わったと勘違いして、WM_PAINT メッセージが、マウス・メッセージに
完全に連動して大量に生成されてしまう。すると、Pending 状態の X Window の処理がどんどん
待ち行列に溜まっていってしまう。
ドラッグ中は、WM_PAINT が秒間20回も送られるのに、Server が実際の描画を終えるのは、
その何十倍も時間がかかってしまう。
こんな感じだろうか。

501:396
18/02/23 00:09:19.71 rGoiNTvu.net
さらに、>>466-467, >>469 に書いた、WINPOS_SysCommandSizeMove() は、
CWinApp などとは別の、独自のメッセージループを持っている。
そこでは、さらに、WM_PAINT が不適切に大量に発生してしまっている
可能性がある。
だんだん分かってきたかも。

502:396
18/02/23 00:23:13.75 rGoiNTvu.net
原因は推定できてきたけど、さて、どうやってこれを解決すればいいか・・・。

503:login:Penguin
18/02/23 09:55:12.25 o5jNB0tx.net
ライセンスの関係でややこしいことに成る可能性が存在するから
5chへソースコードは書かないで
github使ったほうがいい

504:login:Penguin
18/02/23 10:10:14.53 53V98ywt.net
粒度の低いパッチをちょこちょこアップすると良いのでは。
論理値のあやまりを直すやつとか。

505:396
18/02/23 12:30:36.00 rGoiNTvu.net
>>484
それでは、日本人の自分に取って手も足もでない状況になってしまうので、とても
困ります。

506:login:Penguin
18/02/23 12:34:30.91 o5jNB0tx.net
>>486
なぜ?
ココに書けば問題が生じる可能性もあるのに

507:396
18/02/23 12:36:23.19 rGoiNTvu.net
協力しにくくしにくくなるように仕向けられて、どうしようもない状態になってる気もする。
make時の表示の無駄が多すぎて、特に警告が出ていても見逃しやすいし、HDDも膨大に
消費するし、ダウンロードやアップロードにも莫大な時間がかかるし。
なんだか、アメリカと北欧の社会的環境以外ではとっても負担が大きいかも、

508:396
18/02/23 12:36:59.52 rGoiNTvu.net
>>487
意味が分かりません。

509:login:Penguin
18/02/23 12:38:43.64 o5jNB0tx.net
>>489
ここにソースコードを書けば5chが権利を主張する恐れがある
あなたが書いたものであっても
それは問題でしょう?

510:396
18/02/23 12:41:01.63 rGoiNTvu.net
MSのやり方に困った人が集まってくるのがLinux。
でも、Linuxのやり方にもまた困る。UbuntuのUpdateも自分には出来ない。
なぜなら、HDDのパーティションの容量が足りないのと、DLに時間がかかりすぎるからと、
クリーンインストールしなきゃならないから、せっかく入れた Wine や Wz, VC++ などの再
インストールに莫大な時間がかかってしまうのとで。それでやっとの思いでなんとか協力
したいと思っているのに、また、ライセンスがどうのこうのとか。
わけが分からない。LinuxやUbuntuのバグに悩まされて、しょっちゅう Logout と Login
を繰り返しながら、やっとの思いでやってます。

511:login:Penguin
18/02/23 12:42:05.80 k4GWhlfR.net
MacでWine使ってるけど似たようんだもんだわ。

512:login:Penguin
18/02/23 12:42:59.46 o5jNB0tx.net
OSSやLinuxの問題ではなくて
5chのライセンス扱いの問題

513:396
18/02/23 12:43:40.23 rGoiNTvu.net
>>490
そんな心配はないはずです。
自分は権利を放棄するつもりでやってますし、法的には Wine の LGPL が優先されて、
5ch は権利は主張できないハズ。もし、権利を主張するなら、5ch自体が人が来なくなって、
閉鎖されるでしょう。

514:login:Penguin
18/02/23 12:46:50.60 o5jNB0tx.net
>>494
OSSのソースコードを5chに書き写したらライセンスが移るかというとそうではないと思うけど
問題にされる可能性が存在する
新規のソースコードだった場合など、5chが権利を主張してOSSで扱えない可能性が出てくる

515:login:Penguin
18/02/23 12:49:19.08 l6yAbvNG.net
>>491
Linux板でそういうこと言っても住人を不快にさせるだけだよ
誰も頼んでないのに愚痴言われてもさ
ブログか何かに書けば?

516:login:Penguin
18/02/23 12:50:21.93 FG6aVYHX.net
とはいっても、勝手に転載するな、の主張は現在進行でバンバンやってますからねえ…

517:login:Penguin
18/02/23 12:52:23.01 o5jNB0tx.net
>>497
他所が権利を主張するコードの利用をOSS側が許すかという問題にかかわってきて
それは5chとは別になるね

518:396
18/02/23 13:42:27.43 rGoiNTvu.net
【ついに出来た】
x11drv_surface_flush() の中で、
update_surface_region( surface );
を実行後、
XPutImage(・・・);
XFlush( gdi_display );
XSync( gdi_display, TRUE );
XSynchronize( gdi_display, True );
で関数が終わっていたところに、試しに
usleep( 1000 * 150 ); // 0.15(秒) の待機
を追加して見たところ、「改善(感覚的な速度アップ)」が見られました。
ちゃんと、ドラッグした時に「XOR反転枠」がマウスの動きに付いてきます。
今までは、「枠」が現れすらしなかったのに。試しに WAIT 値を「小さく」して、
usleep( 1000 * 100 );
とするとダメなままでした。WAIT 値が大きいほど、感覚的に速度がアップ
したような感じになります(一種の逆転現象)。
これは、X Window の Server の処理が終わってないのに、終わったと勘違いして
次々に新しいコマンドを X Server に送ってしまっていたことで、今回の不具合
が起きていたことを裏付ける物です。Linux が CPU パワーを X Server にばかり
与えてしまい、アプリ側のコードは停止する一方て、実際の画面には何の描画も
行われなくなり、タスクバーすら全く機能しなくなる。その結果、システムが
ハングアップしたようになる。

519:login:Penguin
18/02/23 17:33:19.82 HLL3Qr1p.net
日本語でパッチの記述を書いてくれれば、英訳してくれる奴がスレにいると思うな。
最悪ぐぐる翻訳でも。
あとは日本人でwineにコミットしてる人を探してパッチを仲介してもらうとか…

520:login:Penguin
18/02/24 00:28:32.95 zOhbGEn1.net
だいぶ前のレスだけれど、 >>440 は信じるなよ。
Wineに修正を送る方法はgit format-patchで整形したパッチを
wine-devel@winehq .orgにメールする方法だからな。(前近代的に感じるかもしれないけれど)
他にも要件がいろいろあるから、 URLリンク(wiki.winehq.org) を一読した方がいいと思う。

521:396
18/02/24 02:46:13.04 OWf5FxmD.net
>>501
WINE 本家に正式採用されなくてもいいなら、github にプルリクエストを送る、なんて
事は可能なんでしょうか。
ライセンス上は、修正した箇所のソースの断片でも、どこでもいいからネット上のどこかに
アップロードしておけば良いんだと思うんですが。
ネットの回線が遅いから、自分が全く修正してない部分まで全部アップロードというのは
かなり困ります。

522:396
18/02/24 02:53:02.72 OWf5FxmD.net
要は、著作権が発生するようなソースを書かなければいいんですね。

WINE で、WS_EX_LAYERED の場合に、現状の様に XShape を使わずに、
XCreateWindow の depth に 32 を指定して、ARGB カラーを使うようにして
透明化を実験して見たところ、高速になったようです。
まだ、中途半端ですが。

523:396
18/02/24 03:51:57.07 OWf5FxmD.net
透明化、完全に上手く行きました。速度は劇的に向上。
システムの(事実上の)ハングアップも全く起きません。
現状で Windows との非互換な部分は、透明部分をクリックしても、下にある Window
にマウスメッセージが送られない、という一点だけです。

524:login:Penguin
18/02/24 14:18:44.11 cjPOAqRo.net
wineならぬmace出ないかな

525:login:Penguin
18/02/24 14:34:29.89 lC3bqhkw.net
ダーウィン

526:login:Penguin
18/02/25 07:00:46.98 gMY/XOlZ.net
>>503
>要は、著作権が発生するようなソースを書かなければいいんですね。
そうそう
wine本家にマージさせるためにどこかにあげてというのでなく
自分のwebsiteでもgithubでもgooglecodeでも、問題がなさそうな場所へ

527:login:Penguin
18/02/25 19:49:25.06 klqr3sXG.net
>>507
Qiita にソースをULするのは、著作権的に問題ありそうですか?

528:login:Penguin
18/02/25 20:01:41.95 dPUju/W+.net
URLリンク(ptech.g.hatena.ne.jp)

529:login:Penguin
18/02/26 04:48:44.29 AjOMcg+3.net
ソースコードの投稿は厄介そう

530:login:Penguin
18/02/26 19:35:42.85 uvsc9Ei6.net
アップ始まったかな?
URLリンク(qiita.com)

531:396
18/02/27 17:20:06.59 fxlvg2HV.net
Linux の X Window の XShape と、 Win32 の WS_EX_LAYERED は相性が悪いために
単に Win32 を Emulateしようとすると、多分、どうやっても遅くなってしまうと思うんです。
だから、Wine 専用に Windows には無いフラグや関数を定義して、ある新定義の
独自APIを呼んだタイミングで


532:だけ、XShapeを呼び出す仕様にすればいいと思うん です。それを呼び出さなくても、中の図形や透明部分は自由に変えられると。 で、メッセージが下(Desktopなど)まで届く部分を指定したい場合(外形を変えた い場合等)だけは、その関数を呼ぶと。例えば、透明を使った一般のアプリでも、 輪郭は楕円にしておいて、中の絵だけを高速に変えたいような需要はあると思う んです。それは、今の Wineでは出来ません。でも、今述べた方法なら可能になり ます。 技術的には自分だけでも可能です。でも、この仕組みを本家Wineの人が納得して くれるか分かりません。 なお、自分のアプリだと、「GroundWnd」なる「受け皿」を作ってそこでメッセー ジを「せき止めて」下には透明部分であっても、敢えてメッセージが届かないよ うにしているので、見た目だけ透明に出来れば十分なのですが。 でも、本家に統合してもらわないと、Wineのバージョンアップの度に、こっちで その独自部分の追加作業が必要になったりして大変なんです。 なんとか話を付けることは出来ないものでしょうか???



533:396
18/02/27 17:21:14.77 fxlvg2HV.net
>>511
早速、ここでの話を受けて、 Qiita に書いてみてます。

534:login:Penguin
18/02/27 18:55:09.95 glf1pFGh.net
>>512
問題のアプリのサンプル(ソースコード込み)と修正した一連のコードをパッチにして
URLリンク(forum.winehq.org)
に送ってみたら?

535:login:Penguin
18/02/27 19:35:49.93 fxlvg2HV.net
>>514
>>512のような内容を英語で正確にやりとりするのに、とても精神的負担を感じます。
ちゃんと理解してもらえなくて、徒労に割りそうな予感も。

536:login:Penguin
18/02/27 22:28:51.79 SXflemsb.net
新定義の独自APIとか言い出したら正確に伝わっても賛同されるか疑問だ

537:396
18/02/28 01:21:22.23 nqkdrNZG.net
結論的には、Wineを改造しても Windows API の仕様を変える訳ではありませんので、
もし、Wineの一部であっても、Windows API だけを使った dll の部分は、Wineの
バージョンが変わっても、原則的には自由に入れ替え可能な可能性があるのです。
kernel32.dll, gdi32.dll, user32.dll, ntdll.dll の4つの dll 以外のdllは、
WINEの内部がどのように実装されているかには依存していない可能性があると
いうことです。もしそうであれば、Wine のソースを改造してもこれらのdll.so以外は、
本家Wineが今後発表する新バージョンのものを、改造 Wine のバイナリファイル群に
後から上書きしても、互換性が保たれ続けるんじゃないかな、と思いました。つまり、
以下の 4つの dll.so だけを配布すれば、かなり長い間、独自の Wine として動作
できる可能性があるのではないかと。loader.c を修正した libswine.so.1.0 を配布
すれば、dll.so の検索パスも上手く「オーバーライド」できますので、以下のたかだか
18MB程度のファイル群を配布しさえすれば、標準の Wine を壊さないまま、独自の Wine を
特定のアプリにだけ適用し、両バージョンの Wine を共存できるのではないかと思えて
きたんです。
./libs/wine/libwine.so.1.0 1,933,464 # WINEDLLPATH 修正のため
./kernel32/kernel32.dll.so 5,526,999
./gdi32/gdi32.dll.so 2,655,524
./user32/user32.dll.so 4,267,471
./ntdll/ntdll.dll.so 3,256,245

538:396
18/02/28 01:22:09.65 nqkdrNZG.net
>>517
その際、「wine server」の「server request」の仕様を変更さえしなければ、
標準の Wine を使ったアプリと、まさに同時実行も可能ではないかと。
実際、自分が実験する限り、標準の Wine を使った VC++ と Wz が、



539:に問題なく独自 Wine の自前アプリと同時実行で来ているように見えますので。 なんというか、例えば、Wineの実装の構造体にメンバ変数を独自に追加した場合、 それが直接見えているソースは、同一の構造体の他のメンバの相対アドレス、構造体の サイズが変わるために再コンパイルが必要です。しかし、それを直接見ているのは、 上の 4つの dllのdll.soファイルだけではないかと。そして、その他のdllは、その 構造体を直接見てないのではないかと。それで、カプセルの様にブラックボックスの 中に改造が閉じ込められてしまって、再コンパイルを全くしなくても外の dll 達に は、その改造が破壊的な影響を与えずに、機能としての変化だけが伝達されるのでは ないかと。



540:396
18/02/28 01:33:54.04 nqkdrNZG.net
「dll.so」ではなく「drv.so」ですが、
/wine/dlls/winex11.drv/winex11.drv.so 1,797,340
も配布が必要ですので、合計20MB程度。圧縮すれば 10MB程度のはず。
だから、アプリ本体のバイナリと同時に 10MBを配布すれば独自修正 Wineが
配布できるかと。

541:396
18/02/28 01:52:50.24 nqkdrNZG.net
>>516
やはり、そう思われますか。
一部の透明アプリに取っては、改造Wineの方がWindowsとの互換性がかなり上がりますが、
他の透明アプリに取っては下がる、見たいな状態になるので、意見が分かれるかな、と思って
たんです。でも、恩恵を受けるアプリもあります。

542:login:Penguin
18/02/28 02:06:19.42 b2U8RIm2.net
派生版みたいなのが乱立しそうで恐い
まあ、現状も最新版が必ずしも良いとは言えないから複数バージョンを使い分けるなんてことはやられているが

543:login:Penguin
18/02/28 04:17:01.75 ojsBE0jk.net
これは大変更過ぎて厳しいだろ
フォークして勝手にやってと言われる可能性大

544:login:Penguin
18/02/28 05:20:26.14 zhVHYdgK.net
取り敢えず改変した物もしくはそれが置いてあるURLを本家に晒して反応を様子見かね

545:396
18/02/28 15:05:22.37 nqkdrNZG.net
MSDN Library の CD-ROM 版を、Wineにインストール出来ました。
URLリンク(qiita.com)

なお、確か、MSDN Library 2008 の ISO イメージは、無料で DL 出来たと思います。

546:login:Penguin
18/02/28 19:42:05.86 Rd3IONev.net
wine下で動くspider.exeがやたらと速いんだが
delayが効いてないだけな気がしなくもない

547:login:Penguin
18/03/01 22:49:34.77 fYfWMlBV.net
Ctrl+Insertでコピーできるようにしたいんだけど
何か方法ある?

548:login:Penguin
18/03/01 23:36:11.65 j/zFLdIr.net
そんなショートカットあったなあ
最近使ってなかったから忘れてた

549:login:Penguin
18/03/02 01:05:28.44 Bl3AZi1p.net
155 名前:login:Penguin [sage]: 2018/03/01(木) 23:01:33.07 ID:fYfWMlBV
Ctrl+Insertでコピーしたいんだけどショートカット設定する方法ありますか?

550:login:Penguin
18/03/02 20:50:16.09 KIYBEbwH.net
ReactOSの人が興味があるみたい>>wine高速化の人
スレリンク(os板:011番)

551:login:Penguin
18/03/02 20:55:43.86 U359uzwU.net
片山をReactOSの人と言うのはどういう悪意があってのことなのか

552:login:Penguin
18/03/03 06:56:58.37 tG6ima8j.net
「ReactOSの人」ワロタw

553:396
18/03/03 10:25:25.44 YW+cC+A2.net
「片山 ReactOS」でGoogle検索した時に一番上に表示したページが、
ウイルス感染している事を、BitDefender Traffic Light が報告したので注意
してください。
これは煽りや虚偽ではありません。

554:login:Penguin
18/03/03 11:48:42.40 cwR/oIIZ.net
virusto


555:talで確認 アドレスは現状BitDefenderだけ ソフトウェア全部は見たわけではないのですが スクリーンセーバーでひとつだけ他のベンダーが反応>CMC ぐぐるとアドウェアとして MZさん、面倒かもしれないけど全部virustotalにぶち込んで 反応してしまったら各ベンダーに報告をほねがいします IPAに相談したほうが早いかも



556:login:Penguin
18/03/03 11:52:36.01 e1SsLOIJ.net
ひでえwフイタww

557:login:Penguin
18/03/03 13:34:14.61 YW+cC+A2.net
URLリンク(www.virustotal.com)
↑を見ると、ScreenSaver の他に、例えば、
Detect 6/55, Data Scaned 2014-08-29, calch_setup.exe
Detect, 9/55, Data Scaned 2014-11-19, file-7704712_exe
と出ます。他に roumaji.zip なども。
多分、BitDefender や CMC だけでなく、過去に(?)、9 つの Security Soft で検出されたということでは?

558:login:Penguin
18/03/03 13:37:24.32 YW+cC+A2.net
sage

559:login:Penguin
18/03/03 13:44:15.14 YW+cC+A2.net
そのサイトには
「d4178884156e93779603fe5d33d3fc8f749fd2280a199b19d5d218bb8548b6b1」という変な名前のファイルがあり、
9つの Security Soft でウイルスを検知したようです。
URLリンク(www.virustotal.com)
9 engines detected this file
SHA-256 d4178884156e93779603fe5d33d3fc8f749fd2280a199b19d5d218bb8548b6b1
File name d4178884156e93779603fe5d33d3fc8f749fd2280a199b19d5d218bb8548b6b1
File size 668.72 KB
Last analysis 2014-08-25 00:08:58 UTC
1. Ad-Aware; Gen:Variant.Graftor.50154
2. BitDefender; Gen:Variant.Graftor.50154
3. Emsisoft; Gen:Variant.Graftor.50154 (B)
4. eScan; Gen:Variant.Graftor.50154
5. F-Secure; Gen:Variant.Graftor.50154
6. GData; Gen:Variant.Graftor.50154
7. Ikarus; Win32.SuspectCrc
8. Symantec; WS.Reputation.1
9. TrendMicro-HouseCall; Suspicious_GEN.F47V0818

560:login:Penguin
18/03/03 15:15:34.02 cwR/oIIZ.net
URLリンク(www.isthisfilesafe.com)
過去に何かがあった時はきちんとそれを説明するページを残して置かないと

561:login:Penguin
18/03/03 16:20:23.25 cwR/oIIZ.net
>>537
URLリンク(www.virustotal.com)
URLリンク(www.virustotal.com)
Fake7Booting
スレリンク(tech板:926番)
404Error

562:login:Penguin
18/03/03 22:11:33.47 V9+0Qzt3.net
The Wine development release 3.3 is now available.
What's new in this release (see below for details):
- Beginnings of Vulkan support.
- Direct3D multi-threaded command stream enabled by default.
- Multisample textures enabled by default.
- Support for game controllers through SDL.
- Support for loading CIL-only .Net binaries.
- Various bug fixes.
日本人っぽい名前が2つに増えているね

563:396
18/03/04 11:19:00.67 bPq1RsH0.net
Wine において HTML HELP (CHM) を表示時、リンク先へ飛べない場合の原因が分かって来ました。
URLリンク(qiita.com)
飛べる場合 :  リンクに Java Script を使ってない。
飛べない場合 : リンクに Java Script を使っている。
Java Script の実行が上手く行ってないのではないでしょうか。どなたかにさらに原因を追求して
不具合を直していただければ幸です。

564:396
18/03/04 11:21:15.47 bPq1RsH0.net
なお体験から言えば、リンク先のHTMLのファイル名に日本語が使われている場合も、
リンク先へ飛べないことがあるようです。

565:login:Penguin
18/03/04 20:03:48.28 GmjVYsG4.net
なるほど。CHMがセキュリティ的にまずい理由がなんとなくわかった

566:396
18/03/04 21:46:39.04 bPq1RsH0.net
[HTML HELP (MSDN Library) 関連]
nativeなDLLの組み合わせを根気よく実験したところ、上手く行く組み合わせが見つかり、
飛べなかったリンクへも飛べるようになりました。詳しくは、上のリンク先を見てください。

567:login:Penguin
18/03/09 14:42:02.50 eOG+axBG.net
自分の環境(RTKernel)だとKindleを起動した時に
四角の枠だけ表示されて止まる
LowLatencyKernelだと正常に表示される

568:login:Penguin
18/03/17 03:08:15.42 P07T+/HF.net
OSで設定したカーソルのサイズとWineアプリ上のカーソルのサイズが違うけど
自動で設定同期してほしいわ

569:login:Penguin
18/03/17 13:20:23.73 g7ZklgHW.net
The Wine development release 3.4 is now available.
What's new in this release (see below for details):
- More Vulkan support, including integration with the X11 driver.
- Better handling of privileged instructions on x86-64.
- Hex edit dialog improvements in RegEdit.
- Assortment of patches merged from wine-staging.
- Various bug fixes.

570:login:Penguin
18/03/19 02:22:32.24 WTX2WgE6.net
Wine3.4

571:login:Penguin
18/03/19 23:31:30.95 AsNkNJNy.net
>>487
pastebin.com にコード本体(と著作権者表示)を貼って、
そこへのリンクと解説などをこちらに書くようにすれば、解決しますよ。限定的だけど。

572:login:Penguin
18/03/25 14:03:13.74 CLQjm7Sy.net
WineでMFCで書かれたアプリを実行した場合、MSに著作権的に何かモンク言われたり
するんだろうか?

573:login:Penguin
18/03/25 14:23:01.62 CLQjm7Sy.net
↑は、特に、static link している場合について。
mfc**.dll などに dynamic link (dll) している場合は、その mfc**.dll がクリーン開発
されていれば問題ないと思う。だから、Linux用には dynamic link でアプリをビルド
し直せば大丈夫のはずだとは思う。問題は、クリーン開発された mfc**.dll にちゃんと
互換性があるかということになる。mfcのソースを見ずに mfc をちゃんと実装するのは
意外に難しい。なぜならちゃんとドキュメントされていない事が多いから。だから、
困った事になるかも・・・。

574:login:Penguin
18/03/25 14:37:38.21 qcf1Qsxr.net
ダイナミックリンクして再配布パッケージをwinetricksで入れとけばいいが、
種類が多すぎてこまる・・・
URLリンク(tyawanmushi.hatenablog.com)

575:login:Penguin
18/03/25 14:52:10.75 CLQjm7Sy.net
URLリンク(wiki.winehq.org)
↑によると、MFCのソース(MS自らがVSに付属)を見た人は、MFCの互換ライブラリを
作る事はできないんだそうだ(Wine陣営の方針)。↓
Q: Who can't contribute to Wine?
A: Some people cannot contribute to Wine because of potential copyright violation.
  This would be anyone who has seen Microsoft Windows source code (stolen,
  under an NDA, disassembled, or otherwise). There are some exceptions for
  the source code of add-on components (ATL, MFC, msvcrt); see the next question.
Q: Can I contribute if I'v


576:e only seen the source to ATL, MFC, and/or msvcrt? A: Yes, but not on those components. Also please state on the mailing list   that you have seen the source to these and that you will not contribute to   them. You are free to contribute to other areas of the Wine source code. そして、Wine陣営によるMFCの実装(= builet-in タイプ)は今のところ存在してい ないらしい。つまり、MFCのDLLは、MS純正のもの(またはソースからビルドしたもの) を使う事になってしまうらしい。 Wine currently has no built-in MFC implementation. Most applications can run using native MFC DLLs, so there is not a lot of incentive to work on one. It is also possible (with a lot of work) to compile the MFC from source and thus produce an mfc42.dll.so library. Please refer to the Winelib User's Guide for how to do this.



577:login:Penguin
18/03/25 14:57:56.46 CLQjm7Sy.net
もし、MSが何か言ってきたら、既存のWindowsソフトは大部分が動かせない事になるかも。
プロは、ほぼ100% MFCを使っていたから。

578:login:Penguin
18/03/25 15:00:01.06 62KMipBP.net
制限が掛かるとすれば先ず作成とか配布だから実行は問題ないだろ

579:login:Penguin
18/03/25 15:37:31.01 CLQjm7Sy.net
それは、本当はそういうわけでもないはずだけど、みんなで使って無視してしまう手がある。
EU は、色々と著作権を制限しているらしいから、MSの主張は通らないかも。
URLリンク(www.infoq.com)
Phipps argues that this would only affect America:
ヨーロッパでは、大陸全土にわたる法律で、プログラミング言語とインターフェースは、
著作権保護にふさわしくない(好ましくない、上手く行きそうに無い、ありえない)と断言
している。そして、たとえ、たとえ著作権的に守られる場合であっても、その法律には
例外が書かれており、もし、著作権を侵害する目的が相互運用性のためであるならば、
著作権を無視して良いとされている。
オラクルの勝利によってもたらされたいかなる先例も、アメリカのテクノロジー産業に害を
与え、競争相手にアドバンテージを与えてしまうかも知れない。

580:login:Penguin
18/03/25 15:39:22.49 CLQjm7Sy.net
This would be largely an American phenomenon. In Europe, there is continentwide
law asserting that programming languages and interfaces are unlikely to be
copyrightable, and even if they are, an exception written into the law allows
copyright to be ignored if the purpose of infringing it is for interoperability.
Any precedent set by an Oracle win would likely just harm the American
technology industry and offer an advantage to its competitors.

581:login:Penguin
18/03/25 15:51:35.75 CLQjm7Sy.net
「interoperability(相互運用性)」というものが、どういうものか分からない。
「WineでWindowsアプリを実行する」というのも、それに該当するのだろうか?
だとしたら嬉しいな。日本もその法律を作ろう。

582:login:Penguin
18/03/25 16:37:45.55 CLQjm7Sy.net
(少し違うが)、EPSONが、互換インクを禁止する事はできない、と似た事で、
MSがどんなに著作権を主張しても、Windowsアプリの互換プラットフォー
ム(Wineなど)上の実行禁止は「無視」してよい、ということらしい。
だとすると、EUでは、MS Officeや、Visual Studio、MFCを静的リンクした
アプリなどなどをWine上で実行する事は、全て「合法」という事になる気がする。
やった!

583:login:Penguin
18/03/25 16:39:50.16 CLQjm7Sy.net
ということはということは(笑顔)、WindowsのDLL(=EXEと同じ)をWineで勝手に実行する事も、
「Interoperability」のためだから、完全に合法なんだ!!!!

584:login:Penguin
18/03/25 20:57:40.29 EqTqDaXT.net
勉強になるな

585:login:Penguin
18/03/26 09:50:17.77 w/PBT3kA.net
1. アメリカでも、fair use (公平利用、独占禁止) のためであれば色々な権利が制限される。
  GoogleとOracleのJavaの訴訟でも最後は、それが認められて、Googleが勝った。
2. これが判例になり、実際に裁判すれば、言語やインターフェース(関数やAPIなど)が
  同じ「互換ライブラリ」「互換プラットフォーム」「互換言語」はほとんどの場合、合法であり、
  真似された方は権利を主張出来ないだろう。
3. しかし、最終判決がどうであれ裁判を起こされること自体が負担であり困る側面がある。
  大企業で無ければ、訴訟費用(弁護士料)やかかる時間で会社やプロジェクトが潰れかねない。
4. 対抗策としては、「みんなが使う/行う」事がある。みんながやっていけば、個々の組織が
  訴訟される可能性は低くなる。なぜなら、「他のプロジェクトだってやってる」と主張すれば
  良いから。どうしてかというと、裁判には、「公平性」が求められるから、そのプロジェクト
  だけを狙い撃ちにするのは不公平、ということになるから。

586:login:Penguin
18/03/26 09:54:37.74 w/PBT3kA.net
誤:同じ「互換ライブラリ」「互換プラットフォーム」「互換言語」はほとんどの場合、合法であり、
正:同じだけの「互換ライブラリ」「互換プラットフォーム」「互換言語」はほとんどの場合、合法であり、
当然の事ながら、上の論理が通用するのは、クリーン開発した場合に限る。
つまり、言語やインターフェス(仕様や使い方、関数のプロトタイプ宣言や構造体の定義など)が
同じだけで、それを実現するための「実装」は自分の頭で考えて、自分でコーディングした場合。

587:login:Penguin
18/03/26 10:58:45.58 w/PBT3kA.net
スマン。実際は、アメリカでは訳が分からないらしい:
URLリンク(law.stackexchange.com)
連邦巡回区控訴裁判所(CAFC)が、次のような事を言っているらしい:
that the declaring code and the structure, sequence, and organization of the
API packages are entitled to copyright protection
「宣言コード、構造体、順序(並び方)、APIパッケージの構成の仕方(組織)は、
著作権保護の対象になっている。
しかし、こうも書かれている。
However, because this issue is outside the scope of the CAFC's exclusive jurisdiction (this is a copyright issue, not a patent issue), the holdings are not binding in any other circuit.
しかしながら、この問題は、CAFCの独占的な司法権の範囲の外にある(これは特許の
問題ではなく、著作権の問題だから)ので、この判決は、他のどんな(アメリカに
11区ある)巡回区とも結びつかない。
Each circuit is free to review anew the copyrightability of APIs when such a case comes up.
「それぞれの巡回区は、個別のケースが出てくるたびに、API群が、著作権
で保護されるべきかどうかを改めて再調査(再吟味、再審理)する事は自由
である。」
To address your fair use question would be simply speculation, because fair use is always assessed case-by-case, and even in WINE's closest analogy (Oracle v. Google),
あなたが提出した


588:フェア・ユースの疑問に取り掛かる事は、憶測に過ぎなくなる。 なぜなら、フェア・ユースは、いつも、ケース・バイ・ケースで処理されるからで ある。それがたとえ、Oracle 対 Google のような類似性の高い裁判が既にある WINEの場合でさえも。



589:login:Penguin
18/03/26 11:03:19.26 w/PBT3kA.net
あ、またスマン。CAFCの主張は、最終的には覆されたのかも知れない。

590:login:Penguin
18/03/26 11:54:15.86 ipVrelUn.net
誤:それがたとえ、Oracle 対 Google のような類似性の高い裁判が既にあるWINEの場合でさえも。
誤:それがたとえ、WINEと非常に類似性の高い場合(Oracle 対 Google)であっても。

591:login:Penguin
18/03/26 12:48:02.82 ipVrelUn.net
【EUとアメリカのCAFCは、真逆の立場】
EU: >>557
In Europe, there is continentwide law asserting that programming languages
and interfaces are unlikely to be copyrightable, and even if they are, an
exception written into the law allows copyright to be ignored if the
purpose of infringing it is for interoperability.
USA: >>564
The CAFC held that:
that the declaring code and the structure, sequence, and organization of the API packages are entitled to copyright protection
つまり、EUは、プログラミング言語やAPIは、著作権保護にふさわしくなく、
仮に、一般論的には著作権保護されるべきような対象であっても、
(プリンタインクのような)相互運用性のためなら、著作権は無視
して良いという立場。
対して、アメリカの CAFCは、それらは保護される、という立場。
しかし、アメリカでも「Fair Use」のためなら、著作権保護されない、ということであり、
実際、Google vs Oracleでは、最終的には「著作権保護されない」事になった。

592:login:Penguin
18/03/26 12:51:30.66 wqW+3yz6.net
そもそも米国では判例が重視されないから過去の判決に大きな意味はない

593:login:Penguin
18/03/26 12:54:19.79 ipVrelUn.net
なぜ、アメリカが訴訟社会なのかが分かった。
例えば、「Fair Use」 ひとつとっても、法律には、細かい条件が書かれ
ていないらしい。だから、裁判起こしてみないと結果が分からないらしい。
困ったもんだ。

594:login:Penguin
18/03/26 12:57:23.25 ipVrelUn.net
>>568
昔聞いたのは、アメリカでは、名文化された法律が少ないから、過去の判例の蓄積が
アメリカの法律体系そのものである、という事。

595:login:Penguin
18/03/26 13:03:42.29 ipVrelUn.net
URLリンク(judiciary.asahi.com)
【海の向こうのコモン・ロー:「法律」がない国々】
世の中には「法律」が存在しない国もあると聞いたのは、大学生の頃であった。
そうした国での法は判例なのだと。
コモン・ロー(英米法):イギリス、アメリカ、カナダ、オーストラリア、インド等々
シビル・ロー(大陸法):フランス、ドイツ、オランダ、ベルギー、イタリア、スペイン、ブラジル、
         アルゼンチン、中国、韓国、日本
最も伝統的な分野の一つである契約法についてみると、(一部の例外を除いて)アメリカに
おいては日本の民法のような制定法は存在しない。その代わりに、古くから続く判例により
形成されたルールが法として適用される。
まずもって、日本の法律とアメリカの法律では条文の数が違う。大抵において、アメリカの法律
の条文数は少ない。

596:login:Penguin
18/03/26 13:29:26.25 qyqb91Ow.net
100年前に文語体で書かれた法律が現役な国とは違ってるな・・・

597:login:Penguin
18/03/26 14:53:08.14 ipVrelUn.net
弁護士費用が、着手金0の、「完全成功報酬」なんだって。。。だからか。
あ、そうか、これで日本がライセンセス関係で怯えて何も出来なくなってしまう
のか・・・。なるほど、これではソフト開発でアメリカと差が開くばかりなハズ
だ。

598:login:Penguin
18/03/28 22:17:45.45 YpbAGD2R.net
OracleがJavaの著作権侵犯裁判でGoogleに勝利
URLリンク(jp.techcrunch.com)
またかよw

599:login:Penguin
18/03/28 23:26:57.76 aTH1797I.net
WineとJavaでは事情が異なるかも。
JavaはそもそもWindowsに対抗するような意味もあったし、当初からマルチプラットフォーム
をかかげていた。だから、もともと他社が入らなくても「公平」性の担保がなんとなくあった。
そこに独占状態であるGoogleが入ってきて、Sun/Oracleの努力を台無しにしかねないような
事をし始めた。Oracleにはアイデア量や今までの努力が還元されないのに、Googleばかり
が儲かる。そもそも、Googleは何もしなくても莫大な金が舞い込んでくる。なんか、Googleの
方にこそ理不尽さを感じる人は少なくないはず。だから「Fair Use」が認められなかった可能性
がある。
一方、Wineの場合は、不公平の親玉なのは MS のほうであって、Wineは、それを除去すべく
現れた「公平の星」のようなもの。だから、Fair Use が認められる公算は大きい気がする。
というか、普通の感覚だと、MSより、Wineの方に公平さを感じるだろう。
Googleは企業自体がもともと不公平さを持っている感じがする。

600:login:Penguin
18/03/28 23:34:08.27 aTH1797I.net
・MS:不公平    Wine:公平
・Google:不公平  Java(Sun/Oracle):公平
というイメージが市民感覚としてあったのではないか。個人的には上記のように感じる。
MSがいやな事ばっかりしてきて困り果てていたところに、Wineが対抗してきた。
だから、Wineは市民のミカタな感じがする。
一方、実は、JavaもMSへの対抗みたいな位置付けも持っていた。だから、Javaが
反映すれば、MSも弱まるかも知れないし、市民にはJavaを応援している人が多かった。
ところが、そのJavaが壊れかねないことをGoogleがやりだした。兼ねてからGoogleが
民主主義に及ぼす悪い側面を市民は懸念していた事もあって、GoogleよりJava(Oracle)
を応援したい人が多かった。

こんな感じだろうか。

601:login:Penguin
18/03/28 23:43:32.37 P/RrDxSz.net
Androidのjava実装はGoogleが作った物ではなくApacheのjavaVMからのフォークなんだけどな

602:login:Penguin
18/03/30 08:48:53.18 5DQXV14i.net
Oracleを応援したい奴などいるのか?という感じだが

603:login:Penguin
18/03/30 09:21:49.39 6IV18TIF.net
Java開発元(Sun)を応援したい人は大勢いた。

604:login:Penguin
18/03/30 11:53:10.93 PWQsyejQ.net
全部ダメにするからな。Borlandとか

605:login:Penguin
18/03/30 12:33:18.79 KHWKXW7X.net
BorlandとOracleってなんかあったっけ?

606:login:Penguin
18/03/30 12:55:43.05 2cINbMZO.net
あぼーんland

607:login:Penguin
18/03/30 15:48:03.76 6hvNydOs.net
Sunファンはいっぱいいたな。かくいうオレもSolaris使いだった。家では86版使ってたし
でもオラクル、テメーにファンなんかいるのかと小一時間(ry

608:login:Penguin
18/03/30 15:53:56.32 2cINbMZO.net
Solarisはデフォルトの日本語文字コードがShiftJISって聞いたな。

609:login:Penguin
18/03/31 12:56:29.84 AdMnkkF2.net
Wine 3.5 Released
URLリンク(www.winehq.org)
March 30, 2018
The Wine development release 3.5 is now available.
What's new in this release:
More Vulkan support, including the vulkan-1 loader.
Support for RSA and ECDSA cryptographic keys.
Improved manifest file parser.
Support for the Places toolbar in file dialogs.
Various bug fixes.

610:login:Penguin
18/03/31 14:00:13.09 cBJOQDaC.net
>>584
10年くらい前のHPUXがcp932だったけど流石に今はUTF-8になってそう

611:login:Penguin
18/03/31 17:09:25.77 ai0uqb2x.net
staging終了

612:login:Penguin
18/04/01 15:39:26.16 QBy5utPh.net
DXVKすごいな

613:login:Penguin
18/04/01 16:39:13.07 C4C7NY9E.net
なにそれ

614:login:Penguin
18/04/01 17:09:38.41 u6uijVny.net
URLリンク(github.com)


615:k doitsujinワロタw



616:login:Penguin
18/04/01 17:26:17.50 4ymAxRit.net
何が凄くて、なにが笑うわけ?

617:login:Penguin
18/04/01 17:28:46.94 YdkZQTLY.net
使えば3Dゲー余裕になるん?

618:login:Penguin
18/04/01 18:12:54.57 HAUJ8G1F.net
ninja install
ナニコレ?

619:login:Penguin
18/04/01 18:18:07.11 fNoRtp6L.net
そりゃもう忍者よ

620:login:Penguin
18/04/01 19:56:48.14 r8AoOcBK.net
(´ε`;)うーん
URLリンク(wiki.archlinux.jp)
> 警告: DXVK は DirectX 11 の DLL を上書きするため、オンラインのマルチプレイゲームではチートとして認識されてアカウントが ban される危険性があります。自己責任で使ってください。

621:login:Penguin
18/04/01 20:27:04.14 YdkZQTLY.net
オンゲーはそもそもwineで遊ぶべきじゃないね

622:login:Penguin
18/04/01 22:05:45.17 G2FVJIei.net
pubgかフォートナイトやりたい(´;ω;`)

623:login:Penguin
18/04/01 22:25:31.55 JjPNC6mA.net
やればいい
チート扱いされるヘボプレイヤー

624:login:Penguin
18/04/02 15:57:17.33 6FMJWj1c.net
なんか、ここ数日の livedoor の記事に、日本の家電が駄目になったのは、英語が
出来ないからマネージメントできないからだとか、40才までコーディングばかり
していたからマネジメント能力がなくなるからだとかか、フィリピンなどにも
コーディングできる人はいくらでもいるとか書いてあったけど、なんか違うな。
一言にコーディングといっても、実際の能力の差は大きいし。
非常に難しい内容のコーディングが出来る人は希少種で、そういった人が
圧倒的に不足していると言われている意味が、記事を書いた人にはわかってない。
沢山いるのはレベルの低いプログラマ。レベルの高いプログラマは非常に足りない。

625:login:Penguin
18/04/02 16:12:34.54 ze8mdprw.net
コピペ?

626:login:Penguin
18/04/02 18:00:43.00 6FMJWj1c.net
違う

627:login:Penguin
18/04/02 19:11:07.94 ze8mdprw.net
スレ違いごめん。元の記事読んで>>599に概ね同意なんだけど
欧米で言うマスターとかプロフェッショナルは一つのことを突き詰めて誰よりも上手くできることで
手広く平均的にやれることを評価するのが日本で、欧米は一つでも抜きんだ能力があれば変人でも重宝される
そういう意味でエンジニアの雇用の形態が日本と違うからレベル高い技術者が育たないのでは

628:login:Penguin
18/04/03 01:05:53.88 GUN45Kbn.net
スレ違いだとわかってるならよそでやってよ

629:login:Penguin
18/04/03 03:37:15.34 oajpf0KY.net
日本の家電がダメになったのは著作権に縛られたからってのも大きい
携帯mp3プレイヤー →著作権無視の韓国および体制を確立したApple
DVD/BD → コピ1だのコピ10だの、DivXやらmp4再生やら何時になったら漬けるのよ個のバカ日本企業。
         mp4再生だけで中華製しか選択肢ないわ
で、ものすご~く遅れて対応。 出揃うころには中華格安機に占領されている
SIMフリーやらとにかく対応が遅い、高い、無駄な機能てんこ盛り

630:login:Penguin
18/04/03 07:17:59.20 id6ssAY5.net
初心者がLinuxとストレスフリーで生きる為の6か条
1.Winをリプレース出来るなどど考えるのはやめましょう。共用しましょう。
2. 印刷はあきらめましょう。
3


631:. Wifiの使用はあきらめましょう。 4. 音楽・動画・画像の編集/制作はあきらめましょう。 5. Nvidia製品の使用は控えましょう。 6. 教本を買いましょう。Linux界に限ってはググレカスは遠回りです。 7. Ubuntuを我慢して使い続けましょう。



632:login:Penguin
18/04/03 07:32:41.78 7ZnQxP8V.net
初心者がLinuxとストレスフリーで生きる為の6か条(訂正版)
1.Winとデュアルブートは可能ですが、Win側がコケたらWinの修復ツールは使えません。
2. 印刷時にはドライバーを自動的に探してくれます。でも最新プリンタでは見つからない事も有ります。
3. WifiはWindowsと違いドライバーを入れなくとも使えます。もしもの時はググれば解決できます。
4. 音楽・動画・画像の編集/制作はあきらめなくとも大丈夫です。
5. Nvidia製品の使用はドライバーが別途提供されてるのでそれを入れましょう。
6. 教本を買いましょう。Windows界でもググレカスは遠回りです。
7. Ubuntuを我慢して使い続ける必要は有りません。
他の鳥を選びましょう。

633:login:Penguin
18/04/03 09:42:38.31 ulFIPWeY.net
>>602
既にあった:
URLリンク(blog.livedoor.jp)

634:login:Penguin
18/04/03 10:01:39.60 puW9IlDS.net
Windowsとの共存なんて、
・wineで試して動いたらラッキー
・動かなかったら仮想環境に入れたWindowsで動かす
で十分だわ
仮想の方はネット機能を切って隔離してる

635:login:Penguin
18/04/03 10:16:42.08 ulFIPWeY.net
>>608
仮想環境のWindowsは、デスクトップも丸ごと「枠」の中に入って、アプリも
その範囲の中で「クリッピング」されるんだよね。使いにくそうだな。

636:login:Penguin
18/04/03 21:15:28.98 C44R/pPK.net
「枠」を「全画面表示」すればよくね

637:login:Penguin
18/04/03 21:59:09.32 ulFIPWeY.net
>>610
それだと、Linuxのアプリとか端末(とかのWindow)と同時使用が難しいのでは。

638:login:Penguin
18/04/03 22:47:49.96 uUPkDnWm.net
別に難しいと感じたことはないなぁ
ディスプレイが小さいと不便に感じるのかな

639:login:Penguin
18/04/04 00:34:03.69 4o2tCTgc.net
同じく枠があって困ったことはないので
Virtualboxでシームレス(枠と壁紙部分を消す)とか出来ることになってても使ったことはないw
>611
枠を嫌悪するとしても、最悪、ホストで複数デスクトップ使うようにして、
そのデスクトップ一つにゲスト貼り付けてフルにするだけじゃね?

640:login:Penguin
18/04/04 01:06:12.76 UC2Lw0HV.net
LinuxのDEの多くはデスクトップ画面を複数持てるので、仮想マシンを最大化して使っても、ホストの操作をしたければ別のデスクトップ画面に切り替えればいいだけ。

641:login:Penguin
18/04/04 02:37:25.01 uzAPKp5W.net
VMをワークスペース分けずに使ってるやつなんておらんやろなぁ

642:login:Penguin
18/04/04 12:01:46.79 W/pV2SSy.net
例えば、あるフォルダに a.txt というファイルがあったとして、それをVM内のWindowsで
書き換えて、Linuxから読み込む、という事は出来る?
a.txtが入っているフォルダのドライブは、NTFSとして。

643:login:Penguin
18/04/04 12:55:33.65 HiSgf0Nn.net
a.txtがあるフォルダをWindows側で共有して、Linux側はそれをマウントすればできる。

644:login:Penguin
18/04/04 13:08:41.60 W/pV2SSy.net
どうやって共有するの。

645:login:Penguin
18/04/04 13:11:45.54 W/pV2SSy.net
ひとまず共有はできるとして、後はLinux自体の色々な不具合が問題になるかな。

646:login:Penguin
18/04/04 13:14:52.19 bptEoMBU.net
LinuxのファイルマネジャーからWindowsの共有フォルダへアクセス出来るだろが

647:login:Penguin
18/04/04 13:24:55.13 W/pV2SSy.net
今UbuntuでFireFox使ってるけど、WheelMouseのスクロール量が多すぎて困ってる。
機能は少なすぎて困って�


648:ス。 調整するとそのページでは直るが、また、変になる。



649:login:Penguin
18/04/04 14:28:24.13 hEi16AU8.net
他所でやって

650:login:Penguin
18/04/04 14:34:30.76 b5CwhjV3.net
スレチなのでこちらへどうぞ
くだらねえ質問はここに書き込め!Part 230
スレリンク(linux板)

651:login:Penguin
18/04/10 13:23:24.21 IOQUuZaK.net
間違って20の方にカキコしてしまったからここにも投下。
winfileがオープンソースになったとさ。
(p)URLリンク(forest.watch.impress.co.jp)
winefile(Wineの実装)と見比べて見ると面白いかも・・・

652:login:Penguin
18/04/12 00:35:12.46 XLLTJ24v.net
Pentium G3220, GTX 650, メモリ6GB, という低スペックな環境
素のWine-Staging 3.5だとfpsが5未満で、まともに遊べなかったGTA5が
DXVKを試してみたら、fpsが20-30は出て普通に遊べる様になってびっくりした
明け方/夕方の太陽が眩し過ぎる問題さえ我慢できれば、充分にプレイ可能
以下、いくつかの問題回避策のメモ
・起動時のランチャーがcef関連で落ちる → WIndowsのバージョンをXPにする
・主人公や通行人等のキャラクターが描写されない → ドライバを最新にする(390.xx)
・影がおかしい → ゲーム内設定でソフトシャドウを"NVIDIA PCSS"にする

653:login:Penguin
18/04/12 01:24:50.26 d+sismBB.net
>>624
winefileなんかと比べたらwinfile様に叱られるぞ(笑)

654:login:Penguin
18/04/12 12:06:06.53 aL8ND8FX.net
クリーンルーム方式を使ってると、Windowsのソースを見たらwineの開発には参加できなくなるんだっけ?
公開されてるwinfile.exeのソースを観ても同様かな。

655:login:Penguin
18/04/12 13:56:27.67 xuTbETA+.net
カーネルとかコアのDLLならまだしも、アプリ程度なら問題ないと思うけどな。

656:login:Penguin
18/04/12 23:02:13.74 SWhyKYWb.net
アイワナ系のゲームとか動かんなー、GameMaker(Pro)製のゲーム。
SteamのWindowsゲームも、MacでWine/CrossOver経由でもまともに動かんし、まぁ、しゃーないかなー。

657:login:Penguin
18/04/12 23:17:24.90 /aBRvH0Y.net
DXVKなら動くかもしれんぞ

658:login:Penguin
18/04/13 08:33:29.85 pD5NgVVJ.net
ランス3は動くようになるんかいな?教えてエロい人

659:login:Penguin
18/04/13 10:55:55.29 yJVuf5/w.net
DXVKならDX11のゲームは一通り動く

660:login:Penguin
18/04/13 11:33:03.27 MeMOBcOy.net
マジかよ、windows機売ってくる

661:login:Penguin
18/04/13 18:26:07.38 j7BOlC0u.net
DLL改変とみなされてネット認証が必要なものとかネトゲとかはBANされる可能性があるらしいがな

662:login:Penguin
18/04/13 19:10:22.98 fn+tcruC.net
いつかwineが完璧になる日はくるんだろうか

663:login:Penguin
18/04/13 19:15:50.59 p2KUKRxJ.net
windowsの進化が完全停止したらゴールは近い
だが、その頃には必要性が無くなる

664:login:Penguin
18/04/13 19:42:16.28 Y6mB++Hq.net
完全停止しなくても、少なくとも昔のアプリは古いAPIしか使ってないわけだから大丈夫。
逆にWin10を見ていても「有用な」進化はできてないわけだから、もし追加されたとしても、
新しいAPIは使われない可能性は高い。

665:login:Penguin
18/04/14 11:14:12.78 shf+SP


666:kI.net



667:login:Penguin
18/04/14 22:54:44.85 lm/Sfd0n.net
最初は「とりあえず動いてくれればいい」で始まったプロジェクトなのに
これだけ完成度が高くなっちゃうといろいろ不満が出てきちゃうんだな
フリーソフトが絶滅した過程をそのまま再現してるようだ

668:login:Penguin
18/04/14 22:57:46.23 jk1aKqrr.net
妄想?


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch