Try to find out why "Unity3d (3D application)" doesn't work with Wine.

Mike Kaplinskiy mike.kaplinskiy at gmail.com
Tue Oct 6 11:22:49 CDT 2009


On Tue, Oct 6, 2009 at 12:10 PM, Roderick Colenbrander
<thunderbird2k at gmail.com> wrote:
> Esstentially what happens is that using the SendMessage in
> internal_SetPixelFormat we call 'set_win_format' in window.c. I can't
> say why it fails perhaps no parent window is up yet..
>
> Roderick
>
>
> On Tue, Oct 6, 2009 at 6:02 PM, a qi <free4machine at gmail.com> wrote:
>>
>> Hi,All
>>
>> I try to run  a 3D application named  "Unity 3d"  with Wine, but failed.
>>
>> And there is already  a bug report about that:
>>
>> Bug 18061 -  Unity Indie Trial Editor window contents not drawn
>> http://bugs.winehq.org/show_bug.cgi?id=18061
>>
>>
>> Now I try to find out  the reason.
>>
>> So, I follow the error messages:
>>
>> ...
>> err:wgl:internal_SetPixelFormat Couldn't set format of the window, returning
>> failure
>> err:d3d:CreateContext SetPixelFormat failed on HDC=0x1534 for iPixelFormat=3
>> err:d3d:IWineD3DDeviceImpl_CreateSwapChain Failed to create a new context
>> ...
>>
>>
>> do
>>
>> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>>
>> vim dlls/winex11.drv/opengl.c
>>
>>
>> /* This function is the core of X11DRV_SetPixelFormat and
>> X11DRV_SetPixelFormatWINE.
>>  * Both functions are the same except that X11DRV_SetPixelFormatWINE allows
>> you to
>>  * set the pixel format multiple times. */
>> static BOOL internal_SetPixelFormat(X11DRV_PDEVICE *physDev,
>>                            int iPixelFormat,
>>                            const PIXELFORMATDESCRIPTOR *ppfd) {
>>     WineGLPixelFormat *fmt;
>>     int value;
>>     HWND hwnd;
>>
>> ....
>>
>>         if(!SendMessageW(hwnd, WM_X11DRV_SET_WIN_FORMAT,
>> (WPARAM)fmt->fmt_id, 0)) {
>>             ERR("Couldn't set format of the window, returning failure\n");
>>             return FALSE;
>>         }
>>     }
>> .......
>>
>> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>>
>> But i can not find the definition of function "SendMessageW",
>>
>>
>> in   wine-1.1.30/dlls ,  i run   "    grep -ir --color  SendMessageW  .
>> |grep  spec      ",   just found something like this:
>>
>> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>> ./user32/user32.spec:@ stdcall SendMessageW(long long long long)
>> ./unicows/unicows.spec:@ stdcall SendMessageW(long long long long)
>> ./wtsapi32/wtsapi32.spec:@ stub WTSSendMessageW
>> ./shlwapi/shlwapi.spec:136 stdcall -noname SendMessageWrapW(long long long
>> long) user32.SendMessageW
>>
>> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>>
>> And I am not familiar with C  programming.
>>
>> Any ideas?  Thanks.
>>
>>
>>
>>
>>
>>
>>
>>
>
>
>

If you want to browse the source, your best bet is
http://source.winehq.org . Just go to identifier search and search for
SendMessageW. You don't need to do debug though - Jeff and Roderick
outlined the problem pretty well.

Mike.



More information about the wine-devel mailing list