mirror of
https://github.com/0ldsk00l/nestopia.git
synced 2024-06-22 06:02:26 -04:00
Compare commits
5 commits
88d33a150a
...
dfad201a92
Author | SHA1 | Date | |
---|---|---|---|
|
dfad201a92 | ||
|
8cecf3db31 | ||
|
b826d3d080 | ||
|
39431dfc09 | ||
|
a5e85c480e |
|
@ -20,12 +20,12 @@ libretro community. For libretro-specific issues, please use the libretro reposi
|
|||
https://github.com/libretro/nestopia
|
||||
|
||||
This project depends on the following libraries:
|
||||
FLTK 1.3, SDL2, libarchive, libsamplerate, zlib
|
||||
FLTK 1.3, SDL2, libarchive, libepoxy, libsamplerate, zlib
|
||||
|
||||
## Installing Dependencies
|
||||
Install dependencies required for building on Debian-based Linux distributions:
|
||||
```
|
||||
apt-get install build-essential autoconf autoconf-archive automake autotools-dev libfltk1.3-dev libsamplerate0-dev libsdl2-dev libarchive-dev zlib1g-dev
|
||||
apt-get install build-essential autoconf autoconf-archive automake autotools-dev libarchive-dev libepoxy-dev libfltk1.3-dev libsamplerate0-dev libsdl2-dev zlib1g-dev
|
||||
```
|
||||
|
||||
## FLTK Build
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <filesystem>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <regex>
|
||||
#include <set>
|
||||
|
||||
#include <epoxy/gl.h>
|
||||
|
@ -552,6 +553,23 @@ int NstGlArea::handle(int e) {
|
|||
inputmgr->event(xc, yc);
|
||||
inputmgr->event(Fl::event_button() + 1000, Fl::event_state() ? true : false);
|
||||
break;
|
||||
case FL_DND_ENTER: // return 1 for these events to accept Drag and Drop
|
||||
case FL_DND_DRAG:
|
||||
case FL_DND_RELEASE:
|
||||
return 1;
|
||||
case FL_PASTE: { // handle the actual drop event
|
||||
std::string filepath{std::regex_replace(std::string(Fl::event_text()),
|
||||
std::regex("\\n|file://"), "")};
|
||||
FltkUi::load_file(filepath.c_str());
|
||||
if (jgm->is_loaded()) {
|
||||
FltkUi::enable_menu();
|
||||
nstwin->label(jgm->get_gamename().c_str());
|
||||
jg_setup_audio();
|
||||
jg_setup_video();
|
||||
inputmgr->reassign();
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return Fl_Gl_Window::handle(e);
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
|
||||
void LogDriver::log(LogLevel level, std::string text) {
|
||||
if (level == LogLevel::OSD) {
|
||||
VideoRenderer::text_print(text.c_str(), 8, 212, 2, true);
|
||||
VideoRenderer::text_print(text.c_str(), 16, 212, 2, true);
|
||||
}
|
||||
else if (level == LogLevel::Info) {
|
||||
std::cout << text << std::endl;
|
||||
|
@ -52,7 +52,7 @@ void LogDriver::jg_log(int level, const char *fmt, ...) {
|
|||
FILE *fout = level == 1 ? stdout : stderr;
|
||||
|
||||
if (level == JG_LOG_SCR) {
|
||||
VideoRenderer::text_print(buffer, 8, 212, 2, true);
|
||||
VideoRenderer::text_print(buffer, 16, 212, 2, true);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -60,6 +60,6 @@ void LogDriver::jg_log(int level, const char *fmt, ...) {
|
|||
fflush(fout);
|
||||
|
||||
if (level == JG_LOG_ERR) {
|
||||
VideoRenderer::text_print(buffer, 8, 212, 2, true);
|
||||
VideoRenderer::text_print(buffer, 16, 212, 2, true);
|
||||
}
|
||||
}
|
||||
|
|
13
source/fltkui/version.h
Normal file
13
source/fltkui/version.h
Normal file
|
@ -0,0 +1,13 @@
|
|||
#if 0
|
||||
# this file is valid C, Makefile and shell
|
||||
# this is the only file required to update when changing the version
|
||||
|
||||
# https://semver.org/
|
||||
VERSION_MAJOR=1
|
||||
VERSION_MINOR=52
|
||||
VERSION_PATCH=1
|
||||
#endif
|
||||
|
||||
#ifndef JG_VERSION
|
||||
#define JG_VERSION "1.52.1"
|
||||
#endif
|
|
@ -87,8 +87,8 @@ VideoRendererLegacy::~VideoRendererLegacy() {
|
|||
}
|
||||
}
|
||||
|
||||
VideoRendererModern::VideoRendererModern(SettingManager& setmgr)
|
||||
: VideoRenderer(setmgr) {
|
||||
VideoRendererModern::VideoRendererModern(SettingManager& setmgr, const std::string ver)
|
||||
: VideoRenderer(setmgr), glslver(ver) {
|
||||
// Create Vertex Array Objects
|
||||
glGenVertexArrays(1, &vao[0]);
|
||||
glGenVertexArrays(1, &vao[1]);
|
||||
|
@ -281,9 +281,7 @@ const char* VideoRendererModern::shader_load(const char *filename) {
|
|||
GLchar *shader = (GLchar*)calloc(size + 1, sizeof(GLchar));
|
||||
|
||||
// Write version string into the buffer for the full shader source
|
||||
//snprintf(src, SIZE_GLSLVER, "%s", settings[VIDEO_API].val ?
|
||||
// "#version 300 es\n" : "#version 330 core\n");
|
||||
snprintf(src, SIZE_GLSLVER, "%s", "#version 330 core\n");
|
||||
snprintf(src, SIZE_GLSLVER, "%s", glslver.c_str());
|
||||
|
||||
if (!shader || !fread(shader, size, sizeof(GLchar), file)) {
|
||||
free(src);
|
||||
|
@ -807,7 +805,37 @@ void VideoManager::renderer_init() {
|
|||
renderer = new VideoRendererLegacy(setmgr);
|
||||
}
|
||||
else {
|
||||
renderer = new VideoRendererModern(setmgr);
|
||||
const std::string ver_core{"#version 130\n"};
|
||||
const std::string ver_es{"#version 300 es\n"};
|
||||
|
||||
// Build a test vertex shader to check version compatibility
|
||||
auto shadertest = [](const std::string ver) -> bool {
|
||||
GLuint nullshader = glCreateShader(GL_VERTEX_SHADER);
|
||||
std::string nullsrc = ver + "void main() {}\n";
|
||||
const char *c_str = nullsrc.c_str();
|
||||
|
||||
glShaderSource(nullshader, 1, &c_str, NULL);
|
||||
glCompileShader(nullshader);
|
||||
|
||||
GLint err;
|
||||
glGetShaderiv(nullshader, GL_COMPILE_STATUS, &err);
|
||||
glDeleteShader(nullshader);
|
||||
|
||||
return err != GL_FALSE;
|
||||
};
|
||||
|
||||
if (shadertest(ver_core)) {
|
||||
renderer = new VideoRendererModern(setmgr, ver_core);
|
||||
LogDriver::log(LogLevel::Debug, "OpenGL 3.1");
|
||||
}
|
||||
else if (shadertest(ver_es)) {
|
||||
renderer = new VideoRendererModern(setmgr, ver_es);
|
||||
LogDriver::log(LogLevel::Debug, "OpenGL ES 3.0");
|
||||
}
|
||||
else {
|
||||
renderer = new VideoRendererLegacy(setmgr);
|
||||
LogDriver::log(LogLevel::Warn, "Legacy OpenGL (Fallback)");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
#include <epoxy/gl.h>
|
||||
|
||||
#include "setmanager.h"
|
||||
|
@ -55,7 +57,7 @@ public:
|
|||
class VideoRendererModern : public VideoRenderer {
|
||||
public:
|
||||
VideoRendererModern() = delete;
|
||||
VideoRendererModern(SettingManager& setmgr);
|
||||
VideoRendererModern(SettingManager& setmgr, const std::string ver);
|
||||
~VideoRendererModern() override;
|
||||
|
||||
void ogl_render() override;
|
||||
|
@ -71,6 +73,8 @@ private:
|
|||
static constexpr size_t NUMPASSES = 2;
|
||||
#define SIZE_GLSLVER 20
|
||||
|
||||
std::string glslver{};
|
||||
|
||||
GLuint vao[NUMPASSES];
|
||||
GLuint vbo[NUMPASSES];
|
||||
GLuint shaderprog[NUMPASSES];
|
||||
|
|
Loading…
Reference in a new issue