1

我正在为 Unity 开发一个外部插件,它通过读取 DDS 文件来更新游戏中的纹理。到目前为止,我能够在 DX11 和 DX9 中加载 DDS 文件,但我似乎无法让 OpenGL 工作。

我正在使用用于 opengl 的 nvidia graphics sdk 10 来读取 DDS 文件和 GLUT/GLEW 来更新纹理,但纹理不会在游戏中更新。我正在尝试使用 12 个 mipmap 读取 2048x2048 DXT1 纹理。

这是我的代码:

// Initialize glut/glew
glutCreateWindow("");
char *args[] = {0};
glutInit(0, args);
GLenum err = glewInit();
if (GLEW_OK != err)
{
    char message[64];
    sprintf_s(message, "Error: %s", glewGetErrorString(err));
    DebugLog(message);
}

// Load the DDS file
nv::Image texture;
if (!texture.loadImageFromFile("image.dds"))
    DebugLog("Failed to load DDS texture");

// Update the texture
GLuint gltex = (GLuint)(g_TexturePointer); // g_TexturePointer is a pointer to the texture that is passed from Unity
//glGenTextures(1, &gltex);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, gltex);
for (int i = 0; i < texture.getMipLevels(); i++)
{
    glCompressedTexImage2DARB(GL_TEXTURE_2D, i, texture.getInternalFormat(), texture.getWidth(), texture.getHeight(), 0, texture.getImageSize(i), texture.getLevel(i));
}

我对opengl不是很有经验,所以也许我错过了一些东西。如果您需要更多信息,请告诉我。

4

0 回答 0