Wow실행을 앞두고 문제가...!
안녕하세요.
wine으로 와우를 설치까지 마치고 실행에 앞두었습니다.
젠투 HOWTO를 보고 했습니다.
그런데, 에러를 뿜길래 HOWTO문서를 보니 패치하는법이 있긴 있습니다.
하지만, 정작 내공 부족으로 패치하는법을 모르겠습니다. :oops:
아마 0.9.7 and up쪽 내용인데.. 한번 봐 주시고 패치법을 가르쳐주셨으면 합니다.
http://gentoo-wiki.com/HOWTO_Install_and_update_World_Of_Warcraft_with_wine
입니다. 그럼 좋은하루되세요!
아! ebuild는 못씁니다. 우분투 DapperDrake입니다.
아마.. 이부분 일껍니다.
X Error of failed request: BadMatch
It appears that somewhere between WoW 1.8 and 1.9.3 as well as wine-0.9.4 and later, there are some issues with the opengl interface.
You may get an error that is similiar to this:
Code: BadMatch error
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 143 (GLX)
Minor opcode of failed request: 13 (X_GLXCreateGLXPixmap)
Serial number of failed request: 373
Current serial number in output stream: 374
This apparently is because of a patch that is present in wine-0.9.4, and reversing that patch is reputed to help. I have created a quick reverse of the patch, which you can save in your files directory, and apply to the ebuild(don't forget to digest afterwards ;)).
[edit]Patching wine 0.9.4 or 0.9.5
The reverse patch can be found here: wine-0.9.4-reverse-bitmaprendering.patch
Some people say that all of this patch isn't nessecary to reverse the patch and this patch only reverses that: [1]
[edit]Patching wine 0.9.6
The 0.9.4 patch has ceased to work with 0.9.6 or later. Reversing a single line that the 0.9.4 patch applies to the file dlls/opengl32/wgl.c will allow wine-0.9.6 to compile. The patch removes the line
DWORD type = GetObjectType(hdc);
from the function wglMakeCurrent.
[edit]Patching wine 0.9.7 - 0.9.10?
Someone merged the wine-0.9.4-reverse-bitmaprendering.patch and wine-0.9.4-wow_fixes.patch to wine-0.9.7-wow_fixes.patch. Seems to work and does not need any other non-standard patch. You might get an error message when starting Launcher.exe, but the main program WoW.exe runs cleanly.
--- libs/wine/mmap.c.old 2006-02-07 14:42:08.000000000 +0100
+++ libs/wine/mmap.c 2006-02-07 15:10:18.000000000 +0100
@@ -164,6 +164,25 @@
#endif /* (__svr4__ || __NetBSD__) && !MAP_TRYFIXED */
+static void *get_anon_mmap_null_address(size_t size)
+{
+ static int got_override = 0;
+ static void *low_alloc_ptr = NULL;
+ void * current_low_alloc_ptr;
+
+ if (!got_override)
+ {
+ low_alloc_ptr = (void*)0x10000000;
+ got_override = 1;
+ }
+
+ current_low_alloc_ptr = low_alloc_ptr;
+
+ if (low_alloc_ptr)
+ low_alloc_ptr += size;
+
+ return current_low_alloc_ptr;
+ }
/***********************************************************************
* wine_anon_mmap
@@ -212,6 +231,9 @@
return start;
#endif
}
+ if ((start == NULL) && !(flags & MAP_FIXED))
+ start = get_anon_mmap_null_address(size);
+
return mmap( start, size, prot, flags, fdzero, 0 );
#else
return (void *)-1;
--- loader/preloader.c.old 2006-02-02 15:56:14.000000000 +0100
+++ loader/preloader.c 2006-02-07 14:30:37.000000000 +0100
@@ -110,7 +110,7 @@
{
{ (void *)0x00000000, 0x00110000 }, /* DOS area */
{ (void *)0x7ffe0000, 0x01020000 }, /* shared user data + shared heap */
- { (void *)0x00110000, 0x1fef0000 }, /* PE exe range (may be set with WINEPRELOADRESERVE), defaults to 512mb */
+ { (void *)0x10000000, 0x00f00000 }, /* PE exe range (may be set with WINEPRELOADRESERVE), defaults to 512mb */
{ 0, 0 } /* end of list */
};
--- dlls/opengl32/wgl.c.old 2006-02-02 15:55:59.000000000 +0100
+++ dlls/opengl32/wgl.c 2006-02-07 13:54:39.000000000 +0100
@@ -149,11 +149,11 @@
}
-/* retrieve the GLX drawable to use on a given DC */
+/* retrieve the X drawable to use on a given DC */
inline static Drawable get_drawable( HDC hdc )
{
- GLXDrawable drawable;
- enum x11drv_escape_codes escape = X11DRV_GET_GLX_DRAWABLE;
+ Drawable drawable;
+ enum x11drv_escape_codes escape = X11DRV_GET_DRAWABLE;
if (!ExtEscape( hdc, X11DRV_ESCAPE, sizeof(escape), (LPCSTR)&escape,
sizeof(drawable), (LPSTR)&drawable )) drawable = 0;
@@ -566,8 +566,6 @@
}
TRACE(" make current for dis %p, drawable %p, ctx %p\n", ctx->display, (void*) drawable, ctx->ctx);
ret = glXMakeCurrent(ctx->display, drawable, ctx->ctx);
- if(ret && type == OBJ_MEMDC)
- glDrawBuffer(GL_FRONT_LEFT);
}
LEAVE_GL();
TRACE(" returning %s\n", (ret ? "True" : "False"));
댓글 달기