--- render.cpp 6 Aug 2006 07:42:36 -0000 1.3 +++ render.cpp 10 Aug 2006 00:50:04 -0000 1.4 @@ -128,6 +128,10 @@ vc = (VC*)vm->SearchDevice(MAKEID('V', 'C', ' ', ' ')); ASSERT(vc); + /* スケジューラ取得 */ + scheduler = (Scheduler *)vm->SearchDevice(MAKEID('S', 'C', 'H', 'E')); + ASSERT(scheduler); + // パレットバッファ確保(4MB) try { render.palbuf = new DWORD[0x10000 * 16]; @@ -254,6 +258,7 @@ // その他ワークエリア render.contlevel = 0; + render.conttarget = 0; cmov = ::IsCMOV(); return TRUE; @@ -1150,8 +1155,9 @@ ASSERT((cont >= 0) && (cont <= 15)); // 変更とフラグON - render.contlevel = cont; + render.conttarget = cont; render.contrast = TRUE; + render.conttime = 0; } //--------------------------------------------------------------------------- @@ -1164,7 +1170,7 @@ ASSERT(this); ASSERT((render.contlevel >= 0) && (render.contlevel <= 15)); - return render.contlevel; + return render.conttarget; } //--------------------------------------------------------------------------- @@ -1175,11 +1181,27 @@ void FASTCALL Render::Contrast() { int i; + DWORD t; + + /* 前回更新からちょっとずつ待つ */ + t = scheduler->GetTotalTime(); + if (t < render.conttime + 20 * 2000) + return; + render.conttime = t; + + /* target に向かって徐々に追従 */ + if (render.contlevel < render.conttarget) { + render.contlevel++; + } else { + render.contlevel--; + } // ポイント位置を変更、フラグDown render.palptr = render.palbuf; render.palptr += (render.contlevel << 16); - render.contrast = FALSE; + + if (render.contlevel == render.conttarget) + render.contrast = FALSE; // パレットフラグを全てUp for (i=0; i<0x200; i++) { --- render.h 25 Jun 2006 05:12:47 -0000 1.1.1.1 +++ render.h 10 Aug 2006 00:50:04 -0000 1.2 @@ -64,6 +64,8 @@ // コントラスト BOOL contrast; // コントラスト変更フラグ int contlevel; // コントラスト + int conttarget; // コントラスト設定値 + DWORD conttime; // 前回コントラストを変更した時刻 // パレット BOOL palette; // パレット変更フラグ @@ -248,6 +250,8 @@ // VC Sprite *sprite; // スプライト + Scheduler *scheduler; + /* スケジューラ */ render_t render; // 内部データ BOOL cmov;