[#91] Re: Fraktal zoom rotator

@Gandalf, post #88

No a odpalał ktoś te moje plazmopodobne coś np. na MOSie/AOS4 ? Powinno iść (i wykrywać ESC/Enter). Czy w full screen daje więcej FPS niż w okienku na WB ?

Ostatnia aktualizacja: 24.10.2023 23:02:11 przez pisklak
[#92] Re: Fraktal zoom rotator

@pisklak, post #91

A kompilowałeś dla PowerPC?
[#93] Re: Fraktal zoom rotator

@tukinem, post #92

Na emulacji m68k na PPC też pójdzie.
[#94] Re: Fraktal zoom rotator

@Norbert, post #93

No w teorii to chyba kompilator ECX potrafi generować PPC o ile dobrze pamiętam. Ale to po prostu powinno pójść na emulatorze 68k na MOSie i AOS4.
[#95] Re: Fraktal zoom rotator

@Stoopi, post #74

Jaki konfig?
[#96] Re: Fraktal zoom rotator

@tukinem, post #22

w ACE też można ;)

Marginesy są bycze z tą bitmapą 800x600, popracuję nad tym żeby nie były potrzebne. Szybki zrzut bufora pokazuje że dość łatwo to można ograniczyć do ~400x330, a dalsza redukcja nie powinna być jakaś super trudna.



#include <ace/managers/viewport/simplebuffer.h>
#include <ace/managers/key.h>
#include <ace/managers/system.h>
#include <ace/managers/rand.h>
#include <ace/managers/blit.h>
#include <ace/utils/chunky.h>

static tView *s_pView;
static tVPort *s_pVPort;
static tSimpleBufferManager *s_pBfr;
static tRandManager s_sRand;

static UWORD s_sz;
static ULONG s_ps;

void gsTestTwisterCreate(void) {
	// Prepare view & viewport
	s_pView = viewCreate(0,
		TAG_VIEW_GLOBAL_PALETTE, 1,
		TAG_DONE
	);
	s_pVPort = vPortCreate(0,
		TAG_VPORT_VIEW, s_pView,
		TAG_VPORT_BPP, 2,
		TAG_DONE
	);
	s_pBfr = simpleBufferCreate(0,
		TAG_SIMPLEBUFFER_VPORT, s_pVPort,
		TAG_SIMPLEBUFFER_BITMAP_FLAGS, BMF_CLEAR,
		TAG_SIMPLEBUFFER_IS_DBLBUF, 1,
		TAG_SIMPLEBUFFER_BOUND_WIDTH, 800,
		TAG_SIMPLEBUFFER_BOUND_HEIGHT, 600,
		TAG_DONE
	);

	// Init stuff
	s_sz = 32;
	s_ps = 0;
	s_pVPort->pPalette[0] = 0x000;
	s_pVPort->pPalette[1] = 0xF00;
	s_pVPort->pPalette[2] = 0x0F0;
	s_pVPort->pPalette[3] = 0x00F;

	// testGrid()
	cameraSetCoord(s_pBfr->pCamera, 150, 180);
	randInit(&s_sRand, 1911, 2184);

	// Display view with its viewports
	systemUnuse();
	viewLoad(s_pView);
}

void gsTestTwisterLoop(void) {
	if (keyUse(KEY_ESCAPE)) {
		stateChange(g_pGameStateManager, &g_pTestStates[TEST_STATE_MENU]);
		return;
	}

	if(keyCheck(KEY_UP)) {
		cameraMoveBy(s_pBfr->pCamera, 0, -1);
	}
	if(keyCheck(KEY_DOWN)) {
		cameraMoveBy(s_pBfr->pCamera, 0, 1);
	}
	if(keyCheck(KEY_LEFT)) {
		cameraMoveBy(s_pBfr->pCamera, -1, 0);
	}
	if(keyCheck(KEY_RIGHT)) {
		cameraMoveBy(s_pBfr->pCamera, 1, 0);
	}
	if(keyCheck(KEY_R)) {
		cameraSetCoord(s_pBfr->pCamera, 150, 180);
	}
	if(keyCheck(KEY_B)) {
		bitmapSaveBmp(s_pBfr->pFront, s_pVPort->pPalette, "twister.bmp");
	}

	for(UWORD y = 298; y <= 302; ++y) {
		for(UWORD x = 284; x <= 288;  ++x) {
			UBYTE ubColor = randUw(&s_sRand) & 3;
			chunkyToPlanar(ubColor, x + 2, y + 2, s_pBfr->pFront);
		}
	}

	UWORD shift = 0;
	s_ps += 1;

	// for(UBYTE i = 0; i <= 4; ++i) {
		shift = (shift << 1) | ((s_ps >> 0) & 1);
		shift = (shift << 1) | ((s_ps >> 1) & 1);
		shift = (shift << 1) | ((s_ps >> 2) & 1);
		shift = (shift << 1) | ((s_ps >> 3) & 1);
		shift = (shift << 1) | ((s_ps >> 4) & 1);
	// }

	for(UBYTE y = 4; y <= 13; ++y) {
		UWORD yy = y * 32 + shift;
		for(UBYTE x = 3; x <= 14; ++x) {
			UWORD xx = x * 32 + shift;

			UWORD uwSrcX = xx + (16 - y) - x;
			UWORD uwSrcY = yy + (16 - y) + x;
			UWORD uwDstX = xx;
			UWORD uwDstY = yy + 16;
			blitCopy(
				s_pBfr->pFront, uwSrcX, uwSrcY,
				s_pBfr->pBack, uwDstX, uwDstY, 32, 32, MINTERM_COOKIE
			);
		}
	}

	viewProcessManagers(s_pView);
	copProcessBlocks();
	vPortWaitForEnd(s_pVPort);
}

void gsTestTwisterDestroy(void) {
	systemUse();
	// Destroy buffer, view & viewport
	viewDestroy(s_pView);
}


Ostatnia aktualizacja: 27.10.2023 12:24:34 przez teh_KaiN
3
[#97] Re: Fraktal zoom rotator

@teh_KaiN, post #96

Marginesy są bycze z tą bitmapą 800x600, popracuję nad tym żeby nie były potrzebne. Szybki zrzut bufora pokazuje że dość łatwo to można ograniczyć do ~400x330, a dalsza redukcja nie powinna być jakaś super trudna.

Przy 16x16 kafelków i rozmiarze kafelka 32px x 32px, wystarczy generować 17x17 kafelków i schować z lewej i z góry po 32px. Oznacza to, że pokazujemy 512px x 512px przy generowaniu bitmapy 544px x 544px.
Nie wiadomo dlaczego w pierwotnym kodzie ktoś zaczął generowanie od klocków o indeksach x=4 oraz y=4 (i stąd wymagane było przesunięcie o 150/180).
[#98] Re: Fraktal zoom rotator

@Gordian, post #97

Marginesy pewnie da radę jeszcze bardziej zmniejszyć, bo zgrubny clipping wymaganych operacji na blitterze nie powinien być kosztowny ani skomplikowany. Co do marginesów, to stawiam że to był szkic kodu albo taka wersja była wystarczająco dobra dla danego zastosowania - czy to eksperymentu, czy jakiejś pięciominutowej produkcji.

Swoją drogą fajnie że temat tak chwycił, bo powstał z tego kody swoisty kamień z Rosetty. Mamy implementację w amosie, blitzu, C, E, to teraz może ktoś jeszcze się skusi na jakąś egzotykę. ;)

Ostatnia aktualizacja: 27.10.2023 16:22:15 przez teh_KaiN
[#99] Re: Fraktal zoom rotator

@karolb, post #95

to jest puszczone na pistormie 32lite. Skomiluje i sprawdzę na różnych konfigach.
[#100] Re: Fraktal zoom rotator

@teh_KaiN, post #96

Czegoś tu chyba brakuje? Skąd program wie, z której funkcji ma ruszyć? Poza tym nigdzie nie widzę utworzenia g_pGameStateManager. Chyba że to się dzieje gdzieś w trzewiach samego ACE'a?
[#101] Re: Fraktal zoom rotator

@diobou, post #100

https://github.com/AmigaPorts/ACE/blob/master/showcase/src/game.c - tutaj masz entrypoint.
[#102] Re: Fraktal zoom rotator

@pisklak, post #89

Tym razem dzięki pomocy życzliwych ludzi mam nadzieję że to moje coś plazmopodobne będzie chodziło nieco lepiej na "prawilnym" 060 z RTG. Teraz do plasmaine można podawać następujące argumenty: oryginal,shogoth1,shogoth2,tron1 i nowaitvbl. Sa to po prostu (poza nowaitvbl które wyłącza synchronizacje z ramką) różne wersje krytycznej części programu przepisane w ASMie (dzięki uprzejmości życzliwych ludzi których pozdrawiam). Mam nadzieję sie dowiedzieć że na 060 jest teraz więcej niz 6 FPS :)
1
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem