mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-25 20:56:53 +01:00
*Removed Metaphrasis (not used anymore)
*Changed WPAD/PAD handle and moved functions to appropiate locations *some code optimizations
This commit is contained in:
parent
b7071bc7b3
commit
787dd53a46
@ -2,8 +2,8 @@
|
||||
<app version="1">
|
||||
<name> USB Loader GX</name>
|
||||
<coder>USB Loader GX Team</coder>
|
||||
<version>1.0 r946</version>
|
||||
<release_date>201009171539</release_date>
|
||||
<version>1.0 r947</version>
|
||||
<release_date>201009171621</release_date>
|
||||
<short_description>Loads games from USB-devices</short_description>
|
||||
<long_description>USB Loader GX is a libwiigui based USB iso loader with a wii-like GUI. You can install games to your HDDs and boot them with shorter loading times.
|
||||
The interactive GUI is completely controllable with WiiMote, Classic Controller or GC Controller.
|
||||
|
File diff suppressed because one or more lines are too long
@ -1,382 +0,0 @@
|
||||
/*
|
||||
* Metaphrasis is a static conversion class for transforming RGBA image
|
||||
* buffers into verious GX texture formats for Wii homebrew development.
|
||||
* Copyright (C) 2008 Armin Tamzarian
|
||||
*
|
||||
* This file is part of Metaphrasis.
|
||||
*
|
||||
* Metaphrasis is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Metaphrasis is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Metaphrasis. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "Metaphrasis.h"
|
||||
|
||||
/**
|
||||
* Default constructor for the Metaphrasis class.
|
||||
*/
|
||||
|
||||
Metaphrasis::Metaphrasis() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Default destructor for the Metaphrasis class.
|
||||
*/
|
||||
|
||||
Metaphrasis::~Metaphrasis() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the specified RGBA data buffer into the I4 texture format
|
||||
*
|
||||
* This routine converts the RGBA data buffer into the I4 texture format and returns a pointer to the converted buffer.
|
||||
*
|
||||
* @param rgbaBuffer Buffer containing the temporarily rendered RGBA data.
|
||||
* @param bufferWidth Pixel width of the data buffer.
|
||||
* @param bufferHeight Pixel height of the data buffer.
|
||||
* @return A pointer to the allocated buffer.
|
||||
*/
|
||||
|
||||
uint32_t* Metaphrasis::convertBufferToI4(uint32_t* rgbaBuffer, uint16_t bufferWidth, uint16_t bufferHeight) {
|
||||
uint32_t bufferSize = bufferWidth * bufferHeight >> 1;
|
||||
uint32_t* dataBufferI4 = (uint32_t *)memalign(32, bufferSize);
|
||||
memset(dataBufferI4, 0x00, bufferSize);
|
||||
|
||||
uint32_t *src = (uint32_t *)rgbaBuffer;
|
||||
uint8_t *dst = (uint8_t *)dataBufferI4;
|
||||
|
||||
for (uint16_t y = 0; y < bufferHeight; y += 8) {
|
||||
for (uint16_t x = 0; x < bufferWidth; x += 8) {
|
||||
for (uint16_t rows = 0; rows < 8; rows++) {
|
||||
*dst++ = (src[((y + rows) * bufferWidth) + (x + 0)] & 0xf0) | ((src[((y + rows) * bufferWidth) + (x + 1)] & 0xf0) >> 4);
|
||||
*dst++ = (src[((y + rows) * bufferWidth) + (x + 2)] & 0xf0) | ((src[((y + rows) * bufferWidth) + (x + 3)] & 0xf0) >> 4);
|
||||
*dst++ = (src[((y + rows) * bufferWidth) + (x + 4)] & 0xf0) | ((src[((y + rows) * bufferWidth) + (x + 5)] & 0xf0) >> 4);
|
||||
*dst++ = (src[((y + rows) * bufferWidth) + (x + 5)] & 0xf0) | ((src[((y + rows) * bufferWidth) + (x + 7)] & 0xf0) >> 4);
|
||||
}
|
||||
}
|
||||
}
|
||||
DCFlushRange(dataBufferI4, bufferSize);
|
||||
|
||||
return dataBufferI4;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the specified RGBA data buffer into the I8 texture format
|
||||
*
|
||||
* This routine converts the RGBA data buffer into the I8 texture format and returns a pointer to the converted buffer.
|
||||
*
|
||||
* @param rgbaBuffer Buffer containing the temporarily rendered RGBA data.
|
||||
* @param bufferWidth Pixel width of the data buffer.
|
||||
* @param bufferHeight Pixel height of the data buffer.
|
||||
* @return A pointer to the allocated buffer.
|
||||
*/
|
||||
|
||||
uint32_t* Metaphrasis::convertBufferToI8(uint32_t* rgbaBuffer, uint16_t bufferWidth, uint16_t bufferHeight) {
|
||||
uint32_t bufferSize = bufferWidth * bufferHeight;
|
||||
uint32_t* dataBufferI8 = (uint32_t *)memalign(32, bufferSize);
|
||||
memset(dataBufferI8, 0x00, bufferSize);
|
||||
|
||||
uint32_t *src = (uint32_t *)rgbaBuffer;
|
||||
uint8_t *dst = (uint8_t *)dataBufferI8;
|
||||
|
||||
for (uint16_t y = 0; y < bufferHeight; y += 4) {
|
||||
for (uint16_t x = 0; x < bufferWidth; x += 8) {
|
||||
for (uint16_t rows = 0; rows < 4; rows++) {
|
||||
*dst++ = src[((y + rows) * bufferWidth) + (x + 0)] & 0xff;
|
||||
*dst++ = src[((y + rows) * bufferWidth) + (x + 1)] & 0xff;
|
||||
*dst++ = src[((y + rows) * bufferWidth) + (x + 2)] & 0xff;
|
||||
*dst++ = src[((y + rows) * bufferWidth) + (x + 3)] & 0xff;
|
||||
*dst++ = src[((y + rows) * bufferWidth) + (x + 4)] & 0xff;
|
||||
*dst++ = src[((y + rows) * bufferWidth) + (x + 5)] & 0xff;
|
||||
*dst++ = src[((y + rows) * bufferWidth) + (x + 6)] & 0xff;
|
||||
*dst++ = src[((y + rows) * bufferWidth) + (x + 7)] & 0xff;
|
||||
}
|
||||
}
|
||||
}
|
||||
DCFlushRange(dataBufferI8, bufferSize);
|
||||
|
||||
return dataBufferI8;
|
||||
}
|
||||
|
||||
/**
|
||||
* Downsample the specified RGBA value data buffer to an IA4 value.
|
||||
*
|
||||
* This routine downsamples the given RGBA data value into the IA4 texture data format.
|
||||
*
|
||||
* @param rgba A 32-bit RGBA value to convert to the IA4 format.
|
||||
* @return The IA4 value of the given RGBA value.
|
||||
*/
|
||||
|
||||
uint8_t Metaphrasis::convertRGBAToIA4(uint32_t rgba) {
|
||||
uint8_t i, a;
|
||||
|
||||
i = (rgba >> 8) & 0xf0;
|
||||
a = (rgba ) & 0xff;
|
||||
|
||||
return i | (a >> 4);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the specified RGBA data buffer into the IA4 texture format
|
||||
*
|
||||
* This routine converts the RGBA data buffer into the IA4 texture format and returns a pointer to the converted buffer.
|
||||
*
|
||||
* @param rgbaBuffer Buffer containing the temporarily rendered RGBA data.
|
||||
* @param bufferWidth Pixel width of the data buffer.
|
||||
* @param bufferHeight Pixel height of the data buffer.
|
||||
* @return A pointer to the allocated buffer.
|
||||
*/
|
||||
|
||||
uint32_t* Metaphrasis::convertBufferToIA4(uint32_t* rgbaBuffer, uint16_t bufferWidth, uint16_t bufferHeight) {
|
||||
uint32_t bufferSize = bufferWidth * bufferHeight;
|
||||
uint32_t* dataBufferIA4 = (uint32_t *)memalign(32, bufferSize);
|
||||
memset(dataBufferIA4, 0x00, bufferSize);
|
||||
|
||||
uint32_t *src = (uint32_t *)rgbaBuffer;
|
||||
uint8_t *dst = (uint8_t *)dataBufferIA4;
|
||||
|
||||
for (uint16_t y = 0; y < bufferHeight; y += 4) {
|
||||
for (uint16_t x = 0; x < bufferWidth; x += 8) {
|
||||
for (uint16_t rows = 0; rows < 4; rows++) {
|
||||
*dst++ = Metaphrasis::convertRGBAToIA4(src[((y + rows) * bufferWidth) + (x + 0)]);
|
||||
*dst++ = Metaphrasis::convertRGBAToIA4(src[((y + rows) * bufferWidth) + (x + 1)]);
|
||||
*dst++ = Metaphrasis::convertRGBAToIA4(src[((y + rows) * bufferWidth) + (x + 2)]);
|
||||
*dst++ = Metaphrasis::convertRGBAToIA4(src[((y + rows) * bufferWidth) + (x + 3)]);
|
||||
*dst++ = Metaphrasis::convertRGBAToIA4(src[((y + rows) * bufferWidth) + (x + 4)]);
|
||||
*dst++ = Metaphrasis::convertRGBAToIA4(src[((y + rows) * bufferWidth) + (x + 5)]);
|
||||
*dst++ = Metaphrasis::convertRGBAToIA4(src[((y + rows) * bufferWidth) + (x + 6)]);
|
||||
*dst++ = Metaphrasis::convertRGBAToIA4(src[((y + rows) * bufferWidth) + (x + 7)]);
|
||||
}
|
||||
}
|
||||
}
|
||||
DCFlushRange(dataBufferIA4, bufferSize);
|
||||
|
||||
return dataBufferIA4;
|
||||
}
|
||||
|
||||
/**
|
||||
* Downsample the specified RGBA value data buffer to an IA8 value.
|
||||
*
|
||||
* This routine downsamples the given RGBA data value into the IA8 texture data format.
|
||||
*
|
||||
* @param rgba A 32-bit RGBA value to convert to the IA8 format.
|
||||
* @return The IA8 value of the given RGBA value.
|
||||
*/
|
||||
|
||||
uint16_t Metaphrasis::convertRGBAToIA8(uint32_t rgba) {
|
||||
uint8_t i, a;
|
||||
|
||||
i = (rgba >> 8) & 0xff;
|
||||
a = (rgba ) & 0xff;
|
||||
|
||||
return (i << 8) | a;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the specified RGBA data buffer into the IA8 texture format
|
||||
*
|
||||
* This routine converts the RGBA data buffer into the IA8 texture format and returns a pointer to the converted buffer.
|
||||
*
|
||||
* @param rgbaBuffer Buffer containing the temporarily rendered RGBA data.
|
||||
* @param bufferWidth Pixel width of the data buffer.
|
||||
* @param bufferHeight Pixel height of the data buffer.
|
||||
* @return A pointer to the allocated buffer.
|
||||
*/
|
||||
|
||||
uint32_t* Metaphrasis::convertBufferToIA8(uint32_t* rgbaBuffer, uint16_t bufferWidth, uint16_t bufferHeight) {
|
||||
uint32_t bufferSize = (bufferWidth * bufferHeight) << 1;
|
||||
uint32_t* dataBufferIA8 = (uint32_t *)memalign(32, bufferSize);
|
||||
memset(dataBufferIA8, 0x00, bufferSize);
|
||||
|
||||
uint32_t *src = (uint32_t *)rgbaBuffer;
|
||||
uint16_t *dst = (uint16_t *)dataBufferIA8;
|
||||
|
||||
for (uint16_t y = 0; y < bufferHeight; y += 4) {
|
||||
for (uint16_t x = 0; x < bufferWidth; x += 4) {
|
||||
for (uint16_t rows = 0; rows < 4; rows++) {
|
||||
*dst++ = Metaphrasis::convertRGBAToIA8(src[((y + rows) * bufferWidth) + (x + 0)]);
|
||||
*dst++ = Metaphrasis::convertRGBAToIA8(src[((y + rows) * bufferWidth) + (x + 1)]);
|
||||
*dst++ = Metaphrasis::convertRGBAToIA8(src[((y + rows) * bufferWidth) + (x + 2)]);
|
||||
*dst++ = Metaphrasis::convertRGBAToIA8(src[((y + rows) * bufferWidth) + (x + 3)]);
|
||||
}
|
||||
}
|
||||
}
|
||||
DCFlushRange(dataBufferIA8, bufferSize);
|
||||
|
||||
return dataBufferIA8;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the specified RGBA data buffer into the RGBA8 texture format
|
||||
*
|
||||
* This routine converts the RGBA data buffer into the RGBA8 texture format and returns a pointer to the converted buffer.
|
||||
*
|
||||
* @param rgbaBuffer Buffer containing the temporarily rendered RGBA data.
|
||||
* @param bufferWidth Pixel width of the data buffer.
|
||||
* @param bufferHeight Pixel height of the data buffer.
|
||||
* @return A pointer to the allocated buffer.
|
||||
*/
|
||||
|
||||
uint32_t* Metaphrasis::convertBufferToRGBA8(uint32_t* rgbaBuffer, uint16_t bufferWidth, uint16_t bufferHeight) {
|
||||
uint32_t bufferSize = (bufferWidth * bufferHeight) << 2;
|
||||
uint32_t* dataBufferRGBA8 = (uint32_t *)memalign(32, bufferSize);
|
||||
memset(dataBufferRGBA8, 0x00, bufferSize);
|
||||
|
||||
uint8_t *src = (uint8_t *)rgbaBuffer;
|
||||
uint8_t *dst = (uint8_t *)dataBufferRGBA8;
|
||||
|
||||
for (uint16_t block = 0; block < bufferHeight; block += 4) {
|
||||
for (uint16_t i = 0; i < bufferWidth; i += 4) {
|
||||
for (uint16_t c = 0; c < 4; c++) {
|
||||
for (uint16_t ar = 0; ar < 4; ar++) {
|
||||
*dst++ = src[(((i + ar) + ((block + c) * bufferWidth)) * 4) + 3];
|
||||
*dst++ = src[((i + ar) + ((block + c) * bufferWidth)) * 4];
|
||||
}
|
||||
}
|
||||
for (uint16_t c = 0; c < 4; c++) {
|
||||
for (uint16_t gb = 0; gb < 4; gb++) {
|
||||
*dst++ = src[(((i + gb) + ((block + c) * bufferWidth)) * 4) + 1];
|
||||
*dst++ = src[(((i + gb) + ((block + c) * bufferWidth)) * 4) + 2];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
DCFlushRange(dataBufferRGBA8, bufferSize);
|
||||
|
||||
return dataBufferRGBA8;
|
||||
}
|
||||
|
||||
/**
|
||||
* Downsample the specified RGBA value data buffer to an RGB565 value.
|
||||
*
|
||||
* This routine downsamples the given RGBA data value into the RGB565 texture data format.
|
||||
* Attribution for this routine is given fully to NoNameNo of GRRLIB Wii library.
|
||||
*
|
||||
* @param rgba A 32-bit RGBA value to convert to the RGB565 format.
|
||||
* @return The RGB565 value of the given RGBA value.
|
||||
*/
|
||||
|
||||
uint16_t Metaphrasis::convertRGBAToRGB565(uint32_t rgba) {
|
||||
uint8_t r, g, b;
|
||||
|
||||
r = (((rgba >> 24) & 0xff) * 31) / 255;
|
||||
g = (((rgba >> 16) & 0xff) * 63) / 255;
|
||||
b = (((rgba >> 8) & 0xff) * 31) / 255;
|
||||
|
||||
return (((r << 6) | g ) << 5 ) | b;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the specified RGBA data buffer into the RGB565 texture format
|
||||
*
|
||||
* This routine converts the RGBA data buffer into the RGB565 texture format and returns a pointer to the converted buffer.
|
||||
*
|
||||
* @param rgbaBuffer Buffer containing the temporarily rendered RGBA data.
|
||||
* @param bufferWidth Pixel width of the data buffer.
|
||||
* @param bufferHeight Pixel height of the data buffer.
|
||||
* @return A pointer to the allocated buffer.
|
||||
*/
|
||||
|
||||
uint32_t* Metaphrasis::convertBufferToRGB565(uint32_t* rgbaBuffer, uint16_t bufferWidth, uint16_t bufferHeight) {
|
||||
uint32_t bufferSize = (bufferWidth * bufferHeight) << 1;
|
||||
uint32_t* dataBufferRGB565 = (uint32_t *)memalign(32, bufferSize);
|
||||
memset(dataBufferRGB565, 0x00, bufferSize);
|
||||
|
||||
uint32_t *src = (uint32_t *)rgbaBuffer;
|
||||
uint16_t *dst = (uint16_t *)dataBufferRGB565;
|
||||
|
||||
for (uint16_t y = 0; y < bufferHeight; y += 4) {
|
||||
for (uint16_t x = 0; x < bufferWidth; x += 4) {
|
||||
for (uint16_t rows = 0; rows < 4; rows++) {
|
||||
*dst++ = Metaphrasis::convertRGBAToRGB565(src[((y + rows) * bufferWidth) + (x + 0)]);
|
||||
*dst++ = Metaphrasis::convertRGBAToRGB565(src[((y + rows) * bufferWidth) + (x + 1)]);
|
||||
*dst++ = Metaphrasis::convertRGBAToRGB565(src[((y + rows) * bufferWidth) + (x + 2)]);
|
||||
*dst++ = Metaphrasis::convertRGBAToRGB565(src[((y + rows) * bufferWidth) + (x + 3)]);
|
||||
}
|
||||
}
|
||||
}
|
||||
DCFlushRange(dataBufferRGB565, bufferSize);
|
||||
|
||||
return dataBufferRGB565;
|
||||
}
|
||||
|
||||
/**
|
||||
* Downsample the specified RGBA value data buffer to an RGB5A3 value.
|
||||
*
|
||||
* This routine downsamples the given RGBA data value into the RGB5A3 texture data format.
|
||||
* Attribution for this routine is given fully to WiiGator via the TehSkeen forum.
|
||||
*
|
||||
* @param rgba A 32-bit RGBA value to convert to the RGB5A3 format.
|
||||
* @return The RGB5A3 value of the given RGBA value.
|
||||
*/
|
||||
|
||||
uint16_t Metaphrasis::convertRGBAToRGB5A3(uint32_t rgba) {
|
||||
uint32_t r, g, b, a;
|
||||
uint16_t color;
|
||||
|
||||
r = (rgba >> 24) & 0xff;
|
||||
g = (rgba >> 16) & 0xff;
|
||||
b = (rgba >> 8) & 0xff;
|
||||
a = (rgba ) & 0xff;
|
||||
|
||||
if (a > 0xe0) {
|
||||
r = r >> 3;
|
||||
g = g >> 3;
|
||||
b = b >> 3;
|
||||
|
||||
color = (r << 10) | (g << 5) | b;
|
||||
color |= 0x8000;
|
||||
} else {
|
||||
r = r >> 4;
|
||||
g = g >> 4;
|
||||
b = b >> 4;
|
||||
a = a >> 5;
|
||||
|
||||
color = (a << 12) | (r << 8) | (g << 4) | b;
|
||||
}
|
||||
|
||||
return color;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the specified RGBA data buffer into the RGB5A3 texture format
|
||||
*
|
||||
* This routine converts the RGBA data buffer into the RGB5A3 texture format and returns a pointer to the converted buffer.
|
||||
*
|
||||
* @param rgbaBuffer Buffer containing the temporarily rendered RGBA data.
|
||||
* @param bufferWidth Pixel width of the data buffer.
|
||||
* @param bufferHeight Pixel height of the data buffer.
|
||||
* @return A pointer to the allocated buffer.
|
||||
*/
|
||||
|
||||
uint32_t* Metaphrasis::convertBufferToRGB5A3(uint32_t* rgbaBuffer, uint16_t bufferWidth, uint16_t bufferHeight) {
|
||||
uint32_t bufferSize = (bufferWidth * bufferHeight) << 1;
|
||||
uint32_t* dataBufferRGB5A3 = (uint32_t *)memalign(32, bufferSize);
|
||||
memset(dataBufferRGB5A3, 0x00, bufferSize);
|
||||
|
||||
uint32_t *src = (uint32_t *)rgbaBuffer;
|
||||
uint16_t *dst = (uint16_t *)dataBufferRGB5A3;
|
||||
|
||||
for (uint16_t y = 0; y < bufferHeight; y += 4) {
|
||||
for (uint16_t x = 0; x < bufferWidth; x += 4) {
|
||||
for (uint16_t rows = 0; rows < 4; rows++) {
|
||||
*dst++ = Metaphrasis::convertRGBAToRGB5A3(src[((y + rows) * bufferWidth) + (x + 0)]);
|
||||
*dst++ = Metaphrasis::convertRGBAToRGB5A3(src[((y + rows) * bufferWidth) + (x + 1)]);
|
||||
*dst++ = Metaphrasis::convertRGBAToRGB5A3(src[((y + rows) * bufferWidth) + (x + 2)]);
|
||||
*dst++ = Metaphrasis::convertRGBAToRGB5A3(src[((y + rows) * bufferWidth) + (x + 3)]);
|
||||
}
|
||||
}
|
||||
}
|
||||
DCFlushRange(dataBufferRGB5A3, bufferSize);
|
||||
|
||||
return dataBufferRGB5A3;
|
||||
}
|
@ -1,116 +0,0 @@
|
||||
/*
|
||||
* Metaphrasis is a static conversion class for transforming RGBA image
|
||||
* buffers into verious GX texture formats for Wii homebrew development.
|
||||
* Copyright (C) 2008 Armin Tamzarian
|
||||
*
|
||||
* This file is part of Metaphrasis.
|
||||
*
|
||||
* Metaphrasis is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Metaphrasis is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Metaphrasis. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** \mainpage Metaphrasis
|
||||
*
|
||||
* \section sec_intro Introduction
|
||||
*
|
||||
* Metaphrasis is a static conversion class for transforming RGBA image buffers into verious GX texture formats for Wii homebrew development.
|
||||
* <br>
|
||||
* Metaphrasis is written in C++ and makes use of a community standard and newly developed algorithms for conversion of 32-bit RGBA data buffers into various GX texture formats common to both the Gamecube and Wii platforms.
|
||||
* <p>
|
||||
* This library was developed in-full by Armin Tamzarian with the support of developers in \#wiibrew on EFnet, Chaosteil of libwiisprite, and DrTwox of GRRLIB.
|
||||
*
|
||||
* \section sec_installation_source Installation (Source Code)
|
||||
*
|
||||
* -# Extract the Metaphrasis archive.
|
||||
* -# Copy the contents of the <i>src</i> directory into your project's development path.
|
||||
* -# Include the Metaphrasis header file in your code using syntax such as the following:
|
||||
* \code
|
||||
* #include "Metaphrasis.h"
|
||||
* \endcode
|
||||
*
|
||||
* \section sec_installation_library Installation (Library)
|
||||
*
|
||||
* -# Extract the Metaphrasis archive.
|
||||
* -# Copy the contents of the <i>lib</i> directory into your <i>devKitPro/libogc</i> directory.
|
||||
* -# Include the Metaphrasis header file in your code using syntax such as the following:
|
||||
* \code
|
||||
* #include "Metaphrasis.h"
|
||||
* \endcode
|
||||
*
|
||||
* \section sec_usage Usage
|
||||
*
|
||||
* -# Create a buffer full of 32-bit RGBA values noting both the pixel height and width of the buffer.
|
||||
* -# Call one of the many conversion routines from within your code. (Note: All methods within the Metaphrasis class are static and thus no class instance need be allocated)
|
||||
* \code
|
||||
* uint32_t* rgba8Buffer = Metaphrasis::convertBufferToRGBA8(rgbaBuffer, bufferWidth, bufferHeight);
|
||||
* \endcode
|
||||
* -# Free your temporary RGBA value buffer if you no longer need said values.
|
||||
*
|
||||
* Currently supported conversion routines are as follows:
|
||||
* \li convertBufferToI4
|
||||
* \li convertBufferToI8
|
||||
* \li convertBufferToIA4
|
||||
* \li convertBufferToIA8
|
||||
* \li convertBufferToRGBA8
|
||||
* \li convertBufferToRGB565
|
||||
* \li convertBufferToRGB5A3
|
||||
*
|
||||
* \section sec_license License
|
||||
*
|
||||
* Metaphrasis is distributed under the GNU Lesser General Public License.
|
||||
*
|
||||
* \section sec_contact Contact
|
||||
*
|
||||
* If you have any suggestions, questions, or comments regarding this library feel free to e-mail me at tamzarian1989 [at] gmail [dawt] com.
|
||||
*/
|
||||
|
||||
#ifndef METAPHRASIS_H_
|
||||
#define METAPHRASIS_H_
|
||||
|
||||
#include <gccore.h>
|
||||
#include <stdint.h>
|
||||
#include <malloc.h>
|
||||
#include <string.h>
|
||||
|
||||
/*! \class Metaphrasis
|
||||
* \brief A static conversion class for transforming RGBA image buffers into verious GX texture formats for
|
||||
* Wii homebrew development.
|
||||
* \author Armin Tamzarian
|
||||
* \version 0.1.0
|
||||
*
|
||||
* Metaphrasis is a static conversion class for transforming RGBA image buffers into verious GX texture formats for
|
||||
* Wii homebrew development. Metaphrasis is written in C++ and makes use of a community standard and newly developed
|
||||
* algorithms for conversion of 32-bit RGBA data buffers into various GX texture formats common to both the Gamecube
|
||||
* and Wii platforms.
|
||||
*/
|
||||
class Metaphrasis {
|
||||
public:
|
||||
Metaphrasis();
|
||||
virtual ~Metaphrasis();
|
||||
|
||||
static uint32_t* convertBufferToI4(uint32_t* rgbaBuffer, uint16_t bufferWidth, uint16_t bufferHeight);
|
||||
static uint32_t* convertBufferToI8(uint32_t* rgbaBuffer, uint16_t bufferWidth, uint16_t bufferHeight);
|
||||
static uint32_t* convertBufferToIA4(uint32_t* rgbaBuffer, uint16_t bufferWidth, uint16_t bufferHeight);
|
||||
static uint32_t* convertBufferToIA8(uint32_t* rgbaBuffer, uint16_t bufferWidth, uint16_t bufferHeight);
|
||||
static uint32_t* convertBufferToRGBA8(uint32_t* rgbaBuffer, uint16_t bufferWidth, uint16_t bufferHeight);
|
||||
static uint32_t* convertBufferToRGB565(uint32_t* rgbaBuffer, uint16_t bufferWidth, uint16_t bufferHeight);
|
||||
static uint32_t* convertBufferToRGB5A3(uint32_t* rgbaBuffer, uint16_t bufferWidth, uint16_t bufferHeight);
|
||||
|
||||
static uint8_t convertRGBAToIA4(uint32_t rgba);
|
||||
static uint16_t convertRGBAToIA8(uint32_t rgba);
|
||||
static uint16_t convertRGBAToRGB565(uint32_t rgba);
|
||||
static uint16_t convertRGBAToRGB5A3(uint32_t rgba);
|
||||
|
||||
};
|
||||
|
||||
#endif /*METAPHRASIS_H_*/
|
@ -24,6 +24,55 @@ int rumbleRequest[4] = {0,0,0,0};
|
||||
GuiTrigger userInput[4];
|
||||
static int rumbleCount[4] = {0,0,0,0};
|
||||
|
||||
/****************************************************************************
|
||||
* UpdatePads
|
||||
*
|
||||
* called by postRetraceCallback in InitGCVideo - scans gcpad and wpad
|
||||
***************************************************************************/
|
||||
void UpdatePads()
|
||||
{
|
||||
WPAD_ScanPads();
|
||||
PAD_ScanPads();
|
||||
|
||||
for (int i=3; i >= 0; i--)
|
||||
{
|
||||
memcpy(&userInput[i].wpad, WPAD_Data(i), sizeof(WPADData));
|
||||
userInput[i].chan = i;
|
||||
userInput[i].pad.btns_d = PAD_ButtonsDown(i);
|
||||
userInput[i].pad.btns_u = PAD_ButtonsUp(i);
|
||||
userInput[i].pad.btns_h = PAD_ButtonsHeld(i);
|
||||
userInput[i].pad.stickX = PAD_StickX(i);
|
||||
userInput[i].pad.stickY = PAD_StickY(i);
|
||||
userInput[i].pad.substickX = PAD_SubStickX(i);
|
||||
userInput[i].pad.substickY = PAD_SubStickY(i);
|
||||
userInput[i].pad.triggerL = PAD_TriggerL(i);
|
||||
userInput[i].pad.triggerR = PAD_TriggerR(i);
|
||||
|
||||
if(Settings.rumble == RumbleOn)
|
||||
DoRumble(i);
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* SetupPads
|
||||
*
|
||||
* Sets up userInput triggers for use
|
||||
***************************************************************************/
|
||||
void SetupPads()
|
||||
{
|
||||
PAD_Init();
|
||||
WPAD_Init();
|
||||
|
||||
// read wiimote accelerometer and IR data
|
||||
WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR);
|
||||
WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight);
|
||||
|
||||
for(int i=0; i < 4; i++)
|
||||
{
|
||||
userInput[i].chan = i;
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* ShutoffRumble
|
||||
***************************************************************************/
|
||||
|
@ -17,6 +17,8 @@
|
||||
|
||||
extern int rumbleRequest[4];
|
||||
|
||||
void SetupPads();
|
||||
void UpdatePads();
|
||||
void ShutoffRumble();
|
||||
void DoRumble(int i);
|
||||
|
||||
|
@ -70,7 +70,6 @@ u8 dbvideo =0;
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
MEM2_init(48);
|
||||
PAD_Init();
|
||||
InitVideo();
|
||||
setlocale(LC_ALL, "en.UTF-8");
|
||||
geckoinit = InitGecko();
|
||||
@ -124,7 +123,6 @@ int main(int argc, char *argv[])
|
||||
|
||||
printf("\n\tCheck for an existing cIOS");
|
||||
CheckForCIOS();
|
||||
printf("\n\tcIOS = %u (Rev %u)",IOS_GetVersion(), IOS_GetRevision());
|
||||
|
||||
// Let's load the cIOS now
|
||||
if(LoadAppCIOS() < 0)
|
||||
@ -134,6 +132,8 @@ int main(int argc, char *argv[])
|
||||
Sys_BackToLoader();
|
||||
}
|
||||
|
||||
printf("\n\tLoaded cIOS = %u (Rev %u)",IOS_GetVersion(), IOS_GetRevision());
|
||||
|
||||
printf("\n\tWaiting for USB: ");
|
||||
if (MountWBFS() < 0)
|
||||
{
|
||||
@ -152,12 +152,9 @@ int main(int argc, char *argv[])
|
||||
|
||||
//! Init the rest of the System
|
||||
Sys_Init();
|
||||
Wpad_Init();
|
||||
SetupPads();
|
||||
InitAudio();
|
||||
|
||||
WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR);
|
||||
WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight);
|
||||
|
||||
char *fontPath = NULL;
|
||||
asprintf(&fontPath, "%sfont.ttf", CFG.theme_path);
|
||||
SetupDefaultFont(fontPath);
|
||||
|
116
source/menu.cpp
116
source/menu.cpp
@ -106,72 +106,74 @@ void HaltGui() {
|
||||
*
|
||||
* Primary thread to allow GUI to respond to state changes, and draws GUI
|
||||
***************************************************************************/
|
||||
static void * UpdateGUI (void *arg) {
|
||||
while (1) {
|
||||
if (guiHalt) {
|
||||
static void * UpdateGUI (void *arg)
|
||||
{
|
||||
int i;
|
||||
|
||||
while (!ExitRequested)
|
||||
{
|
||||
if (guiHalt)
|
||||
{
|
||||
LWP_SuspendThread(guithread);
|
||||
continue;
|
||||
}
|
||||
else {
|
||||
if (!ExitRequested) {
|
||||
mainWindow->Draw();
|
||||
if (Settings.tooltips == TooltipsOn && THEME.show_tooltip != 0 && mainWindow->GetState() != STATE_DISABLED)
|
||||
mainWindow->DrawTooltip();
|
||||
|
||||
for (int i=3; i >= 0; i--) { // so that player 1's cursor appears on top!
|
||||
if (userInput[i].wpad.ir.valid)
|
||||
Menu_DrawImg(userInput[i].wpad.ir.x-48, userInput[i].wpad.ir.y-48, 200.0,
|
||||
96, 96, pointer[i]->GetImage(), userInput[i].wpad.ir.angle, CFG.widescreen? 0.8 : 1, 1, 255,0,0,0,0,0,0,0,0);
|
||||
if (Settings.rumble == RumbleOn) {
|
||||
DoRumble(i);
|
||||
}
|
||||
}
|
||||
mainWindow->Draw();
|
||||
if (Settings.tooltips == TooltipsOn && THEME.show_tooltip != 0 && mainWindow->GetState() != STATE_DISABLED)
|
||||
mainWindow->DrawTooltip();
|
||||
|
||||
Menu_Render();
|
||||
|
||||
for (int i=0; i < 4; i++)
|
||||
mainWindow->Update(&userInput[i]);
|
||||
|
||||
if(bgMusic)
|
||||
bgMusic->UpdateState();
|
||||
|
||||
} else {
|
||||
for (int a = 5; a < 255; a += 10) {
|
||||
if (strcmp(headlessID,"")==0)
|
||||
mainWindow->Draw();
|
||||
Menu_DrawRectangle(0,0,screenwidth,screenheight,(GXColor) {0, 0, 0, a},1);
|
||||
Menu_Render();
|
||||
}
|
||||
mainWindow->RemoveAll();
|
||||
ShutoffRumble();
|
||||
return 0;
|
||||
for (i = 3; i >= 0; i--)
|
||||
{
|
||||
if (userInput[i].wpad.ir.valid)
|
||||
{
|
||||
Menu_DrawImg(userInput[i].wpad.ir.x-48, userInput[i].wpad.ir.y-48, 200.0,
|
||||
96, 96, pointer[i]->GetImage(), userInput[i].wpad.ir.angle, CFG.widescreen? 0.8 : 1, 1, 255,0,0,0,0,0,0,0,0);
|
||||
}
|
||||
}
|
||||
|
||||
switch (Settings.screensaver) {
|
||||
case 1:
|
||||
WPad_SetIdleTime(180);
|
||||
break;
|
||||
case 2:
|
||||
WPad_SetIdleTime(300);
|
||||
break;
|
||||
case 3:
|
||||
WPad_SetIdleTime(600);
|
||||
break;
|
||||
case 4:
|
||||
WPad_SetIdleTime(1200);
|
||||
break;
|
||||
case 5:
|
||||
WPad_SetIdleTime(1800);
|
||||
break;
|
||||
case 6:
|
||||
WPad_SetIdleTime(3600);
|
||||
break;
|
||||
Menu_Render();
|
||||
|
||||
UpdatePads();
|
||||
|
||||
for (i=0; i < 4; i++)
|
||||
mainWindow->Update(&userInput[i]);
|
||||
|
||||
if(bgMusic)
|
||||
bgMusic->UpdateState();
|
||||
|
||||
switch (Settings.screensaver)
|
||||
{
|
||||
case 1:
|
||||
WPad_SetIdleTime(180);
|
||||
break;
|
||||
case 2:
|
||||
WPad_SetIdleTime(300);
|
||||
break;
|
||||
case 3:
|
||||
WPad_SetIdleTime(600);
|
||||
break;
|
||||
case 4:
|
||||
WPad_SetIdleTime(1200);
|
||||
break;
|
||||
case 5:
|
||||
WPad_SetIdleTime(1800);
|
||||
break;
|
||||
case 6:
|
||||
WPad_SetIdleTime(3600);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
for (i = 5; i < 255; i += 10)
|
||||
{
|
||||
if (strcmp(headlessID,"")==0)
|
||||
mainWindow->Draw();
|
||||
Menu_DrawRectangle(0,0,screenwidth,screenheight,(GXColor) {0, 0, 0, i},1);
|
||||
Menu_Render();
|
||||
}
|
||||
mainWindow->RemoveAll();
|
||||
ShutoffRumble();
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -181,7 +183,7 @@ static void * UpdateGUI (void *arg) {
|
||||
* Startup GUI threads
|
||||
***************************************************************************/
|
||||
void InitGUIThreads() {
|
||||
LWP_CreateThread(&guithread, UpdateGUI, NULL, NULL, 32768, LWP_PRIO_HIGHEST);
|
||||
LWP_CreateThread(&guithread, UpdateGUI, NULL, NULL, 65536, LWP_PRIO_HIGHEST);
|
||||
InitProgressThread();
|
||||
InitNetworkThread();
|
||||
|
||||
|
@ -293,8 +293,9 @@ int MenuSettings()
|
||||
GuiWindow w(screenwidth, screenheight);
|
||||
|
||||
int pageToDisplay = 1;
|
||||
while ( pageToDisplay > 0) { //set pageToDisplay to 0 to quit
|
||||
VIDEO_WaitVSync ();
|
||||
while ( pageToDisplay > 0)
|
||||
{
|
||||
usleep(100);
|
||||
|
||||
menu = MENU_NONE;
|
||||
|
||||
@ -611,7 +612,7 @@ int MenuSettings()
|
||||
|
||||
while (menu == MENU_NONE)
|
||||
{
|
||||
VIDEO_WaitVSync ();
|
||||
usleep(100);
|
||||
|
||||
if (shutdown == 1)
|
||||
Sys_Shutdown();
|
||||
@ -645,7 +646,6 @@ int MenuSettings()
|
||||
optionBrowser2.SetClickable(true);
|
||||
ResumeGui();
|
||||
|
||||
VIDEO_WaitVSync ();
|
||||
optionBrowser2.SetEffect(EFFECT_FADE, 20);
|
||||
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
||||
|
||||
@ -656,7 +656,7 @@ int MenuSettings()
|
||||
bool firstRun = true;
|
||||
while (!exit)
|
||||
{
|
||||
VIDEO_WaitVSync ();
|
||||
usleep(100);
|
||||
|
||||
returnhere = 1;
|
||||
|
||||
@ -913,14 +913,13 @@ int MenuSettings()
|
||||
optionBrowser2.SetClickable(true);
|
||||
ResumeGui();
|
||||
|
||||
VIDEO_WaitVSync ();
|
||||
optionBrowser2.SetEffect(EFFECT_FADE, 20);
|
||||
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
||||
|
||||
bool firstRun = true;
|
||||
while (!exit)
|
||||
{
|
||||
VIDEO_WaitVSync ();
|
||||
usleep(100);
|
||||
|
||||
if (shutdown == 1)
|
||||
Sys_Shutdown();
|
||||
@ -1111,14 +1110,13 @@ int MenuSettings()
|
||||
optionBrowser2.SetClickable(true);
|
||||
ResumeGui();
|
||||
|
||||
VIDEO_WaitVSync ();
|
||||
optionBrowser2.SetEffect(EFFECT_FADE, 20);
|
||||
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
||||
|
||||
bool firstRun = true;
|
||||
while (!exit)
|
||||
{
|
||||
VIDEO_WaitVSync ();
|
||||
usleep(100);
|
||||
|
||||
if (shutdown == 1)
|
||||
Sys_Shutdown();
|
||||
@ -1281,7 +1279,6 @@ int MenuSettings()
|
||||
optionBrowser2.SetClickable(true);
|
||||
ResumeGui();
|
||||
|
||||
VIDEO_WaitVSync ();
|
||||
optionBrowser2.SetEffect(EFFECT_FADE, 20);
|
||||
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
||||
|
||||
@ -1289,7 +1286,7 @@ int MenuSettings()
|
||||
bool firstRun = true;
|
||||
while (!exit)
|
||||
{
|
||||
VIDEO_WaitVSync ();
|
||||
usleep(100);
|
||||
|
||||
bool returnhere = true;
|
||||
|
||||
@ -1501,7 +1498,6 @@ int MenuSettings()
|
||||
optionBrowser2.SetClickable(true);
|
||||
ResumeGui();
|
||||
|
||||
VIDEO_WaitVSync ();
|
||||
optionBrowser2.SetEffect(EFFECT_FADE, 20);
|
||||
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
||||
|
||||
@ -1510,7 +1506,7 @@ int MenuSettings()
|
||||
bool firstRun = true;
|
||||
while (!exit)
|
||||
{
|
||||
VIDEO_WaitVSync ();
|
||||
usleep(100);
|
||||
|
||||
if (shutdown == 1)
|
||||
Sys_Shutdown();
|
||||
@ -2096,6 +2092,7 @@ int MenuSettings()
|
||||
cfg_save_global();
|
||||
menu = MENU_DISCLIST;
|
||||
pageToDisplay = 0;
|
||||
backBtn.ResetState();
|
||||
break;
|
||||
}
|
||||
|
||||
@ -2380,8 +2377,9 @@ int GameSettings(struct discHdr * header)
|
||||
struct Game_CFG* game_cfg = CFG_get_game_opt(header->id);
|
||||
|
||||
int pageToDisplay = 1;
|
||||
while ( pageToDisplay > 0) { //set pageToDisplay to 0 to quit
|
||||
VIDEO_WaitVSync ();
|
||||
while ( pageToDisplay > 0)
|
||||
{
|
||||
usleep(100);
|
||||
|
||||
menu = MENU_NONE;
|
||||
|
||||
@ -2485,7 +2483,7 @@ int GameSettings(struct discHdr * header)
|
||||
|
||||
while (menu == MENU_NONE)
|
||||
{
|
||||
VIDEO_WaitVSync ();
|
||||
usleep(100);
|
||||
|
||||
if (shutdown == 1)
|
||||
Sys_Shutdown();
|
||||
@ -2512,7 +2510,6 @@ int GameSettings(struct discHdr * header)
|
||||
optionBrowser2.SetClickable(true);
|
||||
ResumeGui();
|
||||
|
||||
VIDEO_WaitVSync ();
|
||||
optionBrowser2.SetEffect(EFFECT_FADE, 20);
|
||||
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
||||
|
||||
@ -2523,7 +2520,7 @@ int GameSettings(struct discHdr * header)
|
||||
bool firstRun = true;
|
||||
while (!exit)
|
||||
{
|
||||
VIDEO_WaitVSync ();
|
||||
usleep(100);
|
||||
|
||||
returnhere = 1;
|
||||
|
||||
@ -2798,7 +2795,7 @@ int GameSettings(struct discHdr * header)
|
||||
|
||||
while (!exit)
|
||||
{
|
||||
VIDEO_WaitVSync ();
|
||||
usleep(100);
|
||||
|
||||
if (shutdown == 1)
|
||||
Sys_Shutdown();
|
||||
@ -3012,6 +3009,7 @@ int GameSettings(struct discHdr * header)
|
||||
{
|
||||
menu = MENU_DISCLIST;
|
||||
pageToDisplay = 0;
|
||||
backBtn.ResetState();
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -33,33 +33,6 @@ u32 frameCount = 0;
|
||||
u8 * gameScreenTex = NULL; // a GX texture screen capture of the game
|
||||
u8 * gameScreenTex2 = NULL; // a GX texture screen capture of the game (copy)
|
||||
|
||||
/****************************************************************************
|
||||
* UpdatePadsCB
|
||||
*
|
||||
* called by postRetraceCallback in InitGCVideo - scans gcpad and wpad
|
||||
***************************************************************************/
|
||||
static void
|
||||
UpdatePadsCB () {
|
||||
frameCount++;
|
||||
WPAD_ScanPads();
|
||||
PAD_ScanPads();
|
||||
|
||||
for (int i=3; i >= 0; i--) {
|
||||
memcpy(&userInput[i].wpad, WPAD_Data(i), sizeof(WPADData));
|
||||
|
||||
userInput[i].chan = i;
|
||||
userInput[i].pad.btns_d = PAD_ButtonsDown(i);
|
||||
userInput[i].pad.btns_u = PAD_ButtonsUp(i);
|
||||
userInput[i].pad.btns_h = PAD_ButtonsHeld(i);
|
||||
userInput[i].pad.stickX = PAD_StickX(i);
|
||||
userInput[i].pad.stickY = PAD_StickY(i);
|
||||
userInput[i].pad.substickX = PAD_SubStickX(i);
|
||||
userInput[i].pad.substickY = PAD_SubStickY(i);
|
||||
userInput[i].pad.triggerL = PAD_TriggerL(i);
|
||||
userInput[i].pad.triggerR = PAD_TriggerR(i);
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* StartGX
|
||||
*
|
||||
@ -182,9 +155,6 @@ InitVideo () {
|
||||
VIDEO_ClearFrameBuffer (vmode, xfb[1], COLOR_BLACK);
|
||||
VIDEO_SetNextFramebuffer (xfb[0]);
|
||||
|
||||
// video callback
|
||||
VIDEO_SetPostRetraceCallback ((VIRetraceCallback)UpdatePadsCB);
|
||||
|
||||
VIDEO_SetBlack (FALSE);
|
||||
VIDEO_Flush ();
|
||||
VIDEO_WaitVSync ();
|
||||
@ -251,6 +221,7 @@ void Menu_Render() {
|
||||
VIDEO_SetNextFramebuffer(xfb[whichfb]);
|
||||
VIDEO_Flush();
|
||||
VIDEO_WaitVSync();
|
||||
frameCount++;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
Loading…
Reference in New Issue
Block a user