Windows 2000 - problem s monitorem (chybne prepinani rozliseni v DirectX aplikacich)



Pri testu directx verze 7 a 8 se muj monitor prepina do takoveho rozliseni, ze se pravy roh uplne rozostri a roztahne se takovym zpusobem, ze neni nic videt, ale evidentne vse na softwarove urovni funguje.Zkousel jsem to s ovladacema dodavanyma s monitorem (ty byly nejhorsi - s nema jel monitor v 1024x768 jen na 75Hz, pricemz normalne ve Win/9xMe je vse OK na 85Hz).85Hz jsem dosahl jen pri pouziti ovl. z Win2000, ale problem s prepinanim rozliseni v DirectX aplikacich zustal.Konfigurace: Monitor Targa 1770A bussiness, grafika CB Riva TNT2 Ultra 32MB, deska ABIT BE6 Diky za radu Martin
Zkus program Powerstrip (shareware), kde si nastavíš konkrétní frekvenci pro konkrétní rozlišení.
<p>nezapomeňte, že zatímco monitor může být větší než 800x600, okno prohlížeče nemusí být na celou obrazovku.</p><p>například běžím na monitorech lcd s rozlišením 1600x1200 (stále poměrně velké), ale mé okno prohlížeče je přibližně 1100x1200 (přibližně).</p><p>musíte se tedy podívat na nejběžnější rozlišení <em>prohlížeč</em>, nikoli na nejběžnější rozlišení <em>obrazovka</em>.</p> že je to ošklivější mi nevadí. Ale že je horší funkčnost, obslužnost, to je k zamyšlení, proč autoři jdou touto cestou.
Na velkém monitoru PC skoro nepoužitelné, takže jediná možnost je si okno prohlížeče zmenšit do středu monitoru. Snad se ozve dost lidí, aby to vrátili zpátky, případně vyřešili svůj záměr jinak než zhoršením obslužnosti pro uživatele PC. Můžete uvést, jaké rozlišení vaše hra podporuje AndroidManifest.xml tím, že [tuto vlastnost](http://developer.android.com/guide/topics/manifest/supports-screens-element.html) . Když řešení Zařízení je tam není uveden, bude Android měřítko výřezu (říká se tomu režimu kompatibility). Jen aby spíše než stručnou odpověď komentář: Toto chování závisí jak na přehrávači, který používáte, a na grafické kartě. Co se stane, je následující:


1. Přehrávač videa plní svou videa okno s jediným, barvy bytu. Obvykle to bude buď světlé růžové nebo něco podobného, ​​ale ne přesně, černé. Myšlenka je vybrat si barvu, která není pravděpodobné, že se objeví kdekoli jinde na obrazovce.
2. Přehrávač videa instruuje akcelerační čip na grafické kartě pro přehrání videa, ale jeho zobrazení pouze na části obrazovky, které mají ten přesnou barvu. K dosažení tohoto cíle, je technika nazývá „překrytí“ je používán, který efektivně umožňuje grafickou kartu „překryvné“ video obsahu na libovolnou část obrazovky, která je vyplněna s tímto konkrétním barvou.


Teď, když se snímek přehrávače, zatímco způsob, jak hrát, co máte, je obraz, který obsahuje velký jednotný vyplnit kde je video má být. Máte-li zobrazit tento snímek obrazovky při přehrávání videa, bude grafická karta nebude schopen rozeznat rozdíl mezi barvou v rámci přehrávače a obrazovky to. Bude to jen nahradit tuto barvu s obrazem.


Můžete se bavit s tímto chováním ze strany výkresu na obrázku. Ať už jste čerpal se zdají být vypracovány v horní části obrazu, protože video zobrazuje pouze tam, kde na obrazovce má přesné barvy používané video přehrávač. Príčin může být spousta a zrejme to nebude mit souvislost z Duolingem. Zkuste se poptat nekde na forech, kde se resi hardwarove zalezitosti. <p><strong> poznámka: </strong> <em>toto bylo testováno na notebooku s grafickou kartou řízenou i915.</em></p><hr><h3>pozadí</h3><p><strong> poznámka: </strong> když je připojena nová obrazovka, do hostitele není odeslána žádná událost, zůstane to pravda i po mé poslední úpravě. jediným způsobem je tedy použít dotazování. snažím se, aby byly co nejefektivnější ...</p><h3>úprava # 3</h3><p>nakonec existuje jedno lepší řešení (prostřednictvím acpi):</p><p>stále neexistuje žádná událost, ale acpi se zdá být efektivnější než <code>xrandr</code> na dotaz. (poznámka: toto <strong> vyžaduje </strong> načtené moduly jádra acpi, ale nevyžaduje oprávnění root.</p><p>moje konečné řešení (pomocí bash):</p><pre><code>isvgaconnected() { local crtstate read -a &lt; /proc/acpi/video/vid/crt0/state crtstate test $(( ( ${crtstate[1]} &gt;&gt;4 ) ${1:+*-1+1} )) -ne 0 } </code></pre><p>nyní test:</p><pre><code>$ if isvgaconnected; then echo yes; else echo no; fi yes </code></pre><p>je zapojen, takže ho nyní odpojím:</p><pre><code>$ if isvgaconnected; then echo yes; else echo no; fi no </code></pre><p><strong> poznámka: </strong> <code>${1:+*-1+1}</code> povolit argument <em>boolean</em>: pokud <em>něco je přítomno</em>, odpověď by byla obrácena: <code>( crtstate &gt;&gt; 4 ) * -1 + 1</code>.</p><p>a závěrečný skript:</p><pre><code>#!/bin/bash export crtprocentry=/proc/acpi/video/vid/crt0/state isvgaconnected() { local crtstate read -a &lt; $crtprocentry crtstate test $(( ( ${crtstate[1]} &gt;&gt;4 ) ${1:+*-1+1} )) -ne 0 } delay=.1 unset switch isvgaconnected || switch=not while :;do while isvgaconnected $switch;do sleep $delay done if [ "$switch" ];then unset switch echo vga is connected # doing something while vga is connected else switch=not echo vga is not connected. # doing something else, maybe. fi done </code></pre><p><strong> upozornění: </strong> <em>lehčí než <code>xrandr</code>, ale ne nevýznamné</em> se zpožděním menším než <em>,02</em> sekund, bash skript půjde na začátek procesu jedlíci zdrojů (<code>top</code>)!</p><p>i když to stojí ~ 0,001 s:</p><pre><code>$ time read -a &lt;/proc/stat crtstat </code></pre><p>vyžaduje to ~ 0,030 s:</p><pre><code>$ read -a &lt; /proc/acpi/video/vid/crt0/state crtstate </code></pre><p>to je velké! takže v závislosti na tom, co potřebujete, lze <code>delay</code> rozumně nastavit mezi <code>0.5</code> a <code>2</code>.</p><h3>úprava # 2</h3><p>nakonec jsem něco našel:</p><p><strong> důležité vyloučení odpovědnosti: </strong> hraní s <code>/proc</code> a <code>/sys</code> záznamy mohou poškodit váš systém !!! takže na produkčních systémech nezkoušejte následující.</p><pre><code>mapfile watchfilelist &lt; &lt;( find /sys /proc -type f 2&gt;/dev/null | grep -i acpi\\\|i91 ) prompt=("/" "|" '\' '-'); l=0 while :; do mapfile watchstat &lt; &lt;( grep -h . ${watchfilelist[@]} 2&gt;/dev/null ) for ((i=0;i&lt;=${#watchstat[@]};i++)); do [ "${watchstat[i]}" == "${oldstat[i]}" ] || echo ${watchstat[i]} done oldstat=("${watchstat[@]}") sleep .5 printf "\r%s\r" ${prompt[l++]} [ $l -eq 4 ]&amp;&amp;l=0 done </code></pre><p>... po očištění nežádoucích záznamů:</p><pre><code>for ((i=0;i&lt;=${#watchfilelist[@]};i++)); do [[ "${watchfilelist[$i]}" =~ /sys/firmware/acpi/interrupts/sci ]] &amp;&amp; unset watchfilelist[$i] &amp;&amp; echo $i done </code></pre><p>to jsem dokázal přečíst:</p><pre><code>/proc/acpi/video/vid/crt0/state:state: 0x1d /proc/acpi/video/vid/crt0/state:state: 0x0d /proc/acpi/video/vid/crt0/state:state: 0x1d </code></pre><p>když připojím, odpojte a znovu zapojte kabel monitoru.</p><p>při dotazu na konfiguraci (spuštění <code>system/preferences/monitor</code> nebo <code>xrandr</code>), grafické karty udělají typ <em>scan</em>, takže běží <code>xrandr -q</code> vám dá informace, ale musíte zjistit stav.</p><p>prohledal jsem všechny protokoly (jádro, démona, x atd.) prohledávajícím <code>/proc</code> &amp; <code>/sys</code> a zjevně se zdá, že neexistuje nic, co by vyhovovalo vaší žádosti.</p><p>zkusil jsem to také:</p><pre><code>export spc50="$(printf "%50s" "")" watch -n1 ' find /proc/acpi/video -type f | xargs grep -h . | sed "s/^\([^:]*):/\1'$spc50'}:/; s/^\(.\{50\}\) *:/\1 /"' </code></pre><p>po tom všem, když spustíte <code>system/preferences/monitor</code> zatímco nebyla připojena žádná nová obrazovka ani odpojena, bude se nástroj zobrazovat jednoduše (normálně). ale pokud jste již dříve připojili nebo odpojili obrazovku, občas spustíte tento nástroj a uvidíte, že na ploše vytvoříte typ <em>reset</em> ​​nebo <em>obnovit</em> ​​(stejný pokud spustíte <code>xrandr</code>).</p><p>zdá se, že to potvrzuje, že tento nástroj požádá o <code>xrandr</code> (nebo pracuje stejným způsobem) pravidelným dotazováním na stav, počínaje okamžikem jeho spuštění.</p><p>můžete vyzkoušet sami:</p><pre><code>$ for ((i=10;i--;)); do xrandr -q | grep ' connected' | wc -l; sleep 1; done 1 1 1 2 2 2 1 1 1 1 </code></pre><p>tím se na 10 sekund zobrazí počet připojených obrazovek (displejů).</p><p>zatímco to běží, připojte a/nebo odpojte obrazovku/monitor a podívejte se, co se děje. takže byste mohli vytvořit malou testovací funkci bash:</p><pre><code>isvgaconnected() { local xrandr=$(xrandr -q) [ "$xrandr" == "${xrandr#*vga1 con}" ] || return 0 return 1 } </code></pre><p>který by byl použitelný jako v:</p><pre><code>$ if isvgaconnected; then echo yes; fi </code></pre><p>ale buďte opatrní, <code>xrandr</code> trvá asi <strong> 0,140 s do 0.200 s </strong>, zatímco na zástrčkách nedojde k žádné změně a do <strong> 0,770 sekund </strong> kdykoli něco bylo připojeno nebo odpojeno těsně před (<strong> poznámka: </strong> zdá se, že to není zdrojový zdroj).</p><h3>úprava # 1</h3><p>abych zajistil, že neučím něco nesprávného, ​​prohledával jsem web a dokumenty, ale nenašel jsem nic o <em>dbus and screens</em>.</p><p>nakonec jsem běžel ve dvou různých oknech <code>dbus-monitor --system</code> (hrál jsem také s možnostmi) a malý skript, který jsem napsal:</p><pre><code>$ for ((i=1000;i--;)); do isvgaconnected &amp;&amp; echo yes || echo no; sleep .5; done </code></pre><p>... a znovu zapojen, než odpojen monitor, mnohokrát. takže teď mohu říci:</p><ul> <li><em>v této konfiguraci <strong> pomocí ovladače i915 </strong> neexistuje jiný způsob, než spustit <code>xrandr -q</code> vědět, zda je monitor připojen nebo ne.</em></li> </ul><p>ale buďte opatrní, protože se nejeví jiné způsoby. například se zdá, že <code>xrandr</code> tyto informace sdílí, takže moje plocha gnome by se automaticky přepnula na <code>xinerama</code> automaticky ... <strong>, když jsem běžel <code>xrandr</code> </strong>.</p><h3>některé dokumenty</h3><ul> <li> <a href="https://wiki.archlinux.org/index.php/xrandr#toggle\_external\_monitor">skript pro přepínání interního/externího displeje pro notebooky</a> </li> <li> <a href="http://www.x.org/docs/intel/hd/ihd\_os\_vol\_3\_part4\_bjs.pdf">®intel hd graphics opensource programmer's reference manual</a> </li> </ul> <p>dával jsem přednost rozvržení tekutin, protože jsem chtěl, aby surfaři využili větších monitorů, když stiskli ctrl - <strong> +</strong> (nebo cmd - <strong> +</strong>) pro zvětšení písma velikost. kdysi dávno, asi v roce 2008, stránky s pevnou šířkou vypadaly opravdu špatně, když stisknete ctrl - <strong> +</strong>, protože nic jiného se nezvýšilo - tabulky a div zachovaly stejnou šířku a text přetékal jim.</p><p>u současných prohlížečů však stisknutí ctrl - <strong> +</strong> nyní funguje spíše jako „zvětšení“ než „zvětšení velikosti písma“: celá stránka je proporcionálně a pěkně zvětšena. v současné době dávám přednost:</p><ul> <li> <p><strong> používá se šířka tekutiny</strong> pro stránky, kde se zobrazují data podobná mřížce nebo tabulce nebo jiné informace. klíčovým rozhodujícím faktorem je to, zda uživatel uvidí více informací, když zvětší okno prohlížeče. zmínili jste mapy google, reader a gmail, všechny vynikající příklady imo aplikací, u nichž má uživatel užitek z větší obrazovky.</p> </li> <li> <p><strong> používání pevné šířky</strong> stránek pro popisné stránky nebo jakoukoli stránku, jejíž velikost se změnila, prohlížeč nebude mít za následek zobrazení dalších informací. příklady jsou tato velmi stackexchange stránka a <a href="http://www.apple.com/imac/">apple imac</a> stránka.</p> </li> </ul><p>fwiw, zjistil jsem, že navrhování šířky tekutiny má větší potíže než hodnota popisných stránek.</p> <p>pokud chcete přesměrovat připojení x přes ssh, musíte jej povolit na straně serveru i klienta. (v závislosti na distribuci může být ve výchozím nastavení povoleno nebo zakázáno.) na straně serveru se ujistěte, že máte <code>x11forwarding yes</code> v <a href="http://www.freebsd.org/cgi/man.cgi?query=sshd\_config&amp;sektion=5"><code>/etc/sshd\_config</code></a> (nebo <code>/etc/ssh/sshd\_config</code> nebo kdekoli je konfigurační soubor). na straně klienta předejte možnost <code>-x</code> <a href="http://www.freebsd.org/cgi/man.cgi?query=ssh&amp;sektion=1"><code>ssh</code> příkaz</a> , nebo vložte do svého <a href="http://www.freebsd.org/cgi/man.cgi?query=ssh\_config&amp;sektion=5"><code>forwardx11</code> <code>~/.ssh/config</code></a> .</p><p>pokud spustíte <code>ssh -x localhost</code>, měli byste vidět, že <code>$display</code> je (pravděpodobně) <code>localhost:10.0</code>. kontrast s <code>:0.0</code>, což je hodnota, když nejste připojeni přes ssh. (část <code>.0</code> může být vynechána; je to číslo obrazovky, ale více obrazovek se používá zřídka.) existují dvě formy x displejů, s nimiž se pravděpodobně setkáte:</p><ul> <li>místní displeje, s ničím před <code>:</code>.</li> <li>zobrazí se tcp s názvem hostitele před <code>:</code>.</li> </ul><p>s <code>ssh -x localhost</code> můžete přistupovat k x serveru přes obě displeje, ale aplikace budou používat jinou metodu: <code>:number</code> přistupuje k serveru prostřednictvím lokálních soketů a sdílené paměti, zatímco <code>hostname:number</code> přistupuje k serveru přes tcp, což je pomalejší a deaktivuje některá rozšíření.</p><p>nezapomeňte, že pro přístup k serveru x potřebujete formu autorizace nazvanou cookie a obvykle uloženou za scénami v souboru <code>~/.xauthority</code>. pokud používáte ssh pro přístup k jinému uživatelskému účtu nebo pokud vaše distribuce umístí soubory cookie do jiného souboru, možná zjistíte, že <code>display=:0</code> nefunguje v relaci ssh (ale <code>ssh -x</code>, pokud je to povoleno na serveru; při provádění <code>ssh -x</code> nemusíte nikdy mluvit s <code>xauthority</code>. pokud se jedná o problém, musíte <a href="https://unix.stackexchange.com/questions/10121/ssh-display-variable/10126#10126">nastavit proměnnou prostředí <code>xauthority</code></a> nebo <a href="https://unix.stackexchange.com/questions/1596/can-i-launch-a-graphical-program-on-another-users-desktop-as-root/1600#1600">získat soubory cookie jiného uživatele</a> .</p><p>chcete-li odpovědět na aktuální otázku:</p><ul> <li> <p>místní displeje odpovídají soketu v <code>/tmp/.x11-unix</code>.</p> <pre><code>(cd /tmp/.x11-unix &amp;&amp; for x in x*; do echo ":${x#x}"; done) </code></pre></li> <li> <p>vzdálené displeje odpovídají otevřeným tcp portům nad 6000; přístup k zobrazovacímu číslu n na počítači m se provádí připojením k portu tcp 6000 + n na počítači m. ze samotného stroje m:</p> <pre><code>netstat -lnt | awk ' sub(/.*:/,"",$4) &amp;&amp; $4 &gt;= 6000 &amp;&amp; $4 &lt; 6100 { print ($1 == "tcp6" ? "ip6-localhost:" : "localhost:") ($4 - 6000) }' </code></pre> <p>(zbytek této odrážky je pouze v akademickém zájmu.)</p> <p>z jiného počítače můžete pomocí <code>nmap -p 6000-6099 host\_name</code> zkoušet otevřené tcp porty v obvyklém rozsahu. dnes je vzácné, že x servery poslouchají na soketu tcp, zejména mimo rozhraní zpětného smyčky.</p> <p>přesně řečeno, jiná aplikace by mohla používat port v rozsahu obvykle používaném x servery. můžete zjistit, zda server x poslouchá kontrolou toho, který program má port otevřený.</p> <pre><code>lsof -i -n | awk '$9 ~ /:60[0-9][0-9]$/ {print}' </code></pre> <p>pokud se ukáže něco dvojznačného, ​​jako je <code>sshd</code>, neexistuje žádný způsob, jak zjistit, zda se jedná o server x nebo náhoda.</p> </li> </ul> <p>znamenalo by to velmi odlišnou technologii, než jaká se v současnosti používá. nesnažil bych se přinutit dotyková zařízení do sémantiky obrazovkových zařízení. dotyková zařízení vyvíjejí vlastní odlišnou sadu očekávání uživatelů. dotek na vznášení je naprosto přijatelný. viděl jsem několik pěkných příkladů naznačování uživateli, kde se při prvním načtení obrazovky objevují „vznášející se“ oblasti. nějakým způsobem zvýrazníte horká místa a poté se tato světla po sekundě nebo dvou nechají zmizet.</p> Obávám se, že na této české diskuzi Duolinga vám s tímto problémem nebude moci nikdo pomoct. Ohledně aplikace se budete muset obrátit na vývojáře, nejlépe v obchodě, kde jste aplikaci zakoupil.