Added mipmapping partially

This commit is contained in:
Vladislav Khorev committed 2026-01-07 13:30:21 +03:00
1 parent 34fee1005a
commit 6961152d34
8 files changed
+74 -41

No files matched your search

+25 -23
View File
@@ -8,44 +8,46 @@
namespace ZL
{
Texture::Texture(const TextureDataStruct& texData)
{
Texture::Texture(const TextureDataStruct& texData) {
width = texData.width;
height = texData.height;
glGenTextures(1, &texID);
if (texID == 0)
{
if (texID == 0) {
throw std::runtime_error("glGenTextures did not work");
}
glBindTexture(GL_TEXTURE_2D, texID);
CheckGlError();
// Íàñòðîéêà ôèëüòðàöèè â çàâèñèìîñòè îò âûáðàííîãî òèïà
if (texData.mipmap == TextureDataStruct::GENERATE) {
// Èñïîëüçóåì òðèëèíåéíóþ ôèëüòðàöèþ äëÿ óñòðàíåíèÿ ìåðöàíèÿ
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
}
else {
// Îáû÷íàÿ ëèíåéíàÿ ôèëüòðàöèÿ (áóäåò ìåðöàòü íà óäàëåíèè)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
}
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
CheckGlError();
// Çàãðóçêà äàííûõ áàçîâîãî óðîâíÿ (Level 0)
GLint format = (texData.bitSize == TextureDataStruct::BS_24BIT) ? GL_RGB : GL_RGBA;
glTexImage2D(GL_TEXTURE_2D, 0, format,
static_cast<GLsizei>(width),
static_cast<GLsizei>(height),
0, format, GL_UNSIGNED_BYTE, texData.data.data());
CheckGlError();
//This should be only for Windows
//glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
CheckGlError();
if (texData.bitSize == TextureDataStruct::BS_24BIT)
{
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, static_cast<GLsizei>(texData.width), static_cast<GLsizei>(texData.height), 0, GL_RGB, GL_UNSIGNED_BYTE, &texData.data[0]);
// Ãåíåðàöèÿ ìèï-ìàïîâ, åñëè ýòî íåîáõîäèìî
if (texData.mipmap == TextureDataStruct::GENERATE) {
glGenerateMipmap(GL_TEXTURE_2D);
CheckGlError();
}
else
{
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, static_cast<GLsizei>(texData.width), static_cast<GLsizei>(texData.height), 0, GL_RGBA, GL_UNSIGNED_BYTE, &texData.data[0]);
}
CheckGlError();
}
Texture::Texture(const std::array<TextureDataStruct, 6>& texDataArray)