是否可以从XAML应用程序创建新的CoreWindow用作DirectX交换链?

时间:2019-05-02 04:27:23

标签: xaml directx winrt-xaml c++-winrt

我需要从XAML应用程序内部创建一个新的 private void askForPermission(String permission, Integer requestCode) { if (ContextCompat.checkSelfPermission(Main2Activity.this, permission) != PackageManager.PERMISSION_GRANTED) { // Should we show an explanation? if (ActivityCompat.shouldShowRequestPermissionRationale(Main2Activity.this, permission)) { //This is called if user has denied the permission before //In this case I am just asking the permission again ActivityCompat.requestPermissions(Main2Activity.this, new String[]{permission}, requestCode); } else { deviceSetting(getApplicationContext()); ActivityCompat.requestPermissions(Main2Activity.this, new String[]{permission}, requestCode); } } else { deviceSetting(getApplicationContext()); Toast.makeText(this, "" + permission + " is already granted.", Toast.LENGTH_SHORT).show(); } } private void deviceSetting(Context context) { GoogleApiClient googleApiClient = new GoogleApiClient.Builder(context) .addApi(LocationServices.API).build(); googleApiClient.connect(); LocationRequest locationRequest = LocationRequest.create(); locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); locationRequest.setInterval(10000); locationRequest.setFastestInterval(10000 / 2); LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().addLocationRequest(locationRequest); builder.setAlwaysShow(true); PendingResult<LocationSettingsResult> result = LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build()); result.setResultCallback(new ResultCallback<LocationSettingsResult>() { @Override public void onResult(LocationSettingsResult result) { final Status status = result.getStatus(); switch (status.getStatusCode()) { case LocationSettingsStatusCodes.SUCCESS: Log.e("tag", "All location settings are satisfied."); startLocationUpdates(); break; case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: Log.e("tag", "Location settings are not satisfied. Show the user a dialog to upgrade location settings "); try { // Show the dialog by calling startResolutionForResult(), and check the result // in onActivityResult(). status.startResolutionForResult(Main2Activity.this, REQUEST_PERMISSIONS_LOCATION_SETTINGS_REQUEST_CODE); } catch (IntentSender.SendIntentException e) { Log.e("tag", "PendingIntent unable to execute request."); } break; case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: Log.e(TAG, "Location settings are inadequate, and cannot be fixed here. Dialog not created."); break; } } }); } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (ActivityCompat.checkSelfPermission(this, permissions[0]) == PackageManager.PERMISSION_GRANTED) { Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show(); deviceSetting(getApplicationContext()); } else { saveData(latitude, longitude, "no"); Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show(); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d("onActivityResult()", Integer.toString(resultCode)); //final LocationSettingsStates states = LocationSettingsStates.fromIntent(data); switch (requestCode) { case REQUEST_PERMISSIONS_LOCATION_SETTINGS_REQUEST_CODE: switch (resultCode) { case Activity.RESULT_OK: { // All required changes were successfully made Toast.makeText(getApplicationContext(), "Location enabled by user!", Toast.LENGTH_LONG).show(); startLocationUpdates(); break; } case Activity.RESULT_CANCELED: { // The user was asked to change settings, but chose not to Toast.makeText(getApplicationContext(), "Location not enabled, user cancelled.", Toast.LENGTH_LONG).show(); break; } default: { break; } } break; } } protected void startLocationUpdates() { Log.e("inside", "startlocationupdate"); // Create the location request to start receiving updates mLocationRequest = new LocationRequest(); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); // mLocationRequest.setInterval(UPDATE_INTERVAL); /// mLocationRequest.setFastestInterval(FASTEST_INTERVAL); // Create LocationSettingsRequest object using location request LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder(); builder.addLocationRequest(mLocationRequest); LocationSettingsRequest locationSettingsRequest = builder.build(); Log.e("locationsettingsreuqest", String.valueOf(locationSettingsRequest)); // Check whether location settings are satisfied // https://developers.google.com/android/reference/com/google/android/gms/location/SettingsClient SettingsClient settingsClient = LocationServices.getSettingsClient(Main2Activity.this); settingsClient.checkLocationSettings(locationSettingsRequest); Log.e("locationsettingsreuqest", String.valueOf(settingsClient)); // new Google API SDK v11 uses getFusedLocationProviderClient(this) if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details return; } LocationServices.getFusedLocationProviderClient(getApplicationContext()).requestLocationUpdates(mLocationRequest, new LocationCallback() { @Override public void onLocationResult(LocationResult locationResult) { onLocationChanged(locationResult.getLastLocation()); } }, Looper.myLooper()); } public void onLocationChanged(Location location) { latitude = location.getLatitude(); longitude = location.getLongitude(); } ,因为我想使用CoreWindow为其分配交换链。

我不将IDXGIFactory2::CreateSwapChainForCoreWindowSwapchainPanel结合使用的原因是因为Nvidia Nsight之类的工具无法识别我的窗口。 PIX是唯一可以与IDXGIFactory2::CreateSwapChainForComposition一起使用的图形调试器。

0 个答案:

没有答案