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 ed37e88..0000000 Binary files a/examples/composition/blue70.png and /dev/null differ diff --git a/examples/composition/composition.c b/examples/composition/composition.c deleted file mode 100644 index d33a91c..0000000 --- a/examples/composition/composition.c +++ /dev/null @@ -1,156 +0,0 @@ -/*------------------------------------------------------------------------------ -Copyright (c) 2009 The GRRLIB Team - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -------------------------------------------------------------------------------*/ - -//------------------------------------------------------------------------------ -// Test Harness for alpha composition functions -// The composition function and this demo were both written by BlueChip -/* - PaintShopPro_X2 readings: - | | Blue-over-Red | Red-over-Blue | - |--------+---------------+---------------| - | Normal | 0x2D'00'D2'D8 | 0x96'00'69'D8 | - | | | | -*/ -//------------------------------------------------------------------------------ - -#include // 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 56d6e6b..0000000 Binary files a/examples/composition/red50.png and /dev/null differ