*Removed Metaphrasis (not used anymore)

*Changed WPAD/PAD handle and moved functions to appropiate locations
*some code optimizations
This commit is contained in:
dimok321 2010-09-17 17:48:16 +00:00
parent b7071bc7b3
commit 787dd53a46
10 changed files with 150 additions and 629 deletions

View File

@ -2,8 +2,8 @@
<app version="1"> <app version="1">
<name> USB Loader GX</name> <name> USB Loader GX</name>
<coder>USB Loader GX Team</coder> <coder>USB Loader GX Team</coder>
<version>1.0 r946</version> <version>1.0 r947</version>
<release_date>201009171539</release_date> <release_date>201009171621</release_date>
<short_description>Loads games from USB-devices</short_description> <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. <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. The interactive GUI is completely controllable with WiiMote, Classic Controller or GC Controller.

File diff suppressed because one or more lines are too long

View File

@ -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;
}

View File

@ -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_*/

View File

@ -24,6 +24,55 @@ int rumbleRequest[4] = {0,0,0,0};
GuiTrigger userInput[4]; GuiTrigger userInput[4];
static int rumbleCount[4] = {0,0,0,0}; 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 * ShutoffRumble
***************************************************************************/ ***************************************************************************/

View File

@ -17,6 +17,8 @@
extern int rumbleRequest[4]; extern int rumbleRequest[4];
void SetupPads();
void UpdatePads();
void ShutoffRumble(); void ShutoffRumble();
void DoRumble(int i); void DoRumble(int i);

View File

@ -70,7 +70,6 @@ u8 dbvideo =0;
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
MEM2_init(48); MEM2_init(48);
PAD_Init();
InitVideo(); InitVideo();
setlocale(LC_ALL, "en.UTF-8"); setlocale(LC_ALL, "en.UTF-8");
geckoinit = InitGecko(); geckoinit = InitGecko();
@ -124,7 +123,6 @@ int main(int argc, char *argv[])
printf("\n\tCheck for an existing cIOS"); printf("\n\tCheck for an existing cIOS");
CheckForCIOS(); CheckForCIOS();
printf("\n\tcIOS = %u (Rev %u)",IOS_GetVersion(), IOS_GetRevision());
// Let's load the cIOS now // Let's load the cIOS now
if(LoadAppCIOS() < 0) if(LoadAppCIOS() < 0)
@ -134,6 +132,8 @@ int main(int argc, char *argv[])
Sys_BackToLoader(); Sys_BackToLoader();
} }
printf("\n\tLoaded cIOS = %u (Rev %u)",IOS_GetVersion(), IOS_GetRevision());
printf("\n\tWaiting for USB: "); printf("\n\tWaiting for USB: ");
if (MountWBFS() < 0) if (MountWBFS() < 0)
{ {
@ -152,12 +152,9 @@ int main(int argc, char *argv[])
//! Init the rest of the System //! Init the rest of the System
Sys_Init(); Sys_Init();
Wpad_Init(); SetupPads();
InitAudio(); InitAudio();
WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR);
WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight);
char *fontPath = NULL; char *fontPath = NULL;
asprintf(&fontPath, "%sfont.ttf", CFG.theme_path); asprintf(&fontPath, "%sfont.ttf", CFG.theme_path);
SetupDefaultFont(fontPath); SetupDefaultFont(fontPath);

View File

@ -106,72 +106,74 @@ void HaltGui() {
* *
* Primary thread to allow GUI to respond to state changes, and draws GUI * Primary thread to allow GUI to respond to state changes, and draws GUI
***************************************************************************/ ***************************************************************************/
static void * UpdateGUI (void *arg) { static void * UpdateGUI (void *arg)
while (1) { {
if (guiHalt) { int i;
while (!ExitRequested)
{
if (guiHalt)
{
LWP_SuspendThread(guithread); 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! mainWindow->Draw();
if (userInput[i].wpad.ir.valid) if (Settings.tooltips == TooltipsOn && THEME.show_tooltip != 0 && mainWindow->GetState() != STATE_DISABLED)
Menu_DrawImg(userInput[i].wpad.ir.x-48, userInput[i].wpad.ir.y-48, 200.0, mainWindow->DrawTooltip();
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);
}
}
Menu_Render(); for (i = 3; i >= 0; i--)
{
for (int i=0; i < 4; i++) if (userInput[i].wpad.ir.valid)
mainWindow->Update(&userInput[i]); {
Menu_DrawImg(userInput[i].wpad.ir.x-48, userInput[i].wpad.ir.y-48, 200.0,
if(bgMusic) 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);
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;
} }
} }
switch (Settings.screensaver) { Menu_Render();
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;
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; return NULL;
} }
@ -181,7 +183,7 @@ static void * UpdateGUI (void *arg) {
* Startup GUI threads * Startup GUI threads
***************************************************************************/ ***************************************************************************/
void InitGUIThreads() { void InitGUIThreads() {
LWP_CreateThread(&guithread, UpdateGUI, NULL, NULL, 32768, LWP_PRIO_HIGHEST); LWP_CreateThread(&guithread, UpdateGUI, NULL, NULL, 65536, LWP_PRIO_HIGHEST);
InitProgressThread(); InitProgressThread();
InitNetworkThread(); InitNetworkThread();

View File

@ -293,8 +293,9 @@ int MenuSettings()
GuiWindow w(screenwidth, screenheight); GuiWindow w(screenwidth, screenheight);
int pageToDisplay = 1; int pageToDisplay = 1;
while ( pageToDisplay > 0) { //set pageToDisplay to 0 to quit while ( pageToDisplay > 0)
VIDEO_WaitVSync (); {
usleep(100);
menu = MENU_NONE; menu = MENU_NONE;
@ -611,7 +612,7 @@ int MenuSettings()
while (menu == MENU_NONE) while (menu == MENU_NONE)
{ {
VIDEO_WaitVSync (); usleep(100);
if (shutdown == 1) if (shutdown == 1)
Sys_Shutdown(); Sys_Shutdown();
@ -645,7 +646,6 @@ int MenuSettings()
optionBrowser2.SetClickable(true); optionBrowser2.SetClickable(true);
ResumeGui(); ResumeGui();
VIDEO_WaitVSync ();
optionBrowser2.SetEffect(EFFECT_FADE, 20); optionBrowser2.SetEffect(EFFECT_FADE, 20);
while (optionBrowser2.GetEffect() > 0) usleep(50); while (optionBrowser2.GetEffect() > 0) usleep(50);
@ -656,7 +656,7 @@ int MenuSettings()
bool firstRun = true; bool firstRun = true;
while (!exit) while (!exit)
{ {
VIDEO_WaitVSync (); usleep(100);
returnhere = 1; returnhere = 1;
@ -913,14 +913,13 @@ int MenuSettings()
optionBrowser2.SetClickable(true); optionBrowser2.SetClickable(true);
ResumeGui(); ResumeGui();
VIDEO_WaitVSync ();
optionBrowser2.SetEffect(EFFECT_FADE, 20); optionBrowser2.SetEffect(EFFECT_FADE, 20);
while (optionBrowser2.GetEffect() > 0) usleep(50); while (optionBrowser2.GetEffect() > 0) usleep(50);
bool firstRun = true; bool firstRun = true;
while (!exit) while (!exit)
{ {
VIDEO_WaitVSync (); usleep(100);
if (shutdown == 1) if (shutdown == 1)
Sys_Shutdown(); Sys_Shutdown();
@ -1111,14 +1110,13 @@ int MenuSettings()
optionBrowser2.SetClickable(true); optionBrowser2.SetClickable(true);
ResumeGui(); ResumeGui();
VIDEO_WaitVSync ();
optionBrowser2.SetEffect(EFFECT_FADE, 20); optionBrowser2.SetEffect(EFFECT_FADE, 20);
while (optionBrowser2.GetEffect() > 0) usleep(50); while (optionBrowser2.GetEffect() > 0) usleep(50);
bool firstRun = true; bool firstRun = true;
while (!exit) while (!exit)
{ {
VIDEO_WaitVSync (); usleep(100);
if (shutdown == 1) if (shutdown == 1)
Sys_Shutdown(); Sys_Shutdown();
@ -1281,7 +1279,6 @@ int MenuSettings()
optionBrowser2.SetClickable(true); optionBrowser2.SetClickable(true);
ResumeGui(); ResumeGui();
VIDEO_WaitVSync ();
optionBrowser2.SetEffect(EFFECT_FADE, 20); optionBrowser2.SetEffect(EFFECT_FADE, 20);
while (optionBrowser2.GetEffect() > 0) usleep(50); while (optionBrowser2.GetEffect() > 0) usleep(50);
@ -1289,7 +1286,7 @@ int MenuSettings()
bool firstRun = true; bool firstRun = true;
while (!exit) while (!exit)
{ {
VIDEO_WaitVSync (); usleep(100);
bool returnhere = true; bool returnhere = true;
@ -1501,7 +1498,6 @@ int MenuSettings()
optionBrowser2.SetClickable(true); optionBrowser2.SetClickable(true);
ResumeGui(); ResumeGui();
VIDEO_WaitVSync ();
optionBrowser2.SetEffect(EFFECT_FADE, 20); optionBrowser2.SetEffect(EFFECT_FADE, 20);
while (optionBrowser2.GetEffect() > 0) usleep(50); while (optionBrowser2.GetEffect() > 0) usleep(50);
@ -1510,7 +1506,7 @@ int MenuSettings()
bool firstRun = true; bool firstRun = true;
while (!exit) while (!exit)
{ {
VIDEO_WaitVSync (); usleep(100);
if (shutdown == 1) if (shutdown == 1)
Sys_Shutdown(); Sys_Shutdown();
@ -2096,6 +2092,7 @@ int MenuSettings()
cfg_save_global(); cfg_save_global();
menu = MENU_DISCLIST; menu = MENU_DISCLIST;
pageToDisplay = 0; pageToDisplay = 0;
backBtn.ResetState();
break; break;
} }
@ -2380,8 +2377,9 @@ int GameSettings(struct discHdr * header)
struct Game_CFG* game_cfg = CFG_get_game_opt(header->id); struct Game_CFG* game_cfg = CFG_get_game_opt(header->id);
int pageToDisplay = 1; int pageToDisplay = 1;
while ( pageToDisplay > 0) { //set pageToDisplay to 0 to quit while ( pageToDisplay > 0)
VIDEO_WaitVSync (); {
usleep(100);
menu = MENU_NONE; menu = MENU_NONE;
@ -2485,7 +2483,7 @@ int GameSettings(struct discHdr * header)
while (menu == MENU_NONE) while (menu == MENU_NONE)
{ {
VIDEO_WaitVSync (); usleep(100);
if (shutdown == 1) if (shutdown == 1)
Sys_Shutdown(); Sys_Shutdown();
@ -2512,7 +2510,6 @@ int GameSettings(struct discHdr * header)
optionBrowser2.SetClickable(true); optionBrowser2.SetClickable(true);
ResumeGui(); ResumeGui();
VIDEO_WaitVSync ();
optionBrowser2.SetEffect(EFFECT_FADE, 20); optionBrowser2.SetEffect(EFFECT_FADE, 20);
while (optionBrowser2.GetEffect() > 0) usleep(50); while (optionBrowser2.GetEffect() > 0) usleep(50);
@ -2523,7 +2520,7 @@ int GameSettings(struct discHdr * header)
bool firstRun = true; bool firstRun = true;
while (!exit) while (!exit)
{ {
VIDEO_WaitVSync (); usleep(100);
returnhere = 1; returnhere = 1;
@ -2798,7 +2795,7 @@ int GameSettings(struct discHdr * header)
while (!exit) while (!exit)
{ {
VIDEO_WaitVSync (); usleep(100);
if (shutdown == 1) if (shutdown == 1)
Sys_Shutdown(); Sys_Shutdown();
@ -3012,6 +3009,7 @@ int GameSettings(struct discHdr * header)
{ {
menu = MENU_DISCLIST; menu = MENU_DISCLIST;
pageToDisplay = 0; pageToDisplay = 0;
backBtn.ResetState();
break; break;
} }

View File

@ -33,33 +33,6 @@ u32 frameCount = 0;
u8 * gameScreenTex = NULL; // a GX texture screen capture of the game u8 * gameScreenTex = NULL; // a GX texture screen capture of the game
u8 * gameScreenTex2 = NULL; // a GX texture screen capture of the game (copy) 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 * StartGX
* *
@ -182,9 +155,6 @@ InitVideo () {
VIDEO_ClearFrameBuffer (vmode, xfb[1], COLOR_BLACK); VIDEO_ClearFrameBuffer (vmode, xfb[1], COLOR_BLACK);
VIDEO_SetNextFramebuffer (xfb[0]); VIDEO_SetNextFramebuffer (xfb[0]);
// video callback
VIDEO_SetPostRetraceCallback ((VIRetraceCallback)UpdatePadsCB);
VIDEO_SetBlack (FALSE); VIDEO_SetBlack (FALSE);
VIDEO_Flush (); VIDEO_Flush ();
VIDEO_WaitVSync (); VIDEO_WaitVSync ();
@ -251,6 +221,7 @@ void Menu_Render() {
VIDEO_SetNextFramebuffer(xfb[whichfb]); VIDEO_SetNextFramebuffer(xfb[whichfb]);
VIDEO_Flush(); VIDEO_Flush();
VIDEO_WaitVSync(); VIDEO_WaitVSync();
frameCount++;
} }
/**************************************************************************** /****************************************************************************