待補充....
剛建好專案,發覺無法Run。
原因是在Documentation中有一段講Communication with the QNX Neutrino RTOS
似乎在PC上debug也一定要有個平台才行
所以我用VMware跑一個評估版的QNX,ip在192.168.6.128
上面說裡面一定要跑一個qconn 的program, 評估版的本來就有
然後在專案裡,Perspective > QNX System Information
在Target Navigator view裡建一個New QNX Target
輸入剛才的ip,然後Finish
這樣IDE中的執行檔就可以Run
此外,如果發覺編完找不到Library,記得在Project Preference裡,加入Extra的library
(libscreen只要打screen就好,前面的lib不用打。)
2014年9月23日 星期二
2014年9月16日 星期二
從vmware的QNX連到 win7的shared folder
試了很久,google了半天,找不到為何連不過去
後來發現原因,原來是電腦名稱和別人衝到.....把名稱改了後就可以....囧
在vm 裝評估版的QNX 在Windows開一個Shared folder
例如我的分享資料夾叫 Share, QNX的叫 mnt 然後打
fs-cifs -l -vvvvvv //電腦名稱:電腦ip:/Share /mnt
-l 是要輸入user name和password
-v 是debug訊息的多寡
電腦名稱大小寫沒差
username大小寫也沒差
後來發現原因,原來是電腦名稱和別人衝到.....把名稱改了後就可以....囧
在vm 裝評估版的QNX 在Windows開一個Shared folder
例如我的分享資料夾叫 Share, QNX的叫 mnt 然後打
fs-cifs -l -vvvvvv //電腦名稱:電腦ip:/Share /mnt
-l 是要輸入user name和password
-v 是debug訊息的多寡
電腦名稱大小寫沒差
username大小寫也沒差
2014年9月15日 星期一
Create Image form memory
最近在測試從網路上抓 Google map下來,但不知該怎把抓下來的圖轉成Kanzi可用的。
這個軟體目前資源很少呀,用的人不多,不像Unity3D,可以很簡單就做到。
跟網路的溝通我是用POCO這個library
在Kanzi建立需要的資源:
把拿到的stream轉成 char* buffer再轉成Kanzi 的stream格式。
再用Kanzi的load png的Api: kzcImageLoadPNG,因為我已經知道抓下來是png的格式,若是其它的,要用其它的函式。之前本來想直接用kzuImageTextureCreateFromMemory,這個函式,但發現抓下來的是png,在設定 KZU_TEXTURE_CHANNELS時會有問題,因為png用的是索引色,不是用R8G8B8這種格式,還要把抓下來的raw data做轉換。
如果是直接從file中讀取,也可以用這個方式。之前拿來debug用的。把從網路上抓下來的部分改成下面這段就可以
這個軟體目前資源很少呀,用的人不多,不像Unity3D,可以很簡單就做到。
跟網路的溝通我是用POCO這個library
std::string url = URIinit(); URI uri(url); std::string path(uri.getPathAndQuery()); if (path.empty()) path = "/"; HTTPClientSession session(uri.getHost(), uri.getPort()); HTTPRequest request(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1); HTTPResponse response; session.sendRequest(request); std::istream &is = session.receiveResponse( response );
在Kanzi建立需要的資源:
struct KzuResourceManager* resourceManager = kzuUIDomainGetResourceManager(kzaApplicationGetUIDomain(application)); struct KzcMemoryManager* memoryManager = kzcMemoryGetManager(resourceManager); struct KzcImage* image; struct KzuImageTexture* texture;
把拿到的stream轉成 char* buffer再轉成Kanzi 的stream格式。
std::ostringstream oss( std::ios_base::binary); oss << is.rdbuf(); std::string strConst = oss.str(); int size = strConst.length(); const char* buffer = strConst.c_str(); kzsException error; struct KzcInputStream* outstrem; error = kzcInputStreamCreateFromMemory(memoryManager, (kzByte*)buffer, size, KZC_IO_STREAM_ENDIANNESS_UNSPECIFIED, &outstrem);
再用Kanzi的load png的Api: kzcImageLoadPNG,因為我已經知道抓下來是png的格式,若是其它的,要用其它的函式。之前本來想直接用kzuImageTextureCreateFromMemory,這個函式,但發現抓下來的是png,在設定 KZU_TEXTURE_CHANNELS時會有問題,因為png用的是索引色,不是用R8G8B8這種格式,還要把抓下來的raw data做轉換。
error = kzcImageLoadPNG(memoryManager, outstrem, false, &image); /* Create texture from image. */ result = kzuImageTextureCreateFromImage(resourceManager, "Widget Texture", image, KZU_TEXTURE_FILTER_BILINEAR, KZU_TEXTURE_WRAP_REPEAT, 0.0f, &texture); kzsErrorForward(result); struct KzuObjectNode* screenNode = kzuScreenToObjectNode(kzaApplicationGetScreen(application)); struct KzuObjectNode* plane = kzuObjectNodeGetRelative(screenNode, "#Plane"); result = kzuObjectNodeSetResourceIDResourceProperty(plane, KZU_PROPERTY_TYPE_TEXTURE, kzuImageTextureToResource(texture)); kzsErrorForward(result);
如果是直接從file中讀取,也可以用這個方式。之前拿來debug用的。把從網路上抓下來的部分改成下面這段就可以
std::fstream myfile("myfile.png", std::ios::in | std::ios::binary);
std::filebuf* pbuf = myfile.rdbuf();
std::size_t size = pbuf->pubseekoff (0,myfile.end,myfile.in);
pbuf->pubseekpos (0,myfile.in);
char* buffer=new char[size];
// get file data
pbuf->sgetn (buffer,size);
myfile.close();
Kanzi C++ project
除了在設定中的:
C/C++
-Advanced: Compiled as -> 改成 Compiled as C++ Code 外
也要把
-Code Generation: Enable C++ Exceptions 設成 /EHsc
參照:http://msdn.microsoft.com/zh-tw/library/1deeycx5.aspx
如果沒改,在編一些第三方函式庫會編不過...
C/C++
-Advanced: Compiled as -> 改成 Compiled as C++ Code 外
也要把
-Code Generation: Enable C++ Exceptions 設成 /EHsc
參照:http://msdn.microsoft.com/zh-tw/library/1deeycx5.aspx
如果沒改,在編一些第三方函式庫會編不過...
2014年9月4日 星期四
建立Custom Component
1. 建立自已的KzuUiComponentNodeClass
2. 在configuration->onStartup = startup; 時註冊Factory
3. 為了2. 所以要建2個function:
a. FactoryCreate //用來create component
b. RegisterToFactory //用來註冊, 如果有要註冊Custom message也可以寫在這
這會對應到在Editor中,建立的Custom Component name
4. 如果有要處理Message, Handler加在KzuUiComponentNodeClass的initialize function中。
要在editor preview的話,編GL_21_release版的,ps:要把Editor關掉才能把dll蓋掉。
2. 在configuration->onStartup = startup; 時註冊Factory
3. 為了2. 所以要建2個function:
a. FactoryCreate //用來create component
b. RegisterToFactory //用來註冊, 如果有要註冊Custom message也可以寫在這
這會對應到在Editor中,建立的Custom Component name
4. 如果有要處理Message, Handler加在KzuUiComponentNodeClass的initialize function中。
要在editor preview的話,編GL_21_release版的,ps:要把Editor關掉才能把dll蓋掉。
註冊custom message
const struct KzuMessageType* MESSAGE_TEXTUREFONT_CHANGRD;
{
struct KzcMemoryManager* memoryManager = kzcMemoryGetManager(factory);
struct KzuMessageType* messageType;
//Message.Custom.FontChange 對應Editor裡的Custom Message Name
result = kzuMessageRegistryAddMessageType(memoryManager, "Message.Custom.FontChange", KZU_MESSAGE_ROUTING_TUNNELLING_BUBBLING, &messageType);
kzsErrorForward(result);
MESSAGE_TEXTUREFONT_CHANGRD = messageType;
}
取得/設定 custom property
{
struct KzuPropertyType* UV_SET;
struct KzcVector4 uvs;
//get property type
UV_SET = kzuPropertyRegistryFindPropertyType("uv_modify");
kzsAssert(kzcIsValidPointer(UV_SET));
//get property
uvs = kzuObjectNodeGetVector4PropertyDefault(textrue_font->planeNode, UV_SET);
uvs.data[0] = (kzFloat)(uv_sets[index].x);
uvs.data[1] = (kzFloat)(uv_sets[index].y);
uvs.data[2] = (kzFloat)(uv_sets[index].z);
uvs.data[3] = (kzFloat)(uv_sets[index].w);
//set property
result = kzuObjectNodeSetVector4Property(textrue_font->planeNode, UV_SET, uvs);
kzsErrorForward(result);
}
在scene node底下的mesh的material,可以從node就直接get property來set,不用去get它的material
訂閱:
文章
(
Atom
)