[讨论]"compiz --replace"失败的解决

各种窗口管理器和美化相关
回复
wdboss
帖子: 240
注册时间: 2007-09-12 10:30
联系:

[讨论]"compiz --replace"失败的解决

#1

帖子 wdboss » 2007-11-02 17:40

自从升级到7.10正式版后,桌面效果就不支持了,"compiz --replace"的结果如下:

代码: 全选

Checking for Xgl: not present. 
Detected PCI ID for VGA: 01:00.0 0300: 1002:4c59 (prog-if 00 [VGA])
Checking for texture_from_pixmap: not present. 
Trying again with indirect rendering:
Checking for texture_from_pixmap: present. 
Checking for non power of two support: present. 
Checking for Composite extension: present. 
Comparing resolution (1024x768) to maximum 3D texture size (512): Failed.
aborting and using fallback: /usr/bin/metacity
失败的原因是检测textture size失败……
在7.10以前都是好好的,怎么现在就不行了呢?让我们来看看check textture size哪出问题了。

代码: 全选

 sudo gedit /usr/bin/compiz
找到check_texture_size函数

代码: 全选

check_texture_size()
{
	TEXTURE_LIMIT=$(glxinfo -l | grep GL_MAX_TEXTURE_SIZE | sed 's/.*=[^0-9]//g')     /**获得最大的textture大小**/
	RESOLUTION=$(xdpyinfo  | grep -i dimensions: | sed 's/[^0-9]*pixels.*(.*).*//' | sed 's/[^0-9x]*//')    /**获得当前的分辨率**/
	VRES=$(echo $RESOLUTION | sed 's/.*x//')    /**横屏分辨率(正常)**/
	HRES=$(echo $RESOLUTION | sed 's/x.*//')    /**竖屏分辨率(正常旋转90度)**/
	verbose "Comparing resolution ($RESOLUTION) to maximum 3D texture size ($TEXTURE_LIMIT): ";
	if [ $VRES -gt $TEXTURE_LIMIT ] || [ $HRES -gt $TEXTURE_LIMIT ]; then     /**纵横比较textture**/
		verbose "Failed.\n"    /**如果分辨率比textture大,就失败**/
		return 1;
	fi
	verbose "Passed.\n"    /**如果分辨率比textture小,恭喜!**/
	return 0
}
$RESOLUTION就是当前的分辨率,$TEXTURE_LIMIT就是texture的大小。textture size是什么?textture size就OpenGL能够渲染纹理的尺寸。我的显卡得到的GL_MAX_TEXTURE_SIZE值是512,在当前1024×768的分辨率下当然不能渲染整个屏幕了,所以就失败了,除非我把分辨率设置到512×384以下……
好了,问题找到了,解决问题的办法就有两个:1、把GL_MAX_TEXTURE_SIZE变大;2、修改check_texture_size函数。
第一个办法怎么变,我就不知道了;第二个办法,只要将判断的结果黑白颠倒就行了,也就是将返回值”reture 1“改成”reture 0“,或者在“TEXTURE_LIMIT=$(glxinfo -l | grep GL_MAX_TEXTURE_SIZE | sed 's/.*=[^0-9]//g')”中,将“sed 's/.*=[^0-9]//g'”改成“sed 's/.*=[^0-9]/1/g'”,至于后果,应该就是计算机好累哦!
回复