Get software texture back.
All checks were successful
Run ReCI Build Test / Explore-Gitea-Actions (push) Successful in 4m44s

This commit is contained in:
2024-08-05 11:30:40 -04:00
parent 0147245325
commit 2a70981bf0
3 changed files with 38 additions and 14 deletions

View File

@@ -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<Color4> 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<Color4> GetPixelData() const;
SoftwareTexture GetSoftwareTexture() const;
void Erase();
};

View File

@@ -11,6 +11,8 @@ using J3ML::LinearAlgebra::Vector2;
using namespace JGL;
Texture* image;
Texture* reloaded_image;
//The Re3D style base projection.
std::vector<GLfloat> perspective(float fov, float aspect, float nearPlane, float farPlane) {
std::vector<float> 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);

View File

@@ -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> 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<unsigned char> 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<unsigned int>(GetDimensions().x), static_cast<unsigned int>(GetDimensions().y)};
}
Texture::Texture(SoftwareTexture* software_texture, TextureFilteringMode filtering_mode, TextureWrappingMode wrapping_mode) {
load(software_texture, {static_cast<float>(software_texture->getWidth()), static_cast<float>(software_texture->getHeight())}, software_texture->getTextureFormat(), filtering_mode, wrapping_mode);
}
}