Compare commits

...

2 Commits

Author SHA1 Message Date
Robin Hübner d8e79f0658 add version of gl debug callback for not-windows
also add note for differing signature, look into why this "works" on
windows and doesnt on linux later.. seems potentially bad
2018-12-16 02:07:52 +01:00
Robin Hübner 84decfb48f hack it 2018-10-05 16:54:38 +02:00
2 changed files with 55 additions and 20 deletions

View File

@ -214,7 +214,9 @@ struct Chip8Status {
Assembly ass_;
// loaded program
const(char)*[string] string_cache;
const (char)* loaded_program;
string loaded_program_str;
// mem editor
// MemoryEditor mem_editor_;
@ -265,8 +267,7 @@ struct Chip8Status {
import std.file : read;
loaded_program = "chip8_picture.ch8";
auto buf = read("programs/chip8_picture.ch8");
auto buf = read(loaded_program_str);
emu_.load(0x200, buf); // do ze load yes, will copy all the data in
ass_.setRange(cast(ushort)0x200, cast(ushort)(0x200 + cast(ushort)buf.length));
ass_.reset();
@ -311,8 +312,21 @@ struct Chip8Status {
resetShortcut();
}
if (igMenuItem("Load", "CTRL+L")) {
loadShortcut();
if (igBeginMenu("Load")) {
import std.file;
auto dir_iterator = dirEntries("", "*.ch8", SpanMode.breadth);
foreach (DirEntry e; dir_iterator) {
import std.string : toStringz;
const (char)* c_str;
if (!(e.name in string_cache)) c_str = toStringz(e.name);
else c_str = string_cache[e.name];
if (igMenuItem(c_str)) {
loaded_program_str = e.name;
loaded_program = c_str;
loadShortcut();
}
}
igEndMenu();
}
if (igMenuItem("Debug", "CTRL+D")) {

View File

@ -29,24 +29,45 @@ struct Window {
SDL_Window* window;
SDL_GLContext context;
extern(Windows) nothrow @nogc
static void openGLCallbackFunction(
GLenum source, GLenum type,
GLuint id, GLenum severity,
GLsizei length, const (GLchar)* message,
void* userParam)
{
version(Windows) {
extern(Windows) nothrow @nogc
static void openGLCallbackFunction(
GLenum source, GLenum type,
GLuint id, GLenum severity,
GLsizei length, const (GLchar)* message,
void* userParam)
{
printf("Message: %s \nSource: %s \nType: %s \nID: %d \nSeverity: %s\n\n",
message, to!(char*)(source), to!(char*)(type), id, to!(char*)(severity));
printf("Message: %s \nSource: %s \nType: %s \nID: %d \nSeverity: %s\n\n",
message, to!(char*)(source), to!(char*)(type), id, to!(char*)(severity));
if (severity == GL_DEBUG_SEVERITY_HIGH) {
printf("Aborting...\n");
import core.stdc.stdlib : exit;
exit(-1);
}
if (severity == GL_DEBUG_SEVERITY_HIGH) {
printf("Aborting...\n");
import core.stdc.stdlib : exit;
exit(-1);
}
} // openGLCallbackFunction
} // openGLCallbackFunction
} else {
extern(C) nothrow @nogc
static void openGLCallbackFunction(
GLenum source, GLenum type,
GLuint id, GLenum severity,
GLsizei length, const (GLchar*) message, // TODO: look at why it's GLchar* for non-windows and the other works on windows..
void* userParam)
{
printf("Message: %s \nSource: %s \nType: %s \nID: %d \nSeverity: %s\n\n",
message, to!(char*)(source), to!(char*)(type), id, to!(char*)(severity));
if (severity == GL_DEBUG_SEVERITY_HIGH) {
printf("Aborting...\n");
import core.stdc.stdlib : exit;
exit(-1);
}
} // openGLCallbackFunction
}
void createWindow(int w, int h, const char* title = "Chipd8 Emu") {
assert(w > 0, "window width must be > 0");