Merge pull request #753 from ManDude/d/w/dma-for-font

D/w/dma for font
This commit is contained in:
water111 2021-08-11 18:39:28 -04:00 committed by GitHub
commit 452aaf55b4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 40 additions and 10 deletions

View file

@ -83,6 +83,10 @@ void DirectRenderer::flush_pending(SharedRenderState* render_state) {
// glEnable(GL_DEPTH_TEST);
// glDepthFunc(GL_ALWAYS);
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
// render!
// update buffers:
glBindBuffer(GL_ARRAY_BUFFER, m_ogl.vertex_buffer);
@ -130,8 +134,11 @@ void DirectRenderer::flush_pending(SharedRenderState* render_state) {
}
// assert(false);
glDrawArrays(GL_TRIANGLES, 0, m_prim_buffer.vert_count);
glBindVertexArray(0);
m_triangles += m_prim_buffer.vert_count / 3;
m_prim_buffer.vert_count = 0;
glDeleteVertexArrays(1, &vao);
}
void DirectRenderer::update_gl_prim(SharedRenderState* render_state) {
@ -775,4 +782,4 @@ void DirectRenderer::PrimitiveBuffer::push(const math::Vector<u8, 4>& rgba,
verts[vert_count] = vert;
sts[vert_count] = st;
vert_count++;
}
}

View file

@ -10,24 +10,37 @@
/*!
* OpenGL Error callback. If we do something invalid, this will be called.
*/
void GLAPIENTRY opengl_error_callback(GLenum /*source*/,
GLenum /*type*/,
GLuint /*id*/,
void GLAPIENTRY opengl_error_callback(GLenum source,
GLenum type,
GLuint id,
GLenum severity,
GLsizei /*length*/,
const GLchar* message,
const void* /*userParam*/) {
if (severity == GL_DEBUG_SEVERITY_NOTIFICATION) {
return;
} else if (severity == GL_DEBUG_SEVERITY_LOW) {
lg::info("OpenGL message 0x{:X} S{:X} T{:X}: {}", id, source, type, message);
} else if (severity == GL_DEBUG_SEVERITY_MEDIUM) {
lg::warn("OpenGL warn 0x{:X} S{:X} T{:X}: {}", id, source, type, message);
} else if (severity == GL_DEBUG_SEVERITY_HIGH) {
lg::error("OpenGL error 0x{:X} S{:X} T{:X}: {}", id, source, type, message);
}
lg::error("OpenGL error: {}", message);
}
OpenGLRenderer::OpenGLRenderer(std::shared_ptr<TexturePool> texture_pool)
: m_render_state(texture_pool) {
// setup OpenGL errors
// disable specific errors
const GLuint l_gl_error_ignores[1] = {
0x64 // [API-PERFORMANCE] glDrawArrays uses non-native input attribute type
};
glEnable(GL_DEBUG_OUTPUT);
glDebugMessageCallback(opengl_error_callback, nullptr);
// filter
glDebugMessageControl(GL_DEBUG_SOURCE_API, GL_DEBUG_TYPE_PERFORMANCE, GL_DONT_CARE, 1,
&l_gl_error_ignores[0], GL_FALSE);
// initialize all renderers
init_bucket_renderers();
@ -125,10 +138,13 @@ void OpenGLRenderer::draw_test_triangle() {
//////////
// create "buffer object names"
GLuint vertex_buffer, color_buffer;
GLuint vertex_buffer, color_buffer, vao;
glGenBuffers(1, &vertex_buffer);
glGenBuffers(1, &color_buffer);
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
// set vertex data
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
const float verts[9] = {0.0, 0.8, 0, -0.5, -0.5 * .866, 0, 0.5, -0.5 * .866, 0};
@ -161,6 +177,7 @@ void OpenGLRenderer::draw_test_triangle() {
glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, (void*)0);
glDrawArrays(GL_TRIANGLES, 0, 3);
glBindVertexArray(0);
////////////
// Clean Up
@ -168,4 +185,5 @@ void OpenGLRenderer::draw_test_triangle() {
// delete buffer
glDeleteBuffers(1, &color_buffer);
glDeleteBuffers(1, &vertex_buffer);
glDeleteVertexArrays(1, &vao);
}

View file

@ -77,9 +77,11 @@ static int gl_init() {
return 1;
}
// request OpenGL 3.0 (placeholder)
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
// request Debug OpenGL 3.3 Core
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // 3.3
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GLFW_TRUE); // debug
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // core profile, not compat
return 0;
}

View file

@ -255,7 +255,7 @@ void dmac_runner(SystemThreadInterface& iface) {
while (!iface.get_want_exit() && !VM::vm_want_exit()) {
for (int i = 0; i < 10; ++i) {
if (VM::dmac_ch[i]->chcr.str) {
lg::info("DMA detected on channel {}, clearing", i);
// lg::info("DMA detected on channel {}, clearing", i);
VM::dmac_ch[i]->chcr.str = 0;
}
}

View file

@ -1,3 +1,4 @@
@echo off
cd ..\..
out\build\Release\bin\goalc -v -auto-lt
pause

View file

@ -1,3 +1,4 @@
@echo off
cd ..\..
out\build\Release\bin\gk -fakeiso -debug -v
pause

View file

@ -1,3 +1,4 @@
@echo off
cd ..\..
out\build\Release\bin\gk -fakeiso -debug -v -nodisplay
pause