tag:blogger.com,1999:blog-70815071018146948702024-03-13T15:43:44.237+01:00will see...maxНе читал, но осуждаю!
Opinions on this personal blog don't necessarily reflect those of my employer.Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.comBlogger29125tag:blogger.com,1999:blog-7081507101814694870.post-10318647872253958112013-05-02T14:56:00.000+02:002013-05-02T14:56:05.588+02:00re-post, Interview with Tarn Adams, dwarf fortress explained<div class="separator" style="clear: both; text-align: left;">
Not really much to add , just watch :</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.youtube.com/watch?v=q9ZwVuGB_PI" target="_blank">http://www.youtube.com/watch?v=q9ZwVuGB_PI</a></div>
<br />Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-13058400986693491152013-02-12T14:20:00.001+01:002013-02-12T14:20:58.725+01:00iPhone 5 и сеть и батарейка<span style="font-family: Verdana, sans-serif;">Недавно, я все таки решил выкинуть свой VDSL/WiFi modem/router (модель говорить пока не хочется, многие ее могут использовать до сих пор, </span><br />
<span style="font-family: Verdana, sans-serif;">это была первая модель на рынке с поддержкой VDSL/50+Mbit/s)</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">И если оригинальный, прежний роутер поддерживал WiFi 2.4GHz и 5GHz то фактически, у него была одна антенна и поэтому приходилось выбирать что то из предложенного, но не оба диапазона сразу.</span><br />
<span style="font-family: Verdana, sans-serif;">Что не могло особо нравиться в силу живого "зоопарка" разных устройств, которые выкидывать пока что не планируеться.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">Вообщем, новое приобретение поддерживает и VDSL (отлично) плюс WiFi стандарты, НО у него две антенны ( можно сделать и два WiFi SSIDs ) - поэтому </span><span style="font-family: Verdana, sans-serif;">2.4GHz и 5GHz поддерживаем одновременно.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">Что характерно, мой iPhone5 теперь уверенно сидит на 5GHz и более того, его батарейка (iOS6.1 на данный момент) несколько "пришла в себя" и начала показывать вменяемые расходы.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">А теперь о главном, IMHO Apple подсознательно ориентировала iPhone5 для использования в новых WiFi сетях и стандартах,</span><br />
<span style="font-family: Verdana, sans-serif;">если у пользователя существующее WiFi оборудование и может быть старое - имеется шанс получить проблемы, когда iPhone5 будет активно "восстанавливать" сеть, дабы она была, но этим же - активно садить батарейку.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">В итоге - такая большая путаница в вопросах/ответах/пуллах голосованиях вроде:</span><br />
<span style="font-family: Verdana, sans-serif;">- ест ли ваш телефон батарейку больше?</span><br />
<span style="font-family: Verdana, sans-serif;">(ибо часть людей уже на новых WiFi routers, 3G/LTE etc )</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">Вывод: решение будет только индивидуальным.</span><br />
<br />
<span style="font-family: Verdana, sans-serif;">Disclamer:</span><br />
<span style="font-family: Verdana, sans-serif;">- я не знаю, стоит ли говорить пользователям всегда и открыто что то вроде: для нашего апарата, лучше всего избавиться от старого железа в виде роутеров, которые новые протоколы не поддерживают. Или : </span><span style="font-family: Verdana, sans-serif;">Ваш провайдер использует "некоторые ньюансы 3G/LTE стандартов" и поэтому....</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">- я не особо хочу включать reversing mode и смотреть все тех. логи роутера, systemlogs of iOS etc. Reversing mode is OFF</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">- Apple это просто то, куда и меня сейчас дотянулись руки, но глаза уже видят похожее с другими именами...</span>Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-67096563742267169672013-01-08T14:34:00.005+01:002013-01-08T14:34:53.125+01:00processor cooling, fun in office ...<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">As we have to know , processors and CPUs these days during its normal work inclined to get hot, sometime very hot, therefore and to do not overburn itself,</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">processor die is cooled by some kind of <a href="http://en.wikipedia.org/wiki/Heat_sink" target="_blank">heat sink</a>.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">If heat sink does help for some reason , CPU will throttle itself by decreasing working frequency, </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">this normally takes some time.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">So, recently, we've got a bulk of brand new HW, very brand new. </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Starting of the first system was a bit disappointing - show some weird BIOS issue and nothing more, even initial BIOS doesnt not come up.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Second system - the same, just shown issue is different.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Third....Fourth ....</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Fifth - was starting just fine ! But only twice, thirds time and any after - nothing.</span><br />
<br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">After checking on "this and that", decided to replace used <a href="http://en.wikipedia.org/wiki/Thermal_grease" target="_blank">thermal paste</a> </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">(used one was so bad and was looking more like a used chewing gum from the quality)</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">and .... it helped !</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Story is not about us being smart enough thought...</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Using of the proper paste and initially - would save not only my time but others, </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">besides and </span><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">pricewise - it might be like 1 USD on top for 100 systems.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Second story I was told - there is a guy (now - seriously) who is not sure if we are officially allowed to replace this paste and it might change benchmark results.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">(We are using very good thermal paste, have no doubts )</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">So, now, in the office, we are looking for the person, who would officially allow such paste replacement...</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-40095851747012603652013-01-06T22:47:00.002+01:002013-01-06T22:47:36.614+01:00safe platform for banking?<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">These days banking and mobile banking is a default service of most banks, very convenient service.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">However, if you would like to do it safe and secure what platform or PC would you take?</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">That is the question where for now - there is a simple answer: non-jailbreaked(iOS) OR non-rooted(Android) mobile device.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Think: if on PC or Mac or jailbreaked/rooted mobile device - you can have some form of malware or spyware which you even is not aware of, </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">original iOS or (maybe) Android platform is an exception, up to now, nothing can log your keyboard typing, make remote screenshots etc.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Well,it is so good that for jailbreaking you need to do some and particular dedicated steps and only - if you need to.</span>Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-50785986417537871172012-09-02T21:05:00.003+02:002012-09-03T08:27:43.745+02:00Android and boot animation<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Just wanted to check how such fancy view been created for Android 4x , Ice Cream Sandwich or ICS:</span><br />
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://2.gvt0.com/vi/CXk_p7KruQY/0.jpg" height="266" width="320"><param name="movie" value="http://www.youtube.com/v/CXk_p7KruQY&fs=1&source=uds" /><param name="bgcolor" value="#FFFFFF" /><param name="allowFullScreen" value="true" /><embed width="320" height="266" src="http://www.youtube.com/v/CXk_p7KruQY&fs=1&source=uds" type="application/x-shockwave-flash" allowfullscreen="true"></embed></object></span></div>
<div>
<br /></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Quick investigations shown that general boot process for Android-based devices looks like this : </span><a href="http://bootloader.wikidot.com/linux:boot:android" target="_blank"><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">linux:boot:android</span></a></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Just notice such step as:</span></div>
<table class="wiki-content-table" style="border-collapse: collapse; border-spacing: 0px; color: #222222; empty-cells: show; font-family: verdana, arial, helvetica, sans-serif; font-size: 13px; margin: 0.5em auto; text-align: start;"><tbody>
<tr><td style="border: 1px solid rgb(136, 136, 136); padding: 0.3em 0.7em;">bootanimation</td><td style="border: 1px solid rgb(136, 136, 136); padding: 0.3em 0.7em;">Shows the animation during boot-up</td></tr>
</tbody></table>
<div>
</div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">ok, after short lookup in the source, I could find one important file, like <a href="http://source-android.frandroid.com/frameworks/base/cmds/bootanimation/BootAnimation.cpp" target="_blank">BootAnimation.cpp</a></span></div>
<div>
<br /></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">You can see all details inside but in fact - not much OpenGL ES been used, beside showing textures over time as animation frames, see </span><span class="kt" style="color: #b00040;">bool</span> <span class="n">BootAnimation</span><span class="o" style="color: #666666;">::</span><span class="n">threadLoop</span><span class="p">()</span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">from the link above.</span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">OpenGL ES usage is mostly all about following calls:</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIFK4ygZa6QjNZE-xkDVsZVPaJcEuXVWObRWayD_dttqPp4gSdRDA9EGZAu8j93f35QzBqzIwiiDAHYio4hfoHeZyl8fA4q1guOyXxKJ7iY2UMLLwlsHxXYabh5rwDnFglpSxFQ__BukAu/s1600/Screen+Shot+2012-09-02+at+9.00.51+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="317" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIFK4ygZa6QjNZE-xkDVsZVPaJcEuXVWObRWayD_dttqPp4gSdRDA9EGZAu8j93f35QzBqzIwiiDAHYio4hfoHeZyl8fA4q1guOyXxKJ7iY2UMLLwlsHxXYabh5rwDnFglpSxFQ__BukAu/s400/Screen+Shot+2012-09-02+at+9.00.51+PM.png" width="400" /></a></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">with doing animation sequence itself inside </span><span class="kt" style="color: #b00040;">bool</span> <span class="n">BootAnimation</span><span class="o" style="color: #666666;">::</span><span class="n">movie</span><span class="p">()</span></div>
<div>
</div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">with even more simple calls.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Sad story, I was under impression that boot animation is dynamic in the full sense and rendered by OpenGL ES </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">... well, just was a hope ...</span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Besides, you can see where animation located and now it will be easy to replace for the own one, if you would wish..</span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">example of the bootanimation.zip is here: <a href="http://www.mediafire.com/?663k1abf2d1wy2m" target="_blank">http://www.mediafire.com/?663k1abf2d1wy2m</a></span></div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">or just google for such raw sample for your best look...</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">( you can replace default with yours with <a href="http://developer.android.com/tools/help/adb.html" target="_blank">adb</a> command like:</span><br />
<span style="font-family: Trebuchet MS, sans-serif; font-size: x-small;">adb push ./bootanimation.zip /data/local/bootanimation.zip</span><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">see in sources - User's boot animation has higher priority vs system's one,</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">unless encrypted system is used AND present )</span><br />
<br />
<div>
<br /></div>
Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-37815297496100496992012-09-02T17:35:00.002+02:002012-09-03T08:30:48.864+02:00Is my mobile emailing secure?<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Just wanted to really check if my emails from my iphone usage can be sniffed meaning be visible to someone if I would use some WiFi hotspot, </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">like when traveling...</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">In order to check this, had to establish my small test environment, like very good described here: <a href="https://groups.google.com/forum/?fromgroups=#!msg/sjsuee281/2udso36Y4L0/hq-ncJHPdkEJ" target="_blank">Capturing iPhone traffic with Wireshark</a></span><br />
<br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Now different techniques possible but I wanted to do it fast, lazy me...</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">So I opened captured with <a href="http://en.wikipedia.org/wiki/Wireshark" target="_blank">Wireshark</a> packages and searched for "yahoo" and "google" as email services I am using:</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgi2qni54IrXZIlC4yPceG9lobxWDSBFuj_arXlrlOgk18c0a0iqxPFpXYeR6DyhaHUMKmJ11Un8XifqHZWWZMJ6X7WvuLq-iV24AvoHiOW7UBS2TFrZ8bGsKUREuMbyyvKfCH8lXeiCO39/s1600/Screen+Shot+2012-09-02+at+5.30.58+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="153" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgi2qni54IrXZIlC4yPceG9lobxWDSBFuj_arXlrlOgk18c0a0iqxPFpXYeR6DyhaHUMKmJ11Un8XifqHZWWZMJ6X7WvuLq-iV24AvoHiOW7UBS2TFrZ8bGsKUREuMbyyvKfCH8lXeiCO39/s320/Screen+Shot+2012-09-02+at+5.30.58+PM.png" width="320" /></a></div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Now about findings:</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">- For yahoo , I see certificate exchange and more:</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_xkQRfYFYcl6et2d_cE8cOMot3PI6nsROzXU7M8CgNxfhgVH0dltlbJSM4_5uctJBrn-hC3LEsttwpKA-wR3uIThBffFDrclnU4IHcAwKmaLk2f2jkh-mCW8icuE-Z92PkpeQbC_qz0J-/s1600/Screen+Shot+2012-09-02+at+5.25.53+PM.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="95" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_xkQRfYFYcl6et2d_cE8cOMot3PI6nsROzXU7M8CgNxfhgVH0dltlbJSM4_5uctJBrn-hC3LEsttwpKA-wR3uIThBffFDrclnU4IHcAwKmaLk2f2jkh-mCW8icuE-Z92PkpeQbC_qz0J-/s320/Screen+Shot+2012-09-02+at+5.25.53+PM.png" width="320" /></a></div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<br />
<br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">- For gmail, also:</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn6Sbbxtr1lQ9MVItogKNTDCq5LU_Kh5UVb2k7jleioNUCKOYZUBTH8BjajNi8IyqSyZ331r2f3ER1zOij7_DkwXFBuw2s5KLd7_MYx5iAycN5abw6T9_TYDq-PJBuGZ4715GfuN6SHBP1/s1600/Screen+Shot+2012-09-02+at+5.28.15+PM.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="108" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn6Sbbxtr1lQ9MVItogKNTDCq5LU_Kh5UVb2k7jleioNUCKOYZUBTH8BjajNi8IyqSyZ331r2f3ER1zOij7_DkwXFBuw2s5KLd7_MYx5iAycN5abw6T9_TYDq-PJBuGZ4715GfuN6SHBP1/s320/Screen+Shot+2012-09-02+at+5.28.15+PM.png" width="320" /></a></div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">and sadly ( joking ) - nothing unencrypted/unsecured about my email text, email contacts etc</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Well, feel myself safe , </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">or ?</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">PS: nothing especially been made for default email settings,</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">However, for gmail account: "Using of SSL" set to ON,</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Yahoo mail on iphone currently has no such setting.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-68544372249580206982012-06-03T15:41:00.001+02:002012-06-03T15:41:25.238+02:00Video decode on CPU vs HW / iOS and battery<span style="font-family: Verdana,sans-serif;">Just had a fun to look deep at some video stream app on iOS devices, it is a nice app as it allows to play variety of video stream and not only "supported by Apple" ones (meaning hardware/HW/GPU way of video decode and playback)</span><br />
<br />
<span style="font-family: Verdana,sans-serif;">Under the hood: it uses <a href="https://github.com/pyrot/vlc/blob/master/modules/video_output/ios.m" target="_blank">VLC parts and bits</a> together with the trick as:</span><br />
<span style="font-family: Verdana,sans-serif;">- decode on CPU (arm) / via standard VLC code </span><br />
<span style="font-family: Verdana,sans-serif;">- video output via OpenGL stack / iOS SDK</span><br />
<br />
<br />
<span style="font-family: Verdana,sans-serif;">This approach allows to use <a href="http://en.wikipedia.org/wiki/AirPlay" target="_blank">AirPlay</a> also and quite handy</span><br />
<span style="font-family: Verdana,sans-serif;">even thought with some setup limitations:</span><br />
<span style="font-family: Verdana,sans-serif;">like you cannot establish a proper connection (called "Mirroring") from withing the app but <a href="http://support.apple.com/kb/HT5209" target="_blank">on the system level</a> (yet restricted by Apple down to the Private API, where such usage will make the app not acceptable for AppStore-based distribution )</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRI0T73NnQjGT5hLy99Eq5R_JvzPyC5mV9iq2tt_3dypSoX3OI90rePYxaH1hfjL1p1PoL9_Fa2A_36MBKjYg9UOtCl2R0A8AB-mOxgMRTpmbS-N1m1Tf9Jdkn6UHVwZJ9BQsCfo9iJf1C/s1600/AirPlayPicker.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRI0T73NnQjGT5hLy99Eq5R_JvzPyC5mV9iq2tt_3dypSoX3OI90rePYxaH1hfjL1p1PoL9_Fa2A_36MBKjYg9UOtCl2R0A8AB-mOxgMRTpmbS-N1m1Tf9Jdkn6UHVwZJ9BQsCfo9iJf1C/s320/AirPlayPicker.jpg" width="320" /></a></div>
<span style="font-family: Verdana,sans-serif;">where in general: <a href="http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AirPlayGuide/EnrichYourAppforAirPlay/EnrichYourAppforAirPlay.html#//apple_ref/doc/uid/TP40011045-CH6-SW1" target="_blank">You can add an AirPlay picker to your media playback controls by using MPVolumeView...</a> </span><br />
<br />
<span style="font-family: Verdana,sans-serif;">And the last note: I have a strong feeling that such approach drain my battery like <u><b>2-4x</b></u> times faster, if I would compare it to iOS default or presumably HW based video playback.</span><br />
<br />
<span style="font-family: Verdana,sans-serif;">Not sure if I really like it.</span> <br />
<br />
<br />
<br />Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-40099135248093347812012-05-31T21:42:00.001+02:002012-06-05T22:04:42.628+02:00OpenCL 1.2 and OpenCL binaries<span style="font-family: Verdana,sans-serif;">it looks that I was a bit sleepy ( or busy? ) and overlooked may be first OpenCL 1.2 implementation been released, from <a href="http://blogs.amd.com/developer/2012/05/21/opencl%E2%84%A2-1-2-and-c-static-kernel-language-now-available/" target="_blank">AMD</a> , </span><br />
<span style="font-family: Verdana,sans-serif;">practically many expected changes and described at many places, </span><br />
<br />
<span style="font-family: Verdana,sans-serif;">just may be to add from my side, a diff view:</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIoDhBESNXlpxsXAz9eSQJHzRwRBcUG4_pV2uj0mBU2LJjniBN8eipc5R6tywOfg_gMnsVjBpmJZyXP2VkGrHrT_t-j9iZURd4wimPh58weZY9DoPU_qaarRLQxV_xL00keulOkKn4GuCf/s1600/1.1_1.2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIoDhBESNXlpxsXAz9eSQJHzRwRBcUG4_pV2uj0mBU2LJjniBN8eipc5R6tywOfg_gMnsVjBpmJZyXP2VkGrHrT_t-j9iZURd4wimPh58weZY9DoPU_qaarRLQxV_xL00keulOkKn4GuCf/s1600/1.1_1.2.png" /></a></div>
<span style="font-family: Verdana,sans-serif;">note claimed <a href="http://en.wikipedia.org/wiki/Advanced_Vector_Extensions" target="_blank">AVX </a>support.</span><br />
<br />
<span style="font-family: Verdana,sans-serif;">My kernels work.</span><br />
<br />
<span style="font-family: Verdana,sans-serif;">Now about interoperability of binary kernels: right nobody was promising much, especially in between vendors, like for now:</span><br />
<span style="font-family: Verdana,sans-serif;">- AMD: uses binary and kind of ELF format </span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-84lHr2hjLEkkmEfPQwBon2rvQ46VW5pkbrH3WV0sUeqQYlnjdlY-Y1VfjBzUcryRfhKDEb6DrWTJ3dpxGUGI4BQbAM2L1anlmU9oh-ZPDaTa-xQrp16dDSw4aJixvXoInmC2DmLP2FOV/s1600/amd_bin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-84lHr2hjLEkkmEfPQwBon2rvQ46VW5pkbrH3WV0sUeqQYlnjdlY-Y1VfjBzUcryRfhKDEb6DrWTJ3dpxGUGI4BQbAM2L1anlmU9oh-ZPDaTa-xQrp16dDSw4aJixvXoInmC2DmLP2FOV/s640/amd_bin.png" width="640" /></a></div>
<br />
<span style="font-family: Verdana,sans-serif;">- Intel: uses binary and kind of LLVM bitcode format with minor additions ( to prevent fast disassemble or just an old LLVM (2.8, 2.9 ... )</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4tbqNlRSrSUEB1P7y9U0vu4xOa_pszsi3hyKqjABS_1flUMnBIMBD2fsfhjekTj_8suZR4-WT9rHt-t2JF1bo-jS90M7xMwSc1PdYtNa41YaUFSx-okEWl5ThyprUO6BA9LNNmfavE7Rw/s1600/intel_bin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4tbqNlRSrSUEB1P7y9U0vu4xOa_pszsi3hyKqjABS_1flUMnBIMBD2fsfhjekTj_8suZR4-WT9rHt-t2JF1bo-jS90M7xMwSc1PdYtNa41YaUFSx-okEWl5ThyprUO6BA9LNNmfavE7Rw/s640/intel_bin.png" width="640" /></a></div>
<span style="font-family: Verdana,sans-serif;"> ( note: pattern of 0x42 0x43 0xC0 0xDE starting from offset 0x18, property of bc format, magic number aka </span><tt>BC 0xC0DE</tt><span style="font-family: Verdana,sans-serif;"> )</span><br />
<span style="font-family: Verdana,sans-serif;"><br /></span><br />
<span style="font-family: Verdana,sans-serif;">- Nvidia: uses plain text NVVM IR/PTX format</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-rv2KAExv2p-3M0JHFO27D53L1WMJEXdhshgQdmUfI-Ad_0dlta23teiNlIIu59qp7BPpAs66WCBPlRjhzdax4bLaAiXe0hRMGQzNat3cVAqmTo7RZMi09z3qkOtU4ph9WW4T1V8F4QPk/s1600/nvidia_bin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="323" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-rv2KAExv2p-3M0JHFO27D53L1WMJEXdhshgQdmUfI-Ad_0dlta23teiNlIIu59qp7BPpAs66WCBPlRjhzdax4bLaAiXe0hRMGQzNat3cVAqmTo7RZMi09z3qkOtU4ph9WW4T1V8F4QPk/s640/nvidia_bin.png" width="640" /></a></div>
<span style="font-family: Verdana,sans-serif;"><br /></span>Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-26395704445966471662012-04-30T17:12:00.003+02:002012-04-30T17:12:36.305+02:00Ламповый усилитель для наушников<span style="font-family: Verdana,sans-serif;">Вроде и пробывал, потом перепробывал много наушников, однако вот эти: <a href="http://www.amazon.com/Sony-MDR-V700DJ-DJ-Style-Monitor-Headphones/dp/B00001W0DH" target="_blank">Sony-MDR-V700DJ-DJ</a> и служат долго ( первые купил лет 8-10 назад и еще "служат") и привык очень давно. Нравится не только то что закрытые - и народ/семья вокруг не ругается, но и просто качество, хотя фирменный штекер уже перепаял, но это сам дурак...</span><br />
<span style="font-family: Verdana,sans-serif;">Кстати - вполне раскачиваются и мелкими устройствами типа iphone.</span><br />
<span style="font-family: Verdana,sans-serif;">Так что стали "друзьями в поездках" ибо очень помогает при перелетах отключиться от внешнего мира и ... просто поспать :)</span><br />
<br />
<span style="font-family: Verdana,sans-serif;">Но соль этого поста в другом - сбывается мечта идиота и скоро ко мне добереться усилитель вот такого содержания - <a href="http://tubeaudio.ucoz.ru/index/usilitel_na_6zh51p_podrazhanie_ongeh_3/0-28" target="_blank">Усилитель на 6ж51п </a></span><br />
<span style="font-family: Verdana,sans-serif;">Все просто, но лампово. Надо конечно насчет DACа правильного подумать, что бы и как бы все красиво - но "города не сразу строятся".</span><br />
<span style="font-family: Verdana,sans-serif;">Вообщем - ту би континюед. </span>Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-22102121104316805952012-04-26T00:00:00.000+02:002012-04-26T16:13:54.022+02:00Compressed Video Stream Analyzers<span style="font-family: Verdana,sans-serif;">It happens that for any check and analysis of video stream for its very low details and compliance as for h.264/AVC and more standards - not many tools available.</span><br />
<br />
<span style="font-family: Verdana,sans-serif;">Let me count (without any priority):</span><br />
<ul>
<li><span style="font-family: Verdana,sans-serif;"><a href="http://www.tek.com/mpeg-video-test-solution/mpeg-software/mts4ea-software/mts4ea-elementary-stream-analysis-software-de" target="_blank">Tektronix MTS4EA</a> </span></li>
<li><span style="font-family: Verdana,sans-serif;"><a href="http://www.interrasystems.com/dms/analyzers.php" target="_blank">Interra Systems H.264 Analyzer</a> </span></li>
<li><span style="font-family: Verdana,sans-serif;"><a href="http://www.elecard.com/en/products/professional/analysis/streameye.html" target="_blank">Elecard StreamEye (Studio)</a> </span></li>
</ul>
<span style="font-family: Verdana,sans-serif;">and not sure if missed any other one. </span><br />
<br />
<span style="font-family: Verdana,sans-serif;"> Are they any useful? </span><br />
<br />
<span style="font-family: Verdana,sans-serif;">To the good extend - they are unique in the functionality!</span><br />
<span style="font-family: Verdana,sans-serif;">How you going to prove that your implementation is good and stable enough without such tools?</span><br />
<br />
<span style="font-family: Verdana,sans-serif;">I've been getting very good experience with StreamEye as it helped to solve several very tricky bugs related to NAL's, SEI's, where some players were able to decode and show encoded streams properly but not the others, Windows Media Player was refusing to play but QuickTime...</span><br />
<span style="font-family: Verdana,sans-serif;"></span><br />
<span style="font-family: Verdana,sans-serif;"><br /></span><br />
<span style="font-family: Verdana,sans-serif;">It will be interesting what will happen with the next standard - <a href="http://en.wikipedia.org/wiki/High_Efficiency_Video_Coding" target="_blank">"H.265"</a></span><br />
<br />
<br />
<br />
<br />
<br />Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-79243485431549640572012-04-23T16:18:00.002+02:002012-04-23T16:19:29.446+02:00Неизвестный Синклер<span style="font-family: Verdana,sans-serif;">не знаю: верить или нет, это уже на плечах каждого прочитавшего.</span><br />
<br />
<span style="font-family: Verdana,sans-serif;">Мне лично, в силу каких то причин, больше довелось "возиться" с <a href="http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B5%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D1%81%D1%82_%28%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%29" target="_blank">"Специалистом"</a>, даже программы были написаны , но потеряны...</span><br />
<span style="font-family: Verdana,sans-serif;"><br /></span><br />
<span style="font-family: Verdana,sans-serif;">Вообщем, цитирую:</span><br />
<blockquote class="tr_bq">
<span style="font-family: Verdana,sans-serif; font-size: x-small;">"Сэр Клайв Синклер после выпуска ZX-80 и ZX-81 изобретает замечательный компьютер ZX-82, который позднее назвали ZX-Spectrum. В апреле 1982 года он выходит в свет. Компьютер пользуется большой популярностью, и Синклер выпускает в 1983 году Микродрайв и Интерфейс 1. Эти устройства позволяют работать с данными быстрее, чем на кассетах. Кроме того, там есть последовательный порт (RS232) и возможность объединять компьютеры в сеть. В 1984 году появляется вариант с улучшенной клавиатурой и радиатором в блоке питания, который называется ZX Spectrum +. И, наконец, в 1986 году выходит Sinclair Spectrum 128, в котором 128 килобайт памяти, но можно переключиться и в режим с 48 килобайтами. У него также новая операционная система со встроенным калькулятором и расширенным Бейсиком. Но в 1986 году Sinclair Research LTD обанкротился. Права на производство спектрумов приобретает «Амстрад». С 1986 до 1988 года «Амстрад» выпускает три модели: Amstrad Spectrum +2, +2A и +3 с дисководом."<br /><br />Маловато информации для более чем шестилетнего периода в развитии одного из самых массовых и легендарных компьютеров. К тому же история получилась, мягко говоря, неточной: в момент выпуска ZX80 (именно так выглядит его точное название) Клайв Синклер не был «сэром», то есть не имел рыцарского звания. Как не имел его и двумя годами позднее на момент выпуска ZX Spectrum. К тому же Синклер ничего не изобретает, он лишь возглавляет фирму с ограниченной ответственностью, занимающуюся разработкой (по множеству направлений) с привлечением других компаний.</span></blockquote>
<span style="font-family: Verdana,sans-serif;"><br /></span><br />
<span style="font-family: Verdana,sans-serif;"><a href="http://zxnext.narod.ru/hist4063_1.htm" target="_blank">и дальше в деталях, по годам</a></span>Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-8861410946489175882012-04-22T16:52:00.002+02:002012-04-23T15:10:37.028+02:00Лжец — социальный навык (с) Dwarf Fortress wiki<div style="font-family: Verdana,sans-serif;">
<b><span style="background-color: #f4cccc;"></span>"Лжец</b> — <a href="http://www.dfwk.ru/Social_skill" title="Social skill">социальный навык</a>, используемый дварфами чтобы заводить друзей. Дварфам с развитым навыком проще завести друга и выше шансы стать <b style="background-color: red;"><a href="http://www.dfwk.ru/Mayor" title="Mayor">мэром</a></b>." </div>
<div style="font-family: Verdana,sans-serif;">
Взято отсюда: http://www.dfwk.ru/Liar</div>
<div style="font-family: Verdana,sans-serif;">
<br /></div>
<div style="font-family: Verdana,sans-serif;">
вообщем даже не знаю, что можно добавить, забавно...</div>
<div style="font-family: Verdana,sans-serif;">
<br /></div>
<div style="font-family: Verdana,sans-serif;">
Хотя, <a href="http://ru.wikipedia.org/wiki/Slaves_to_Armok_II:_Dwarf_Fortress" target="_blank">Dwarf Fortress</a> это конечно еще одно доказательство что ли, что программирование для игры - дело второе, третье, </div>
<div style="font-family: Verdana,sans-serif;">
главное же - идея.</div>
<div style="font-family: Verdana,sans-serif;">
<br /></div>
<div style="font-family: Verdana,sans-serif;">
Сложность игры поражает:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_Jiw_DoW__Q5uspEUfuVqKHhtaQGDrp1mLfIfvqgAm10AMd8tjujZYb1vnRQ3XTX9CbNbhmQdjv3h8nTvPFM5BsYZw2baFKZwUoIDBahrf1v5QNkP2ux1Kj0JKQdy0SauFuqUpIWR2dNT/s1600/2rmqi6o.GIF" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_Jiw_DoW__Q5uspEUfuVqKHhtaQGDrp1mLfIfvqgAm10AMd8tjujZYb1vnRQ3XTX9CbNbhmQdjv3h8nTvPFM5BsYZw2baFKZwUoIDBahrf1v5QNkP2ux1Kj0JKQdy0SauFuqUpIWR2dNT/s320/2rmqi6o.GIF" width="320" /></a></div>
<div style="font-family: Verdana,sans-serif;">
взято <a href="http://www.toptiertactics.com/2010/10/win-conditioning-dwarf-fortress/" target="_blank">тут</a></div>
<div style="font-family: Verdana,sans-serif;">
<br /></div>
<div style="font-family: Verdana,sans-serif;">
Как продолжение доказательста идеи: "идеи и только потом программирования" - можно посмотреть на второго ( первый - Dwarf Fortress, да , именно так,IMHO ) вдохновителя <a href="http://ru.wikipedia.org/wiki/Minecraft" target="_blank">Minecraft'a</a> - <a href="http://code.google.com/p/infiniminer/" target="_blank">Infiniminer'a и его исходники.</a></div>
<div style="font-family: Verdana,sans-serif;">
</div>
<div style="font-family: Verdana,sans-serif;">
вообщем то и смотреть то мало есть на что, со стороны исходников (может быть только <a href="http://code.google.com/p/infiniminer/source/browse/trunk/code/InfiniminerServer/CaveGenerator.cs" target="_blank">CaveGenerator</a> и в частности: использование градиента и экстраполяций в создании пещеры, все остальное - использование <a href="http://en.wikipedia.org/wiki/Microsoft_XNA" target="_blank">XNA</a> )</div>
<div style="font-family: Verdana,sans-serif;">
но эффект от реализации проэктов - впечатляет,<br />
Minecraft: </div>
<div style="font-family: Verdana,sans-serif;">
</div>
<div style="font-family: Verdana,sans-serif;">
"Несмотря на то, что игра находилась в стадии бета-версии и у неё не было никакой рекламной кампании, по состоянию на 30 марта 2012 года число зарегистрированных пользователей превысило 25 миллионов, из которых более 5 миллионов игроков купили игру"</div>Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com2tag:blogger.com,1999:blog-7081507101814694870.post-49090648203504541722012-04-08T12:42:00.003+02:002012-04-08T12:43:15.836+02:00Pink Floyd: Classic Albums: The Making of The Dark Side of the Moon<div style="font-family: Verdana,sans-serif;">
Got some free time and want to enjoy?</div>
<div style="font-family: Verdana,sans-serif;">
<br /></div>
<div style="font-family: Verdana,sans-serif;">
Here is my recommendation for today: <a href="http://itunes.apple.com/ca/movie/classic-albums-pink-floyd/id322060657" target="_blank">Classic Albums: The Making of The Dark Side of the Moon</a></div>Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-633815070561186332012-03-28T13:55:00.001+02:002012-03-28T13:55:45.101+02:00Big bosses coming? Вам не сказали того что вы ожидали?<div style="font-family: Verdana,sans-serif;">
Тогда не отчаивайтесь, это случается часто и повсеместно,</div>
<div style="font-family: Verdana,sans-serif;">
<br /></div>
<div style="font-family: Verdana,sans-serif;">
Случайно я даже нашел сходство с текстом одной и всем известной песни, какой?</div>
<div style="font-family: Verdana,sans-serif;">
<br />
Слушайте:</div>
<div class="separator" style="clear: both; font-family: Verdana,sans-serif; text-align: center;">
<object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://1.gvt0.com/vi/1BLZFiWPf_E/0.jpg" height="266" width="320"><param name="movie" value="http://www.youtube.com/v/1BLZFiWPf_E&fs=1&source=uds" />
<param name="bgcolor" value="#FFFFFF" />
<embed width="320" height="266" src="http://www.youtube.com/v/1BLZFiWPf_E&fs=1&source=uds" type="application/x-shockwave-flash"></embed></object></div>
<br />
<span style="font-family: Verdana,sans-serif;">смотреть не обязательно :)</span>Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-49847860295429383452012-03-16T23:25:00.001+01:002012-03-16T23:25:40.268+01:00Resolving of true method via objc_msgSend and within IDA for arm binariesAs you know Objective-C is full (80%+) of calls which are made through the help of the internal objc_msgSend method.<br />
This is not a problem unless you would like to make some reversing for a good reasons :)<br />
and at this point, knowing what method is actually called - kind of a key.<br />
<br />
Not a problem any more, just have a look on helper IDC script for IDA which makes situation more transparent and works directly over arm binaries, so it makes from kind of unknown:<br />
<pre class="code">__text:000036B8 02 F0 92 EC BLX _objc_msgSend</pre>
<br />
something more obvious for the method call name:<br />
<pre class="code">__text:000036B8 02 F0 92 EC BLX _objc_msgSend <b>; @selector(getVertexSize)</b></pre>
<br />
Just note method name where app will land at.<br />
<br />
IDC script in sources available at:
<a href="https://github.com/x264msna/dearm_msgSend" target="_blank">https://github.com/x264msna/dearm_msgSend</a>Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-8358561705578553002012-03-11T15:25:00.000+01:002012-03-11T15:27:19.053+01:00Selling copy of ... sample, ripple HD (?) effectRipple effect looks quite interesting and there are some questions how to do such.<br />
Apple has released the own sample, available from <a href="https://developer.apple.com/library/ios/#samplecode/GLCameraRipple/Introduction/Intro.html" target="_blank">GLCameraRipple</a> and this is not the end of the story: some guys have decided to sell the sample and more - it has been accepted by Apple and App Store, just here - <a href="http://itunes.apple.com/us/app/ripple-hd/id478532934?mt=8" target="_blank">Ripple HD</a><br />
(verified by shaders :) - 100% the same, including "Copyright (C) 2011 Apple Inc. All Rights Reserved." )<br />
<br />
PS if you are interested in "how to implement?" - just look for the full sources at the sample page from Apple, YUV -> RGB is there and more, like simulation of UVs via <br />
<pre>runSimulation and rippleTexCoords</pre>
<table><tbody>
</tbody></table>
<br />
Nothing to say more from the technical side of the Ripple Effect implementation question.Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-60870483914279308692012-02-27T22:55:00.001+01:002012-03-11T15:25:40.427+01:00философия,корпорация или корпорация,философия<span style="font-family: Verdana,sans-serif;">Наверное тяжело связать два термина однако смотрим и не обманываемся:</span><br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/GcuPnUn6Wsw?feature=player_embedded' frameborder='0'></iframe></div>
<br />
<span style="font-family: Verdana,sans-serif;">смотреть со 2й минуты, все политкоректно и дружелюбно...</span><br />
<br />
<span style="font-family: Verdana,sans-serif;">интересно, если ли еще подобные рассуждения вслух?</span>Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-14278210306670646772012-02-11T22:52:00.000+01:002012-02-11T22:52:34.025+01:00Understanding Verilog Blocking and Non-blocking AssignmentsOne of the best and detailed explanation of such important and to the good extend, complex topic - so far, been found here: <a href="http://electronix.ru/forum/index.php?act=attach&type=post&id=42313" target="_blank">Understanding Verilog Blocking and Non-blocking Assignments</a><br />
<br />quite old from the date but so useful in many aspects, must read.Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-12429885261742106022012-01-24T15:01:00.000+01:002012-01-25T23:11:35.636+01:00Bash'ing in Parallel<span style="font-family: Verdana,sans-serif;">When you need to process many items (like I had to process for my video from the previous post - 4817 initial pictures) you would better think about how much time it might take. In my example, even knowing that 4817 pictures with such perfect but not yet well threaded to use all CPU cores tool as <a href="http://www.imagemagick.org/" target="_blank">imagemagick</a> takes about 2 second per picture , total time is kind of nightmare to wait for.</span><br />
<span style="font-family: Verdana,sans-serif;">So, as I am processing on Linux and with script - here is the trick to utilize all local and remote CPU cores even from BASH script and(!) minimum changes required:</span><br />
<span style="font-family: Verdana,sans-serif;">Instead of traditional for many years:</span><br />
<br />
<pre class="code">for i in `find . -type f -name "file*.png"`;
do
do_view_port.sh `echo $i | sed -e 's/\.png//' -e 's/^.*_//'`
done </pre>
<br />
<span style="font-family: Verdana,sans-serif;">Where I process all .png files in the folder and one by one with my do_view_port.sh, "magic" script with needed actions, just get <a href="http://www.gnu.org/software/parallel/" target="_blank">GNU Parallel</a> (which is IMHO best by now) and do very minor changes:</span><br />
<span style="font-family: Verdana,sans-serif;"><br /></span><br />
<pre class="code">find . -type f -name "file*.png" | sed -e 's/\.png//' -e 's/^.*_//' |
parallel -j+0 --eta do_view_port.sh {.}</pre>
<br />
<span style="font-family: Verdana,sans-serif;">where it start to be cleaner for the look and faster ( in my case: 7.65x ).</span><br />
<span style="font-family: Verdana,sans-serif;">Just note {.} which represents a "current" arguments... </span><br />
<br />
<span style="font-family: Verdana,sans-serif;">So and in total - this, kind of one change, allowed me to finish needed changes within as much as 23min (instead of 175min or close to 3 hours ) </span><br />
<br />
<span style="font-family: Verdana,sans-serif;">PS: I personally liked this free ETA, as always, meaning time yet to go/Estimated Time to Achieve :)</span>Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-85305211876256249412012-01-22T21:13:00.000+01:002012-01-23T20:23:32.899+01:00breaking picture down<span style="font-family: Verdana,sans-serif;">Всегда радовали глаз японские игры, а особенно их эффекты, я бы даже сказал спец-эффекты...</span><br />
<span style="font-family: Verdana,sans-serif;">Как то было даже интересно посмотреть как именно они реализовывают эти свои цвета радуги, но не доходили руки...</span><br />
<span style="font-family: Verdana,sans-serif;">Однако дошли и до очень IMHO неплохой вещи - <a href="http://www.youtube.com/watch?v=ZbmV6863mt8" target="_blank">Devil May Cry</a>, ее 4й части. </span><br />
<span style="font-family: Verdana,sans-serif;">Оказалось particle машина у них, японцев работает во всю и даже чуть больше,шире и с большим набором красок, включая ядовито-какие-то... </span><br />
<span style="font-family: Verdana,sans-serif;">Много конечно реализовывается с помощью "правильно продуманых" mesh-ей и дальше уже шейдеры - например полет мечя вверх лихо повторяется подготовлеными mesh-ами, причем в несколько проходов...</span><br />
<span style="font-family: Verdana,sans-serif;">Использование </span><span style="font-family: Verdana,sans-serif;">ессно </span><span style="font-family: Verdana,sans-serif;">alpha и немного другого зелья...</span><br />
<span style="font-family: Verdana,sans-serif;"></span><br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<span style="font-family: Verdana,sans-serif;">Как то все это и организовалось в небольшое видео: </span><br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/QLUpRlCdWo8?feature=player_embedded' frameborder='0'></iframe></div>
<br />
<span style="font-family: Verdana,sans-serif;"> </span><br />
<span style="font-family: Verdana,sans-serif;">Как именно все подготавливалось, прорисовывалось и пост-обрабатывалось скорее всего выльется в отдельных пост, там и просто и по-разному...</span><br />
<span style="font-family: Verdana,sans-serif;"><br /></span><br />
<span style="font-family: Verdana,sans-serif;">Надо будет еще что то поразбирать "в винтики"...</span><br />
<br />
<span style="font-family: Verdana,sans-serif;">Update: последний в видео пост-эффект, по-сути, это ессно довольно простой pixel/fragment shader:</span><br />
<span style="font-family: Verdana,sans-serif;"> </span>
<br />
<pre class="code">// Buffer Definitions:
//
// cbuffer FilterBlur
// {
//
// float gXfBlurStart; // Offset: 0 Size: 4
// float gXfBlurWidth; // Offset: 4 Size: 4 [unused]
// float2 gXfScreenCenter; // Offset: 8 Size: 8
// float gXfAlpha; // Offset: 16 Size: 4
//
// }
//
//
// Resource Bindings:
//
// Name Type Format Dim Slot Elements
// ---------------- ---------- ------- ----------- ---- --------
// PointSampler0 sampler NA NA 0 1
// LinearSampler1 sampler NA NA 1 1
// PointSampler0TEXTURE texture float 2d 0 1
// LinearSampler1TEXTURE texture float 2d 1 1
// FilterBlur cbuffer NA NA 0 1
//
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// ---------------- ----- ------ -------- -------- ------ ------
// SV_POSITION 0 xyzw 0 POS float
// TEXCOORD 0 xy 1 NONE float xy
// TEXCOORD 1 zw 1 NONE float
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// ---------------- ----- ------ -------- -------- ------ ------
// SV_TARGET 0 xyzw 0 TARGET float xyzw
//
ps_4_0
dcl_input linear v1.xy
dcl_output o0.xyzw
dcl_constantbuffer cb0[2], immediateIndexed
dcl_sampler s0, mode_default
dcl_sampler s1, mode_default
dcl_resource_texture2d ( float , float , float , float ) t0
dcl_resource_texture2d ( float , float , float , float ) t1
dcl_temps 2
add r0.xy, v1.xyxx, -cb0[0].zwzz
mad r0.xy, r0.xyxx, cb0[0].xxxx, cb0[0].zwzz
sample r0.xyzw, r0.xyxx, t1.xyzw, s1
sample r1.xyzw, v1.xyxx, t0.xyzw, s0
add r0.xyzw, r0.xyzw, -r1.xyzw
mad o0.xyzw, cb0[1].xxxx, r0.xyzw, r1.xyzw
ret</pre>Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-19798050748469512052012-01-12T21:05:00.000+01:002012-01-22T13:36:14.954+01:00Timing fun: timeBeginPeriod/timeEndPeriodI will start from:
<a href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd743609%28v=vs.85%29.aspx">The multimedia timer services allow an application to schedule periodic timer events — that is, the application can request and receive timer messages at application-specified intervals.</a>
<br>
it is quite interesting to see quite interesting limitation:
<blockquote>You must match each call to timeBeginPeriod with a call to timeEndPeriod, specifying the same minimum resolution in both calls. An application can make multiple timeBeginPeriod calls as long as each call is matched with a call to timeEndPeriod.</blockquote><br>
from <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd757624%28v=vs.85%29.aspx">timeBeginPeriod MSDN description</a>
and a bit more:
<blockquote>You must match each call to timeBeginPeriod with a call to timeEndPeriod, specifying the same minimum resolution in both calls. An application can make multiple timeBeginPeriod calls as long as each call is matched with a call to timeEndPeriod.</blockquote><br>
from <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd757626%28v=vs.85%29.aspx">timeEndPeriod MSDN description</a>
<br>
<br>
Funny, right? "Must much each call...the same minimum resolution in both call ..."
<br>
Let me show details that will help you to understand why and it details:<br>
(disassembled but C-liked, by HexRay - not everything been changed but only a major logic )<br>
<pre class="code">MMRESULT __stdcall timeBeginPeriod(UINT uPeriod)
{
UINT v1; // esi@1
char *v2; // eax@2
__int16 v3; // cx@3
int v4; // eax@8
MMRESULT v5; // esi@10
MMRESULT result; // eax@11
v1 = uPeriod;
if ( uPeriod < TDD_MAXRESOLUTION )
{
result = 97;
}
else
{
JUMPOUT(uPeriod, dword_41B28FE4, loc_41B0A0A1);
EnterCriticalSection(&ResolutionCritSec);
v2 = (char *)&word_41B28FF6[v1 - TDD_MAXRESOLUTION];
if ( *(_WORD *)v2 == -1 )
{
LeaveCriticalSection(&ResolutionCritSec);
result = 97;
}
else
{
v3 = *(_WORD *)v2 + 1;
*(_WORD *)v2 = v3;
if ( v3 != 1 || v1 >= saved_value_2 )
{
v5 = 0;
}
else
{
if ( WPP_GLOBAL_Control != &WPP_GLOBAL_Control
&& *((_DWORD *)WPP_GLOBAL_Control + 7) & 0x400000
&& *((_BYTE *)WPP_GLOBAL_Control + 25) >= 5u )
WPP_SF_P(
*((_DWORD *)WPP_GLOBAL_Control + 4),
*((_DWORD *)WPP_GLOBAL_Control + 5),
16,
(int)dword_41B02720,
v1);
v4 = 10000 * v1;
uPeriod = 10000 * v1;
if ( 10000 * v1 < MinimumTime )
{
v4 = MinimumTime;
uPeriod = MinimumTime;
}
if ( NtSetTimerResolution(&uPeriod, v4, 1, &uPeriod) < 0 )
{
if ( WPP_GLOBAL_Control != &WPP_GLOBAL_Control && *((_DWORD *)WPP_GLOBAL_Control + 7) & 0x400000 )
{
if ( *((_BYTE *)WPP_GLOBAL_Control + 25) >= 1u )
WPP_SF_P(
*((_DWORD *)WPP_GLOBAL_Control + 4),
*((_DWORD *)WPP_GLOBAL_Control + 5),
17,
(int)dword_41B02720,
v1);
}
--word_41B28FF6[v1 - TDD_MAXRESOLUTION];
v5 = 97;
}
else
{
saved_value = v1;
v5 = 0;
saved_value_2 = (uPeriod + 9900) / 0x2710;
}
}
LeaveCriticalSection(&ResolutionCritSec);
result = v5;
}
}
return result;
}
//----- (41B09FEB) --------------------------------------------------------
MMRESULT __stdcall timeEndPeriod(UINT uPeriod)
{
UINT v1; // esi@1
char *v2; // eax@3
__int16 v3; // cx@4
int v4; // ecx@9
MMRESULT v5; // esi@10
MMRESULT result; // eax@11
char v7; // [sp+4h] [bp-4h]@9
v1 = uPeriod;
if ( uPeriod < TDD_MAXRESOLUTION )
{
result = 97;
}
else
{
if ( uPeriod >= dword_41B28FE4 )
{
result = 0;
}
else
{
EnterCriticalSection(&ResolutionCritSec);
v2 = (char *)&unk_41B28FF6 + 2 * (v1 - TDD_MAXRESOLUTION);
if ( *(_WORD *)v2 )
{
v3 = *(_WORD *)v2 - 1;
*(_WORD *)v2 = v3;
if ( !v3 && v1 == saved_value )
{
while ( v1 < dword_41B28FE4 && !*(_WORD *)v2 )
{
++v1;
v2 += 2;
}
NtSetTimerResolution(dword_41B28FE4, 10000 * saved_value_2, 0, &v7);
saved_value_2 = dword_41B28FE4;
saved_value = v1;
if ( v1 < dword_41B28FE4 )
{
if ( WPP_GLOBAL_Control != &WPP_GLOBAL_Control
&& *((_DWORD *)WPP_GLOBAL_Control + 7) & 0x400000
&& *((_BYTE *)WPP_GLOBAL_Control + 25) >= 5u )
WPP_SF_P(
*((_DWORD *)WPP_GLOBAL_Control + 4),
*((_DWORD *)WPP_GLOBAL_Control + 5),
20,
(int)dword_41B02720,
v1);
if ( NtSetTimerResolution(v4, 10000 * v1, 1, &uPeriod) < 0 )
{
if ( WPP_GLOBAL_Control != &WPP_GLOBAL_Control && *((_DWORD *)WPP_GLOBAL_Control + 7) & 0x400000 )
{
if ( *((_BYTE *)WPP_GLOBAL_Control + 25) >= 1u )
WPP_SF_P(
*((_DWORD *)WPP_GLOBAL_Control + 4),
*((_DWORD *)WPP_GLOBAL_Control + 5),
21,
(int)dword_41B02720,
v1);
}
}
else
{
saved_value_2 = (uPeriod + 9999) / 0x2710;
}
}
}
v5 = 0;
}
else
{
v5 = 97;
}
LeaveCriticalSection(&ResolutionCritSec);
result = v5;
}
}
return result;
}
</pre>
<br>
note several things:<br>
- usage of saved_value ( and saved_value_2 )<br>
- note usage of TDD_MAXRESOLUTION and error returns details<br>
- an implicit usage of EnterCriticalSection to be good thread save
<br>
(will skip the rest as been less relevant for now)<br>
<br>you already noticed usage of <pre class="code">if ( !v3 && v1 == saved_value )</pre> inside timeEndPeriod, right :)?<br><br>
That would describe and answer: "Must much each call...the same minimum resolution in both call ..."<br>
IMHO, purely architectural issue...<br>
<br>
Now about <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd743626%28v=vs.85%29.aspx">timeGetDevCaps function to determine the minimum and maximum timer resolutions supported by the timer services</a>and TDD_MAXRESOLUTION,<br>well, its code shows everything faster than I would ever describe:<br>
<pre class="code">MMRESULT __stdcall timeGetDevCaps(LPTIMECAPS ptc, UINT cbtc)
{
MMRESULT result; // eax@3
if ( cbtc >= 8 && ptc )
{
ptc->wPeriodMin = TDD_MAXRESOLUTION;
ptc->wPeriodMax = 1000000;
result = 0;
}
else
{
result = 97;
}
return result;</pre>
<br>PS: WineHQ does the things differently...
<br><br>PS2: With HexRay: some time (coffee break) for HexRay processing, 10 sec of looking and understanding full story<br>
Assembler, w/o HexRay: 1 min (mostly scrolling back and forth) - so 6x slower? :)Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-20901440402075037552012-01-07T21:39:00.000+01:002012-01-07T23:14:07.571+01:00Deferred Shading by OpenGLIt is quite popular to use deferred shading and not standard shading these days. A lot of the details already <a href="http://en.wikipedia.org/wiki/Deferred_shading">described well</a> with pros and cons.<br>
With many lights and vertices - worth to check and I have seen already 5.8x better results for deferred approach: Def: 480FPS vs Std: 84FPS for 1081344 vertices
<br>
Based on the model(s): <a href="http://batman.wikia.com/wiki/Harley_Quinn_%28Batman:_Arkham_City%29">Harley Quinn</a> contains a bit more than 36K vertices alone.
<br>
Where from the OpenGL side, differences are (Left is deferred shading):
<title>ExamDiff Pro Diff Report</title>
<style type="text/css">
body{font-family:Lucida Console, monospace;font-size:13px;font-style:normal;font-weight:400;background-color:#FFFFFF;}
table{background-color:#FFFFFF;}
div{font-family:Lucida Console, monospace;font-size:13px;font-style:normal;font-weight:400;background-color:#FFFFFF;}
.header{width:1584px;border:1px solid #FFFFFF;color:#000000;background-color:#C0C0C0;}
.li{height:13px;width:1584px;color:#000000;background-color:#FFFFFF;white-space:pre;}
.la{height:13px;width:1584px;color:#800000;background-color:#C0C0C0;text-decoration:none;white-space:pre;}
.ld{height:13px;width:1584px;color:#0000FF;background-color:#E0E0E0;text-decoration:none;white-space:pre;}
.lc{height:13px;width:1584px;color:#402000;background-color:#F2F2C6;text-decoration:none;white-space:pre;}
.ln{height:13px;width:1584px;color:#800080;background-color:#A6CAF0;text-decoration:none;white-space:pre;}
.lo{height:13px;width:1584px;color:#FF0000;background-color:#C0DCC0;text-decoration:none;white-space:pre;}
.lg{height:13px;width:1584px;color:#008000; background-color:#F0F0F0; text-decoration:none;white-space:pre;}
.lib{height:1px;width:1584px;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#000000;}
.lab{height:1px;width:1584px;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#000000;}
.ldb{height:1px;width:1584px;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#000000;}
.lcb{height:1px;width:1584px;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#000000;}
.lnb{height:1px;width:1584px;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#000000;}
.lob{height:1px;width:1584px;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#000000;}
.lgb{height:1px;width:1584px;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#000000;}
.lbin{width:1584px;color:#000000;background-color:#FFFFFF;white-space:pre;}
.si{color:#000000;background-color:#FFFFFF;text-decoration:none;}
.sa{color:#800000;background-color:#C0C0C0;text-decoration:none;}
.sd{color:#0000FF;background-color:#E0E0E0;text-decoration:none;}
.sc{color:#402000;background-color:#F2F2C6;text-decoration:none;}
.sc2{color:#FF0F87;background-color:#E0E0E0;text-decoration:none;}
.sig{color:#008000;background-color:#F0F0F0;text-decoration:none;}
.sn{color:#800080;background-color:#A6CAF0;text-decoration:none;}
.so{color:#FF0000;background-color:#C0DCC0;text-decoration:none;}
.s1-90{color:#0000FF;background-color:#FFFFFF;}
.s1-89{color:#008000;background-color:#FFFFFF;}
.s1-86{color:#0000FF;background-color:#FFFFFF;}
.s1-88{color:#000000;background-color:#FFFFFF;}
.s1-87{color:#000000;background-color:#FFFFFF;}
.s1-85{color:#A31515;background-color:#FFFFFF;}
.s1-100{color:#ACA899;background-color:#FFFFFF;}
.s2-90{color:#0000FF;background-color:#FFFFFF;}
.s2-89{color:#008000;background-color:#FFFFFF;}
.s2-86{color:#0000FF;background-color:#FFFFFF;}
.s2-88{color:#000000;background-color:#FFFFFF;}
.s2-87{color:#000000;background-color:#FFFFFF;}
.s2-85{color:#A31515;background-color:#FFFFFF;}
.s2-100{color:#ACA899;background-color:#FFFFFF;}
.num{color:#808080;background-color:#F8F8F8;border-right-width:2px;border-right-style:groove;border-right-color:#E0E0E0;}
</style>
<script type="text/javascript">
// ##########################################
// ### Part 1: Basic Javascript #############
// ##########################################
window.onresize = onLoad;
var x1scroll = 0, y1scroll = 0, x2scroll = 0, y2scroll = 0;
function getViewportHeight()
{
// supported in Mozilla, Opera, and Safari
if(window.innerHeight)
return window.innerHeight;
// supported in standards mode of IE, but not in any other mode
if(window.document.documentElement.clientHeight)
return document.documentElement.clientHeight;
// supported in quirks mode, older versions of IE, and mac IE (anything else).
return window.document.body.clientHeight;
}
function getViewportWidth()
{
// supported in Mozilla, Opera, and Safari
if(window.innerWidth)
return window.innerWidth;
// supported in standards mode of IE, but not in any other mode
if(window.document.documentElement.clientWidth)
return document.documentElement.clientWidth;
// supported in quirks mode, older versions of IE, and mac IE (anything else).
return window.document.body.clientWidth;
}
function synchScroll(index)
{
var el1, el2;
if (document.all)
{
el1 = document.all.d21;
el2 = document.all.d22;
}
else
{
el1 = document.getElementById("d21");
el2 = document.getElementById("d22");
}
if (index == 1)
{
x1scroll = el1.scrollLeft;
y1scroll = el1.scrollTop;
if (el2.scrollLeft != x1scroll)
el2.scrollLeft = x1scroll;
if (el2.scrollTop != y1scroll)
el2.scrollTop = y1scroll;
}
else
{
x2scroll = el2.scrollLeft;
y2scroll = el2.scrollTop;
if (el1.scrollLeft != x2scroll)
el1.scrollLeft = x2scroll;
if (el1.scrollTop != y2scroll)
el1.scrollTop = y2scroll;
}
}
// ##########################################
// ### Part 2: onLoad + Navigation Code #####
// ##########################################
//
// event handlers
//
function onLoad()
{
var bodyWid = getViewportWidth();
var bodyHeight = getViewportHeight();
var tableWid = bodyWid - 32, tableHeight = bodyHeight - 120;
var tdWid = (tableWid / 2) - 5;
var tdHeight = (tableHeight / 2) - 5;
populate_combobox(10);
if (tdWid > 0 && tdHeight > 0)
{
if (document.all)
{
document.all.tmain.style.width = tableWid + 'px';
document.all.t11.style.width = tdWid + 'px';
document.all.t12.style.width = tdWid + 'px';
document.all.d11.style.width = tdWid + 'px';
document.all.d12.style.width = tdWid + 'px';
document.all.d21.style.height = tableHeight + 'px';
document.all.d22.style.height = tableHeight + 'px';
document.all.d21.style.width = tdWid + 'px';
document.all.d22.style.width = tdWid + 'px';
}
else
{
document.getElementById("tmain").style.width = tableWid + 'px';
document.getElementById("t11").style.width = tdWid + 'px';
document.getElementById("t12").style.width = tdWid + 'px';
document.getElementById("d11").style.width = tdWid + 'px';
document.getElementById("d12").style.width = tdWid + 'px';
document.getElementById("d21").style.height = tableHeight + 'px';
document.getElementById("d22").style.height = tableHeight + 'px';
document.getElementById("d21").style.width = tdWid + 'px';
document.getElementById("d22").style.width = tdWid + 'px';
}
}
// This will change width of the styles from header to linespan_bin, if necessary
for(i=3;i<=18;i+=1)
change_width(i, tdWid);
}
function change_width(style, newWid)
{
var theRules = new Array();
if (document.styleSheets[0].cssRules)
{
theRules = document.styleSheets[0].cssRules;
}
else if (document.styleSheets[0].rules)
{
theRules = document.styleSheets[0].rules;
}
//alert(parseInt(theRules[style].style.width));
if (parseInt(theRules[style].style.width) < newWid)
theRules[style].style.width = newWid + "px";
//alert(theRules[style].style.cssText);
}
function populate_combobox(numdiffs)
{
var combobox = document.getElementById('currentdiff');
for(i=1;i<=numdiffs;i+=1)
{
combobox.options[i] = new Option("Diff #"+i,i);
}
}
function goto(diff)
{
var combobox = document.getElementById('currentdiff');
if (diff > 0 && diff < combobox.options.length)
{
combobox.selectedIndex = diff;
window.location.href = "#Diff" + diff;
}
}
function first()
{
var combobox = document.getElementById('currentdiff');
var diff = 1;
goto(1);
}
function previous()
{
var combobox = document.getElementById('currentdiff');
var diff = combobox.selectedIndex;
if (diff > 1)
diff--;
goto(diff);
}
function next()
{
var combobox = document.getElementById('currentdiff');
var diff = combobox.selectedIndex;
if (combobox.options.length - 1 > diff)
diff++;
goto(diff);
}
function last()
{
var combobox = document.getElementById('currentdiff');
var diff = combobox.options.length - 1;
goto(diff);
}
function change()
{
var combobox = document.getElementById('currentdiff');
var diff = combobox.selectedIndex;
goto(diff);
}
</script>
<br />
<table cellpadding="2" id="tmain" style="-moz-border-radius: 5px; border-radius: 5px; border: 1px solid #000000;" summary="Main table">
<tbody>
<tr valign="top">
<td><table id="t1" summary="Titles">
<tbody>
<tr valign="top">
<td id="t11" style="background-color: silver; border: 1px solid #000000;"><div id="d11" style="background-color: silver; overflow: hidden;" title="First Text Fragment">
<b>First Text Fragment</b></div>
</td>
<td id="t12" style="background-color: silver; border: 1px solid #000000;"><div id="d12" style="background-color: silver; overflow: hidden;" title="Second Text Fragment">
<b>Second Text Fragment</b></div>
</td>
</tr>
</tbody></table>
</td>
</tr>
<tr valign="top">
<td><table id="t2" summary="Content and diffs">
<tbody>
<tr valign="top">
<td id="t21" style="border: 1px solid #000000;"><div id="d21" onscroll="synchScroll(1)" style="overflow: scroll;">
<div class="lc" title="Diff #1">
<a href="" name="Diff1"></a><span class="num"> 1 </span><span class="sc"> //</span><span class="sc2">Pass 1</span></div>
<div class="lc" title="Diff #1">
<span class="num"> 2 </span><span class="sc"> </span><span class="sc2">//Draw</span><span class="sc"> </span><span class="sd">the geometry</span><span class="sc">, </span><span class="sc2">saving parameters into the buffer</span></div>
<div class="lg" title="Diff #1">
<span class="num"> 3 </span></div>
<div class="lc" title="Diff #1">
<span class="num"> 4 </span><span class="sc"> </span><span class="sd">//Make the pbuffer the current context</span></div>
<div class="lc" title="Diff #1">
<span class="num"> 5 </span><span class="sc"> </span><span class="sd">pbuffer.MakeCurrent();</span></div>
<div class="lg" title="Diff #1">
<span class="num"> 6 </span></div>
<div class="lc" title="Diff #1">
<span class="num"> 7 </span><span class="sc"> </span><span class="sd">//Clear buffers</span></div>
<div class="lc" title="Diff #1">
<span class="num"> 8 </span><span class="sc"> </span><span class="sd">glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);</span></div>
<div class="lc" title="Diff #1">
<span class="num"> 9 </span><span class="sc"> </span><span class="sd">glColor4f(1.0f, 1.0f, 1.0f, 1.0f);</span></div>
<div class="lg" title="Diff #1">
<span class="num"> 10 </span></div>
<div class="lc" title="Diff #1">
<span class="num"> 11 </span><span class="sc"> </span><span class="sd">glLoadIdentity();</span></div>
<div class="lc" title="Diff #1">
<span class="num"> 12 </span><span class="sc"> </span><span class="sd">gluLookAt( 0.0f, 4.0f, 3.0f,</span></div>
<div class="lc" title="Diff #1">
<span class="num"> 13 </span><span class="sc"> </span><span class="sd">0.0f, 0.0f, 0.0f,</span></div>
<div class="lc" title="Diff #1">
<span class="num"> 14 </span><span class="sc"> </span><span class="sd">0.0f, 1.0f, 0.0f);</span></div>
<div class="lg" title="Diff #1">
<span class="num"> 15 </span></div>
<div class="lc" title="Diff #1">
<span class="num"> 16 </span><span class="sc"> </span><span class="sd">//Bind and enable vertex & fragment programs</span></div>
<div class="lc" title="Diff #1">
<span class="num"> 17 </span><span class="sc"> </span><span class="sd">glBindProgramARB(GL_VERTEX_PROGRAM_ARB, deferredShadingPass1VP);</span></div>
<div class="lc" title="Diff #1">
<span class="num"> 18 </span><span class="sc"> </span><span class="sd">glEnable(GL_VERTEX_PROGRAM_ARB);</span></div>
<div class="lg" title="Diff #1">
<span class="num"> 19 </span><span class="sig"> </span></div>
<div class="lc" title="Diff #1">
<span class="num"> 20 </span><span class="sc"> </span><span class="sd">glBindProgramNV(GL_FRAGMENT_PROGRAM_NV, deferredShadingPass1FP);</span></div>
<div class="lc" title="Diff #1">
<span class="num"> 21 </span><span class="sc"> </span><span class="sd">glEnable(GL_FRAGMENT_PROGRAM_NV);</span></div>
<div class="li">
<span class="num"> 22 </span></div>
<div class="li">
<span class="num"> 23 </span><span class="s1-100"> </span><span class="si">//Draw</span><span class="s1-100"> </span><span class="si">the</span><span class="s1-100"> </span><span class="si">torus</span><span class="s1-100"> </span><span class="si">knot</span></div>
<div class="li">
<span class="num"> 24 </span><span class="s1-100"> </span><span class="si">glDrawElements(GL_TRIANGLES,</span><span class="s1-100"> </span><span class="si">torusKnot.numIndices,</span><span class="s1-100"> </span><span class="si">GL_UNSIGNED_INT,</span><span class="s1-100"> </span><span class="si">(char</span><span class="s1-100"> </span><span class="si">*)NULL);</span></div>
<div class="li">
<span class="num"> 25 </span></div>
<div class="li">
<span class="num"> 26 </span><span class="s1-100"> </span><span class="si">//Draw</span><span class="s1-100"> </span><span class="si">the</span><span class="s1-100"> </span><span class="si">"floor"</span></div>
<div class="li">
<span class="num"> 27 </span><span class="s1-100"> </span><span class="si">glNormal3f(0.0f,</span><span class="s1-100"> </span><span class="si">1.0f,</span><span class="s1-100"> </span><span class="si">0.0f);</span></div>
<div class="li">
<span class="num"> 28 </span><span class="s1-100"> </span><span class="si">glBegin(GL_TRIANGLE_STRIP);</span></div>
<div class="li">
<span class="num"> 29 </span><span class="s1-100"> </span><span class="si">{</span></div>
<div class="li">
<span class="num"> 30 </span><span class="s1-100"> </span><span class="si">glVertex3f(</span><span class="s1-100"> </span><span class="si">5.0f,-0.5f,</span><span class="s1-100"> </span><span class="si">5.0f);</span></div>
<div class="li">
<span class="num"> 31 </span><span class="s1-100"> </span><span class="si">glVertex3f(</span><span class="s1-100"> </span><span class="si">5.0f,-0.5f,-5.0f);</span></div>
<div class="li">
<span class="num"> 32 </span><span class="s1-100"> </span><span class="si">glVertex3f(-5.0f,-0.5f,</span><span class="s1-100"> </span><span class="si">5.0f);</span></div>
<div class="li">
<span class="num"> 33 </span><span class="s1-100"> </span><span class="si">glVertex3f(-5.0f,-0.5f,-5.0f);</span></div>
<div class="li">
<span class="num"> 34 </span><span class="s1-100"> </span><span class="si">}</span></div>
<div class="li">
<span class="num"> 35 </span><span class="s1-100"> </span><span class="si">glEnd();</span></div>
<div class="li">
<span class="num"> 36 </span><span class="s1-100"> </span></div>
<div class="lc" title="Diff #2">
<a href="" name="Diff2"></a><span class="num"> 37 </span><span class="sc"> </span><span class="sc2">glDisable</span><span class="sc">(</span><span class="sc2">GL_VERTEX_PROGRAM_ARB</span><span class="sc">);</span></div>
<div class="lc" title="Diff #2">
<span class="num"> 38 </span><span class="sc"> </span><span class="sd">glDisable(GL_FRAGMENT_PROGRAM_NV);</span></div>
<div class="lg" title="Diff #2">
<span class="num"> 39 </span></div>
<div class="lc" title="Diff #2">
<span class="num"> 40 </span><span class="sc"> </span><span class="sc2">//Copy the pbuffer contents into</span><span class="sc"> </span><span class="sd">the pbuffer texture</span></div>
<div class="lc" title="Diff #2">
<span class="num"> 41 </span><span class="sc"> </span><span class="sc2">glBindTexture</span><span class="sc">(</span><span class="sc2">GL_TEXTURE_RECTANGLE_NV</span><span class="sd">, pbufferTexture</span><span class="sc">);</span></div>
<div class="lc" title="Diff #2">
<span class="num"> 42 </span><span class="sc"> </span><span class="sd">glCopyTexSubImage2D(GL_TEXTURE_RECTANGLE_NV, 0, 0, 0, 0, 0,</span></div>
<div class="lc" title="Diff #2">
<span class="num"> 43 </span><span class="sc"> </span><span class="sd">pbuffer.width, pbuffer.height);</span></div>
<div class="lg" title="Diff #2">
<span class="num"> 44 </span></div>
<div class="lc" title="Diff #2">
<span class="num"> 45 </span><span class="sc"> </span><span class="sd">//Make the window the current context</span></div>
<div class="lc" title="Diff #2">
<span class="num"> 46 </span><span class="sc"> </span><span class="sd">WINDOW::Instance()->MakeCurrent();</span></div>
<div class="lg" title="Diff #2">
<span class="num"> 47 </span></div>
<div class="lc" title="Diff #2">
<span class="num"> 48 </span><span class="sc"> </span><span class="sd">//Pass 2</span></div>
<div class="lc" title="Diff #2">
<span class="num"> 49 </span><span class="sc"> </span><span class="sd">//Draw a quad covering the region of influence of each light</span></div>
<div class="lc" title="Diff #2">
<span class="num"> 50 </span><span class="sc"> </span><span class="sd">//Unpack the data from the buffer, perform the lighting equation and update</span></div>
<div class="lc" title="Diff #2">
<span class="num"> 51 </span><span class="sc"> </span><span class="sd">//the framebuffer</span></div>
<div class="lg" title="Diff #2">
<span class="num"> 52 </span><span class="sig"> </span></div>
<div class="lc" title="Diff #2">
<span class="num"> 53 </span><span class="sc"> </span><span class="sd">//Set orthographic projection, 1 unit=1 pixel</span></div>
<div class="lc" title="Diff #2">
<span class="num"> 54 </span><span class="sc"> </span><span class="sd">glMatrixMode(GL_PROJECTION);</span></div>
<div class="lc" title="Diff #2">
<span class="num"> 55 </span><span class="sc"> </span><span class="sd">glPushMatrix();</span></div>
<div class="lc" title="Diff #2">
<span class="num"> 56 </span><span class="sc"> </span><span class="sd">glLoadIdentity();</span></div>
<div class="lc" title="Diff #2">
<span class="num"> 57 </span><span class="sc"> </span><span class="sd">gluOrtho2D(0, WINDOW::Instance()->width, 0, WINDOW::Instance()->height);</span></div>
<div class="lg" title="Diff #2">
<span class="num"> 58 </span><span class="sig"> </span></div>
<div class="lc" title="Diff #2">
<span class="num"> 59 </span><span class="sc"> </span><span class="sd">//Set identity modelview</span></div>
<div class="lc" title="Diff #2">
<span class="num"> 60 </span><span class="sc"> </span><span class="sd">glMatrixMode(GL_MODELVIEW);</span></div>
<div class="lc" title="Diff #2">
<span class="num"> 61 </span><span class="sc"> </span><span class="sd">glPushMatrix();</span></div>
<div class="lc" title="Diff #2">
<span class="num"> 62 </span><span class="sc"> </span><span class="sd">glLoadIdentity();</span></div>
<div class="lg" title="Diff #2">
<span class="num"> 63 </span></div>
<div class="lc" title="Diff #2">
<span class="num"> 64 </span><span class="sc"> </span><span class="sd">//Disable depth test</span></div>
<div class="lc" title="Diff #2">
<span class="num"> 65 </span><span class="sc"> </span><span class="sd">glDisable(GL_DEPTH_TEST);</span></div>
<div class="lg" title="Diff #2">
<span class="num"> 66 </span></div>
<div class="lc" title="Diff #2">
<span class="num"> 67 </span><span class="sc"> </span><span class="sd">//Bind the pbuffer texture</span></div>
<div class="lc" title="Diff #2">
<span class="num"> 68 </span><span class="sc"> </span><span class="sd">glBindTexture(GL_TEXTURE_RECTANGLE_NV, pbufferTexture);</span></div>
<div class="lg" title="Diff #2">
<span class="num"> 69 </span></div>
<div class="lc" title="Diff #2">
<span class="num"> 70 </span><span class="sc"> </span><span class="sd">//Bind and enable fragment program</span></div>
<div class="lc" title="Diff #2">
<span class="num"> 71 </span><span class="sc"> </span><span class="sc2">glBindProgramNV</span><span class="sc">(</span><span class="sc2">GL_FRAGMENT_PROGRAM_NV</span><span class="sc">, </span><span class="sc2">deferredShadingPass2FP</span><span class="sc">);</span></div>
<div class="lc" title="Diff #2">
<span class="num"> 72 </span><span class="sc"> glEnable(</span><span class="sc2">GL_FRAGMENT_PROGRAM_NV</span><span class="sc">);</span></div>
<div class="li">
<span class="num"> 73 </span></div>
<div class="li">
<span class="num"> 74 </span><span class="s1-100"> </span><span class="si">//Loop</span><span class="s1-100"> </span><span class="si">through</span><span class="s1-100"> </span><span class="si">the</span><span class="s1-100"> </span><span class="si">lights</span></div>
<div class="li">
<span class="num"> 75 </span><span class="s1-100"> </span><span class="si">for(int</span><span class="s1-100"> </span><span class="si">i=0;</span><span class="s1-100"> </span><span class="si">i<numLights;</span><span class="s1-100"> </span><span class="si">i)</span></div>
<div class="li">
<span class="num"> 76 </span><span class="s1-100"> </span><span class="si">{</span></div>
<div class="lc" title="Diff #3">
<a href="" name="Diff3"></a><span class="num"> 77 </span><span class="sc"> //Calculate the rectangle </span><span class="sd">to draw</span><span class="sc"> for this light</span></div>
<div class="lc" title="Diff #3">
<span class="num"> 78 </span><span class="sc"> int </span><span class="sc2">rectX</span><span class="sc">, </span><span class="sc2">rectY</span><span class="sc">, </span><span class="sc2">rectWidth</span><span class="sc">, </span><span class="sc2">rectHeight</span><span class="sc">;</span></div>
<div class="li">
<span class="num"> 79 </span></div>
<div class="li">
<span class="num"> 80 </span><span class="s1-100"> </span><span class="si">lights[i].GetWindowRect(WINDOW::Instance()->width,</span><span class="s1-100"> </span><span class="si">WINDOW::Instance()->height,</span></div>
<div class="li">
<span class="num"> 81 </span><span class="s1-100"> </span><span class="si">viewMatrix,</span><span class="s1-100"> </span><span class="si">currentTime,</span><span class="s1-100"> </span><span class="si">cameraNearDistance,</span></div>
<div class="li">
<span class="num"> 82 </span><span class="s1-100"> </span><span class="si">cameraFovy,</span><span class="s1-100"> </span><span class="si">cameraAspectRatio,</span></div>
<div class="lc" title="Diff #4">
<a href="" name="Diff4"></a><span class="num"> 83 </span><span class="sc"> </span><span class="sc2">rectX</span><span class="sc">, </span><span class="sc2">rectY</span><span class="sc">, </span><span class="sc2">rectWidth</span><span class="sc">, </span><span class="sc2">rectHeight</span><span class="sc">);</span></div>
<div class="lc" title="Diff #5">
<a href="" name="Diff5"></a><span class="num"> </span></div>
<div class="lc" title="Diff #5">
<span class="num"> </span></div>
<div class="lc" title="Diff #5">
<span class="num"> </span></div>
<div class="li">
<span class="num"> 84 </span></div>
<div class="li">
<span class="num"> 85 </span><span class="s1-100"> </span><span class="si">//Enable</span><span class="s1-100"> </span><span class="si">additive</span><span class="s1-100"> </span><span class="si">blend</span><span class="s1-100"> </span><span class="si">if</span><span class="s1-100"> </span><span class="si">i>0</span></div>
<div class="li">
<span class="num"> 86 </span><span class="s1-100"> </span><span class="si">if(i>0)</span></div>
<div class="li">
<span class="num"> 87 </span><span class="s1-100"> </span><span class="si">{</span></div>
<div class="li">
<span class="num"> 88 </span><span class="s1-100"> </span><span class="si">glBlendFunc(GL_ONE,</span><span class="s1-100"> </span><span class="si">GL_ONE);</span></div>
<div class="li">
<span class="num"> 89 </span><span class="s1-100"> </span><span class="si">glEnable(GL_BLEND);</span></div>
<div class="li">
<span class="num"> 90 </span><span class="s1-100"> </span><span class="si">}</span></div>
<div class="li">
<span class="num"> </span></div>
<div class="la" title="Diff #6">
<a href="" name="Diff6"></a><span class="num"> </span></div>
<div class="la" title="Diff #6">
<span class="num"> </span></div>
<div class="la" title="Diff #6">
<span class="num"> </span></div>
<div class="la" title="Diff #6">
<span class="num"> </span></div>
<div class="la" title="Diff #6">
<span class="num"> </span></div>
<div class="li">
<span class="num"> 91 </span></div>
<div class="li">
<span class="num"> 92 </span><span class="s1-100"> </span><span class="si">//Send</span><span class="s1-100"> </span><span class="si">the</span><span class="s1-100"> </span><span class="si">light's</span><span class="s1-100"> </span><span class="si">color</span><span class="s1-100"> </span><span class="si">to</span><span class="s1-100"> </span><span class="si">fragment</span><span class="s1-100"> </span><span class="si">program</span><span class="s1-100"> </span><span class="si">local</span><span class="s1-100"> </span><span class="si">parameter</span><span class="s1-100"> </span><span class="si">0</span></div>
<div class="lc" title="Diff #7">
<a href="" name="Diff7"></a><span class="num"> 93 </span><span class="sc"> glProgramLocalParameter4fvARB( </span><span class="sc2">GL_FRAGMENT_PROGRAM_NV</span><span class="sc">, 0, lights[i].color);</span></div>
<div class="li">
<span class="num"> 94 </span></div>
<div class="li">
<span class="num"> 95 </span><span class="s1-100"> </span><span class="si">//Send</span><span class="s1-100"> </span><span class="si">1/(light</span><span class="s1-100"> </span><span class="si">radius)^2</span><span class="s1-100"> </span><span class="si">to</span><span class="s1-100"> </span><span class="si">fragment</span><span class="s1-100"> </span><span class="si">program</span><span class="s1-100"> </span><span class="si">local</span><span class="s1-100"> </span><span class="si">parameter</span><span class="s1-100"> </span><span class="si">1</span></div>
<div class="li">
<span class="num"> 96 </span><span class="s1-100"> </span><span class="si">float</span><span class="s1-100"> </span><span class="si">inverseSquareLightRadius=1.0f/(lights[i].radius*lights[i].radius);</span></div>
<div class="lc" title="Diff #8">
<a href="" name="Diff8"></a><span class="num"> 97 </span><span class="sc"> glProgramLocalParameter4fARB( </span><span class="sc2">GL_FRAGMENT_PROGRAM_NV</span><span class="sc">, 1,</span></div>
<div class="li">
<span class="num"> 98 </span><span class="s1-100"> </span><span class="si">inverseSquareLightRadius,</span><span class="s1-100"> </span><span class="si">inverseSquareLightRadius,</span></div>
<div class="li">
<span class="num"> 99 </span><span class="s1-100"> </span><span class="si">inverseSquareLightRadius,</span><span class="s1-100"> </span><span class="si">inverseSquareLightRadius);</span></div>
<div class="li">
<span class="num">100 </span></div>
<div class="lc" title="Diff #9">
<a href="" name="Diff9"></a><span class="num">101 </span><span class="sc"> //</span><span class="sc2">Send</span><span class="sc"> the </span><span class="sc2">light'</span><span class="sd">s position to fragment program local parameter 2</span></div>
<div class="lc" title="Diff #9">
<span class="num">102 </span><span class="sc"> </span><span class="sc2">glProgramLocalParameter4fvARB</span><span class="sc">( </span><span class="sc2">GL_FRAGMENT_PROGRAM_NV</span><span class="sc">, </span><span class="sc2">2</span><span class="sc">,</span></div>
<div class="lc" title="Diff #9">
<span class="num">103 </span><span class="sc"> </span><span class="sd">VECTOR4D(lights[i].GetPosition(currentTime)));</span></div>
<div class="lg" title="Diff #9">
<span class="num">104 </span><span class="sig"> </span></div>
<div class="lc" title="Diff #9">
<span class="num">105 </span><span class="sc"> </span><span class="sc2">//Draw the rectangle</span></div>
<div class="li">
<span class="num">106 </span><span class="s1-100"> </span><span class="si">glBegin(GL_TRIANGLE_STRIP);</span></div>
<div class="li">
<span class="num">107 </span><span class="s1-100"> </span><span class="si">{</span></div>
<div class="lc" title="Diff #10">
<a href="" name="Diff10"></a><span class="num">108 </span><span class="sc"> </span><span class="sc2">glVertex2i</span><span class="sc">(</span><span class="sc2">rectX</span><span class="sc">, </span><span class="sc2">rectY</span><span class="sc">);</span></div>
<div class="lc" title="Diff #10">
<span class="num">109 </span><span class="sc"> </span><span class="sc2">glVertex2i</span><span class="sc">(</span><span class="sc2">rectX rectWidth</span><span class="sc">, </span><span class="sc2">rectY</span><span class="sc">);</span></div>
<div class="lc" title="Diff #10">
<span class="num">110 </span><span class="sc"> </span><span class="sc2">glVertex2i</span><span class="sc">(</span><span class="sc2">rectX</span><span class="sc">, </span><span class="sc2">rectY rectHeight</span><span class="sc">);</span></div>
<div class="lc" title="Diff #10">
<span class="num">111 </span><span class="sc"> </span><span class="sc2">glVertex2i</span><span class="sc">(</span><span class="sc2">rectX rectWidth</span><span class="sc">, </span><span class="sc2">rectY rectHeight</span><span class="sc">);</span></div>
<div class="li">
<span class="num">112 </span><span class="s1-100"> </span><span class="si">}</span></div>
<div class="li">
<span class="num">113 </span><span class="s1-100"> </span><span class="si">glEnd();</span></div>
<div class="li">
<span class="num">114 </span><span class="s1-100"> </span><span class="si">}</span></div>
<div class="li">
<span class="num">115 </span></div>
<div class="lc" title="Diff #11">
<a href="" name="Diff11"></a><span class="num">116 </span><span class="sc"> </span><span class="sc2">//Restore matrices</span></div>
<div class="lc" title="Diff #11">
<span class="num">117 </span><span class="sc"> </span><span class="sd">glMatrixMode(GL_PROJECTION);</span></div>
<div class="lc" title="Diff #11">
<span class="num">118 </span><span class="sc"> </span><span class="sd">glPopMatrix();</span></div>
<div class="lc" title="Diff #11">
<span class="num">119 </span><span class="sc"> </span><span class="sd">glMatrixMode(GL_MODELVIEW);</span></div>
<div class="lc" title="Diff #11">
<span class="num">120 </span><span class="sc"> </span><span class="sd">glPopMatrix();</span></div>
<div class="lg" title="Diff #11">
<span class="num">121 </span></div>
<div class="lc" title="Diff #11">
<span class="num">122 </span><span class="sc"> </span><span class="sd">glEnable(GL_DEPTH_TEST);</span></div>
<div class="lc" title="Diff #11">
<span class="num">123 </span><span class="sc"> glDisable(</span><span class="sc2">GL_FRAGMENT_PROGRAM_NV</span><span class="sc">);</span></div>
<div class="lc" title="Diff #12">
<a href="" name="Diff12"></a><span class="num"> </span></div>
<div class="li">
<span class="num">124 </span><span class="s1-100"> </span><span class="si">glDisable(GL_BLEND);</span></div>
<div class="li">
<span class="num">125 </span></div>
</div>
</td>
<td id="t22" style="border: 1px solid #000000;"><div id="d22" onscroll="synchScroll(2)" style="overflow: scroll;">
<div class="lc" title="Diff #1">
<span class="num"> 1 </span><span class="sc"> //</span><span class="sc2">Make an</span><span class="sc"> </span><span class="sa">initial pass to lay down Z</span></div>
<div class="lc" title="Diff #1">
<span class="num"> 2 </span><span class="sc"> </span><span class="sc2">glColorMask(0</span><span class="sc">, </span><span class="sc2">0, 0, 0</span><span class="sa">);</span></div>
<div class="lc" title="Diff #2">
<span class="num"> </span></div>
<div class="lc" title="Diff #2">
<span class="num"> </span></div>
<div class="lc" title="Diff #2">
<span class="num"> </span></div>
<div class="lc" title="Diff #2">
<span class="num"> </span></div>
<div class="lc" title="Diff #2">
<span class="num"> </span></div>
<div class="lc" title="Diff #2">
<span class="num"> </span></div>
<div class="lc" title="Diff #2">
<span class="num"> </span></div>
<div class="lc" title="Diff #2">
<span class="num"> </span></div>
<div class="lc" title="Diff #2">
<span class="num"> </span></div>
<div class="lc" title="Diff #2">
<span class="num"> </span></div>
<div class="lc" title="Diff #2">
<span class="num"> </span></div>
<div class="lc" title="Diff #2">
<span class="num"> </span></div>
<div class="lc" title="Diff #2">
<span class="num"> </span></div>
<div class="lc" title="Diff #2">
<span class="num"> </span></div>
<div class="lc" title="Diff #2">
<span class="num"> </span></div>
<div class="lc" title="Diff #2">
<span class="num"> </span></div>
<div class="lc" title="Diff #2">
<span class="num"> </span></div>
<div class="lc" title="Diff #2">
<span class="num"> </span></div>
<div class="lc" title="Diff #2">
<span class="num"> </span></div>
<div class="li">
<span class="num"> 3 </span></div>
<div class="li">
<span class="num"> 4 </span><span class="s2-100"> </span><span class="si">//Draw</span><span class="s2-100"> </span><span class="si">the</span><span class="s2-100"> </span><span class="si">torus</span><span class="s2-100"> </span><span class="si">knot</span></div>
<div class="li">
<span class="num"> 5 </span><span class="s2-100"> </span><span class="si">glDrawElements(GL_TRIANGLES,</span><span class="s2-100"> </span><span class="si">torusKnot.numIndices,</span><span class="s2-100"> </span><span class="si">GL_UNSIGNED_INT,</span><span class="s2-100"> </span><span class="si">(char</span><span class="s2-100"> </span><span class="si">*)NULL);</span></div>
<div class="li">
<span class="num"> 6 </span></div>
<div class="li">
<span class="num"> 7 </span><span class="s2-100"> </span><span class="si">//Draw</span><span class="s2-100"> </span><span class="si">the</span><span class="s2-100"> </span><span class="si">"floor"</span></div>
<div class="li">
<span class="num"> 8 </span><span class="s2-100"> </span><span class="si">glNormal3f(0.0f,</span><span class="s2-100"> </span><span class="si">1.0f,</span><span class="s2-100"> </span><span class="si">0.0f);</span></div>
<div class="li">
<span class="num"> 9 </span><span class="s2-100"> </span><span class="si">glBegin(GL_TRIANGLE_STRIP);</span></div>
<div class="li">
<span class="num">10 </span><span class="s2-100"> </span><span class="si">{</span></div>
<div class="li">
<span class="num">11 </span><span class="s2-100"> </span><span class="si">glVertex3f(</span><span class="s2-100"> </span><span class="si">5.0f,-0.5f,</span><span class="s2-100"> </span><span class="si">5.0f);</span></div>
<div class="li">
<span class="num">12 </span><span class="s2-100"> </span><span class="si">glVertex3f(</span><span class="s2-100"> </span><span class="si">5.0f,-0.5f,-5.0f);</span></div>
<div class="li">
<span class="num">13 </span><span class="s2-100"> </span><span class="si">glVertex3f(-5.0f,-0.5f,</span><span class="s2-100"> </span><span class="si">5.0f);</span></div>
<div class="li">
<span class="num">14 </span><span class="s2-100"> </span><span class="si">glVertex3f(-5.0f,-0.5f,-5.0f);</span></div>
<div class="li">
<span class="num">15 </span><span class="s2-100"> </span><span class="si">}</span></div>
<div class="li">
<span class="num">16 </span><span class="s2-100"> </span><span class="si">glEnd();</span></div>
<div class="li">
<span class="num">17 </span></div>
<div class="lc" title="Diff #3">
<span class="num">18 </span><span class="sc"> </span><span class="sc2">glColorMask</span><span class="sc">(</span><span class="sc2">1</span><span class="sa">, 1, 1, 1</span><span class="sc">);</span></div>
<div class="lg" title="Diff #3">
<span class="num">19 </span></div>
<div class="lc" title="Diff #3">
<span class="num">20 </span><span class="sc"> </span><span class="sa">//Bind and enable vertex & fragment programs</span></div>
<div class="lc" title="Diff #3">
<span class="num">21 </span><span class="sc"> </span><span class="sc2">glBindProgramARB(GL_VERTEX_PROGRAM_ARB, standardShadingVP);</span></div>
<div class="lc" title="Diff #3">
<span class="num">22 </span><span class="sc"> </span><span class="sc2">glEnable</span><span class="sc">(</span><span class="sc2">GL_VERTEX_PROGRAM_ARB</span><span class="sc">);</span></div>
<div class="lg" title="Diff #3">
<span class="num">23 </span><span class="sig"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #4">
<span class="num"> </span></div>
<div class="lc" title="Diff #5">
<span class="num">24 </span><span class="sc"> </span><span class="sc2">glBindProgramARB</span><span class="sc">(</span><span class="sc2">GL_FRAGMENT_PROGRAM_ARB</span><span class="sc">, </span><span class="sc2">standardShadingFP</span><span class="sc">);</span></div>
<div class="lc" title="Diff #5">
<span class="num">25 </span><span class="sc"> glEnable(</span><span class="sc2">GL_FRAGMENT_PROGRAM_ARB</span><span class="sc">);</span></div>
<div class="li">
<span class="num">26 </span></div>
<div class="li">
<span class="num">27 </span><span class="s2-100"> </span><span class="si">//Loop</span><span class="s2-100"> </span><span class="si">through</span><span class="s2-100"> </span><span class="si">the</span><span class="s2-100"> </span><span class="si">lights</span></div>
<div class="li">
<span class="num">28 </span><span class="s2-100"> </span><span class="si">for(int</span><span class="s2-100"> </span><span class="si">i=0;</span><span class="s2-100"> </span><span class="si">i<numLights;</span><span class="s2-100"> </span><span class="si">i)</span></div>
<div class="li">
<span class="num">29 </span><span class="s2-100"> </span><span class="si">{</span></div>
<div class="lc" title="Diff #6">
<span class="num">30 </span><span class="sc"> //Calculate </span><span class="sa">and set</span><span class="sc"> the </span><span class="sa">scissor</span><span class="sc"> rectangle for this light</span></div>
<div class="lc" title="Diff #6">
<span class="num">31 </span><span class="sc"> int </span><span class="sc2">scissorX</span><span class="sc">, </span><span class="sc2">scissorY</span><span class="sc">, </span><span class="sc2">scissorWidth</span><span class="sc">, </span><span class="sc2">scissorHeight</span><span class="sc">;</span></div>
<div class="li">
<span class="num">32 </span></div>
<div class="li">
<span class="num">33 </span><span class="s2-100"> </span><span class="si">lights[i].GetWindowRect(WINDOW::Instance()->width,</span><span class="s2-100"> </span><span class="si">WINDOW::Instance()->height,</span></div>
<div class="li">
<span class="num">34 </span><span class="s2-100"> </span><span class="si">viewMatrix,</span><span class="s2-100"> </span><span class="si">currentTime,</span><span class="s2-100"> </span><span class="si">cameraNearDistance,</span></div>
<div class="li">
<span class="num">35 </span><span class="s2-100"> </span><span class="si">cameraFovy,</span><span class="s2-100"> </span><span class="si">cameraAspectRatio,</span></div>
<div class="lc" title="Diff #7">
<span class="num">36 </span><span class="sc"> </span><span class="sc2">scissorX</span><span class="sc">, </span><span class="sc2">scissorY</span><span class="sc">, </span><span class="sc2">scissorWidth</span><span class="sc">, </span><span class="sc2">scissorHeight</span><span class="sc">);</span></div>
<div class="lg" title="Diff #7">
<span class="num">37 </span></div>
<div class="lc" title="Diff #7">
<span class="num">38 </span><span class="sc"> </span><span class="sa">glScissor(scissorX, scissorY, scissorWidth, scissorHeight);</span></div>
<div class="lc" title="Diff #7">
<span class="num">39 </span><span class="sc"> </span><span class="sa">glEnable(GL_SCISSOR_TEST);</span></div>
<div class="li">
<span class="num">40 </span></div>
<div class="li">
<span class="num">41 </span><span class="s2-100"> </span><span class="si">//Enable</span><span class="s2-100"> </span><span class="si">additive</span><span class="s2-100"> </span><span class="si">blend</span><span class="s2-100"> </span><span class="si">if</span><span class="s2-100"> </span><span class="si">i>0</span></div>
<div class="li">
<span class="num">42 </span><span class="s2-100"> </span><span class="si">if(i>0)</span></div>
<div class="li">
<span class="num">43 </span><span class="s2-100"> </span><span class="si">{</span></div>
<div class="li">
<span class="num">44 </span><span class="s2-100"> </span><span class="si">glBlendFunc(GL_ONE,</span><span class="s2-100"> </span><span class="si">GL_ONE);</span></div>
<div class="li">
<span class="num">45 </span><span class="s2-100"> </span><span class="si">glEnable(GL_BLEND);</span></div>
<div class="li">
<span class="num">46 </span><span class="s2-100"> </span><span class="si">}</span></div>
<div class="lg">
<span class="num">47 </span></div>
<div class="la" title="Diff #8">
<span class="num">48 </span><span class="sa"> //Calculate the object space light position and send to</span></div>
<div class="la" title="Diff #8">
<span class="num">49 </span><span class="sa"> //vertex program local parameter 0</span></div>
<div class="la" title="Diff #8">
<span class="num">50 </span><span class="sa"> //Object space and world space are the same</span></div>
<div class="la" title="Diff #8">
<span class="num">51 </span><span class="sa"> glProgramLocalParameter4fvARB( GL_VERTEX_PROGRAM_ARB, 0,</span></div>
<div class="la" title="Diff #8">
<span class="num">52 </span><span class="sa"> VECTOR4D(lights[i].GetPosition(currentTime)));</span></div>
<div class="li">
<span class="num">53 </span></div>
<div class="li">
<span class="num">54 </span><span class="s2-100"> </span><span class="si">//Send</span><span class="s2-100"> </span><span class="si">the</span><span class="s2-100"> </span><span class="si">light's</span><span class="s2-100"> </span><span class="si">color</span><span class="s2-100"> </span><span class="si">to</span><span class="s2-100"> </span><span class="si">fragment</span><span class="s2-100"> </span><span class="si">program</span><span class="s2-100"> </span><span class="si">local</span><span class="s2-100"> </span><span class="si">parameter</span><span class="s2-100"> </span><span class="si">0</span></div>
<div class="lc" title="Diff #9">
<span class="num">55 </span><span class="sc"> glProgramLocalParameter4fvARB( </span><span class="sc2">GL_FRAGMENT_PROGRAM_ARB</span><span class="sc">, 0, lights[i].color);</span></div>
<div class="li">
<span class="num">56 </span></div>
<div class="li">
<span class="num">57 </span><span class="s2-100"> </span><span class="si">//Send</span><span class="s2-100"> </span><span class="si">1/(light</span><span class="s2-100"> </span><span class="si">radius)^2</span><span class="s2-100"> </span><span class="si">to</span><span class="s2-100"> </span><span class="si">fragment</span><span class="s2-100"> </span><span class="si">program</span><span class="s2-100"> </span><span class="si">local</span><span class="s2-100"> </span><span class="si">parameter</span><span class="s2-100"> </span><span class="si">1</span></div>
<div class="li">
<span class="num">58 </span><span class="s2-100"> </span><span class="si">float</span><span class="s2-100"> </span><span class="si">inverseSquareLightRadius=1.0f/(lights[i].radius*lights[i].radius);</span></div>
<div class="lc" title="Diff #10">
<span class="num">59 </span><span class="sc"> glProgramLocalParameter4fARB( </span><span class="sc2">GL_FRAGMENT_PROGRAM_ARB</span><span class="sc">, 1,</span></div>
<div class="li">
<span class="num">60 </span><span class="s2-100"> </span><span class="si">inverseSquareLightRadius,</span><span class="s2-100"> </span><span class="si">inverseSquareLightRadius,</span></div>
<div class="li">
<span class="num">61 </span><span class="s2-100"> </span><span class="si">inverseSquareLightRadius,</span><span class="s2-100"> </span><span class="si">inverseSquareLightRadius);</span></div>
<div class="li">
<span class="num">62 </span></div>
<div class="lc" title="Diff #11">
<span class="num">63 </span><span class="sc"> //</span><span class="sc2">Draw</span><span class="sc"> the </span><span class="sc2">torus knot</span></div>
<div class="lc" title="Diff #11">
<span class="num">64 </span><span class="sc"> </span><span class="sc2">glDrawElements</span><span class="sc">(</span><span class="sc2">GL_TRIANGLES</span><span class="sc">, </span><span class="sc2">torusKnot</span><span class="sa">.numIndices</span><span class="sc">, </span><span class="sa">GL_UNSIGNED_INT, (char *)NULL);</span></div>
<div class="lg" title="Diff #11">
<span class="num">65 </span></div>
<div class="lc" title="Diff #11">
<span class="num">66 </span><span class="sc"> </span><span class="sa">//Draw the "floor"</span></div>
<div class="lc" title="Diff #11">
<span class="num">67 </span><span class="sc"> </span><span class="sc2">glNormal3f(0.0f</span><span class="sa">, 1.0f, 0.0f);</span></div>
<div class="li">
<span class="num">68 </span><span class="s2-100"> </span><span class="si">glBegin(GL_TRIANGLE_STRIP);</span></div>
<div class="li">
<span class="num">69 </span><span class="s2-100"> </span><span class="si">{</span></div>
<div class="lc" title="Diff #12">
<span class="num">70 </span><span class="sc"> </span><span class="sc2">glVertex3f</span><span class="sc">( </span><span class="sc2">5</span><span class="sa">.0f</span><span class="sc">,</span><span class="sc2">-</span><span class="sa">0.5f, 5.0f</span><span class="sc">);</span></div>
<div class="lc" title="Diff #12">
<span class="num">71 </span><span class="sc"> </span><span class="sc2">glVertex3f</span><span class="sc">( </span><span class="sc2">5.</span><span class="sa">0f</span><span class="sc">,</span><span class="sc2">-</span><span class="sa">0.5f,-5.0f</span><span class="sc">);</span></div>
<div class="lc" title="Diff #12">
<span class="num">72 </span><span class="sc"> </span><span class="sc2">glVertex3f</span><span class="sc">(</span><span class="sc2">-</span><span class="sa">5.0f</span><span class="sc">,</span><span class="sc2">-0</span><span class="sa">.5f, 5.0f</span><span class="sc">);</span></div>
<div class="lc" title="Diff #12">
<span class="num">73 </span><span class="sc"> </span><span class="sc2">glVertex3f</span><span class="sc">(</span><span class="sc2">-5</span><span class="sa">.0f</span><span class="sc">,</span><span class="sc2">-0</span><span class="sa">.5f,-5.0f</span><span class="sc">);</span></div>
<div class="li">
<span class="num">74 </span><span class="s2-100"> </span><span class="si">}</span></div>
<div class="li">
<span class="num">75 </span><span class="s2-100"> </span><span class="si">glEnd();</span></div>
<div class="li">
<span class="num">76 </span><span class="s2-100"> </span><span class="si">}</span></div>
<div class="li">
<span class="num">77 </span></div>
<div class="lc" title="Diff #13">
<span class="num">78 </span><span class="sc"> </span><span class="sc2">glDisable(GL_VERTEX_PROGRAM_ARB)</span><span class="sa">;</span></div>
<div class="lc" title="Diff #14">
<span class="num"> </span></div>
<div class="lc" title="Diff #14">
<span class="num"> </span></div>
<div class="lc" title="Diff #14">
<span class="num"> </span></div>
<div class="lc" title="Diff #14">
<span class="num"> </span></div>
<div class="lc" title="Diff #14">
<span class="num"> </span></div>
<div class="lc" title="Diff #14">
<span class="num"> </span></div>
<div class="lc" title="Diff #15">
<span class="num">79 </span><span class="sc"> glDisable(</span><span class="sc2">GL_FRAGMENT_PROGRAM_ARB</span><span class="sc">);</span></div>
<div class="lc" title="Diff #15">
<span class="num">80 </span><span class="sc"> </span><span class="sa">glDisable(GL_SCISSOR_TEST);</span></div>
<div class="li">
<span class="num">81 </span><span class="s2-100"> </span><span class="si">glDisable(GL_BLEND);</span></div>
</div>
</td>
</tr>
</tbody></table>
</td>
</tr>
<tr valign="top">
<td><table summary="Navigation and legend">
<tbody>
<tr valign="top">
<td><table id="t3" summary="Legend">
<tbody>
<tr valign="top"><td colspan="5">Number of differences: <b>10</b></td></tr>
<tr valign="top"><td><div class="sa">
Added(5,22)</div>
</td><td><div class="sd">
Deleted(0,48)</div>
</td><td><div class="sc">
Changed(82)</div>
</td><td><div class="sc2">
Changed in changed(42)</div>
</td><td><div class="sig">
Ignored</div>
</td></tr>
</tbody></table>
</td>
<td align="right"><table summary="Navigation">
<tbody>
<tr>
<td><input onclick="first()" title="First Difference" type="button" value="<<" /></td>
<td><input onclick="previous()" title="Previous Difference" type="button" value="<" /></td>
<td><select id="currentdiff" onchange="change()" size="1" style="width: 70pt;">
<option id="navcombo" selected="selected" value="0">Select Diff</option>
</select>
</td>
<td><input onclick="next()" title="Next Difference" type="button" value=">" /></td>
<td><input onclick="last()" title="Last Difference" type="button" value=">>" /></td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
<br>Shaders side will be later...
<br><br>
PS have you seen a good difference viewer ?Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-24988099891065469592012-01-04T16:02:00.000+01:002012-01-04T16:02:46.139+01:00Parallel file loadIn some cases and on some OS ( need to say - Linux )<br />
parallel load of files to process, such as:<br />
<pre class="code">tbb::tick_count start = tbb::tick_count::now();
parallel_invoke( [&]() {preload(argv[1],first);},[&]() {preload(argv[2],second);} );
// preload #1 0.118449 seconds , :: parallel_invoke
// preload #2 0.130777 seconds , :: preload, preload</pre>
can be, as you can see, ~10% faster ( measured via tbb::tick_count, for sure )<br />
<br />
Dont really want to go into more details but nice improvement and for almost no changes....Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com1tag:blogger.com,1999:blog-7081507101814694870.post-88944017774553899282011-12-29T13:41:00.000+01:002011-12-29T13:41:01.925+01:00photo fun<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
Made some time ago with iPhone during attendance of SIGGRAPH'11. I am not saying that it is bad but fun:<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-UAkQ3vQiioc/Tvxe5zqFpeI/AAAAAAAAEns/i2glMXGb-dI/s1600/photo.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="297" src="http://4.bp.blogspot.com/-UAkQ3vQiioc/Tvxe5zqFpeI/AAAAAAAAEns/i2glMXGb-dI/s400/photo.JPG" width="400" /></a></div>
<br />
and it's details: <br />
<br /><div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-PqoyB5xDNbc/Tvxe8EVWCwI/AAAAAAAAEn0/PyHKz1Aod60/s1600/photo_details.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-PqoyB5xDNbc/Tvxe8EVWCwI/AAAAAAAAEn0/PyHKz1Aod60/s1600/photo_details.png" /></a></div>
<br />
Would be interesting to see more...Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0tag:blogger.com,1999:blog-7081507101814694870.post-67732468583953229412011-12-28T23:55:00.000+01:002011-12-29T00:25:12.428+01:00Рисуем и понимаем красивоДовольно часто окружающие и коллеги спрашивают о деталях той либо иной графической "фичи" - в чем особенность "Ambient Occlusion" , "Lens Flares" или в чем важность тени и больше, почему динамическая... <br />
По-хорошему, надо бы самому сесть и описать все и в примерах. Останавливает только большое количество уже готового, но разбросанного по разным частям и источникам материала или банальная лень...<br />
Однако хочется исправиться и буквально на днях, нашел довольно достойное описание и на примере недавно выпущеной игрушки, сама игрушка хоть и на UT3 движке, но все же - конечный продукт...<br />
Вообщем читайте, вникайте и не говорите что не видели ( я уже вроде как занес эту ссылку в закладки ) : <a href="http://www.geforce.com/Optimize/Guides/batman-arkham-city-graphics-breakdown-and-performance-guide" target="_blank">http://www.geforce.com/Optimize/Guides/batman-arkham-city-graphics-breakdown-and-performance-guide</a><br />
<br />
Если будет нужно и интересно - могу расшарить свои закладки, они полу-публичные и на внешнем сайте :)<br />
<br />
PS а не реверснуть ли эту "мышь"?<br />
<br />
Не с PhysicX конечно - там даже SDK публично доступен, да и тема эта достаточно проработана...но это уже другой блог/разговор...Maxhttp://www.blogger.com/profile/14260599841854602635noreply@blogger.com0