0

OpenGL 4.5 および Mac をサポートしていないローエンド PC で OpenGL コードをコンパイルすると、この問題が発生しました。通常のコードでは、glCreateTextures や glTextureStorage2D などの関数を使用しますが、他のバージョンではサポートされていないため、他の glGenTextures パスに移動しました。

画像生成コードは次のとおりです。

Texture::Texture(const std::string& path)
        : m_Path(path)
    {
        int width, height, channels;
        stbi_set_flip_vertically_on_load(1);
        unsigned char* data = stbi_load(path.c_str(), &width, &height, &channels, 0);

        RW_CORE_ASSERT(data, "Failed to load image!");
        m_Width = width;
        m_Height = height;

        GLenum internalFormat = 0, dataFormat = 0;
        if (channels == 4)
        {
            internalFormat = GL_RGBA8;
            dataFormat = GL_RGBA;
        }
        else if (channels == 3)
        {
            internalFormat = GL_RGB8;
            dataFormat = GL_RGB;
        }

        m_InternalFormat = internalFormat;
        m_DataFormat = dataFormat;

        RW_CORE_ASSERT(internalFormat & dataFormat, "Format not supported!");

        glGenTextures(1, &m_ID);

        glBindTexture(GL_TEXTURE_2D, m_ID);


        glTexParameteri(m_ID, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(m_ID, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

        glTexParameteri(m_ID, GL_TEXTURE_WRAP_S, GL_REPEAT);
        glTexParameteri(m_ID, GL_TEXTURE_WRAP_T, GL_REPEAT);

        glTexImage2D(m_ID, 1, internalFormat, m_Width, m_Height, 0, dataFormat, GL_UNSIGNED_BYTE, data);

        glBindTexture(GL_TEXTURE_2D, 0);

        stbi_image_free(data);
    }

そして、テクスチャを GPU の特定のスロットにバインドしたいので、次の関数があります。

void Texture::Bind(uint32_t slot) const
    {

        glActiveTexture(GL_TEXTURE0 + slot);
        glBindTexture(GL_TEXTURE_2D, m_ID); 
    }

描画されるもののスクリーンショットは次のとおりです。 ここに画像の説明を入力

レンダリングの問題ではないことを確認するために、ImGui のレンダラーに入れることにしました。 ここに画像の説明を入力

そして、これが私が取得するはずの写真です:

ここに画像の説明を入力

画像は正しくインポートされ、エラーは発生せず、同じインポート コードとパスがハイエンド PC でも機能します。変更された唯一の点は、ハイエンド PC に OpenGL 4.5 テクスチャ生成コードがあることです。

4

1 に答える 1