mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-08-04 15:18:52 +00:00
- Fix MainActivity.java crash on start.
- Separate MainActivity.java into two Classes: MainActivity.java and GameActivity - Implement post callback in GLRenderer.
This commit is contained in:
parent
25ba2393db
commit
367701b325
10 changed files with 123 additions and 53 deletions
|
@ -2,6 +2,12 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage"/>
|
||||
|
||||
<uses-feature
|
||||
android:required="true"
|
||||
android:glEsVersion="0x0030000"/>
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:dataExtractionRules="@xml/data_extraction_rules"
|
||||
|
@ -13,14 +19,16 @@
|
|||
android:theme="@style/Theme.Pandroid"
|
||||
tools:targetApi="31">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:name=".app.MainActivity"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".app.GameActivity"
|
||||
android:configChanges="screenSize|screenLayout|orientation|density|uiMode">
|
||||
</activity>
|
||||
</application>
|
||||
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage"/>
|
||||
</manifest>
|
|
@ -0,0 +1,6 @@
|
|||
package com.panda3ds.pandroid;
|
||||
|
||||
public class C {
|
||||
public static final String EXTRA_PATH = "path";
|
||||
public static final String LOG_TAG = "Alber";
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
package com.panda3ds.pandroid.app;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
public class BaseActivity extends AppCompatActivity {
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package com.panda3ds.pandroid.app;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.panda3ds.pandroid.AlberDriver;
|
||||
import com.panda3ds.pandroid.C;
|
||||
import com.panda3ds.pandroid.app.BaseActivity;
|
||||
import com.panda3ds.pandroid.view.PandaGlSurfaceView;
|
||||
|
||||
public class GameActivity extends BaseActivity {
|
||||
private PandaGlSurfaceView pandaSurface;
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
pandaSurface = new PandaGlSurfaceView(this);;
|
||||
setContentView(pandaSurface);
|
||||
|
||||
Intent intent = getIntent();
|
||||
if(!intent.hasExtra(C.EXTRA_PATH)){
|
||||
Toast.makeText(this, "INVALID ROM PATH", Toast.LENGTH_LONG).show();
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
|
||||
pandaSurface.getRenderer().postDrawEvent(()->{
|
||||
String path = intent.getStringExtra(C.EXTRA_PATH);
|
||||
Log.i(C.LOG_TAG,"Try load ROM: "+path);
|
||||
AlberDriver.LoadRom(path);
|
||||
});
|
||||
}
|
||||
}
|
|
@ -1,24 +1,20 @@
|
|||
package com.panda3ds.pandroid;
|
||||
package com.panda3ds.pandroid.app;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import static android.provider.Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.view.WindowInsets;
|
||||
import android.view.View;
|
||||
import android.os.Environment;
|
||||
import android.widget.Toast;
|
||||
import android.widget.FrameLayout;
|
||||
import com.panda3ds.pandroid.PathUtils;
|
||||
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import com.panda3ds.pandroid.C;
|
||||
import com.panda3ds.pandroid.R;
|
||||
import com.panda3ds.pandroid.utils.PathUtils;
|
||||
|
||||
public class MainActivity extends AppCompatActivity {
|
||||
|
||||
PandaGlSurfaceView glView;
|
||||
|
||||
private static final int PICK_3DS_ROM = 2;
|
||||
|
||||
private void openFile() {
|
||||
|
@ -31,22 +27,18 @@ public class MainActivity extends AppCompatActivity {
|
|||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
if (!Environment.isExternalStorageManager()) {
|
||||
Intent intent = new Intent(ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
glView = new PandaGlSurfaceView(this);
|
||||
setContentView(glView);
|
||||
FloatingActionButton fab = new FloatingActionButton(this);
|
||||
fab.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
openFile();
|
||||
}
|
||||
|
||||
setContentView(R.layout.activity_main);
|
||||
|
||||
findViewById(R.id.load_rom).setOnClickListener(v->{
|
||||
openFile();
|
||||
});
|
||||
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(200, 200);
|
||||
addContentView(fab, params);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -55,13 +47,10 @@ public class MainActivity extends AppCompatActivity {
|
|||
if (resultCode == RESULT_OK) {
|
||||
String path = PathUtils.getPath(getApplicationContext(), data.getData());
|
||||
Toast.makeText(getApplicationContext(), "pandroid opening " + path, Toast.LENGTH_LONG).show();
|
||||
glView.queueEvent(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
AlberDriver.LoadRom(path);
|
||||
}
|
||||
});
|
||||
startActivity(new Intent(this, GameActivity.class)
|
||||
.putExtra(C.EXTRA_PATH, path));
|
||||
}
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package com.panda3ds.pandroid;
|
||||
package com.panda3ds.pandroid.utils;
|
||||
|
||||
import android.content.ContentUris;
|
||||
import android.content.Context;
|
|
@ -1,4 +1,4 @@
|
|||
package com.panda3ds.pandroid;
|
||||
package com.panda3ds.pandroid.view;
|
||||
|
||||
import javax.microedition.khronos.egl.EGLConfig;
|
||||
import javax.microedition.khronos.opengles.GL10;
|
||||
|
@ -10,11 +10,16 @@ import android.opengl.GLSurfaceView;
|
|||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
|
||||
import com.panda3ds.pandroid.AlberDriver;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
import java.nio.FloatBuffer;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class PandaGlRenderer implements GLSurfaceView.Renderer {
|
||||
|
||||
private final ArrayList<Runnable> events = new ArrayList<>();
|
||||
int screenWidth, screenHeight;
|
||||
int screenTexture;
|
||||
public int screenFbo;
|
||||
|
@ -23,6 +28,7 @@ public class PandaGlRenderer implements GLSurfaceView.Renderer {
|
|||
super();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void finalize() throws Throwable {
|
||||
if (screenTexture != 0) {
|
||||
|
@ -61,6 +67,10 @@ public class PandaGlRenderer implements GLSurfaceView.Renderer {
|
|||
AlberDriver.Initialize();
|
||||
}
|
||||
|
||||
public void postDrawEvent(Runnable callback){
|
||||
events.add(callback);
|
||||
}
|
||||
|
||||
public void onDrawFrame(GL10 unused) {
|
||||
if (AlberDriver.HasRomLoaded()) {
|
||||
AlberDriver.RunFrame(screenFbo);
|
||||
|
@ -68,6 +78,13 @@ public class PandaGlRenderer implements GLSurfaceView.Renderer {
|
|||
glBindFramebuffer(GL_READ_FRAMEBUFFER, screenFbo);
|
||||
glBlitFramebuffer(0, 0, 400, 480, 0, 0, screenWidth, screenHeight, GL_COLOR_BUFFER_BIT, GL_LINEAR);
|
||||
}
|
||||
|
||||
int count = events.size();
|
||||
while (count > 0){
|
||||
events.get(0).run();
|
||||
events.remove(0);
|
||||
count--;
|
||||
}
|
||||
}
|
||||
|
||||
public void onSurfaceChanged(GL10 unused, int width, int height) {
|
|
@ -1,11 +1,7 @@
|
|||
package com.panda3ds.pandroid;
|
||||
package com.panda3ds.pandroid.view;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.opengl.GLSurfaceView;
|
||||
import android.util.DisplayMetrics;
|
||||
|
||||
import com.panda3ds.pandroid.PandaGlRenderer;
|
||||
|
||||
public class PandaGlSurfaceView extends GLSurfaceView {
|
||||
final PandaGlRenderer renderer;
|
||||
|
@ -16,4 +12,8 @@ public class PandaGlSurfaceView extends GLSurfaceView {
|
|||
renderer = new PandaGlRenderer();
|
||||
setRenderer(renderer);
|
||||
}
|
||||
|
||||
public PandaGlRenderer getRenderer() {
|
||||
return renderer;
|
||||
}
|
||||
}
|
|
@ -1,18 +1,22 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<FrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".MainActivity">
|
||||
tools:context=".app.MainActivity">
|
||||
|
||||
<TextView
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="bottom|end"
|
||||
android:padding="17dp">
|
||||
<Button
|
||||
android:id="@+id/load_rom"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Hello World!"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
android:layout_height="50dp"
|
||||
android:text="@string/load_rom"/>
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</FrameLayout>
|
|
@ -1,3 +1,4 @@
|
|||
<resources>
|
||||
<string name="app_name">pandroid</string>
|
||||
<string name="load_rom">Load ROM</string>
|
||||
</resources>
|
Loading…
Add table
Add a link
Reference in a new issue