Что было бы подходящим typename для константы opengl? - PullRequest
0 голосов
/ 27 октября 2019

В настоящее время я сталкиваюсь с проблемой при создании функции текстуры в OpenGL c ++. При создании функции для использования текстуры вам нужно будет связать свою текстуру с идентификатором, а перед этим вам нужно установить активную текстуру, как показано ниже:

void Texture::UseTexture()
{
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, textureID);
}

, чтобы класс текстуры былболее универсальный, я хочу добавить аргумент в мою функцию useTexture (), чтобы иметь аргумент, в котором вы могли бы вставить постоянную, такую ​​как GL_TEXTURE0. Есть ли какие-либо имена, которые будут работать или достаточно постоянны?

1 Ответ

1 голос
/ 27 октября 2019

Обычный способ сделать это - взять целочисленный параметр (например, uint32_t) и добавить его в GL_TEXTURE0:

void Texture::UseTexture(uint32_t unit)
{
    if(unit >= MaxTextureUnit) {
         //Handle invalid texture unit
    }
    else {
        glActiveTexture(GL_TEXTURE0 + unit);
        glBindTexture(GL_TEXTURE_2D, textureID);
    }
}

Это можно сделать, поскольку документация для glActiveTexture утверждает, что

текстура должна быть одной из GL_TEXTUREi, где 0 <= i <GL_MAX_TEXTURE_UNITS </p>

и что

Это всегдаслучай, когда GL_TEXTUREi = GL_TEXTURE0 + i.


MaxTextureUnit - максимальное количество текстурных единиц и может быть запрошено с помощью glGetInteger(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &MaxTextureUnit). Это больше похоже на символическое значение, чтобы показать, как может работать, не стесняйтесь осуществлять обработку ошибок, как вам нравится.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...