Remove extra variables, and fix aspect ratio from GLSurfaceRenderer

This commit is contained in:
gabriel 2023-11-28 01:14:55 -04:00
commit 1cc4b648a2
5 changed files with 54 additions and 28 deletions

View file

@ -16,8 +16,8 @@ import java.util.ArrayList;
public class PandaGlRenderer implements GLSurfaceView.Renderer {
private final String romPath;
int screenWidth, screenHeight;
int screenTexture;
private int screenWidth, screenHeight;
private int screenTexture;
public int screenFbo;
PandaGlRenderer(String romPath) {
@ -25,7 +25,6 @@ public class PandaGlRenderer implements GLSurfaceView.Renderer {
this.romPath = romPath;
}
@Override
protected void finalize() throws Throwable {
if (screenTexture != 0) {
@ -68,10 +67,38 @@ public class PandaGlRenderer implements GLSurfaceView.Renderer {
public void onDrawFrame(GL10 unused) {
if (AlberDriver.HasRomLoaded()) {
AlberDriver.RunFrame(screenFbo);
int h = (int) ((screenWidth/400.0)*480);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glBindFramebuffer(GL_READ_FRAMEBUFFER, screenFbo);
glBlitFramebuffer(0, 0, 400, 480, 0, screenHeight-h, screenWidth, screenHeight, GL_COLOR_BUFFER_BIT, GL_LINEAR);
if (screenWidth > screenHeight) {
int topDisplayWidth = (int) ((screenHeight / 240.0) * 400);
int topDisplayHeight = screenHeight;
if (topDisplayWidth > (screenWidth*0.7)){
topDisplayWidth = (int) (screenWidth * 0.7);
topDisplayHeight = (int) ((topDisplayWidth/400.0)*240);
}
int bottomDisplayHeight = (int) (((screenWidth-topDisplayWidth)/320)*240);
int topDisplayY = screenHeight-topDisplayHeight;
int bottomDisplayY = screenHeight-bottomDisplayHeight;
glBlitFramebuffer(0, 240,
400, 480,
0, topDisplayY,
topDisplayWidth,topDisplayY+topDisplayHeight,
GL_COLOR_BUFFER_BIT, GL_LINEAR);
glBlitFramebuffer(
40, 0,
360, 240,
topDisplayWidth, bottomDisplayY,
screenWidth,bottomDisplayY+bottomDisplayHeight,
GL_COLOR_BUFFER_BIT, GL_LINEAR);
} else {
int h = (int) ((screenWidth / 400.0) * 480);
glBlitFramebuffer(0, 0, 400, 480, 0, screenHeight - h, screenWidth, screenHeight, GL_COLOR_BUFFER_BIT, GL_LINEAR);
}
}
}

View file

@ -2,13 +2,11 @@ package com.panda3ds.pandroid.view;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import com.panda3ds.pandroid.AlberDriver;
import com.panda3ds.pandroid.R;
import com.panda3ds.pandroid.utils.Constants;
import com.panda3ds.pandroid.view.controller.ControllerLayout;
import com.panda3ds.pandroid.view.controller.listeners.JoystickListener;
import com.panda3ds.pandroid.view.controller.nodes.Button;
import com.panda3ds.pandroid.view.controller.nodes.Joystick;

View file

@ -82,7 +82,7 @@ public class ControllerLayout extends RelativeLayout {
if ((!activeTouchEvents.containsKey(index))){
if (up)return;
ControllerNode touch = null;
ControllerNode node = null;
for (ControllerNode item: controllerNodes){
Vector2 pos = item.getPosition();
Vector2 size= item.getSize();
@ -90,12 +90,12 @@ public class ControllerLayout extends RelativeLayout {
float cx = (pos.x - globalPosition[0]);
float cy = (pos.y - globalPosition[1]);
if( x > cx && x < cx+size.x && y > cy && y < cy+size.y){
touch = item;
node = item;
break;
}
}
if (touch != null){
activeTouchEvents.put(index, touch);
if (node != null){
activeTouchEvents.put(index, node);
action = TouchEvent.ACTION_DOWN;
} else {
return;
@ -104,15 +104,15 @@ public class ControllerLayout extends RelativeLayout {
if (up) action = TouchEvent.ACTION_UP;
ControllerNode touch = activeTouchEvents.get(index);
Vector2 pos = touch.getPosition();
ControllerNode node = activeTouchEvents.get(index);
Vector2 pos = node.getPosition();
pos.x -= globalPosition[0];
pos.y -= globalPosition[1];
x -= pos.x;
y -= pos.y;
touch.onTouch(new TouchEvent(x,y,action));
node.onTouch(new TouchEvent(x,y,action));
if(up){
activeTouchEvents.remove(index);

View file

@ -19,7 +19,6 @@ import com.panda3ds.pandroid.view.controller.listeners.JoystickListener;
public class Joystick extends BasicControllerNode implements ControllerNode {
private float stick_x = 0;
private float stick_y = 0;
private float density = 0;
private int size_width = 0;
private int size_height= 0;
@ -43,7 +42,6 @@ public class Joystick extends BasicControllerNode implements ControllerNode {
private final Paint paint = new Paint();
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
@ -54,8 +52,6 @@ public class Joystick extends BasicControllerNode implements ControllerNode {
size_width = getWidth();
size_height = getHeight();
density = getResources().getDisplayMetrics().density;
int analogIconSize = size_width-getPaddingLeft();
float middleIconSize = analogIconSize / 2.0F;
@ -110,17 +106,17 @@ public class Joystick extends BasicControllerNode implements ControllerNode {
@Override
public void onTouch(TouchEvent event) {
float v = density * 75;
float middle = size_width/2.0F;
float x = event.getX();
float y = event.getY();
x = Math.max(0, Math.min(v*2, x));
y = Math.max(0, Math.min(v*2, y));
x = Math.max(0, Math.min(middle*2, x));
y = Math.max(0, Math.min(middle*2, y));
stick_x = ((x-v)/v);
stick_x = ((x-middle)/middle);
stick_y = ((y-v)/v);
stick_y = ((y-middle)/middle);
if (event.getAction() == TouchEvent.ACTION_UP){
stick_x = 0;
@ -130,6 +126,7 @@ public class Joystick extends BasicControllerNode implements ControllerNode {
if (joystickListener != null){
joystickListener.onJoystickAxisChange(this, stick_x, stick_y);
}
invalidate();
}
}

View file

@ -1,10 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="#0000"/>
<stroke android:color="#6FFF" android:width="1dp"/>
<corners android:radius="999dp"/>
<padding
android:left="10dp"
android:top="10dp"
@ -12,4 +9,11 @@
android:bottom="10dp"/>
</shape>
</item>
</selector>
<item>
<shape>
<solid android:color="#0000"/>
<stroke android:color="#6FFF" android:width="1dp"/>
<corners android:radius="999dp"/>
</shape>
</item>
</layer-list>