mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 11:26:18 -04:00
commit
452aaf55b4
|
@ -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++;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
@echo off
|
||||
cd ..\..
|
||||
out\build\Release\bin\goalc -v -auto-lt
|
||||
pause
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
@echo off
|
||||
cd ..\..
|
||||
out\build\Release\bin\gk -fakeiso -debug -v
|
||||
pause
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
@echo off
|
||||
cd ..\..
|
||||
out\build\Release\bin\gk -fakeiso -debug -v -nodisplay
|
||||
pause
|
||||
|
|
Loading…
Reference in a new issue