private GlTexture LoadTextureByPath(string path) { GlTexture texture = new GlTexture(); texture.LocalOption.Smooth = false; YanesdkResult result = texture.Load(path); if (result == YanesdkResult.NoError) { return texture; } else { throw new Exception("�摜�u" + path + "�v��ǂݍ��߂܂���"); } }
/// <summary> /// テクスチャに描画。 /// 更新されていない場合処理しないので、専用のテクスチャを用意しておいて、 /// 毎回それを指定すること。 /// </summary> public void Draw(GlTexture tx) { lock (lockObject) { Debug.Assert(IsReadyToDraw); // ↑これは呼び出し元でチェックしといて、 // falseなうちは描画しない方がいい。(´ω`) if (window != null) { Debug.Fail("Movie.SetWindow()されたのにMovie.Draw()が呼ばれた"); return; } // lock int p = SDL.SDL_mutexP(mutex); Debug.Assert(p == 0); // フラグ操作 //* if (!updateRect.HasValue) { // unlock int vv = SDL.SDL_mutexV(mutex); Debug.Assert(vv == 0); return; } //Rectangle clientRect = updateRect.Value; // 高速化に使えそうな予感もするものの…。 updateRect = null; /*/ if (!updated) { // unlock int vv = SDL.SDL_mutexV(mutex); Debug.Assert(vv == 0); return; } updated = false; //*/ // テクスチャに描画 tx.Bind(); Gl.glTexSubImage2D((uint)tx.TextureType, 0, 0, 0, surface.Width, surface.Height, surface.Alpha ? Gl.GL_RGBA : Gl.GL_RGB, Gl.GL_UNSIGNED_BYTE, surface.Pixels); tx.Unbind(); // unlock int v = SDL.SDL_mutexV(mutex); Debug.Assert(v == 0); } }