From b45261521035969e4cfdde182713b054b20e25a7 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 6 Jul 2011 22:32:58 +0200 Subject: [PATCH 1/7] assimp: fixed windows paths --- .../src/ofxAssimpModelLoader.cpp | 27 +++++++------------ .../assimpExample/src/testApp.cpp | 2 ++ 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/addons/ofxAssimpModelLoader/src/ofxAssimpModelLoader.cpp b/addons/ofxAssimpModelLoader/src/ofxAssimpModelLoader.cpp index 366758c1150..b7a03803b73 100644 --- a/addons/ofxAssimpModelLoader/src/ofxAssimpModelLoader.cpp +++ b/addons/ofxAssimpModelLoader/src/ofxAssimpModelLoader.cpp @@ -141,7 +141,8 @@ bool ofxAssimpModelLoader::loadModel(string modelName, bool optimize){ // Load our new path. - filepath = ofToDataPath(modelName); + filepath = modelName; + string filepath = ofToDataPath(modelName); //theo added - so we can have models and their textures in sub folders modelFolder = ofFilePath::getEnclosingDirectory(filepath); @@ -304,24 +305,16 @@ void ofxAssimpModelLoader::loadGLResources(){ // TODO: handle other aiTextureTypes if(AI_SUCCESS == mtl->GetTexture(aiTextureType_DIFFUSE, texIndex, &texPath)){ - // This is magic. Thanks Kyle. - ofLog(OF_LOG_VERBOSE, "loading image from %s", texPath.data); - string modelFolder = ofFilePath::getEnclosingDirectory(filepath); - - if(ofFilePath::isAbsolute(texPath.data) && ofFile::doesFileExist(texPath.data)) { - if(!ofLoadImage(meshHelper.texture,texPath.data)){ - ofLog(OF_LOG_ERROR,string("error loading image ") + texPath.data); - } - } - else { - if(!ofLoadImage(meshHelper.texture,modelFolder + texPath.data)){ - ofLog(OF_LOG_ERROR,"error loading image " + modelFolder + texPath.data); - } + string modelFolder = ofFilePath::getEnclosingDirectory(filepath,false); + string relTexPath = ofFilePath::getEnclosingDirectory(texPath.data,false); + string texFile = ofFilePath::getFilename(texPath.data); + string realPath = modelFolder + relTexPath + texFile; + if(!ofFile::doesFileExist(realPath) || !ofLoadImage(meshHelper.texture,realPath)) { + ofLog(OF_LOG_ERROR,string("error loading image ") + filepath + " " +realPath); + }else{ + ofLog(OF_LOG_VERBOSE, "texture width: %f height %f", meshHelper.texture.getWidth(), meshHelper.texture.getHeight()); } - - ofLog(OF_LOG_VERBOSE, "texture width: %f height %f", meshHelper.texture.getWidth(), meshHelper.texture.getHeight()); - } aiColor4D dcolor, scolor, acolor, ecolor; diff --git a/apps/addonsExamples/assimpExample/src/testApp.cpp b/apps/addonsExamples/assimpExample/src/testApp.cpp index cd55ecbc1ae..a255a6211d7 100644 --- a/apps/addonsExamples/assimpExample/src/testApp.cpp +++ b/apps/addonsExamples/assimpExample/src/testApp.cpp @@ -105,6 +105,8 @@ void testApp::draw(){ ofPopMatrix(); + glPopAttrib(); + ofDrawBitmapString("fps: "+ofToString(ofGetFrameRate(), 2), 10, 15); ofDrawBitmapString("keys 1-5 load models, spacebar to trigger animation", 10, 30); From 30d5bc95e0ba064a4231c8dcff1d17c140ba76d5 Mon Sep 17 00:00:00 2001 From: arturo Date: Thu, 7 Jul 2011 15:51:17 +0200 Subject: [PATCH 2/7] ofSaveImage to buffer in memory --- libs/openFrameworks/graphics/ofImage.cpp | 90 ++++++++++++++++++++++-- libs/openFrameworks/graphics/ofImage.h | 45 +++++++++++- 2 files changed, 126 insertions(+), 9 deletions(-) diff --git a/libs/openFrameworks/graphics/ofImage.cpp b/libs/openFrameworks/graphics/ofImage.cpp index 739c5689630..1a34902e355 100644 --- a/libs/openFrameworks/graphics/ofImage.cpp +++ b/libs/openFrameworks/graphics/ofImage.cpp @@ -380,28 +380,106 @@ static void saveImage(ofPixels_ & pix, string fileName, ofImageQualit } } +//---------------------------------------------------------------- void ofSaveImage(ofPixels & pix, string fileName, ofImageQualityType qualityLevel){ saveImage(pix,fileName,qualityLevel); } +//---------------------------------------------------------------- void ofSaveImage(ofFloatPixels & pix, string fileName, ofImageQualityType qualityLevel) { saveImage(pix,fileName,qualityLevel); } +//---------------------------------------------------------------- void ofSaveImage(ofShortPixels & pix, string fileName, ofImageQualityType qualityLevel) { saveImage(pix,fileName,qualityLevel); } -void ofSaveImage(ofPixels & pix, ofBuffer & buffer, ofImageQualityType qualityLevel) { - ofLog(OF_LOG_ERROR, "ofSaveImage(pix, buffer) is not yet implemented"); +//---------------------------------------------------------------- +template +static void saveImage(ofPixels_ & pix, ofBuffer & buffer, ofImageFormat format, ofImageQualityType qualityLevel) { + //thanks to alvaro casinelli for the implementation + + ofInitFreeImage(); + + if (pix.isAllocated() == false){ + ofLog(OF_LOG_ERROR,"error saving image - pixels aren't allocated"); + return; + } + + #ifdef TARGET_LITTLE_ENDIAN + pix.swapRgb(); + #endif + + FIBITMAP * bmp = getBmpFromPixels(pix); + + #ifdef TARGET_LITTLE_ENDIAN + pix.swapRgb(); + #endif + + if (bmp) // bitmap successfully created + { + // (b) open a memory stream to compress the image onto mem_buffer: + // + FIMEMORY *hmem = FreeImage_OpenMemory(); + // (c) encode and save the image to the memory (on dib FIBITMAP image): + // + if(FREE_IMAGE_FORMAT(format) == FIF_JPEG) { + int quality = JPEG_QUALITYSUPERB; + switch(qualityLevel) { + case OF_IMAGE_QUALITY_WORST: quality = JPEG_QUALITYBAD; break; + case OF_IMAGE_QUALITY_LOW: quality = JPEG_QUALITYAVERAGE; break; + case OF_IMAGE_QUALITY_MEDIUM: quality = JPEG_QUALITYNORMAL; break; + case OF_IMAGE_QUALITY_HIGH: quality = JPEG_QUALITYGOOD; break; + case OF_IMAGE_QUALITY_BEST: quality = JPEG_QUALITYSUPERB; break; + } + FreeImage_SaveToMemory(FIF_JPEG, bmp, hmem, quality); + }else{ + FreeImage_SaveToMemory((FREE_IMAGE_FORMAT)format, bmp, hmem); + } + /* + + NOTE: at this point, hmem contains the entire data in memory stored in fif format. the + amount of space used by the memory is equal to file_size: + long file_size = FreeImage_TellMemory(hmem); + but can also be retrieved by FreeImage_AcquireMemory that retrieves both the + length of the buffer, and the buffer memory address. + */ + + uint32_t size_in_bytes = 0; + // Save compressed data on mem_buffer + // note: FreeImage_AquireMemory allocates space for aux_mem_buffer): + // + unsigned char *mem_buffer = NULL; + if (!FreeImage_AcquireMemory(hmem, &mem_buffer, &size_in_bytes)) + cout << "Error aquiring compressed image from memory" << endl; + + /* + Now, before closing the memory stream, copy the content of mem_buffer + to an auxiliary buffer + */ + + buffer.set((char*)mem_buffer,size_in_bytes); + + // Finally, close the FIBITMAP object, or we will get a memory leak: + FreeImage_Unload(bmp); + + // Close the memory stream (otherwise we may get a memory leak). + FreeImage_CloseMemory(hmem); + } +} + +//---------------------------------------------------------------- +void ofSaveImage(ofPixels & pix, ofBuffer & buffer, ofImageFormat format, ofImageQualityType qualityLevel) { + saveImage(pix,buffer,format,qualityLevel); } -void ofSaveImage(ofFloatPixels & pix, ofBuffer & buffer, ofImageQualityType qualityLevel) { - ofLog(OF_LOG_ERROR, "ofSaveImage(pix, buffer) is not yet implemented"); +void ofSaveImage(ofFloatPixels & pix, ofBuffer & buffer, ofImageFormat format, ofImageQualityType qualityLevel) { + saveImage(pix,buffer,format,qualityLevel); } -void ofSaveImage(ofShortPixels & pix, ofBuffer & buffer, ofImageQualityType qualityLevel) { - ofLog(OF_LOG_ERROR, "ofSaveImage(pix, buffer) is not yet implemented"); +void ofSaveImage(ofShortPixels & pix, ofBuffer & buffer, ofImageFormat format, ofImageQualityType qualityLevel) { + saveImage(pix,buffer,format,qualityLevel); } diff --git a/libs/openFrameworks/graphics/ofImage.h b/libs/openFrameworks/graphics/ofImage.h index d47f4af326e..6745c3225d6 100644 --- a/libs/openFrameworks/graphics/ofImage.h +++ b/libs/openFrameworks/graphics/ofImage.h @@ -15,6 +15,45 @@ enum ofImageQualityType { OF_IMAGE_QUALITY_WORST }; +enum ofImageFormat { + OF_IMAGE_FORMAT_BMP = 0, + OF_IMAGE_FORMAT_ICO = 1, + OF_IMAGE_FORMAT_JPEG = 2, + OF_IMAGE_FORMAT_JNG = 3, + OF_IMAGE_FORMAT_KOALA = 4, + OF_IMAGE_FORMAT_LBM = 5, + OF_IMAGE_FORMAT_IFF = OF_IMAGE_FORMAT_LBM, + OF_IMAGE_FORMAT_MNG = 6, + OF_IMAGE_FORMAT_PBM = 7, + OF_IMAGE_FORMAT_PBMRAW = 8, + OF_IMAGE_FORMAT_PCD = 9, + OF_IMAGE_FORMAT_PCX = 10, + OF_IMAGE_FORMAT_PGM = 11, + OF_IMAGE_FORMAT_PGMRAW = 12, + OF_IMAGE_FORMAT_PNG = 13, + OF_IMAGE_FORMAT_PPM = 14, + OF_IMAGE_FORMAT_PPMRAW = 15, + OF_IMAGE_FORMAT_RAS = 16, + OF_IMAGE_FORMAT_TARGA = 17, + OF_IMAGE_FORMAT_TIFF = 18, + OF_IMAGE_FORMAT_WBMP = 19, + OF_IMAGE_FORMAT_PSD = 20, + OF_IMAGE_FORMAT_CUT = 21, + OF_IMAGE_FORMAT_XBM = 22, + OF_IMAGE_FORMAT_XPM = 23, + OF_IMAGE_FORMAT_DDS = 24, + OF_IMAGE_FORMAT_GIF = 25, + OF_IMAGE_FORMAT_HDR = 26, + OF_IMAGE_FORMAT_FAXG3 = 27, + OF_IMAGE_FORMAT_SGI = 28, + OF_IMAGE_FORMAT_EXR = 29, + OF_IMAGE_FORMAT_J2K = 30, + OF_IMAGE_FORMAT_JP2 = 31, + OF_IMAGE_FORMAT_PFM = 32, + OF_IMAGE_FORMAT_PICT = 33, + OF_IMAGE_FORMAT_RAW = 34 +}; + //---------------------------------------------------- // FreeImage based stuff: bool ofLoadImage(ofPixels & pix, string path); @@ -30,13 +69,13 @@ bool ofLoadImage(ofTexture & tex, string path); bool ofLoadImage(ofTexture & tex, const ofBuffer & buffer); void ofSaveImage(ofPixels & pix, string path, ofImageQualityType qualityLevel = OF_IMAGE_QUALITY_BEST); -void ofSaveImage(ofPixels & pix, ofBuffer & buffer, ofImageQualityType qualityLevel = OF_IMAGE_QUALITY_BEST); +void ofSaveImage(ofPixels & pix, ofBuffer & buffer, ofImageFormat format = OF_IMAGE_FORMAT_PNG, ofImageQualityType qualityLevel = OF_IMAGE_QUALITY_BEST); void ofSaveImage(ofFloatPixels & pix, string path, ofImageQualityType qualityLevel = OF_IMAGE_QUALITY_BEST); -void ofSaveImage(ofFloatPixels & pix, ofBuffer & buffer, ofImageQualityType qualityLevel = OF_IMAGE_QUALITY_BEST); +void ofSaveImage(ofFloatPixels & pix, ofBuffer & buffer, ofImageFormat format = OF_IMAGE_FORMAT_PNG, ofImageQualityType qualityLevel = OF_IMAGE_QUALITY_BEST); void ofSaveImage(ofShortPixels & pix, string path, ofImageQualityType qualityLevel = OF_IMAGE_QUALITY_BEST); -void ofSaveImage(ofShortPixels & pix, ofBuffer & buffer, ofImageQualityType qualityLevel = OF_IMAGE_QUALITY_BEST); +void ofSaveImage(ofShortPixels & pix, ofBuffer & buffer, ofImageFormat format = OF_IMAGE_FORMAT_PNG, ofImageQualityType qualityLevel = OF_IMAGE_QUALITY_BEST); // when we exit, we shut down ofImage void ofCloseFreeImage(); From b8eab65f76f5ca7034885440a49a809c325d14cf Mon Sep 17 00:00:00 2001 From: arturo Date: Thu, 7 Jul 2011 16:59:29 +0200 Subject: [PATCH 3/7] ofxAssimp refactor filename to fileName --- addons/ofxAssimpModelLoader/src/ofxAssimpModelLoader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/ofxAssimpModelLoader/src/ofxAssimpModelLoader.cpp b/addons/ofxAssimpModelLoader/src/ofxAssimpModelLoader.cpp index b7a03803b73..cc4fc4e762c 100644 --- a/addons/ofxAssimpModelLoader/src/ofxAssimpModelLoader.cpp +++ b/addons/ofxAssimpModelLoader/src/ofxAssimpModelLoader.cpp @@ -308,7 +308,7 @@ void ofxAssimpModelLoader::loadGLResources(){ ofLog(OF_LOG_VERBOSE, "loading image from %s", texPath.data); string modelFolder = ofFilePath::getEnclosingDirectory(filepath,false); string relTexPath = ofFilePath::getEnclosingDirectory(texPath.data,false); - string texFile = ofFilePath::getFilename(texPath.data); + string texFile = ofFilePath::getFileName(texPath.data); string realPath = modelFolder + relTexPath + texFile; if(!ofFile::doesFileExist(realPath) || !ofLoadImage(meshHelper.texture,realPath)) { ofLog(OF_LOG_ERROR,string("error loading image ") + filepath + " " +realPath); From 281ee13ebfdccf386e7aa31d115b4e9ead5220d8 Mon Sep 17 00:00:00 2001 From: arturo Date: Thu, 7 Jul 2011 17:43:43 +0200 Subject: [PATCH 4/7] ofImage: uint_32t -> unsigned int --- libs/openFrameworks/graphics/ofImage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/openFrameworks/graphics/ofImage.cpp b/libs/openFrameworks/graphics/ofImage.cpp index 1a34902e355..2b565271dca 100644 --- a/libs/openFrameworks/graphics/ofImage.cpp +++ b/libs/openFrameworks/graphics/ofImage.cpp @@ -446,7 +446,7 @@ static void saveImage(ofPixels_ & pix, ofBuffer & buffer, ofImageForm length of the buffer, and the buffer memory address. */ - uint32_t size_in_bytes = 0; + unsigned int size_in_bytes = 0; // Save compressed data on mem_buffer // note: FreeImage_AquireMemory allocates space for aux_mem_buffer): // From 112f674e25bfd78c9fc008f0b06664af2ae9836f Mon Sep 17 00:00:00 2001 From: arturo Date: Fri, 8 Jul 2011 12:22:21 +0200 Subject: [PATCH 5/7] ofImage: save to buffer, fix for vs2010 --- libs/openFrameworks/graphics/ofImage.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libs/openFrameworks/graphics/ofImage.cpp b/libs/openFrameworks/graphics/ofImage.cpp index 2b565271dca..137e79dd459 100644 --- a/libs/openFrameworks/graphics/ofImage.cpp +++ b/libs/openFrameworks/graphics/ofImage.cpp @@ -445,8 +445,11 @@ static void saveImage(ofPixels_ & pix, ofBuffer & buffer, ofImageForm but can also be retrieved by FreeImage_AcquireMemory that retrieves both the length of the buffer, and the buffer memory address. */ - - unsigned int size_in_bytes = 0; + #ifdef _MSC_VER + DWORD size_in_bytes = 0; + #else + uint32_t size_in_bytes = 0; + #endif // Save compressed data on mem_buffer // note: FreeImage_AquireMemory allocates space for aux_mem_buffer): // From 4c558ea49a4f27d07e46db5243db98655e698a27 Mon Sep 17 00:00:00 2001 From: arturo Date: Fri, 8 Jul 2011 12:40:11 +0200 Subject: [PATCH 6/7] _DeployExamples: fix refactor ofFilePath:getFilename -> getFileName --- apps/devApps/_DeployExamples/src/testApp.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/devApps/_DeployExamples/src/testApp.cpp b/apps/devApps/_DeployExamples/src/testApp.cpp index 1f3457710f9..bc896019dfa 100644 --- a/apps/devApps/_DeployExamples/src/testApp.cpp +++ b/apps/devApps/_DeployExamples/src/testApp.cpp @@ -471,7 +471,7 @@ void addAddonsFromInstallXML(string addonPath, string projectFolder, string xcod int numFolders = xml.getNumTags("folder"); for(int k = 0; k < numFolders; k++){ string folderPath = xml.getAttribute("folder", "name", "null", k); - string folderName = ofFilePath::getFilename(folderPath); + string folderName = ofFilePath::getFileName(folderPath); cout << "adding folder folderName: " << folderName << endl; @@ -487,7 +487,7 @@ void addAddonsFromInstallXML(string addonPath, string projectFolder, string xcod for(int d = 0; d < numFiles; d++){ filePaths.push_back( xml.getValue("file", "null", d) ); - fileNames.push_back( ofFilePath::getFilename( filePaths.back() ) ); + fileNames.push_back( ofFilePath::getFileName( filePaths.back() ) ); hashes.push_back( getHash(filePaths.back()) ); cout << " adding " << filePaths.back() << " " << fileNames.back() << " " << hashes.back() << endl; @@ -956,4 +956,4 @@ void testApp::gotMessage(ofMessage msg){ //-------------------------------------------------------------- void testApp::dragEvent(ofDragInfo dragInfo){ -} \ No newline at end of file +} From 84fe3dc2b4aae3a1f300b7f7ff96cd629a3b37a3 Mon Sep 17 00:00:00 2001 From: arturo Date: Fri, 8 Jul 2011 13:02:28 +0200 Subject: [PATCH 7/7] android: fix checks on network, were throwing NullPException sometimes --- .../src/cc/openframeworks/OFAndroid.java | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/addons/ofxAndroid/ofAndroidLib/src/cc/openframeworks/OFAndroid.java b/addons/ofxAndroid/ofAndroidLib/src/cc/openframeworks/OFAndroid.java index 97feef3671c..240c469fec5 100644 --- a/addons/ofxAndroid/ofAndroidLib/src/cc/openframeworks/OFAndroid.java +++ b/addons/ofxAndroid/ofAndroidLib/src/cc/openframeworks/OFAndroid.java @@ -266,22 +266,32 @@ static public String getStringRes(String idStr){ } static public boolean isOnline(){ - ConnectivityManager conMgr = (ConnectivityManager)ofActivity.getSystemService(Context.CONNECTIVITY_SERVICE); - - return conMgr!=null && ( conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED - || conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED ) ; + try{ + ConnectivityManager conMgr = (ConnectivityManager)ofActivity.getSystemService(Context.CONNECTIVITY_SERVICE); + return conMgr!=null && ( conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED + || conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED ) ; + }catch(Exception e){ + return false; + } } static public boolean isWifiOnline(){ - ConnectivityManager conMgr = (ConnectivityManager)ofActivity.getSystemService(Context.CONNECTIVITY_SERVICE); - - return conMgr!=null && ( conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED ) ; + try{ + ConnectivityManager conMgr = (ConnectivityManager)ofActivity.getSystemService(Context.CONNECTIVITY_SERVICE); + return conMgr!=null && ( conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED ) ; + }catch(Exception e){ + return false; + } } static public boolean isMobileOnline(){ - ConnectivityManager conMgr = (ConnectivityManager)ofActivity.getSystemService(Context.CONNECTIVITY_SERVICE); - - return conMgr!=null && ( conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED ) ; + try{ + ConnectivityManager conMgr = (ConnectivityManager)ofActivity.getSystemService(Context.CONNECTIVITY_SERVICE); + + return conMgr!=null && ( conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED ) ; + }catch(Exception e){ + return false; + } }