From 2a70981bf00d72335a423848ab35564738dd6d5a Mon Sep 17 00:00:00 2001 From: Redacted Date: Mon, 5 Aug 2024 11:30:40 -0400 Subject: [PATCH 1/2] Get software texture back. --- include/JGL/Texture.h | 16 +++++++++------- main.cpp | 8 +++++++- src/JGL/Texture.cpp | 28 ++++++++++++++++++++++------ 3 files changed, 38 insertions(+), 14 deletions(-) diff --git a/include/JGL/Texture.h b/include/JGL/Texture.h index 90b4a79..2690845 100644 --- a/include/JGL/Texture.h +++ b/include/JGL/Texture.h @@ -36,14 +36,16 @@ namespace JGL { public: explicit Texture(const std::string& file, TextureFilteringMode filtering_mode = TextureFilteringMode::BILINEAR, TextureWrappingMode wrapping_mode = TextureWrappingMode::CLAMP_TO_EDGE); Texture(const std::string& file, const TextureFlag& flags, TextureFilteringMode filtering_mode = TextureFilteringMode::BILINEAR, TextureWrappingMode wrapping_mode = TextureWrappingMode::CLAMP_TO_EDGE); + Texture(SoftwareTexture* software_texture, TextureFilteringMode filtering_mode, TextureWrappingMode wrapping_mode); public: - GLuint GetGLTextureHandle() const; - Vector2 GetDimensions() const; - TextureFilteringMode GetFilteringMode() const; - TextureFlag GetFlags() const; - TextureFormat GetFormat() const; - std::vector GetPixelData() const; - + [[nodiscard]] GLuint GetGLTextureHandle() const; + [[nodiscard]] Vector2 GetDimensions() const; + [[nodiscard]] TextureFilteringMode GetFilteringMode() const; + [[nodiscard]] TextureWrappingMode GetWrappingMode() const; + [[nodiscard]] TextureFlag GetFlags() const; + [[nodiscard]] TextureFormat GetFormat() const; + [[nodiscard]] std::vector GetPixelData() const; + SoftwareTexture GetSoftwareTexture() const; void Erase(); }; diff --git a/main.cpp b/main.cpp index 11cc9df..a65f07f 100644 --- a/main.cpp +++ b/main.cpp @@ -11,6 +11,8 @@ using J3ML::LinearAlgebra::Vector2; using namespace JGL; Texture* image; +Texture* reloaded_image; + //The Re3D style base projection. std::vector perspective(float fov, float aspect, float nearPlane, float farPlane) { std::vector result(16); @@ -89,6 +91,10 @@ public: glDepthFunc(GL_LESS); glDepthMask(GL_TRUE); image = new Texture("assets/sprites/Re3D.png", TextureFilteringMode::BILINEAR); + + auto* software_texture = new SoftwareTexture(image->GetSoftwareTexture()); + reloaded_image = new Texture(software_texture, TextureFilteringMode::BILINEAR, TextureWrappingMode::CLAMP_TO_EDGE); + delete software_texture; } Vector3 textAngle = {0,0,0}; @@ -111,7 +117,7 @@ public: J2D::Begin(); J2D::FillQuad(Color4(Colors::Red), {500, 52}, {500, 152}, {600, 152}, {600, 52}); J2D::FillRect(Colors::Blue, {0,52}, {100,100}); - J2D::DrawSprite(*image, {200, 252}, {0.5, 0.5}, {2, 1}); + J2D::DrawSprite(*reloaded_image, {200, 252}, {0.5, 0.5}, {2, 1}); J2D::FillRect(Colors::Pinks::HotPink, {68, 120}, {32, 32}); J2D::FillGradientRect(Colors::Red, Colors::Blue, Gradient::DiagonalBottomLeft, {100,52}, {100,100}); J2D::FillRoundedRect(Colors::Red, {200, 52}, {100, 100}, 8, 8); diff --git a/src/JGL/Texture.cpp b/src/JGL/Texture.cpp index 14ad680..94796b9 100644 --- a/src/JGL/Texture.cpp +++ b/src/JGL/Texture.cpp @@ -5,7 +5,7 @@ using namespace ReTexture; namespace JGL { - Texture::Texture(const std::string &file, const ReTexture::TextureFlag &flags, TextureFilteringMode filtering_mode, TextureWrappingMode wrapping_mode) + Texture::Texture(const std::string& file, const ReTexture::TextureFlag& flags, TextureFilteringMode filtering_mode, TextureWrappingMode wrapping_mode) { auto *t = new ReTexture::SoftwareTexture(file, flags); @@ -17,7 +17,7 @@ namespace JGL delete t; } - Texture::Texture(const std::string &file, TextureFilteringMode filtering_mode, TextureWrappingMode wrapping_mode) { + Texture::Texture(const std::string& file, TextureFilteringMode filtering_mode, TextureWrappingMode wrapping_mode) { auto *t = new SoftwareTexture(file); load(t, {(float) t->getWidth(), (float) t->getHeight()}, t->getTextureFormat(), filtering_mode, @@ -27,9 +27,9 @@ namespace JGL delete t; } - void Texture::load(SoftwareTexture *software_texture, const Vector2 &size, const TextureFormat &format, + void Texture::load(SoftwareTexture *software_texture, const Vector2& size, const TextureFormat& format, TextureFilteringMode filtering_mode, TextureWrappingMode wrapping_mode) { - glGenTextures(1, &texture_handle); + glGenTextures(1,& texture_handle); glBindTexture(GL_TEXTURE_2D, texture_handle); if (format == TextureFormat::RGBA) @@ -119,6 +119,7 @@ namespace JGL if (texture_format == TextureFormat::RGBA) { glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, result.data()); + glBindTexture(GL_TEXTURE_2D, 0); return result; } @@ -126,8 +127,9 @@ namespace JGL std::vector color3((size_t) (texture_size.x * texture_size.y)); glGetTexImage(GL_TEXTURE_2D, 0, GL_RGB, GL_UNSIGNED_BYTE, color3.data()); + glBindTexture(GL_TEXTURE_2D, 0); - for (const auto &c: color3) + for (const auto& c: color3) result.emplace_back(c); return result; @@ -135,7 +137,7 @@ namespace JGL void Texture::Erase() { if (texture_handle != 0) - glDeleteTextures(1, &texture_handle); + glDeleteTextures(1,& texture_handle); } GLuint Texture::GetGLTextureHandle() const { @@ -158,4 +160,18 @@ namespace JGL return texture_filtering_mode; } + TextureWrappingMode Texture::GetWrappingMode() const { + return texture_wrapping_mode; + } + + SoftwareTexture Texture::GetSoftwareTexture() const { + std::vector software_pixel_data((GetDimensions().x * GetDimensions().y) * 4); + + memcpy(software_pixel_data.data(), GetPixelData().data(), (GetDimensions().x * GetDimensions().y) * 4); + return {software_pixel_data, TextureFormat::RGBA, static_cast(GetDimensions().x), static_cast(GetDimensions().y)}; + } + + Texture::Texture(SoftwareTexture* software_texture, TextureFilteringMode filtering_mode, TextureWrappingMode wrapping_mode) { + load(software_texture, {static_cast(software_texture->getWidth()), static_cast(software_texture->getHeight())}, software_texture->getTextureFormat(), filtering_mode, wrapping_mode); + } } \ No newline at end of file From 7bf30f6f394695fc111f6271c22feb63c037b369 Mon Sep 17 00:00:00 2001 From: Redacted Date: Mon, 5 Aug 2024 13:41:12 -0400 Subject: [PATCH 2/2] Idk like make the viewport work maybe? --- CMakeLists.txt | 2 +- main.cpp | 5 +++-- src/JGL.cpp | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 25ab756..6787569 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,7 @@ CPMAddPackage( CPMAddPackage( NAME ReWindow - URL https://git.redacted.cc/Redacted/ReWindow/archive/Prerelease-3.zip + URL https://git.redacted.cc/Redacted/ReWindow/archive/Prerelease-9.zip ) CPMAddPackage( diff --git a/main.cpp b/main.cpp index a65f07f..02d49c8 100644 --- a/main.cpp +++ b/main.cpp @@ -99,6 +99,7 @@ public: Vector3 textAngle = {0,0,0}; void display() { + JGL::Update(getSize()); textAngle.y += 2.0f; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); @@ -147,7 +148,7 @@ public: glSwapBuffers(); } - bool OnResizeRequest(const ReWindow::WindowResizeRequestEvent& e) override {return true;} + bool OnResizeRequest(const ReWindow::WindowResizeRequestEvent& e) override {/* glViewport(0, 0, e.Size.x, e.Size.y); std::cout << e.Size.x;*/ return true;} JGLDemoWindow() : ReWindow::RWindow() {} JGLDemoWindow(const std::string& title, int width, int height) : ReWindow::RWindow(title, width, height){} }; @@ -157,7 +158,7 @@ int main(int argc, char** argv) { window->setRenderer(RenderingAPI::OPENGL); window->Open(); window->initGL(); - window->setResizable(false); + window->setResizable(true); while (window->isAlive()) { window->pollEvents(); diff --git a/src/JGL.cpp b/src/JGL.cpp index 482c33d..3fd06cb 100644 --- a/src/JGL.cpp +++ b/src/JGL.cpp @@ -30,14 +30,14 @@ namespace JGL { void J2D::Begin() { + glViewport(0, 0, wS.x, wS.y); glMatrixMode(GL_PROJECTION); - glPushMatrix(); glLoadIdentity(); glOrtho(0, wS.x, wS.y, 0, -1, 1); glMatrixMode(GL_MODELVIEW); - glPushMatrix(); glLoadIdentity(); + //Get what the draw color was before we did anything. glGetFloatv(GL_CURRENT_COLOR, oldColor); glColor4f(baseColor[0], baseColor[1], baseColor[2], baseColor[3]);