K-Res

熟悉一下Xcode下Mac App动态链接库的runpath

Xcode虽然已经用过很久了,但是很少接触Mac App的开发,尤其是对于Mac App的动态链接库用法更是知之甚少(大部分时间都是在做iOS开发而iOS又不支持动态链接库⊙﹏⊙b汗),果然在研究FMOD Studio的跨平台音效库时遇到了问题…先是在win32下写了一段测试代码,配合Studio工具做出的bank完成了基本加载、播放等基本逻辑,准备上Mac平台试验一下,结果一通忙活include和lib后,编译链接没问题了,停掉虾米的推荐准备听听Mac版的声音效果如何,结果一运行程序就崩溃了,看了下日志输出:

dyld: Library not loaded: @rpath/libfmodL.dylib
Referenced from: /Users/wzkres/Library/Developer/Xcode/DerivedData/CCTechDemo-gdcppdyfmrhlhzhidvykxyjrcvwo/Build/Products/Debug/CCTechDemo Mac.app/Contents/MacOS/CCTechDemo Mac
Reason: image not found

感觉有点类似win32下的没找到动态链接库的dll…不过既然是没见过的提示,还是搜索学习一下吧。

Continue reading…

iOS6下慎用MPMoviePlayerViewController!

这个MPMoviePlayerViewController的事要从何说起呢,嗯……其实主要还是由于在播放视频时按Home键切出引发的问题:

先是测试发现游戏在播放开场视频时按Home键切换到后台后会触发libGPUSupportMercury.dylib: gpus_ReturnNotPermittedKillClient导致crash,关于这个异常大苹果的Technical Q&A QA1766(http://developer.apple.com/library/ios/#qa/qa1766/_index.html)已经交待得很清楚了,简单来说就是应用在处于后台状态时是不允许执行任何OpenGL命令的,包括前台时提交但尚未实际执行的缓冲指令!不过文档中提到的几个关键点我也都按规矩做了处理,稍作跟踪后发现,导致这个异常的原因是在应用播放视频时切到后台之后,MPMoviePlayerPlaybackDidFinishNotification通知被莫名其妙的触发了,导致后续逻辑按照开场视频播放结束开始执行,进而去加载OpenGL贴图,初始化状态等,于是自然被OS认为是违规调用了OpenGL命令,因此被kill掉了!

Continue reading…

Android中GLSurfaceView在横竖屏切换时重新创建表面缓冲导致的问题

在做Android的OpenGL ES应用时,经常会遇到接入各种支付SDK等弹出UI导致当前横竖屏状态切换的问题,比如游戏是横屏landscape的,而支付SDK弹出的View是竖屏portrait的,这时如果不插手处理的话,系统会对GL的表面缓冲进行重新创建的处理,比如横屏的800×480会被重新创建为480×800,这样就会导致绘图错误,效果可以参考下面stackoverflow上贴出的图片。

解决这个问题的方法是:
Continue reading…

关于Unity3D内置Blinn Phong光照模型计算在移动设备上的曝光问题

Unity3D的surface shader用起来很是方便,比直接的cg写起来省事的多,而且有很多现成的东西可以include,比如光照部分就是,常用的lambert, blinn phong都提供了现成的实现,但是最近在做specular时发现,内置(https://unity3d.com/unity/download/archive下载全部内置shader source或{unity install path}/Data/CGIncludes/Lighting.cginc Windows, /Applications/Unity/Unity.app/Contents/CGIncludes/Lighting.cginc Mac)的LightingBlinnPhong在移动设备上使用时会出现高光曝掉的问题!

简单看lighting.cginc中的相关函数:

Continue reading…

Realtek HD Audio前面板插口没反应的一个解决方法

主板是微星的770T-C35,机箱是一款世纪之星的不知道什么型号的,HD Audio前面板连接线已经接好主板,有防呆也不可能插反,但是耳机接入前面板3.5插口后就是没反应,查看了HD Audio控制面板,显示如下:

QQ截图20140328120922

前面板显示没有插入,也没有声音,检查了前面板接线盒主板说明书后意识到一个问题:可能接线或插口并没有按有sensor的方式连接,也就是说前面板的插口不能像后面板载的那样实时显示插头插入拔出情况,所以前面板接口一直没有声音,于是关闭掉了检测: Continue reading…

Win8的Hyper-V导致视频硬件解码DXVA失效的问题

在使用TMT,完美解码的PotPlayer, MPC HC, KMP等播放器看蓝光原盘和1080P mkv等视频时发现如果开启硬解的话,会出现“绿屏”的问题!出现问题的机器是AMD X2 245的U和HD4850显卡,Win8 64位系统,查了下资料这块显卡对视频硬解是支持的,于是第一反应是显卡驱动,试遍了amd官网的各种legacy驱动(HD4000系列已经被列入legacy了)和guru3d上的各种第三方修改,增强驱动后,均没有解决,不是绿屏就是卡死,DXVA Checker也检查了显示没问题的,然后一度以为legacy了后amd的新系统64位驱动就渣掉了,快要放弃的时候发现guru3d论坛上有人提到Win8的Hyper-V会导致硬件出问题,于是恍然大悟,之前为了玩WinPhone8的SDK和模拟器,开启了Win8自带Hyper-V虚拟机组件,于是果断卸掉,重启后再用各种播放器硬件一切恢复正常,看到CPU占用率下降,应用不卡真是一件非常舒心的事…

解决Chrome浏览器在Mac下开启新标签后出现404的问题

可能不是只在Mac下才会出这个问题,现象就是打开Chrome后新标签页原本应该显示的常用网站和搜索页面显示不出来了,而是个这样的404页面:
10dfa9ec8a13632789b4c96b938fa0ec08fac709

用开发者工具看了一下,是这个地址报404: www.google.com/_/chrome/newtab?espv=210&ie=UTF-8,而且非常奇怪的是如果先“科学上网”的话,就不会出这个404,一切正常…

Continue reading…

关于Javascript闭包closure的应用

最近在研究百度地图API的应用,试验了iOS SDK后又开始试验Web端的JS版应用,做到在地图上通过Ajax异步调用方式从后端取得数据后,添加标注并给标注添加对应的点击时间alert出此位置的信息时遇到了一个Javascript问题,最开始的code是这样写的:

		$.ajax({
			type : "get",
			url : urlStr,
			async : true,
			dataType : "json",
			error : function() {
				alert('No valid location record!');
			},
			success : function(json) {
				for(var i=0;i<json.length;i++)
				{
					var point = new BMap.Point(json[i].longtitude, json[i].latitude); 
					var marker = new BMap.Marker(point);        // 创建标注  
                                        // 添加点击事件侦听
					mark.addEventListener("click", function()
			                {
				            alert('记录时间: '+json[i].logTime+' 定位时间: '+json[i].gpsTime);
				            return;
			                });
					map.addOverlay(marker);                     // 将标注添加到地图中 
				}
		        var point = new BMap.Point(json[0].longtitude, json[0].latitude);  
        		map.centerAndZoom(point, 15);
			}
			});

这样运行时,点击任意一个标注后就会收到浏览器的js脚本错误,提示json[i].logTime还有后面同样的gpsTime部分有问题,检查了一下,发现Ajax请求成功后的函数内循环遍历数据时的i是局部变量,而每一个mark的click侦听函数内的i都为对同一个变量的引用,也就是说循环遍历后每次点击触发执行这段响应代码时的i都是同一个数,而不是认为的对应每一个mark时的i,也自然就取不到所期望的数据了!
Continue reading…

开启Gson的缩进格式Json输出

最近研究GAE上的Java支持,接触到了不少J2EE的技术,先记录一些基础小问题吧,短期内没遇到GAE硬伤导致放弃的话应该会继续丰富这方面的内容。

这次记录的是关于Java JsonGson的缩进格式输出方法。

这个库默认情况下会输出格式紧凑没有缩进的Json字符串,像这样:

{"data1":100,"data2":"hello","list":["String 1","String 2","String 3"]}

这样虽然能减少一些字节,但是开发调试时量大了的话看着会很不舒服,开启缩进格式化的方法是不要直接new Gson对象,而是使用GsonBuilder创建Gson对象,像这样:

Continue reading…

Project Ne10在iPhone 4S上的试验结果

Project Ne10: https://github.com/projectNe10/Ne10
是由ARM官方人员创建并维护的一套基于neon SIMD指令集的优化函数库,可以用于提高多媒体,信号处理等计算的速度(类似于Intel的MMX和AMD的3D NOW!)。其实这个也是由于ARM意识到了现在很少会有iOS或Android等这些热门平台开发人员会去使用汇编优化的问题,才建立了这个开源项目。想想当初上学时学数字图像处理做算法,发现用MMX可以提高算法速度,然后吭哧了半天MMX的各种寄存器,指令集,然后很欢喜的看到提高了几十ms的速度后,那个欢乐啊,现在的程序猿真是幸福!
git clone了项目在Mac上用Xcode Version 5.0 (5A1413)试验一下,记录一下在我的iPhone 4S上的试验结果:
Continue reading…