DDS ファイルを読み取ってゲーム内のテクスチャを更新する Unity 用の外部プラグインに取り組んでいます。これまでのところ、DDS ファイルを DX11 と DX9 にロードすることができましたが、OpenGL を動作させることができないようです。
opengl 用の nvidia グラフィックス sdk 10 を使用して DDS ファイルを読み取り、GLUT/GLEW を使用してテクスチャを更新していますが、ゲーム内でテクスチャが更新されません。12 のミップマップで 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の経験があまりないので、何かが足りないかもしれません。さらに情報が必要な場合は、お知らせください。