step B.2: elimina fiber — Director posseeix l'escena, JD8_Flip sense yield, fiber.hpp/cpp esborrats
This commit is contained in:
@@ -3,7 +3,6 @@
|
||||
#include <fstream>
|
||||
|
||||
#include "core/jail/jfile.hpp"
|
||||
#include "core/system/fiber.hpp"
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wunused-but-set-variable"
|
||||
@@ -151,16 +150,16 @@ void JD8_BlitCKToSurface(int x, int y, JD8_Surface surface, int sx, int sy, int
|
||||
}
|
||||
|
||||
void JD8_Flip() {
|
||||
// Converteix el framebuffer indexat (paletted) a ARGB (pixel_data).
|
||||
// El Director crida aquesta funció després del tick de cada escena
|
||||
// per preparar el frame abans de presentar-lo. Ja no fa yield —
|
||||
// tot corre en un sol thread sense fibers des de Phase B.2.
|
||||
for (int x = 0; x < 320; x++) {
|
||||
for (int y = 0; y < 200; y++) {
|
||||
Uint32 color = 0xFF000000 + main_palette[screen[x + (y * 320)]].r + (main_palette[screen[x + (y * 320)]].g << 8) + (main_palette[screen[x + (y * 320)]].b << 16);
|
||||
pixel_data[x + (y * 320)] = color;
|
||||
}
|
||||
}
|
||||
// Cedeix el control al Director. Quan Director::run() ens torne a fer
|
||||
// resume(), continuarem just ací i el joc continuarà amb la següent
|
||||
// iteració del seu loop sense bloquejos de mutex/cv.
|
||||
GameFiber::yield();
|
||||
}
|
||||
|
||||
Uint32* JD8_GetFramebuffer() {
|
||||
@@ -254,20 +253,9 @@ bool JD8_FadeTickStep() {
|
||||
return false;
|
||||
}
|
||||
|
||||
void JD8_FadeOut() {
|
||||
JD8_FadeStartOut();
|
||||
while (true) {
|
||||
const bool done = JD8_FadeTickStep();
|
||||
JD8_Flip();
|
||||
if (done) break;
|
||||
}
|
||||
}
|
||||
|
||||
void JD8_FadeToPal(JD8_Palette pal) {
|
||||
JD8_FadeStartToPal(pal);
|
||||
while (true) {
|
||||
const bool done = JD8_FadeTickStep();
|
||||
JD8_Flip();
|
||||
if (done) break;
|
||||
}
|
||||
}
|
||||
// Els shims bloquejants `JD8_FadeOut` i `JD8_FadeToPal` han estat
|
||||
// eliminats a Phase B.2: feien un bucle de 32 iteracions amb `JD8_Flip`
|
||||
// entre cada una que només funcionava mentre l'entorn tenia fibers i
|
||||
// `JD8_Flip` cedia el control al Director. Ara tot fade es fa tick a
|
||||
// tick via `scenes::PaletteFade` (que encapsula `JD8_FadeStartOut` /
|
||||
// `JD8_FadeStartToPal` + `JD8_FadeTickStep`).
|
||||
|
||||
@@ -40,10 +40,9 @@ void JD8_BlitCKScroll(int y, JD8_Surface surface, int sx, int sy, int sh, Uint8
|
||||
|
||||
void JD8_BlitCKToSurface(int x, int y, JD8_Surface surface, int sx, int sy, int sw, int sh, JD8_Surface dest, Uint8 colorkey);
|
||||
|
||||
// Converteix la pantalla indexada a ARGB i cedeix el control al Director
|
||||
// (GameFiber::yield). El Director llegirà el framebuffer convertit via
|
||||
// JD8_GetFramebuffer() i tornarà a cridar Fiber::resume() quan toque el
|
||||
// pròxim frame.
|
||||
// Converteix la pantalla indexada a ARGB. El Director crida aquesta
|
||||
// funció al final de cada tick i després llegeix el framebuffer via
|
||||
// JD8_GetFramebuffer() per presentar-lo.
|
||||
void JD8_Flip();
|
||||
|
||||
// Accés al framebuffer ARGB de 320x200 actualitzat per l'última crida a
|
||||
@@ -58,16 +57,13 @@ void JD8_PutPixel(JD8_Surface surface, int x, int y, Uint8 pixel);
|
||||
|
||||
void JD8_SetPaletteColor(Uint8 index, Uint8 r, Uint8 g, Uint8 b);
|
||||
|
||||
// Fades legacy bloquejants (shim damunt la màquina d'estats de sota).
|
||||
void JD8_FadeOut();
|
||||
void JD8_FadeToPal(JD8_Palette pal);
|
||||
|
||||
// API de fade no bloquejant (màquina d'estats). `FadeStart*` inicia el
|
||||
// fade; `FadeTickStep` aplica un pas i retorna `true` quan el fade ha
|
||||
// acabat. Un pas correspon visualment a una iteració del fade original
|
||||
// (32 passos en total). El caller és responsable de fer el Flip entre
|
||||
// passos si el vol veure animat. `FadeIsActive` permet saber si hi ha
|
||||
// un fade en curs per a enllaçar-lo amb un altre subsistema.
|
||||
// L'embolcall `scenes::PaletteFade` ho fa més idiomàtic per a escenes.
|
||||
void JD8_FadeStartOut();
|
||||
void JD8_FadeStartToPal(JD8_Palette pal);
|
||||
bool JD8_FadeTickStep();
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
#include "core/jail/jgame.hpp"
|
||||
|
||||
#include "core/system/fiber.hpp"
|
||||
|
||||
namespace {
|
||||
|
||||
bool quitting = false;
|
||||
@@ -41,12 +39,9 @@ bool JG_ShouldUpdate() {
|
||||
cycle_counter++;
|
||||
return true;
|
||||
}
|
||||
// Encara no toca update: cedim el control al Director per a que puga
|
||||
// processar events, animar l'overlay i mantindre l'àudio viu. Sense
|
||||
// aquest yield, els spin-waits típics de les cinemàtiques
|
||||
// (`while (!JG_ShouldUpdate()) { JI_Update(); ... }`) congelarien
|
||||
// tot el main loop — el fiber no cediria mai.
|
||||
GameFiber::yield();
|
||||
// No toca update — retornem false sense més. Des de Phase B.2 ja no
|
||||
// hi ha fibers: cap caller fa spin-waits (`while (!JG_ShouldUpdate())`)
|
||||
// i el Director pren el control del main loop frame a frame.
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user