From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <40746CB0.9050405@altlinux.ru> Date: Thu, 08 Apr 2004 01:03:44 +0400 From: "Pavel S. Khmelinsky" User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040310 X-Accept-Language: ru, en-us, en MIME-Version: 1.0 To: ALT Devel discussion list Content-Type: text/plain; charset=KOI8-R; format=flowed Content-Transfer-Encoding: 8bit Subject: [devel] fglrx: screen corrupt after switch from console [workaround] X-BeenThere: devel@altlinux.ru X-Mailman-Version: 2.1.4 Precedence: list Reply-To: ALT Devel discussion list List-Id: ALT Devel discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 07 Apr 2004 21:03:48 -0000 Archived-At: List-Archive: List-Post: При использовании драйвера fglrx для карточек ATI Radeon на большинтсве конфигураций наблюдается следующий эффект: если переключится в консоль а потом обратно в иксы, портятся цвета и шрифты на экране. Лечится как правило запуском fgl_glxgears. И что я заметил, если запустить fireglcontrol и во вкладке Adjustments поставить ползунки в крайнее левое положение (значение 0.10) то изображение гамму не изменит, зато при переключение в консоль и обратно оно не будет порится. Поковырявшись в сорцах fglrx_panel и подсмотрев что происходит при изменении гаммы я написал простенькую программку. hmepas@localhost BUILD/fglrx_glx-3.7.6/fglrx_panel $ cat gamma_corr.cpp #include #include #include #include #include "FireGLControl.h" #include "watermark.xpm" #include "buttons.xpm" #include "FGLRXExtensions.h" extern "C" { bool ExtGetDriverData(FGLRXDriverDataPtr pDriverData); bool ExtSetGamma(FGLRXGammaSettingsPtr pGammaSettings); } QString InstallPath ; int main ( ) { bool RetC=FALSE ; FGLRXGammaSettingsRec GammaSettings; GammaSettings.Monitor = 0; GammaSettings.ulGamma = 10496010; /* (unsigned long) ((((unsigned long)(m_Gamma.red * 100)) << 20 ) | (((unsigned long)(m_Gamma.green * 100)) << 10 ) | (((unsigned long)(m_Gamma.blue * 100))));*/ RetC = ExtSetGamma(&GammaSettings); // printf("Second method\tGammaSettings.ulGamma: %X\n",GammaSettings.ulGamma); return 0; } Важно! Работает для Screen 0! Запускайте на первых иксах. Для компиляции ее нужно положить в папку fglrx_panel, при сборке пакета fglrx_tools (после rpm -i fglrx_glx-3.7.6-alt1.src.rpm && rpm -bc ~/RPM/SPECS/fglrx_glx.spec ). Собирается строчками: g++ -c -O2 -fno-strength-reduce -funsigned-char -Wall -W -Dlinux -DFGLRX_USE_XEXTENSIONS -DFGLRX_OGL_INFO -DQT_NO_STL -I/usr/lib/qt3//include -I. -I./include_dummy gamma_corr.cpp g++ FGLRXExtensions.o ATITVOExtensions.o gamma_corr.o Sheet.o Page.o InfoPage.o DualScreenPage.o AdjustPage.o TVoutAdjustPage.o BoardInfo.o moc_Sheet.o moc_Page.o moc_InfoPage.o moc_DualScreenPage.o moc_AdjustPage.o moc_TVoutAdjustPage.o -o gamma_corr -L/usr/lib/qt3//lib -L/usr/X11R6/lib -lqt -lGLU -lGL -lXmu -lICE -lSM -ldl -lXext -lX11 -lm -lXinerama -lXrender -lfreetype -lXxf86vm -L/usr/X11R6/lib -lXft Собирать естественно надо после запуска make all в этой папке. Я эту програмку прописал на запуск вместе с иксами -- как следствие экран не портится. Хотя не факт что это решение будет работать у кого-то другого, но у меня работает. Вот такие вот дела, за корявость написания/компиляции прошу не ругать, не ставил своей целью написать готовую обособленную утилиту. Это всего-лишь элюстрация решения, вмоем случае, проблемы с порчей экрана, которая, возможно, поможет кому-нибудь более опытному найти грамотное и более правильное решение этой проблемы. Готовую программу можно скачать здесь http://www.hmepas.yauza.ru/gamma_corr.gz (~124Kb) Осторожно! Апач отдает ее как text/plain поэтому не качайте браузером, лучше wget http://www.hmepas.yauza.ru/gamma_corr.gz