From 0244f463c4d5241ad6de7e1aff0c54cbcb11de21 Mon Sep 17 00:00:00 2001 From: Nathan Date: Tue, 10 Feb 2026 23:51:27 -0600 Subject: [PATCH] triangle? --- include/utils/Renderer/Renderer.h | 2 +- .../RendererOpenGL/RendererOpenGL.h | 35 +++++++++++++------ .../RendererImpl/RendererSDL3/RendererSDL3.h | 6 ++-- include/utils/Window/Window.h | 6 ++-- .../Window/WindowImpl/WindowGLFW/WindowGLFW.h | 8 +++-- .../Window/WindowImpl/WindowSDL3/WindowSDL3.h | 25 +++++++------ .../TestTriangle/TestTriangle.cpp | 11 ++++-- .../TestTriangle/TestTriangle.h | 8 +++-- modules/ImguiModule/ImguiModule.cpp | 8 ++--- modules/ImguiModule/ImguiModule.h | 16 +++++---- modules/WindowModule/WindowModule.cpp | 7 ++-- 11 files changed, 83 insertions(+), 49 deletions(-) diff --git a/include/utils/Renderer/Renderer.h b/include/utils/Renderer/Renderer.h index 1cd405d..512ed77 100644 --- a/include/utils/Renderer/Renderer.h +++ b/include/utils/Renderer/Renderer.h @@ -37,7 +37,7 @@ namespace Archimedes { const Shader::LoadType& lt ) = 0; - virtual void draw(const RenderTarget&) = 0; + virtual void draw(const RenderTarget*) = 0; virtual Renderer* getRendererImpl() = 0; diff --git a/include/utils/Renderer/RendererImpl/RendererOpenGL/RendererOpenGL.h b/include/utils/Renderer/RendererImpl/RendererOpenGL/RendererOpenGL.h index 358f22a..0e5090b 100644 --- a/include/utils/Renderer/RendererImpl/RendererOpenGL/RendererOpenGL.h +++ b/include/utils/Renderer/RendererImpl/RendererOpenGL/RendererOpenGL.h @@ -1,6 +1,7 @@ #ifdef RENDERER_OPENGL -#undef RENDERER_OPENGL +#ifndef RENDERER_OPENGL_H +#define RENDERER_OPENGL_H #include "pch.hpp" @@ -81,7 +82,8 @@ namespace Archimedes { glDeleteShader(fragmentShader); shader.id = shaderProgram; - + + std::cout << "createShader success!\n"; return shader; } @@ -102,32 +104,42 @@ namespace Archimedes { glBindVertexArray(rt->vertexArray.id); glBindBuffer(GL_ARRAY_BUFFER, rt->vertexBuffer.id); - glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 6, data, GL_STATIC_DRAW); glGenBuffers(1, &rt->indexArray.id); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, rt->indexArray.id); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, count * sizeof(unsigned int), indices, GL_STATIC_DRAW); + glUseProgram(s.id); - glVertexAttribPointer(rt->vertexArray.id, count, GL_FLOAT, GL_FALSE, count * sizeof(float), (void*)0); - glEnableVertexAttribArray(rt->vertexArray.id); + + glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float), (void*)0); + glEnableVertexAttribArray(0); - glBindBuffer(GL_ARRAY_BUFFER, 0); glBindVertexArray(0); + glBindBuffer(GL_ARRAY_BUFFER, 0); + std::cout << "createRenderTarget success!\n"; return rt; }; - void draw(const RenderTarget& rt) override { + void draw(const RenderTarget* rt) override { - glUseProgram(rt.shader.id); + /*std::cout << "\nNow Rendering:\n" + << "\nindex buffer id: " << rt.indexArray.id + << "\nshader id: " << rt.shader.id + << "\nvertex array id: " << rt.vertexArray.id + << "\nvertex buffer id: " << rt.vertexBuffer.id + << "\n" << "";*/ - glBindVertexArray(rt.vertexArray.id); + glUseProgram(rt->shader.id); - glDrawElements(GL_TRIANGLES, rt.indexArray.getCount(), GL_UNSIGNED_INT, 0); + glBindVertexArray(rt->vertexArray.id); + + glDrawElements(GL_TRIANGLES, rt->indexArray.getCount(), GL_UNSIGNED_INT, nullptr); glBindVertexArray(0); } @@ -137,3 +149,4 @@ namespace Archimedes { } #endif +#endif diff --git a/include/utils/Renderer/RendererImpl/RendererSDL3/RendererSDL3.h b/include/utils/Renderer/RendererImpl/RendererSDL3/RendererSDL3.h index 2fd3de8..e2536e6 100644 --- a/include/utils/Renderer/RendererImpl/RendererSDL3/RendererSDL3.h +++ b/include/utils/Renderer/RendererImpl/RendererSDL3/RendererSDL3.h @@ -1,5 +1,6 @@ -#ifndef RENDERER_SDL3 -#define RENDERER_SDL3 +#ifdef RENDERER_SDL3 +#ifndef RENDERER_SDL3_H +#define RENDERER_SDL3_H #include "pch.hpp" @@ -39,3 +40,4 @@ namespace Archimedes { } #endif +#endif diff --git a/include/utils/Window/Window.h b/include/utils/Window/Window.h index 392e959..eeaa967 100644 --- a/include/utils/Window/Window.h +++ b/include/utils/Window/Window.h @@ -18,10 +18,10 @@ namespace Archimedes { void doFrame() { - renderer->render(); - swapBuffers(); + renderer->render(); + pollEvents(); } @@ -32,6 +32,8 @@ namespace Archimedes { virtual void pollEvents() = 0; + virtual void restoreContext() = 0; + virtual void getSize(int& w, int& h) { w = this->w; h = this->h; diff --git a/include/utils/Window/WindowImpl/WindowGLFW/WindowGLFW.h b/include/utils/Window/WindowImpl/WindowGLFW/WindowGLFW.h index 976a5ad..a267906 100644 --- a/include/utils/Window/WindowImpl/WindowGLFW/WindowGLFW.h +++ b/include/utils/Window/WindowImpl/WindowGLFW/WindowGLFW.h @@ -1,5 +1,6 @@ #ifdef WINDOW_GLFW -#undef WINDOW_GLFW +#ifndef WINDOW_GLFW_H +#define WINDOW_GLFW_H #include "pch.hpp" @@ -33,7 +34,7 @@ namespace Archimedes { glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); - //glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, 1); + glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, 1); #endif window = glfwCreateWindow(640, 480, "Archimedes", NULL, NULL); @@ -115,7 +116,7 @@ namespace Archimedes { return glfwWindowShouldClose(window); } - void restoreContext() { glfwMakeContextCurrent(window); } + void restoreContext() override { glfwMakeContextCurrent(window); } void getSize(int& w, int& h) override { glfwGetFramebufferSize(window, &w, &h); @@ -135,3 +136,4 @@ namespace Archimedes { } #endif +#endif diff --git a/include/utils/Window/WindowImpl/WindowSDL3/WindowSDL3.h b/include/utils/Window/WindowImpl/WindowSDL3/WindowSDL3.h index e7b8fd4..6458035 100644 --- a/include/utils/Window/WindowImpl/WindowSDL3/WindowSDL3.h +++ b/include/utils/Window/WindowImpl/WindowSDL3/WindowSDL3.h @@ -1,5 +1,6 @@ #ifdef WINDOW_SDL3 -#undef WINDOW_SDL3 +#ifndef WINDOW_SDL3_H +#define WINDOW_SDL3_H #include "pch.hpp" @@ -7,7 +8,7 @@ #include -#if RENDERER == 1 +#ifdef RENDERER_OPENGL #include @@ -76,13 +77,14 @@ namespace Archimedes { std::abort(); } -#if RENDERER == 1 +#ifdef RENDERER_OPENGL SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8); SDL_WindowFlags window_flags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_HIDDEN; -#elif RENDERER == 2 +#endif +#ifdef RENDERER_SDL3 SDL_WindowFlags window_flags = SDL_WINDOW_RESIZABLE | SDL_WINDOW_HIDDEN | SDL_WINDOW_HIGH_PIXEL_DENSITY; #endif @@ -94,7 +96,7 @@ namespace Archimedes { } SDL_SetWindowPosition(window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED); -#if RENDERER == 1 +#ifdef RENDERER_OPENGL gl_context = SDL_GL_CreateContext(window); if (gl_context == nullptr) @@ -112,7 +114,7 @@ namespace Archimedes { } ~WindowSDL3() { -#if RENDERER == 1 +#ifdef RENDERER_OPENGL SDL_GL_DestroyContext(gl_context); #endif SDL_RemoveEventWatch(EventCallback, &data); @@ -123,7 +125,7 @@ namespace Archimedes { bool shouldClose() override { return false; } void swapBuffers() override { -#if RENDERER == 1 +#ifdef RENDERER_OPENGL restoreContext(); SDL_GL_SwapWindow(window); #endif @@ -136,8 +138,8 @@ namespace Archimedes { WindowSDL3* getWindowImpl() override { return this; }; -#if RENDERER == 1 - void restoreContext() { SDL_GL_MakeCurrent(window, gl_context); } +#ifdef RENDERER_OPENGL + void restoreContext() override { SDL_GL_MakeCurrent(window, gl_context); } #endif void getSize(int& w, int& h) override { w = this->w; @@ -150,14 +152,14 @@ namespace Archimedes { } SDL_Window* getWindow() { return window; } -#if RENDERER == 1 +#ifdef RENDERER_OPENGL SDL_GLContext getContext() { return gl_context; } #endif WindowData data; private: SDL_Window* window; -#if RENDERER == 1 +#ifdef RENDERER_OPENGL SDL_GLContext gl_context; #endif @@ -165,3 +167,4 @@ namespace Archimedes { } #endif +#endif diff --git a/modules/Archimedes-Modules/TestTriangle/TestTriangle.cpp b/modules/Archimedes-Modules/TestTriangle/TestTriangle.cpp index f5c4cc3..eb7a189 100644 --- a/modules/Archimedes-Modules/TestTriangle/TestTriangle.cpp +++ b/modules/Archimedes-Modules/TestTriangle/TestTriangle.cpp @@ -24,6 +24,8 @@ TestTriangle::~TestTriangle() { #endif */ wm->releaseWindow(window); + + delete rt; } } @@ -32,12 +34,14 @@ void TestTriangle::onLoad() { WindowModule* wm; { wm = (WindowModule*) moduleInstances[WindowModule()]; } if(!wm) { - std::cout << "No WindowModule for ImguiModule!\n"; + std::cout << "No WindowModule TestTriangle!\n"; std::abort(); } window = wm->aquireWindow(); + window->getRenderer()->clearColor = { 0.2, 0.2, 0.4, 0.7 }; + rt = window->getRenderer()->createRenderTarget( vertices, 9 * sizeof(float), @@ -53,7 +57,10 @@ void TestTriangle::onLoad() { void TestTriangle::run() { - window->getRenderer()->draw(*rt); + window->getRenderer()->render(); + window->getRenderer()->draw(rt); + window->swapBuffers(); + window->pollEvents(); } diff --git a/modules/Archimedes-Modules/TestTriangle/TestTriangle.h b/modules/Archimedes-Modules/TestTriangle/TestTriangle.h index d40f526..19808b7 100644 --- a/modules/Archimedes-Modules/TestTriangle/TestTriangle.h +++ b/modules/Archimedes-Modules/TestTriangle/TestTriangle.h @@ -51,10 +51,12 @@ class TestTriangle : public Archimedes::Module { }; unsigned int indices[3] = { - 1, // left - 2, // right - 3 // top + 0, // left + 1, // right + 2 // top }; + + unsigned int vao, vbo, ibo, shaderProgram; }; #ifdef TESTTRIANGLE_DYNAMIC diff --git a/modules/ImguiModule/ImguiModule.cpp b/modules/ImguiModule/ImguiModule.cpp index ed6ca47..996014c 100644 --- a/modules/ImguiModule/ImguiModule.cpp +++ b/modules/ImguiModule/ImguiModule.cpp @@ -15,7 +15,7 @@ ImguiModule::~ImguiModule() { if(app) { WindowModule* wm; { wm = (WindowModule*) moduleInstances[WindowModule()]; } -#if WINDOW == 2 +#ifdef WINDOW_SDL3 wm->removeEventFn(ecmd_it); #endif @@ -38,8 +38,8 @@ void ImguiModule::onLoad() { window = wm->aquireWindow(); -#if RENDERER == 2 - renderer = window->getRenderer()->getRendererImpl().renderer; +#ifdef RENDERER_SDL3 + renderer = window->getRenderer()->getRendererImpl()->renderer; #endif IMGUI_CHECKVERSION(); @@ -105,7 +105,7 @@ void ImguiModule::run() { ImGui::UpdatePlatformWindows(); ImGui::RenderPlatformWindowsDefault(); - window->getWindowImpl().restoreContext(); + window->getWindowImpl()->restoreContext(); } }; diff --git a/modules/ImguiModule/ImguiModule.h b/modules/ImguiModule/ImguiModule.h index bb0758d..40238ba 100644 --- a/modules/ImguiModule/ImguiModule.h +++ b/modules/ImguiModule/ImguiModule.h @@ -6,22 +6,24 @@ #include "modules/WindowModule/WindowModule.h" -#if RENDERER == 1 +#ifdef RENDERER_OPENGL #include "backends/imgui_impl_opengl3.h" -#elif RENDERER == 2 +#endif +#ifdef RENDERER_SDL3 #include "backends/imgui_impl_sdlrenderer3.h" #endif -#if WINDOW == 1 +#ifdef WINDOW_GLFW #include "backends/imgui_impl_glfw.h" #include -#elif WINDOW == 2 +#endif +#ifdef WINDOW_SDL3 #include "backends/imgui_impl_sdl3.h" #include @@ -68,14 +70,14 @@ class ImguiModule : public Archimedes::Module { std::list>::iterator ecmd_it; -#if RENDERER == 1 +#ifdef RENDERER_OPENGL auto rendererInit() { return ImGui_ImplOpenGL3_Init("#version 330"); } void rendererShutdown() { ImGui_ImplOpenGL3_Shutdown(); } void rendererNewFrame() { ImGui_ImplOpenGL3_NewFrame(); } void rendererRenderDrawData() { ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); } - -#elif RENDERER == 2 +#endif +#ifdef RENDERER_SDL3 SDL_Renderer* renderer; auto rendererInit() { return ImGui_ImplSDLRenderer3_Init(renderer); } void rendererShutdown() { ImGui_ImplSDLRenderer3_Shutdown(); } diff --git a/modules/WindowModule/WindowModule.cpp b/modules/WindowModule/WindowModule.cpp index 0770b0e..462a786 100644 --- a/modules/WindowModule/WindowModule.cpp +++ b/modules/WindowModule/WindowModule.cpp @@ -42,10 +42,11 @@ void WindowModule::onLoad() { void WindowModule::run() { - if(window) - window->doFrame(); - else + if(window) { + //window->doFrame(); + } else { app->emitEvent(new Archimedes::DoUnloadModuleEvent(name)); + } } bool WindowModule::onEvent(const Archimedes::Event& e) {