From d313a3ceb35e167c1f47399ec5c787f94140a5b1 Mon Sep 17 00:00:00 2001 From: Kae <80987908+Novaenia@users.noreply.github.com> Date: Sun, 7 Jul 2024 04:44:01 +1000 Subject: [PATCH] OpenGL: use 4.1 core necessary for modern Mac support --- .../application/StarMainApplication_sdl.cpp | 4 ++++ source/application/StarRenderer_opengl.cpp | 19 +++++++++++++++++-- source/application/StarRenderer_opengl.hpp | 2 ++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/source/application/StarMainApplication_sdl.cpp b/source/application/StarMainApplication_sdl.cpp index d0b3dc3..d6cea76 100644 --- a/source/application/StarMainApplication_sdl.cpp +++ b/source/application/StarMainApplication_sdl.cpp @@ -305,6 +305,10 @@ public: int height; SDL_GetWindowSize(m_sdlWindow, &width, &height); m_windowSize = Vec2U(width, height); + + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); m_sdlGlContext = SDL_GL_CreateContext(m_sdlWindow); if (!m_sdlGlContext) diff --git a/source/application/StarRenderer_opengl.cpp b/source/application/StarRenderer_opengl.cpp index e640e53..411bfa5 100644 --- a/source/application/StarRenderer_opengl.cpp +++ b/source/application/StarRenderer_opengl.cpp @@ -80,6 +80,15 @@ void main() { } )SHADER"; +/* +static void GLAPIENTRY GlMessageCallback(GLenum, GLenum type, GLuint, GLenum, GLsizei, const GLchar* message, const void* renderer) { + if (type == GL_DEBUG_TYPE_ERROR) { + Logger::error("GL ERROR: {}", message); + __debugbreak(); + } +} +*/ + OpenGlRenderer::OpenGlRenderer() { if (glewInit() != GLEW_OK) throw RendererException("Could not initialize GLEW"); @@ -94,10 +103,11 @@ OpenGlRenderer::OpenGlRenderer() { (const char*)glGetString(GL_SHADING_LANGUAGE_VERSION)); glClearColor(0.0, 0.0, 0.0, 1.0); - glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable(GL_DEPTH_TEST); + //glEnable(GL_DEBUG_OUTPUT); + //glDebugMessageCallback(GlMessageCallback, this); m_whiteTexture = createGlTexture(Image::filled({1, 1}, Vec4B(255, 255, 255, 255), PixelFormat::RGBA32), TextureAddressing::Clamp, @@ -694,6 +704,10 @@ Vec2U OpenGlRenderer::GlLoneTexture::glTextureCoordinateOffset() const { return Vec2U(); } +OpenGlRenderer::GlRenderBuffer::GlRenderBuffer() { + glGenVertexArrays(1, &vertexArray); +} + OpenGlRenderer::GlRenderBuffer::~GlRenderBuffer() { for (auto const& texture : usedTextures) { if (auto gt = as(texture.get())) @@ -701,6 +715,7 @@ OpenGlRenderer::GlRenderBuffer::~GlRenderBuffer() { } for (auto const& vb : vertexBuffers) glDeleteBuffers(1, &vb.vertexBuffer); + glDeleteVertexArrays(1, &vertexArray); } void OpenGlRenderer::GlRenderBuffer::set(List& primitives) { @@ -715,7 +730,7 @@ void OpenGlRenderer::GlRenderBuffer::set(List& primitives) { List currentTextures; List currentTextureSizes; size_t currentVertexCount = 0; - + glBindVertexArray(vertexArray); auto finishCurrentBuffer = [&]() { if (currentVertexCount > 0) { GlVertexBuffer vb; diff --git a/source/application/StarRenderer_opengl.hpp b/source/application/StarRenderer_opengl.hpp index 61c67c9..035b906 100644 --- a/source/application/StarRenderer_opengl.hpp +++ b/source/application/StarRenderer_opengl.hpp @@ -143,6 +143,7 @@ private: size_t vertexCount = 0; }; + GlRenderBuffer(); ~GlRenderBuffer(); void set(List& primitives) override; @@ -152,6 +153,7 @@ private: HashSet usedTextures; List vertexBuffers; + GLuint vertexArray = 0; bool useMultiTexturing{true}; };