/** * This is the main entry point of a native application that is using * android_native_app_glue. It runs in its own thread, with its own * event loop for receiving input events and doing other things. */ void android_main(struct android_app* state) { // Make sure glue isn't stripped. app_dummy(); LOGI("\n\n********************************"); LOGI(" STARTING SAMPLE"); LOGI("********************************\n\n"); // create an instance of my sample MySample *pSample = new MySample(); if (!pSample) { LOGI("Failed to allocate MySample"); return; } // Assign the sample back into the app state state->userData = pSample; state->onAppCmd = cput_handle_cmd; state->onInputEvent = CPUT_OGL::cput_handle_input; // We make the assumption we are running from the executable's dir in // the CPUT SampleStart directory or it won't be able to use the relative paths to find the default // resources cString ResourceDirectory; CPUTFileSystem::GetExecutableDirectory(&ResourceDirectory); // Different executable and assets locations on different OS'es. // Consistency should be maintained in all OS'es and API's. ResourceDirectory.append(GUI_LOCATION); // Initialize the system and give it the base CPUT resource directory (location of GUI images/etc) // For now, we assume it's a relative directory from the executable directory. Might make that resource // directory location an env variable/hardcoded later CPUTWindowAndroid::SetAppState(state); pSample->CPUTInitialize(ResourceDirectory); CPUTFileSystem::GetExecutableDirectory(&ResourceDirectory); // Different executable and assets locations on different OS'es. // Consistency should be maintained in all OS'es and API's. ResourceDirectory.append(SYSTEM_LOCATION); CPUTAssetLibrary *pAssetLibrary = CPUTAssetLibrary::GetAssetLibrary(); pAssetLibrary->SetSystemDirectoryName(ResourceDirectory); // start the main message loop pSample->CPUTMessageLoop(); // cleanup resources SAFE_DELETE(pSample); pSample = NULL; state->userData = NULL; }
void MySample::CreateResources() { CPUT_DX11::CreateResources(); int width, height; mpWindow->GetClientDimensions(&width, &height); CPUTAssetLibrary *pAssetLibrary = CPUTAssetLibrary::GetAssetLibrary(); std::string executableDirectory; std::string mediaDirectory; CPUTFileSystem::GetExecutableDirectory(&executableDirectory); CPUTFileSystem::ResolveAbsolutePathAndFilename(executableDirectory + "../../../../Media/", &mediaDirectory); pAssetLibrary->SetMediaDirectoryName(mediaDirectory + "gui_assets/"); pAssetLibrary->SetSystemDirectoryName(mediaDirectory + "System/"); pAssetLibrary->SetFontDirectoryName(mediaDirectory + "gui_assets/Font/"); CPUTGuiController *pGUI = CPUTGetGuiController(); pGUI->Initialize("guimaterial_dds_16", "arial_16.fnt"); pGUI->SetCallback(this); pAssetLibrary->SetMediaDirectoryName(mediaDirectory); mpShadowRenderTarget = CPUTRenderTargetDepth::Create(); mpShadowRenderTarget->CreateRenderTarget(std::string("$shadow_depth"), SHADOW_WIDTH_HEIGHT, SHADOW_WIDTH_HEIGHT, DXGI_FORMAT_D32_FLOAT); CPUTMaterial* pDebugMaterial = pAssetLibrary->GetMaterial("%sprite"); mpDebugSprite = CPUTSprite::Create(-1.0f, -1.0f, 0.5f, 0.5f, pDebugMaterial); SAFE_RELEASE(pDebugMaterial); mpCameraController = CPUTCameraControllerFPS::Create(); mpShadowCamera = CPUTCamera::Create(CPUT_ORTHOGRAPHIC); pGUI->Resize(width, height); }