Пример #1
0
 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��ǂݍ��߂܂��񁄁�");
     }
 }
Пример #2
0
		/// <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);
			}
		}