Allegro 4.2.4在Windows7损坏的调色板模式下

时间:2011-09-23 06:35:35

标签: windows-7 allegro directdraw palette

我在Windows 7中运行Allegro 4.2.4运行调色板模式(256色)时遇到问题。我发现了杀死资源管理器的互联网解决方案并且确实有效,但是期望最终用户在尝试时会杀死资源管理器会是荒谬的玩游戏。

然后我找到了用黑客版本替换DDraw.dll的解决方案,但它也不起作用 - DDHack只会导致在应用程序启动后根本没有显示任何屏幕。

然后我找到了添加注册表黑客的解决方案:

Windows Registry Editor Version 5.00
;This file has been created with DirectDraw Compatibility Tool (http://crappybitter.livejournal.com/tag/ddc_tool)

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectDraw\Compatibility\MyApp]
"Name"="MyApp.exe"
"ID"=dword:4E7B8A88
"Flags"=hex:00,08,00,00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DirectDraw\Compatibility\MyApp]
"Name"="MyApp.exe"
"ID"=dword:4E7B8A88
"Flags"=hex:00,08,00,00

但遗憾的是它也不起作用,调色板一直闪烁着所有的彩虹色。

除了将整个应用程序移植到不同的编程库之外,我还有其他解决方案吗?是否可以在不触摸调色板的情况下修复Vista / W7上的DDraw问题?如果没有,什么库会给我调色板编程(我正在做需要调色板的游戏)而没有在Vista / W7上出现这样的问题?

我知道另外一个解决方案 - 我可以将Allegro 4.2.4应用程序编译为DOS应用程序并在DosBox中运行。可悲的是,但现在我能想到的就是......

提前感谢其他解决方案!

1 个答案:

答案 0 :(得分:1)

首先,没有这样的版本4.2.4。我认为你的意思是4.4.2。

真正的调色板是一种垂死的东西。在现代操作系统上,不能很好地支持设置8位颜色深度。关于Allegro 4.4,您可以这样做:

set_color_depth(8);
set_gfx_mode(GFX_GDI, w, h, 0, 0);

它将为您提供窗口模式,以及Allegro 4.4提供的Windows上最兼容的调色板支持。如果你真的必须有全屏模式,你可以尝试这个补丁:

它解决了游戏中损坏的调色板问题。它可能有助于您描述的问题。

或者您可以尝试在屏幕上使用32位颜色深度,并为精灵和缓冲区使用8位位图:

set_color_depth(desktop_color_depth());
set_gfx_mode(GFX_AUTODETECT, w, h, 0, 0);
BITMAP *buffer = create_bitmap_ex(8, w, h);

当然,在更改调色板后,您必须再次将位图blit到屏幕,因此如果您需要非常快速的实时效果,它可能无效。

或者,Allegro 5.1(即未发布的SVN版本)具有通过着色器工作的调色板插件。它可能没有文档,可能会改变。 (请注意,5系列与4系列不兼容。)