mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-18 09:19:17 +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">
|
<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
@ -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];
|
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
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -106,48 +106,43 @@ 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();
|
mainWindow->Draw();
|
||||||
if (Settings.tooltips == TooltipsOn && THEME.show_tooltip != 0 && mainWindow->GetState() != STATE_DISABLED)
|
if (Settings.tooltips == TooltipsOn && THEME.show_tooltip != 0 && mainWindow->GetState() != STATE_DISABLED)
|
||||||
mainWindow->DrawTooltip();
|
mainWindow->DrawTooltip();
|
||||||
|
|
||||||
for (int i=3; i >= 0; i--) { // so that player 1's cursor appears on top!
|
for (i = 3; i >= 0; i--)
|
||||||
|
{
|
||||||
if (userInput[i].wpad.ir.valid)
|
if (userInput[i].wpad.ir.valid)
|
||||||
|
{
|
||||||
Menu_DrawImg(userInput[i].wpad.ir.x-48, userInput[i].wpad.ir.y-48, 200.0,
|
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);
|
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();
|
Menu_Render();
|
||||||
|
|
||||||
for (int i=0; i < 4; i++)
|
UpdatePads();
|
||||||
|
|
||||||
|
for (i=0; i < 4; i++)
|
||||||
mainWindow->Update(&userInput[i]);
|
mainWindow->Update(&userInput[i]);
|
||||||
|
|
||||||
if(bgMusic)
|
if(bgMusic)
|
||||||
bgMusic->UpdateState();
|
bgMusic->UpdateState();
|
||||||
|
|
||||||
} else {
|
switch (Settings.screensaver)
|
||||||
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) {
|
|
||||||
case 1:
|
case 1:
|
||||||
WPad_SetIdleTime(180);
|
WPad_SetIdleTime(180);
|
||||||
break;
|
break;
|
||||||
@ -166,12 +161,19 @@ static void * UpdateGUI (void *arg) {
|
|||||||
case 6:
|
case 6:
|
||||||
WPad_SetIdleTime(3600);
|
WPad_SetIdleTime(3600);
|
||||||
break;
|
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();
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
Loading…
Reference in New Issue
Block a user