*noises of anguish*
This commit is contained in:
parent
308bfeaff8
commit
8a6bc0ed61
54
source/app.d
54
source/app.d
|
@ -159,8 +159,8 @@ struct PixelBuffer {
|
|||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
|
||||
//linearly interpolate between pixels, MIN if texture is too small for drawing area, MAG if drawing area is smaller than texture
|
||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
|
||||
//texture type, level, format to store as, width, height, border, format loaded in
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, input_format_, width_, height_, 0, output_format_, data_type_, pixels);
|
||||
|
@ -205,7 +205,7 @@ struct PixelBuffer {
|
|||
void update(void[] pixels, size_t offset = 0) {
|
||||
|
||||
bind(0);
|
||||
glBufferSubData(GL_ARRAY_BUFFER, cast(GLintptr)offset, pixels.length, pixels.ptr);
|
||||
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width_, height_, input_format_, data_type_, pixels.ptr);
|
||||
unbind();
|
||||
|
||||
} // update
|
||||
|
@ -241,13 +241,14 @@ struct PixelBuffer {
|
|||
glBindBuffer(GL_ARRAY_BUFFER, vbo_);
|
||||
glBufferData(GL_ARRAY_BUFFER, vertices.length * vertices[0].sizeof, vertices.ptr, draw_type);
|
||||
|
||||
// pos
|
||||
glEnableVertexAttribArray(0);
|
||||
glVertexAttribPointer(0,
|
||||
vertices[0].length,
|
||||
2,
|
||||
GL_FLOAT,
|
||||
GL_FALSE,
|
||||
vertices[0].sizeof,
|
||||
vertices.ptr
|
||||
float.sizeof * 2,
|
||||
null
|
||||
);
|
||||
|
||||
glBindVertexArray(0);
|
||||
|
@ -280,13 +281,12 @@ struct PixelBuffer {
|
|||
uniform vec2 screen_size;
|
||||
|
||||
layout(location = 0) in vec2 pos;
|
||||
layout(location = 1) in vec2 uv;
|
||||
|
||||
out vec2 frag_uv;
|
||||
|
||||
void main() {
|
||||
frag_uv = uv;
|
||||
gl_Position = vec4(pos, 0.0, 0.0);
|
||||
gl_Position = vec4(pos, 0.0, 1.0);
|
||||
frag_uv = clamp(pos, vec2(0.0, 0.0), vec2(1.0, 1.0));
|
||||
}
|
||||
|
||||
};
|
||||
|
@ -301,7 +301,9 @@ struct PixelBuffer {
|
|||
out vec4 out_col;
|
||||
|
||||
void main() {
|
||||
out_col = texture(tex, frag_uv.st);
|
||||
float v = texture(tex, frag_uv.st).r;
|
||||
out_col = vec4(v, v, v, 1.0);
|
||||
// out_col = vec4(1.0, 0.0, 0.0, 1.0);
|
||||
}
|
||||
|
||||
};
|
||||
|
@ -313,17 +315,17 @@ struct PixelBuffer {
|
|||
void create(void* pixels, int w, int h) {
|
||||
|
||||
float[2][6] rect = [
|
||||
[0.0f, 0.0f], // top left
|
||||
[1.0f, 0.0f], // top right
|
||||
[-1.0f, -1.0f], // top left
|
||||
[1.0f, -1.0f], // top right
|
||||
[1.0f, 1.0f], // bottom right
|
||||
|
||||
[0.0f, 0.0f], // top left
|
||||
[0.0f, 1.0f], // bottom left
|
||||
[-1.0f, -1.0f], // top left
|
||||
[-1.0f, 1.0f], // bottom left
|
||||
[1.0f, 1.0f], // bottom right
|
||||
];
|
||||
|
||||
vao.create(rect[]);
|
||||
tex.create(pixels, w, h);
|
||||
tex.create(pixels, w, h, GL_RED, GL_RED);
|
||||
shader.compile(&vs_shader, &fs_shader);
|
||||
|
||||
} // create
|
||||
|
@ -338,6 +340,11 @@ struct PixelBuffer {
|
|||
|
||||
} // draw
|
||||
|
||||
nothrow @nogc
|
||||
void update(void[] pixels, size_t offset = 0) {
|
||||
tex.update(pixels, offset);
|
||||
} // update
|
||||
|
||||
} // PixelBuffer
|
||||
|
||||
struct Chip8Status {
|
||||
|
@ -637,7 +644,7 @@ struct Chip8 {
|
|||
switch (cpu.opcode & 0x0FFF) {
|
||||
|
||||
case 0x00E0: // 0x00E0 Clears the screen.
|
||||
// screen_buf[0..$] = 0;
|
||||
screen_buf[0..$] = 0;
|
||||
draw_flag = true;
|
||||
break;
|
||||
|
||||
|
@ -1005,11 +1012,14 @@ struct Emulator {
|
|||
// setup debug ui
|
||||
status.initialize(&this, &emu);
|
||||
|
||||
// set up pixel buffer to poke at
|
||||
emu.screen_data[0][] = 255;
|
||||
buf.create(emu.screen_data.ptr, 64, 32);
|
||||
// debug data
|
||||
emu.screen_buf[0] = 255;
|
||||
emu.screen_buf[64 - 1] = 255;
|
||||
emu.screen_buf[64*32 - 64] = 255;
|
||||
emu.screen_buf[64*32 - 1] = 255;
|
||||
|
||||
emu.screen_buf[] = 255;
|
||||
// set up pixel buffer to poke a
|
||||
buf.create(emu.screen_buf.ptr, 64, 32);
|
||||
|
||||
}
|
||||
|
||||
|
@ -1061,6 +1071,10 @@ struct Emulator {
|
|||
int w, h;
|
||||
window.windowSize(w, h);
|
||||
|
||||
if (emu.draw_flag) {
|
||||
buf.update(emu.screen_buf);
|
||||
}
|
||||
|
||||
buf.draw(w, h);
|
||||
imgui.newFrame(window);
|
||||
|
||||
|
|
Loading…
Reference in New Issue