From f314c0521f3e4eb13cb19efed3916ddbe889e06f Mon Sep 17 00:00:00 2001 From: Crayon2000 Date: Wed, 25 Nov 2009 21:25:17 +0000 Subject: [PATCH] [CHG] GRRLIB_Screen2Texture should be used for composition, NoNameNo will make a demo soon --- GRRLIB/GRRLIB/GRRLIB_texEdit.c | 63 ------------ GRRLIB/GRRLIB/grrlib.h | 8 -- GRRLIB/GRRLIB/grrlib/GRRLIB__lib.h | 3 - examples/composition/Makefile | 76 -------------- examples/composition/blue70.png | Bin 2819 -> 0 bytes examples/composition/composition.c | 156 ----------------------------- examples/composition/red50.png | Bin 3386 -> 0 bytes 7 files changed, 306 deletions(-) delete mode 100644 examples/composition/Makefile delete mode 100644 examples/composition/blue70.png delete mode 100644 examples/composition/composition.c delete mode 100644 examples/composition/red50.png diff --git a/GRRLIB/GRRLIB/GRRLIB_texEdit.c b/GRRLIB/GRRLIB/GRRLIB_texEdit.c index 182cac0..4638137 100644 --- a/GRRLIB/GRRLIB/GRRLIB_texEdit.c +++ b/GRRLIB/GRRLIB/GRRLIB_texEdit.c @@ -336,66 +336,3 @@ GRRLIB_texImg* GRRLIB_LoadTextureJPG (const u8 *my_jpg) { GRRLIB_FlushTex( my_texture ); return my_texture; } - -/** - * Compose a layer/sprite to a canvas/textured-image. - * Currently only performs "a-over-b (normal) alpha compositing" (opacity) - * Ie. Light source is behind the eye, not behind the canvas! - * @author BlueChip - * @param xoff The x-offset within the canvas (negative values allowed) - * @param yoff The y-offset within the canvas (negative values allowed) - * @param layer The layer/sprite to draw - * @param canvas The canvas/textured-image on which to draw - * @param mode Currently unused - will be composition mode - */ -void GRRLIB_Compose( int xoff, int yoff, GRRLIB_texImg* layer, - GRRLIB_texImg* canvas, GRRLIB_ComposeMode mode ) -{ - int x, y; // x & y on layer - int cnv_x, cnv_y; // x & y on canvas - - float cnv_a, lyr_a, alpha; // Alpha of canvas & layer & result - u32 cnv_c, lyr_c; // Colour of pixel from canvas & layer - u32 new_r, new_g, new_b, new_a; // R, G, B & A values of result - - // Loop through the layer, one pixel at a time - for (y = 0; y < layer->h; y++) { - cnv_y = y + yoff; // y coord of canvas pixel to edit - if (cnv_y < 0) continue ; // not on the canvas yet - if (cnv_y >= canvas->h) break; // off the bottom of the canvas - - for (x = 0; x < layer->w; x++) { - cnv_x = x + xoff; // x coord of canvas pixel to edit - if (cnv_x < 0) continue ; // not on the canvas yet - if (cnv_x >= canvas->h) break; // off the right of the canvas - - // Grab the working pixels from the canvas and layer - cnv_c = GRRLIB_GetPixelFromtexImg(cnv_x, cnv_y, canvas); - lyr_c = GRRLIB_GetPixelFromtexImg(x, y, layer); - - // Calculate alpha value as 0.0 to 1.0 in 255th's - cnv_a = A(cnv_c) /255.0; - lyr_a = A(lyr_c) /255.0; - - // Perform desired composition - switch (mode) { - default: - case GRRLIB_COMPOSE_NORMAL : - // Perform "a-over-b (normal) alpha compositing" (opacity) - // http://en.wikipedia.org/wiki/Alpha_compositing - new_a = (u32)( A(lyr_c) + (A(cnv_c) *(1.0 -lyr_a)) ); - alpha = new_a /255.0; - new_r = ( (R(lyr_c) *lyr_a) + (R(cnv_c) *cnv_a *(1 -lyr_a)) ) /alpha; - new_g = ( (G(lyr_c) *lyr_a) + (G(cnv_c) *cnv_a *(1 -lyr_a)) ) /alpha; - new_b = ( (B(lyr_c) *lyr_a) + (B(cnv_c) *cnv_a *(1 -lyr_a)) ) /alpha; - break; - } - - // Replace the old canvas pixel with the new one - GRRLIB_SetPixelTotexImg( cnv_x, cnv_y, canvas, - RGBA(new_r, new_g, new_b, new_a) ); - }//for x - }// for y - - GRRLIB_FlushTex(canvas); -} diff --git a/GRRLIB/GRRLIB/grrlib.h b/GRRLIB/GRRLIB/grrlib.h index 43ed772..e2bf379 100644 --- a/GRRLIB/GRRLIB/grrlib.h +++ b/GRRLIB/GRRLIB/grrlib.h @@ -65,14 +65,6 @@ typedef unsigned int uint; //============================================================================== // typedefs, enumerators & structs //============================================================================== -/** - * Compositions Modes. - */ -typedef enum Composition_Modes { - GRRLIB_COMPOSE_NORMAL, /**< NORMAL : a-over-b alpha composition (normal) */ -} GRRLIB_ComposeMode; - -//------------------------------------------------------------------------------ /** * GRRLIB Blending Modes. */ diff --git a/GRRLIB/GRRLIB/grrlib/GRRLIB__lib.h b/GRRLIB/GRRLIB/grrlib/GRRLIB__lib.h index d682d80..e7ecee7 100644 --- a/GRRLIB/GRRLIB/grrlib/GRRLIB__lib.h +++ b/GRRLIB/GRRLIB/grrlib/GRRLIB__lib.h @@ -125,8 +125,5 @@ GRRLIB_texImg* GRRLIB_LoadTexture (const u8 *my_img) ; GRRLIB_texImg* GRRLIB_LoadTexturePNG (const u8 *my_png) ; GRRLIB_texImg* GRRLIB_LoadTextureJPG (const u8 *my_jpg) ; GRRLIB_texImg* GRRLIB_LoadTextureBMP (const u8 *my_bmp) ; -void GRRLIB_Compose (int xoff, int yoff, GRRLIB_texImg* layer, - GRRLIB_texImg* canvas, - GRRLIB_ComposeMode mode) ; #endif // __GRRLIB_FNLIB_H__ diff --git a/examples/composition/Makefile b/examples/composition/Makefile deleted file mode 100644 index ba8ca35..0000000 --- a/examples/composition/Makefile +++ /dev/null @@ -1,76 +0,0 @@ -# Quick'n'dirty makefile [BC] v2 - -ifeq ($(strip $(DEVKITPPC)),) - $(error "Use export DEVKITPPC=devkitPPC and try again") -endif - -ifeq ($(strip $(DEVKITPRO)),) - $(error "Use export DEVKITPRO=devkitPRO and try again") -endif - -APP := compose -ELF := $(APP).elf -DOL := $(APP).dol -MAP := $(notdir $(ELF)).map - -LIBS := -lgrrlib -lpngu -lpng -ljpeg -lz -lfat -LIBS += -lwiiuse -#LIBS += -lmodplay -lasnd -LIBS += -lbte -logc -LIBS += -lm - -BINDIR := $(DEVKITPPC)/bin -PREFIX := $(BINDIR)/powerpc-eabi- -CC := $(PREFIX)gcc -CXX := $(PREFIX)g++ -AR := $(PREFIX)ar -AS := $(PREFIX)as -LD := $(CC) -OBJCOPY := $(PREFIX)objcopy -ELF2DOL := $(BINDIR)/elf2dol -UPLOAD := $(BINDIR)/wiiload - -OGC := $(DEVKITPRO)/libogc -INCD := $(OGC)/include -LIBD := $(OGC)/lib/wii - -MACHDEP := -DGEKKO -mrvl -mcpu=750 -meabi -mhard-float -CFLAGS := -O2 -Wall $(MACHDEP) -I $(INCD) - -LDFLAGS = $(MACHDEP) -Wl,-Map,$(MAP) -LIBPATHS := -L$(DEVKITPRO)/libogc/lib/wii - -SRC := $(shell ls *.c) -SRCOBJ := $(patsubst %.c,%.o,$(SRC)) - -RES := $(shell ls *.png) -RESOBJ := $(patsubst %.png,%.o,$(RES)) -RESC := $(patsubst %.png,%.c,$(RES)) -RESH := $(patsubst %.png,%.h,$(RES)) - -OBJ := $(RESOBJ) $(SRCOBJ) - -all : $(DOL) - -$(DOL) : $(ELF) - @echo Converting to: $@ - @$(ELF2DOL) $< $@ - -$(ELF) : $(OBJ) - @echo Linking as: $@ - @$(CC) $^ $(LDFLAGS) $(LIBPATHS) $(LIBS) -o $@ - -clean : - rm -f $(OBJ) $(RESC) $(RESH) $(ELF) $(DOL) $(MAP) - -run : $(DOL) - $(UPLOAD) $(DOL) - -%.o : %.c - @echo Compiling: $< - @$(CC) $(CFLAGS) -c $< -o $@ - -.PRECIOUS : %.c -%.c : %.png - @echo Converting resource: $< - @$(BINDIR)/raw2c.exe $< 2>nul diff --git a/examples/composition/blue70.png b/examples/composition/blue70.png deleted file mode 100644 index ed37e88200ab7d76cd6ed359f023484286bd494c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2819 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 // exit -#include -#include - -#include "red50.h" -#include "blue70.h" - -//------------------------------------------------------------------------------ -void wscan(ir_t* ir) ; - -// Wiimote overscan (to allow the cursor to move off the dge of the screen) -#define WOVERX (200) -#define WOVERY (300) - -#define WMU_MAX (2) // How many wiimotes to read - -ir_t ir[WMU_MAX]; - -//------------------------------------------------------------------------------ -void test_compose(void) -{ - int redOnTop = 0; // Red square starts behind the blue one - - // Our two translucent test images - GRRLIB_texImg* red = GRRLIB_LoadTexture(red50); - GRRLIB_texImg* blu = GRRLIB_LoadTexture(blue70); - - // The canvas we will be composing on - GRRLIB_texImg* cnv = GRRLIB_CreateEmptyTexture(400,400); - - // Loop until home key pressed - do { - // Scan the wiimotes - wscan(ir); - - // 'A' toggles z-coord of red sqaure (on-top / behind) - if (WPAD_ButtonsDown(0) & WPAD_BUTTON_A) redOnTop ^= 1 ; - - // Clear canvas - GRRLIB_ClearTex(cnv); - - // Compose canvas - if (!redOnTop) - GRRLIB_Compose(ir[0].x-180,ir[0].y-180, red, cnv, GRRLIB_COMPOSE_NORMAL); - GRRLIB_Compose(125,125, blu, cnv, GRRLIB_COMPOSE_NORMAL) ; - if ( redOnTop) - GRRLIB_Compose(ir[0].x-180,ir[0].y-180, red, cnv, GRRLIB_COMPOSE_NORMAL); - - // Paint the screen black - GRRLIB_FillScreen(0x000000FF); - - // Draw frame - GRRLIB_SetColorRGBA(0x808080FF); - GRRLIB_Rectangle(38,38,404,404,false); - GRRLIB_Rectangle(39,39,402,402,false); - - // Draw Test bar - GRRLIB_SetColorRGBA(0xFFFFFFFF); - GRRLIB_Rectangle(283,50,20,380, true); - - // Draw Composed Canvas - GRRLIB_DrawImg(40,40, cnv); - - // Test card (alpha performed by Wii) - GRRLIB_Rectangle(570,50,20,450, true); - GRRLIB_DrawImg(450, 65, red); - GRRLIB_DrawImg(450,165, blu); - GRRLIB_DrawImg(450,265, red); - - // Draw it [and workaround bug in GRRLIB] - GRRLIB_Render(); - if (rmode->viTVMode &VI_NON_INTERLACE) VIDEO_WaitVSync() ; - - } while(!(WPAD_ButtonsDown(0) & WPAD_BUTTON_HOME)); // Exit on home key - - // Free up the resources we are using to hold the canvas and layers - GRRLIB_FreeTexture(blu); - GRRLIB_FreeTexture(red); - GRRLIB_FreeTexture(cnv); - -} - -//------------------------------------------------------------------------------ -void wscan(ir_t* ir) -{ - int i; - - WPAD_ScanPads(); - - for (i = 0; i < WMU_MAX; i++) { - WPAD_IR(i, &ir[i]); - ir->x -= WOVERX/2; - ir->y -= WOVERY/2; - } -} - -//------------------------------------------------------------------------------ -int main(int argc, char** argv) -{ - (void)argc; - (void)argv; - - int i; - - // Init graphics subsystem - GRRLIB_Init(); - - // Init the Wiimotes - WPAD_Init(); - for (i = 0; i < WMU_MAX; i++) { - WPAD_SetVRes(i, rmode->fbWidth+WOVERX, rmode->xfbHeight+WOVERY); - WPAD_SetDataFormat(i, WPAD_FMT_BTNS_ACC_IR); - } - - // Call the demo - test_compose(); - - // Clear up memory - GRRLIB_Exit(); - - exit(0); -} diff --git a/examples/composition/red50.png b/examples/composition/red50.png deleted file mode 100644 index 56d6e6b9ad1503ef08f9f3abf3e37275ae63df21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3386 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