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 テクスチャ生成コードがあることです。

