OpenGLを使ったプログラムをC++からC#に移植しています(id:n7shi:20091011)。元のプログラムではOpenGLに渡すテクスチャをSDL_imageで読み込んでいます。SDL_imageは依存するDLLが多いため、id:setuna-kanataさんの以下の記事を参考にGDI+で読み込んでみました。
- id:setuna-kanata:20090215:1234700274
SDL_imageと対比したコードは以下の通りです。【追記】OpenGL ESでのやり方はid:n7shi:20091012を参照してください。
var id = new uint[1]; GL.glGenTextures(id.Length, id); GL.glBindTexture(GL.GL_TEXTURE_2D, id[0]); GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR); GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR); #if USE_SDL_IMAGE SDL_Surface presurf = SDL.IMG_Load(filename); // 32bpp only int w = presurf.w, h = presurf.h; GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA8, w, h, 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, presurf.pixels); SDL.SDL_FreeSurface(presurf); #else var presurf = new Bitmap(filename); int w = presurf.Width, h = presurf.Height; var bmpData = presurf.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA8, w, h, 0, GL.GL_BGRA_EXT, GL.GL_UNSIGNED_BYTE, bmpData.Scan0); presurf.UnlockBits(bmpData); presurf.Dispose(); #endif