mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-02-21 18:39:57 +00:00
Merge branch 'master' of https://github.com/DHrpcs3/rpcs3
This commit is contained in:
commit
3fdeb72999
@ -326,9 +326,9 @@ void GLFragmentDecompilerThread::Task()
|
|||||||
case 0x02: SetDst("($0 * $1)"); break; //MUL
|
case 0x02: SetDst("($0 * $1)"); break; //MUL
|
||||||
case 0x03: SetDst("($0 + $1)"); break; //ADD
|
case 0x03: SetDst("($0 + $1)"); break; //ADD
|
||||||
case 0x04: SetDst("($0 * $1 + $2)"); break; //MAD
|
case 0x04: SetDst("($0 * $1 + $2)"); break; //MAD
|
||||||
case 0x05: SetDst("vec2(dot($0.xyz, $1.xyz), 0).xxxx"); break; // DP3
|
case 0x05: SetDst("vec4(dot($0.xyz, $1.xyz))"); break; // DP3
|
||||||
case 0x06: SetDst("vec2(dot($0, $1), 0).xxxx"); break; // DP4
|
case 0x06: SetDst("vec4(dot($0, $1))"); break; // DP4
|
||||||
case 0x07: SetDst("vec2(distance($0, $1), 0).xxxx"); break; // DST
|
case 0x07: SetDst("vec4(distance($0, $1))"); break; // DST
|
||||||
case 0x08: SetDst("min($0, $1)"); break; // MIN
|
case 0x08: SetDst("min($0, $1)"); break; // MIN
|
||||||
case 0x09: SetDst("max($0, $1)"); break; // MAX
|
case 0x09: SetDst("max($0, $1)"); break; // MAX
|
||||||
case 0x0a: SetDst("vec4(lessThan($0, $1))"); break; // SLT
|
case 0x0a: SetDst("vec4(lessThan($0, $1))"); break; // SLT
|
||||||
@ -379,7 +379,7 @@ void GLFragmentDecompilerThread::Task()
|
|||||||
//case 0x35: break; // BEMLUM
|
//case 0x35: break; // BEMLUM
|
||||||
case 0x36: SetDst("($0 - 2.0 * $1 * dot($0, $1))"); break; // RFL (reflection vector)
|
case 0x36: SetDst("($0 - 2.0 * $1 * dot($0, $1))"); break; // RFL (reflection vector)
|
||||||
//case 0x37: break; // TIMESWTEX
|
//case 0x37: break; // TIMESWTEX
|
||||||
case 0x38: SetDst("vec2(dot($0.xy, $1.xy)).xxxx"); break; // DP2
|
case 0x38: SetDst("vec4(dot($0.xy, $1.xy))"); break; // DP2
|
||||||
case 0x39: SetDst("normalize($0.xyz)"); break; // NRM
|
case 0x39: SetDst("normalize($0.xyz)"); break; // NRM
|
||||||
case 0x3a: SetDst("($0 / $1)"); break; // DIV
|
case 0x3a: SetDst("($0 / $1)"); break; // DIV
|
||||||
case 0x3b: SetDst("($0 / sqrt($1))"); break; // DIVSQ
|
case 0x3b: SetDst("($0 / sqrt($1))"); break; // DIVSQ
|
||||||
|
@ -522,10 +522,10 @@ void GLVertexDecompilerThread::Task()
|
|||||||
case 0x02: SetDSTVec("($0 * $1)"); break; //MUL
|
case 0x02: SetDSTVec("($0 * $1)"); break; //MUL
|
||||||
case 0x03: SetDSTVec("($0 + $2)"); break; //ADD
|
case 0x03: SetDSTVec("($0 + $2)"); break; //ADD
|
||||||
case 0x04: SetDSTVec("($0 * $1 + $2)"); break; //MAD
|
case 0x04: SetDSTVec("($0 * $1 + $2)"); break; //MAD
|
||||||
case 0x05: SetDSTVec("vec2(dot($0.xyz, $1.xyz), 0.0).xxxx"); break; //DP3
|
case 0x05: SetDSTVec("vec4(dot($0.xyz, $1.xyz))"); break; //DP3
|
||||||
case 0x06: SetDSTVec("vec2(dot(vec4($0.xyz, 1.0), $1), 0.0).xxxx"); break; //DPH
|
case 0x06: SetDSTVec("vec4(dot(vec4($0.xyz, 1.0), $1))"); break; //DPH
|
||||||
case 0x07: SetDSTVec("vec2(dot($0, $1), 0.0).xxxx"); break; //DP4
|
case 0x07: SetDSTVec("vec4(dot($0, $1))"); break; //DP4
|
||||||
case 0x08: SetDSTVec("vec2(distance($0, $1), 0.0).xxxx"); break; //DST
|
case 0x08: SetDSTVec("vec4(distance($0, $1))"); break; //DST
|
||||||
case 0x09: SetDSTVec("min($0, $1)"); break; //MIN
|
case 0x09: SetDSTVec("min($0, $1)"); break; //MIN
|
||||||
case 0x0a: SetDSTVec("max($0, $1)"); break; //MAX
|
case 0x0a: SetDSTVec("max($0, $1)"); break; //MAX
|
||||||
case 0x0b: SetDSTVec("vec4(lessThan($0, $1))"); break; //SLT
|
case 0x0b: SetDSTVec("vec4(lessThan($0, $1))"); break; //SLT
|
||||||
|
@ -10,6 +10,37 @@
|
|||||||
|
|
||||||
u32 methodRegisters[0xffff];
|
u32 methodRegisters[0xffff];
|
||||||
|
|
||||||
|
void RSXThread::nativeRescale(float width, float height)
|
||||||
|
{
|
||||||
|
switch (Ini.GSResolution.GetValue())
|
||||||
|
{
|
||||||
|
case 1: // 1920x1080 window size
|
||||||
|
m_width_scale = 1920 / width * 2.0f;
|
||||||
|
m_height_scale = 1080 / height * 2.0f;
|
||||||
|
m_width = 1920;
|
||||||
|
m_height = 1080;
|
||||||
|
break;
|
||||||
|
case 2: // 1280x720 window size
|
||||||
|
m_width_scale = 1280 / width * 2.0f;
|
||||||
|
m_height_scale = 720 / height * 2.0f;
|
||||||
|
m_width = 1280;
|
||||||
|
m_height = 720;
|
||||||
|
break;
|
||||||
|
case 4: // 720x480 window size
|
||||||
|
m_width_scale = 720 / width * 2.0f;
|
||||||
|
m_height_scale = 480 / height * 2.0f;
|
||||||
|
m_width = 720;
|
||||||
|
m_height = 480;
|
||||||
|
break;
|
||||||
|
case 5: // 720x576 window size
|
||||||
|
m_width_scale = 720 / width * 2.0f;
|
||||||
|
m_height_scale = 576 / height * 2.0f;
|
||||||
|
m_width = 720;
|
||||||
|
m_height = 576;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
u32 GetAddress(u32 offset, u8 location)
|
u32 GetAddress(u32 offset, u8 location)
|
||||||
{
|
{
|
||||||
switch(location)
|
switch(location)
|
||||||
@ -1338,60 +1369,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3
|
|||||||
m_width = m_buffer_width = re(buffers[m_gcm_current_buffer].width);
|
m_width = m_buffer_width = re(buffers[m_gcm_current_buffer].width);
|
||||||
m_height = m_buffer_height = re(buffers[m_gcm_current_buffer].height);
|
m_height = m_buffer_height = re(buffers[m_gcm_current_buffer].height);
|
||||||
|
|
||||||
// Rescale native 1080p to fit 720p/480p window size
|
// Rescale native resolution to fit 1080p/720p/480p/576p window size
|
||||||
if (m_buffer_width == 1920 && m_buffer_height == 1080)
|
nativeRescale((float)m_buffer_width, (float)m_buffer_height);
|
||||||
{
|
|
||||||
switch (Ini.GSResolution.GetValue())
|
|
||||||
{
|
|
||||||
case 2: // 1280x720 window size
|
|
||||||
m_width_scale = m_height_scale = 1.33f;
|
|
||||||
m_width = 1280;
|
|
||||||
m_height = 720;
|
|
||||||
break;
|
|
||||||
case 4: // 720x480 window size
|
|
||||||
m_width_scale = 0.75f;
|
|
||||||
m_height_scale = 0.88f;
|
|
||||||
m_width = 720;
|
|
||||||
m_height = 480;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Rescale native 720p to fit 480p window size
|
|
||||||
if (m_buffer_width == 1280 && m_buffer_height == 720)
|
|
||||||
{
|
|
||||||
if (Ini.GSResolution.GetValue() == 4) // 720x480 window size
|
|
||||||
{
|
|
||||||
m_width_scale = 1.125f;
|
|
||||||
m_height_scale = 1.33f;
|
|
||||||
m_width = 720;
|
|
||||||
m_height = 480;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Rescale native 960x540 to fit 1080p/720p/480p window size
|
|
||||||
if (m_buffer_width == 960 && m_buffer_height == 540)
|
|
||||||
{
|
|
||||||
switch (Ini.GSResolution.GetValue())
|
|
||||||
{
|
|
||||||
case 1:// 1920x1080 window size
|
|
||||||
m_width_scale = m_height_scale = 4.0f;
|
|
||||||
m_width = 1980;
|
|
||||||
m_height = 1080;
|
|
||||||
break;
|
|
||||||
case 2: // 1280x720 window size
|
|
||||||
m_width_scale = m_height_scale = 2.66f;
|
|
||||||
m_width = 1280;
|
|
||||||
m_height = 720;
|
|
||||||
break;
|
|
||||||
case 4: // 720x480 window size
|
|
||||||
m_width_scale = 1.5f;
|
|
||||||
m_height_scale = 1.77f;
|
|
||||||
m_width = 720;
|
|
||||||
m_height = 480;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -595,7 +595,8 @@ protected:
|
|||||||
|
|
||||||
u32 OutOfArgsCount(const uint x, const u32 cmd, const u32 count);
|
u32 OutOfArgsCount(const uint x, const u32 cmd, const u32 count);
|
||||||
void DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u32 count);
|
void DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u32 count);
|
||||||
|
void nativeRescale(float width, float height);
|
||||||
|
|
||||||
virtual void OnInit() = 0;
|
virtual void OnInit() = 0;
|
||||||
virtual void OnInitThread() = 0;
|
virtual void OnInitThread() = 0;
|
||||||
virtual void OnExitThread() = 0;
|
virtual void OnExitThread() = 0;
|
||||||
|
@ -232,8 +232,6 @@ static const CellVideoOutResolution ResolutionTable[] =
|
|||||||
{1440, 1080}, //11 - 6
|
{1440, 1080}, //11 - 6
|
||||||
{1280, 1080}, //12 - 7
|
{1280, 1080}, //12 - 7
|
||||||
{960, 1080}, //13 - 8
|
{960, 1080}, //13 - 8
|
||||||
{960, 540}, //14 - 9 (Terraria [BLES01938])
|
|
||||||
{1024,768}, //15 - 10 (Eskiss Homebrew)
|
|
||||||
};
|
};
|
||||||
|
|
||||||
inline static u32 ResolutionIdToNum(u32 id)
|
inline static u32 ResolutionIdToNum(u32 id)
|
||||||
@ -254,29 +252,25 @@ inline static u32 ResolutionIdToNum(u32 id)
|
|||||||
6, //11
|
6, //11
|
||||||
7, //12
|
7, //12
|
||||||
8, //13
|
8, //13
|
||||||
9, //14
|
|
||||||
10, //15
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return id <= 15 ? res[id] : 0;
|
return id <= 13 ? res[id] : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline static u32 ResolutionNumToId(u32 num)
|
inline static u32 ResolutionNumToId(u32 num)
|
||||||
{
|
{
|
||||||
static const u32 res[] =
|
static const u32 res[] =
|
||||||
{
|
{
|
||||||
0,
|
0, //0
|
||||||
1,
|
1, //1
|
||||||
2,
|
2, //2
|
||||||
4,
|
4, //3
|
||||||
5,
|
5, //4
|
||||||
10,
|
10, //5
|
||||||
11,
|
11, //6
|
||||||
12,
|
12, //7
|
||||||
13,
|
13, //8
|
||||||
14,
|
|
||||||
15,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return num <= 10 ? res[num] : 0;
|
return num <= 8 ? res[num] : 0;
|
||||||
}
|
}
|
||||||
|
@ -1,88 +1,56 @@
|
|||||||
#include "glviewer.h"
|
#include "glviewer.h"
|
||||||
#include <QQuickWindow>
|
#include <QQuickWindow>
|
||||||
#include <QOpenGLContext>
|
#include <QOpenGLContext>
|
||||||
#include <QSGSimpleTextureNode>
|
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
|
|
||||||
GLViewer::GLViewer(QQuickItem* parent)
|
// This class hooks beforeRendering and allows us to draw a scene and reset GL state.
|
||||||
: QQuickItem(parent),
|
// In future, we will likely want to manually control the update rate.
|
||||||
m_timerID(0),
|
|
||||||
m_fbo(0)
|
|
||||||
{
|
|
||||||
this->setFlag(QQuickItem::ItemHasContents);
|
|
||||||
}
|
|
||||||
|
|
||||||
GLViewer::~GLViewer()
|
void GLRenderer::paint() {
|
||||||
{
|
// Do GL here
|
||||||
this->cleanup();
|
glViewport(0, 0, m_viewportSize.width(), m_viewportSize.height());
|
||||||
}
|
|
||||||
|
|
||||||
void GLViewer::timerEvent(QTimerEvent* evt)
|
|
||||||
{
|
|
||||||
if (evt && evt->timerId() == m_timerID)
|
|
||||||
this->update();
|
|
||||||
}
|
|
||||||
|
|
||||||
QSGNode* GLViewer::updatePaintNode(QSGNode* node, UpdatePaintNodeData* data)
|
|
||||||
{
|
|
||||||
QSGSimpleTextureNode* textureNode = static_cast<QSGSimpleTextureNode*>(node);
|
|
||||||
if (!textureNode)
|
|
||||||
textureNode = new QSGSimpleTextureNode();
|
|
||||||
// Push Qt state.
|
|
||||||
glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS);
|
|
||||||
glPushAttrib(GL_ALL_ATTRIB_BITS);
|
|
||||||
glMatrixMode(GL_TEXTURE);
|
|
||||||
glPushMatrix();
|
|
||||||
glLoadIdentity();
|
|
||||||
glMatrixMode(GL_PROJECTION);
|
|
||||||
glPushMatrix();
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
|
||||||
glPushMatrix();
|
|
||||||
|
|
||||||
glShadeModel(GL_FLAT);
|
|
||||||
glDisable(GL_CULL_FACE);
|
|
||||||
glDisable(GL_LIGHTING);
|
|
||||||
glDisable(GL_STENCIL_TEST);
|
|
||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
|
// Draw blue to the window to show that we work
|
||||||
|
glClearColor(0.2, 0, 0.8, 1);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||||
|
// Put the GL state back to how it was in case it makes SceneGraph angry
|
||||||
|
((QQuickWindow*)sender())->resetOpenGLState();
|
||||||
|
}
|
||||||
|
|
||||||
delete m_fbo;
|
GLViewer::GLViewer()
|
||||||
m_fbo = 0;
|
: m_renderer(0)
|
||||||
int width = this->width();
|
{
|
||||||
int height = this->height();
|
connect(this, SIGNAL(windowChanged(QQuickWindow*)), this, SLOT(handleWindowChanged(QQuickWindow*)));
|
||||||
if (width && height) {
|
}
|
||||||
m_fbo = new QOpenGLFramebufferObject(width, height);
|
|
||||||
textureNode->setTexture(this->window()->createTextureFromId(m_fbo->texture(), m_fbo->size()));
|
void GLViewer::handleWindowChanged(QQuickWindow *win)
|
||||||
|
{
|
||||||
|
if (win) {
|
||||||
|
connect(win, SIGNAL(beforeSynchronizing()), this, SLOT(sync()), Qt::DirectConnection);
|
||||||
|
connect(win, SIGNAL(sceneGraphInvalidated()), this, SLOT(cleanup()), Qt::DirectConnection);
|
||||||
|
// We will take over from here
|
||||||
|
win->setClearBeforeRendering(false);
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
{
|
|
||||||
textureNode->setTexture(this->window()->createTextureFromId(0, QSize(0,0)));
|
void GLViewer::sync()
|
||||||
|
{
|
||||||
|
if (!m_renderer) {
|
||||||
|
m_renderer = new GLRenderer();
|
||||||
|
connect(window(), SIGNAL(beforeRendering()), m_renderer, SLOT(paint()), Qt::DirectConnection);
|
||||||
}
|
}
|
||||||
textureNode->setRect(this->boundingRect());
|
m_renderer->setViewportSize(window()->size() * window()->devicePixelRatio());
|
||||||
|
|
||||||
if (m_fbo) {
|
|
||||||
m_fbo->bind();
|
|
||||||
}
|
|
||||||
// Restore (pop) Qt state.
|
|
||||||
glMatrixMode(GL_TEXTURE);
|
|
||||||
glPopMatrix();
|
|
||||||
glMatrixMode(GL_PROJECTION);
|
|
||||||
glPopMatrix();
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
|
||||||
glPopMatrix();
|
|
||||||
glPopAttrib();
|
|
||||||
glPopClientAttrib();
|
|
||||||
|
|
||||||
if (!m_timerID)
|
|
||||||
m_timerID = this->startTimer(16);
|
|
||||||
|
|
||||||
return textureNode;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLViewer::cleanup() {
|
void GLViewer::cleanup() {
|
||||||
this->killTimer(m_timerID);
|
if (m_renderer) {
|
||||||
m_timerID = 0;
|
delete m_renderer;
|
||||||
delete m_fbo;
|
m_renderer = 0;
|
||||||
m_fbo = nullptr;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,23 +1,35 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <QQuickItem>
|
#include <QQuickItem>
|
||||||
#include <QOpenGLFramebufferObject>
|
|
||||||
|
class GLRenderer : public QObject {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
GLRenderer() { }
|
||||||
|
|
||||||
|
void setViewportSize(const QSize &size) { m_viewportSize = size; }
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void paint();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QSize m_viewportSize;
|
||||||
|
};
|
||||||
|
|
||||||
class GLViewer : public QQuickItem
|
class GLViewer : public QQuickItem
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
GLViewer(QQuickItem* parent = 0);
|
GLViewer();
|
||||||
virtual ~GLViewer();
|
~GLViewer() { cleanup(); }
|
||||||
|
|
||||||
protected:
|
public slots:
|
||||||
QSGNode* updatePaintNode(QSGNode* old, UpdatePaintNodeData* data);
|
void sync();
|
||||||
void timerEvent(QTimerEvent* evt);
|
void cleanup();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void cleanup();
|
void handleWindowChanged(QQuickWindow *win);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int m_timerID;
|
GLRenderer *m_renderer;
|
||||||
QOpenGLFramebufferObject* m_fbo;
|
|
||||||
};
|
};
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Qt5.1+ frontend implementation for rpcs3. Known to work on Windows, Linux, Mac
|
// Qt5.2+ frontend implementation for rpcs3. Known to work on Windows, Linux, Mac
|
||||||
// by Sacha Refshauge
|
// by Sacha Refshauge
|
||||||
#include <QGuiApplication>
|
#include <QGuiApplication>
|
||||||
#include <QQmlApplicationEngine>
|
#include <QQmlApplicationEngine>
|
||||||
|
@ -1,21 +1,21 @@
|
|||||||
import QtQuick 2.1
|
import QtQuick 2.2
|
||||||
import QtQuick.Controls 1.0
|
import QtQuick.Controls 1.1
|
||||||
import QtQuick.Window 2.0
|
import QtQuick.Window 2.1
|
||||||
import GLViewer 1.0
|
import GLViewer 1.0
|
||||||
|
|
||||||
ApplicationWindow {
|
ApplicationWindow {
|
||||||
visible: true
|
visible: true
|
||||||
title: qsTr("RPCS3 Qt")
|
title: qsTr("RPCS3 Qt")
|
||||||
width: 500
|
width: Screen.desktopAvailableWidth / 2
|
||||||
height: 500
|
height: Screen.desktopAvailableHeight / 2
|
||||||
menuBar: MenuBar {
|
menuBar: MenuBar {
|
||||||
Menu {
|
Menu {
|
||||||
title: qsTr("&Boot")
|
title: qsTr("&Boot")
|
||||||
MenuItem { text: qsTr("&Boot Game...") }
|
MenuItem { text: qsTr("&Boot Game...") }
|
||||||
|
MenuItem { text: qsTr("&Boot Game and Start...") }
|
||||||
MenuItem { text: qsTr("&Install PKG") }
|
MenuItem { text: qsTr("&Install PKG") }
|
||||||
MenuSeparator {}
|
MenuSeparator {}
|
||||||
MenuItem { text: qsTr("Boot &ELF") }
|
MenuItem { text: qsTr("Boot &(S)ELF") }
|
||||||
MenuItem { text: qsTr("Boot &SELF") }
|
|
||||||
MenuSeparator {}
|
MenuSeparator {}
|
||||||
MenuItem { text: qsTr("E\&xit"); onTriggered: Qt.quit() }
|
MenuItem { text: qsTr("E\&xit"); onTriggered: Qt.quit() }
|
||||||
}
|
}
|
||||||
@ -30,6 +30,7 @@ ApplicationWindow {
|
|||||||
Menu {
|
Menu {
|
||||||
title: qsTr("&Config")
|
title: qsTr("&Config")
|
||||||
MenuItem { text: qsTr("&Settings") }
|
MenuItem { text: qsTr("&Settings") }
|
||||||
|
MenuItem { text: qsTr("&PAD Settings") }
|
||||||
MenuSeparator {}
|
MenuSeparator {}
|
||||||
MenuItem { text: qsTr("Virtual &File System Manager") }
|
MenuItem { text: qsTr("Virtual &File System Manager") }
|
||||||
MenuItem { text: qsTr("Virtual &HDD Manager") }
|
MenuItem { text: qsTr("Virtual &HDD Manager") }
|
||||||
@ -38,25 +39,25 @@ ApplicationWindow {
|
|||||||
title: qsTr("&Tools")
|
title: qsTr("&Tools")
|
||||||
MenuItem { text: qsTr("&ELF Compiler") }
|
MenuItem { text: qsTr("&ELF Compiler") }
|
||||||
MenuItem { text: qsTr("&Memory Viewer") }
|
MenuItem { text: qsTr("&Memory Viewer") }
|
||||||
|
MenuItem { text: qsTr("&RSX Debugger") }
|
||||||
}
|
}
|
||||||
Menu {
|
Menu {
|
||||||
title: qsTr("&Help")
|
title: qsTr("&Help")
|
||||||
MenuItem { text: qsTr("&About...") }
|
MenuItem { text: qsTr("&About...") }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GLViewer {
|
GLViewer {}
|
||||||
anchors.fill: parent
|
Rectangle {
|
||||||
Rectangle {
|
color: Qt.rgba(0, 0.5, 0.35);
|
||||||
color: Qt.rgba(0, 0.5, 0.35);
|
height: Math.round(parent.height / 2)
|
||||||
height: Math.round(parent.height / 2)
|
width: height
|
||||||
width: height
|
radius: width
|
||||||
radius: width
|
anchors.centerIn: parent
|
||||||
|
Text {
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
Text {
|
font.pixelSize: parent.height / 2
|
||||||
anchors.centerIn: parent
|
text: "Qt"
|
||||||
font.pixelSize: parent.height / 2
|
|
||||||
text: "Qt"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Qt5.1+ project for rpcs3. Works on Windows, Linux and Mac OSX
|
# Qt5.2+ project for rpcs3. Works on Windows, Linux and Mac OSX
|
||||||
QT += gui opengl quick
|
QT += gui opengl quick
|
||||||
CONFIG += c++11
|
CONFIG += c++11
|
||||||
|
|
||||||
|
@ -50,6 +50,10 @@
|
|||||||
#endif // _DEBUG
|
#endif // _DEBUG
|
||||||
#endif // MSVC_CRT_MEMLEAK_DETECTION
|
#endif // MSVC_CRT_MEMLEAK_DETECTION
|
||||||
|
|
||||||
|
// This header should be frontend-agnostic, so don't assume wx includes everything
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstring>
|
||||||
|
#include <cassert>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
typedef unsigned int uint;
|
typedef unsigned int uint;
|
||||||
@ -302,7 +306,9 @@ enum Status
|
|||||||
#include "Emu/FS/vfsStreamMemory.h"
|
#include "Emu/FS/vfsStreamMemory.h"
|
||||||
#include "Emu/FS/vfsFile.h"
|
#include "Emu/FS/vfsFile.h"
|
||||||
#include "Emu/FS/vfsDir.h"
|
#include "Emu/FS/vfsDir.h"
|
||||||
|
#ifndef QT_UI
|
||||||
#include "rpcs3.h"
|
#include "rpcs3.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#define _PRGNAME_ "RPCS3"
|
#define _PRGNAME_ "RPCS3"
|
||||||
#define _PRGVER_ "0.0.0.4"
|
#define _PRGVER_ "0.0.0.4"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user