Compatible with latest WUT

This commit is contained in:
orboditilt 2019-08-14 23:24:55 +02:00
parent 03ad816adc
commit 21bb3b0417
66 changed files with 809 additions and 402 deletions

5
.gitignore vendored
View File

@ -1,3 +1,6 @@
build/* build/*
release/* release/*
libgui.cbp libgui.cbp
lib/
*.bz2
libgui.layout

View File

@ -1,49 +0,0 @@
language: cpp
os: linux
sudo: false
dist: trusty
env:
global:
- DEVKITPRO=/opt/devkitpro
- WUT_ROOT=/opt/devkitpro/wut
- DEVKITPPC=/opt/devkitpro/devkitPPC
- PORTLIBREPOS=$HOME/portlibrepos
cache:
directories:
- "$HOME/.local"
- "$DEVKITPRO"
addons:
apt:
packages:
- p7zip-full
before_install:
- mkdir -p "${PORTLIBREPOS}"
- mkdir -p "${DEVKITPRO}"
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then wget https://github.com/devkitPro/pacman/releases/download/devkitpro-pacman-1.0.1/devkitpro-pacman.deb -O /tmp/devkitpro-pacman.deb; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo dpkg -i /tmp/devkitpro-pacman.deb; fi
- yes | sudo dkp-pacman -Syu devkitPPC --needed
- wget $(curl -s https://api.github.com/repos/decaf-emu/wut/releases/latest | grep 'browser_' | grep 'linux' | cut -d\" -f4)
install:
- 7z x -y $(ls | grep "linux") -o${WUT_ROOT}
- 7z x -y ./libs/portlibs.zip -o${DEVKITPRO}
- cd $PORTLIBREPOS
- git clone https://github.com/Maschell/libutils.git -b wut
- cd libutils
- mkdir build && cd build
- cmake -DCMAKE_TOOLCHAIN_FILE=$WUT_ROOT/share/wut.toolchain.cmake -DCMAKE_INSTALL_PREFIX=$WUT_ROOT ../
- make install
- cd $PORTLIBREPOS
before_script:
- cd $TRAVIS_BUILD_DIR/
script:
- mkdir build && cd build
- cmake -DCMAKE_TOOLCHAIN_FILE=$WUT_ROOT/share/wut.toolchain.cmake -DCMAKE_INSTALL_PREFIX=$WUT_ROOT ../
- make install

View File

@ -1,31 +0,0 @@
cmake_minimum_required(VERSION 3.2)
project(guiwut)
include("${WUT_ROOT}/share/wut.cmake" REQUIRED)
file(GLOB_RECURSE SOURCE_FILES *.c *.cpp)
file(GLOB_RECURSE HEADER_FILES *.h*)
add_library(guiwut STATIC ${SOURCE_FILES} ${HEADER_FILES})
target_link_libraries(guiwut
utilswut)
include_directories("$ENV{WUT_ROOT}/include/libutilswut" REQUIRED)
include_directories("$ENV{DEVKITPRO}/portlibs/ppc/include" REQUIRED)
include_directories("$ENV{DEVKITPRO}/portlibs/ppc/include/freetype2" REQUIRED)
target_include_directories(guiwut PUBLIC "include")
target_include_directories(guiwut PRIVATE "src")
wut_enable_stdcpp(guiwut)
wut_default_malloc(guiwut)
target_include_directories(guiwut PUBLIC "include")
target_compile_options(guiwut PUBLIC "-D__LOGGING__")
install(TARGETS guiwut
ARCHIVE DESTINATION "${CMAKE_INSTALL_PREFIX}/lib")
install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/
DESTINATION "${CMAKE_INSTALL_PREFIX}/include/libguiwut"
FILES_MATCHING PATTERN "*.h*")

162
Makefile Normal file
View File

@ -0,0 +1,162 @@
#-------------------------------------------------------------------------------
.SUFFIXES:
#-------------------------------------------------------------------------------
ifeq ($(strip $(DEVKITPRO)),)
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>/devkitpro")
endif
TOPDIR ?= $(CURDIR)
include $(DEVKITPRO)/wut/share/wut_rules
export VER_MAJOR := 1
export VER_MINOR := 0
export VER_PATCH := 0
VERSION := $(VER_MAJOR).$(VER_MINOR).$(VER_PATCH)
#-------------------------------------------------------------------------------
# TARGET is the name of the output
# BUILD is the directory where object files & intermediate files will be placed
# SOURCES is a list of directories containing source code
# DATA is a list of directories containing data files
# INCLUDES is a list of directories containing header files
#-------------------------------------------------------------------------------
TARGET := $(notdir $(CURDIR))
BUILD := build
SOURCES := source \
source/gui \
source/sounds \
source/video \
source/video/shaders \
DATA := data
INCLUDES := source \
include \
#---------------------------------------------------------------------------------
# options for code generation
#---------------------------------------------------------------------------------
CFLAGS := -Wall -Werror -save-temps \
-ffunction-sections -fdata-sections \
$(MACHDEP) \
$(BUILD_CFLAGS)
CFLAGS += $(INCLUDE) -D__WIIU__ -D__WUT__
CXXFLAGS := $(CFLAGS) -std=gnu++17
ASFLAGS := $(MACHDEP)
LDFLAGS = $(ARCH) -Wl,--gc-sections
LIBS :=
#---------------------------------------------------------------------------------
# list of directories containing libraries, this must be the top level containing
# include and lib
#---------------------------------------------------------------------------------
LIBDIRS := $(PORTLIBS) $(WUT_ROOT)
#---------------------------------------------------------------------------------
# no real need to edit anything past this point unless you need to add additional
# rules for different file extensions
#---------------------------------------------------------------------------------
ifneq ($(BUILD),$(notdir $(CURDIR)))
#---------------------------------------------------------------------------------
export TOPDIR := $(CURDIR)
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
$(foreach dir,$(DATA),$(CURDIR)/$(dir))
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
DEFFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.def)))
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
#---------------------------------------------------------------------------------
# use CXX for linking C++ projects, CC for standard C
#---------------------------------------------------------------------------------
ifeq ($(strip $(CPPFILES)),)
#---------------------------------------------------------------------------------
export LD := $(CC)
#---------------------------------------------------------------------------------
else
#---------------------------------------------------------------------------------
export LD := $(CXX)
#---------------------------------------------------------------------------------
endif
#---------------------------------------------------------------------------------
export OFILES_BIN := $(addsuffix .o,$(BINFILES))
export OFILES_SRC := $(DEFFILES:.def=.o) $(SFILES:.s=.o) $(CFILES:.c=.o) $(CPPFILES:.cpp=.o)
export OFILES := $(OFILES_BIN) $(OFILES_SRC)
export HFILES := $(addsuffix .h,$(subst .,_,$(BINFILES)))
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
-I. -I$(PORTLIBS_PATH)/ppc/include/freetype2
.PHONY: all dist-bin dist-src dist install clean
#---------------------------------------------------------------------------------
all: lib/libgui.a
dist-bin: all
@tar --exclude=*~ -cjf libgui-$(VERSION).tar.bz2 include lib
dist-src:
@tar --exclude=*~ -cjf libgui-src-$(VERSION).tar.bz2 include source Makefile
dist: dist-src dist-bin
install: dist-bin
mkdir -p $(DESTDIR)$(DEVKITPRO)/wut
bzip2 -cd libgui-$(VERSION).tar.bz2 | tar -xf - -C $(DESTDIR)$(DEVKITPRO)/wut
lib:
@[ -d $@ ] || mkdir -p $@
release:
@[ -d $@ ] || mkdir -p $@
lib/libgui.a :$(SOURCES) $(INCLUDES) | lib release
@$(MAKE) BUILD=release OUTPUT=$(CURDIR)/$@ \
BUILD_CFLAGS="-DNDEBUG=1 -O2 -s" \
DEPSDIR=$(CURDIR)/release \
--no-print-directory -C release \
-f $(CURDIR)/Makefile
#---------------------------------------------------------------------------------
clean:
@echo clean ...
@rm -rf release lib
#---------------------------------------------------------------------------------
else
DEPENDS := $(OFILES:.o=.d)
#---------------------------------------------------------------------------------
# main targets
#---------------------------------------------------------------------------------
$(OUTPUT) : $(OFILES)
$(OFILES_SRC) : $(HFILES)
#---------------------------------------------------------------------------------
%_bin.h %.bin.o : %.bin
#---------------------------------------------------------------------------------
@echo $(notdir $<)
@$(bin2o)
-include $(DEPENDS)
#---------------------------------------------------------------------------------------
endif
#---------------------------------------------------------------------------------------

View File

@ -2,7 +2,7 @@
#define _GAME_BG_IMAGE_H_ #define _GAME_BG_IMAGE_H_
#include <gui/GuiImageAsync.h> #include <gui/GuiImageAsync.h>
#include <video/shaders/Shader3D.h> #include <gui/video/shaders/Shader3D.h>
class GameBgImage : public GuiImageAsync { class GameBgImage : public GuiImageAsync {
public: public:

View File

@ -2,7 +2,6 @@
#define _GRID_BACKGROUND_H_ #define _GRID_BACKGROUND_H_
#include <gui/GuiImage.h> #include <gui/GuiImage.h>
#include <video/shaders/Shader.h>
class GridBackground : public GuiImage { class GridBackground : public GuiImage {
public: public:

View File

@ -33,10 +33,9 @@
#include <gui/sigslot.h> #include <gui/sigslot.h>
#include <glm/glm.hpp> #include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp> #include <glm/gtc/matrix_transform.hpp>
#include <system/AsyncDeleter.h> #include <gui/system/AsyncDeleter.h>
#include <utils/logger.h>
#include <resources/Resources.h> #include <gui/resources/Resources.h>
enum { enum {
EFFECT_NONE = 0x00, EFFECT_NONE = 0x00,

View File

@ -17,7 +17,7 @@
#ifndef GUI_IMAGE_H_ #ifndef GUI_IMAGE_H_
#define GUI_IMAGE_H_ #define GUI_IMAGE_H_
#include <video/shaders/Shader.h> #include <gui/video/shaders/Shader.h>
#include <gui/GuiElement.h> #include <gui/GuiElement.h>
#include <gui/GuiImageData.h> #include <gui/GuiImageData.h>
#include <gui/gx2_ext.h> #include <gui/gx2_ext.h>

View File

@ -19,8 +19,8 @@
#include <vector> #include <vector>
#include <gui/GuiImage.h> #include <gui/GuiImage.h>
#include <system/CThread.h> #include <gui/system/CThread.h>
#include <system/CMutex.h> #include <gui/system/CMutex.h>
class GuiImageAsync : public GuiImage { class GuiImageAsync : public GuiImage {
public: public:

View File

@ -18,7 +18,7 @@
#define GUI_IMAGEDATA_H_ #define GUI_IMAGEDATA_H_
#include <gd.h> #include <gd.h>
#include <system/AsyncDeleter.h> #include <gui/system/AsyncDeleter.h>
#include <gui/gx2_ext.h> #include <gui/gx2_ext.h>
#include <gx2/texture.h> #include <gx2/texture.h>

View File

@ -17,7 +17,7 @@
#ifndef GUI_SOUND_H_ #ifndef GUI_SOUND_H_
#define GUI_SOUND_H_ #define GUI_SOUND_H_
#include <system/AsyncDeleter.h> #include <gui/system/AsyncDeleter.h>
//!Sound conversion and playback. A wrapper for other sound libraries - ASND, libmad, ltremor, etc //!Sound conversion and playback. A wrapper for other sound libraries - ASND, libmad, ltremor, etc
class GuiSound : public AsyncDeleter::Element { class GuiSound : public AsyncDeleter::Element {

View File

@ -25,7 +25,7 @@
***************************************************************************/ ***************************************************************************/
#include <mad.h> #include <mad.h>
#include <sounds/SoundDecoder.hpp> #include <gui/sounds/SoundDecoder.hpp>
class Mp3Decoder : public SoundDecoder { class Mp3Decoder : public SoundDecoder {
public: public:

View File

@ -26,7 +26,7 @@
#include <tremor/ivorbiscodec.h> #include <tremor/ivorbiscodec.h>
#include <tremor/ivorbisfile.h> #include <tremor/ivorbisfile.h>
#include <sounds/SoundDecoder.hpp> #include <gui/sounds/SoundDecoder.hpp>
class OggDecoder : public SoundDecoder { class OggDecoder : public SoundDecoder {
public: public:

View File

@ -26,9 +26,11 @@
#ifndef SOUND_DECODER_HPP #ifndef SOUND_DECODER_HPP
#define SOUND_DECODER_HPP #define SOUND_DECODER_HPP
#include <fs/CFile.hpp> #include <string>
#include <system/CMutex.h> #include <gui/system/CMutex.h>
#include <sounds/BufferCircle.hpp> #include <gui/sounds/BufferCircle.hpp>
class CFile;
class SoundDecoder { class SoundDecoder {
public: public:
@ -46,10 +48,8 @@ public:
virtual int32_t Tell() { virtual int32_t Tell() {
return CurPos; return CurPos;
} }
virtual int32_t Seek(int32_t pos) { virtual int32_t Seek(int32_t pos);
CurPos = pos;
return file_fd->seek(CurPos, SEEK_SET);
}
virtual int32_t Rewind(); virtual int32_t Rewind();
virtual uint16_t GetFormat() { virtual uint16_t GetFormat() {
return Format; return Format;

View File

@ -28,9 +28,9 @@
#include <vector> #include <vector>
#include <system/CThread.h> #include <gui/system/CThread.h>
#include <sounds/SoundDecoder.hpp> #include <gui/sounds/SoundDecoder.hpp>
#include <sounds/Voice.h> #include <gui/sounds/Voice.h>
#include <sndcore2/voice.h> #include <sndcore2/voice.h>
#define MAX_DECODERS 16 // can be increased up to 96 #define MAX_DECODERS 16 // can be increased up to 96

View File

@ -26,7 +26,7 @@
#ifndef WAVDECODER_HPP_ #ifndef WAVDECODER_HPP_
#define WAVDECODER_HPP_ #define WAVDECODER_HPP_
#include <sounds/SoundDecoder.hpp> #include <gui/sounds/SoundDecoder.hpp>
typedef struct { typedef struct {
uint32_t magicRIFF; uint32_t magicRIFF;

View File

@ -0,0 +1,76 @@
/****************************************************************************
* Copyright (C) 2015 Dimok
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
****************************************************************************/
#ifndef _ASYNC_DELETER_H
#define _ASYNC_DELETER_H
#include <queue>
#include "CThread.h"
#include "CMutex.h"
class AsyncDeleter : public CThread {
public:
static void destroyInstance() {
if(deleterInstance != NULL) {
delete deleterInstance;
deleterInstance = NULL;
}
}
class Element {
public:
Element() {}
virtual ~Element() {}
};
static void pushForDelete(AsyncDeleter::Element *e) {
if(!deleterInstance) {
deleterInstance = new AsyncDeleter();
}
deleterInstance->deleteElements.push(e);
}
static BOOL deleteListEmpty() {
if(!deleterInstance) {
return true;
}
return deleterInstance->deleteElements.empty();
}
static BOOL realListEmpty() {
if(!deleterInstance) {
return true;
}
return deleterInstance->realDeleteElements.empty();
}
static void triggerDeleteProcess(void);
private:
AsyncDeleter();
virtual ~AsyncDeleter();
static AsyncDeleter *deleterInstance;
void executeThread(void);
BOOL exitApplication;
std::queue<AsyncDeleter::Element *> deleteElements;
std::queue<AsyncDeleter::Element *> realDeleteElements;
CMutex deleteMutex;
};
#endif // _ASYNC_DELETER_H

View File

@ -0,0 +1,69 @@
/****************************************************************************
* Copyright (C) 2015 Dimok
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
****************************************************************************/
#ifndef _CMUTEX_H_
#define _CMUTEX_H_
#include <malloc.h>
#include <coreinit/mutex.h>
class CMutex
{
public:
CMutex() {
pMutex = (OSMutex*) malloc(sizeof(OSMutex));
if(!pMutex)
return;
OSInitMutex(pMutex);
}
virtual ~CMutex() {
if(pMutex)
free(pMutex);
}
void lock(void) {
if(pMutex)
OSLockMutex(pMutex);
}
void unlock(void) {
if(pMutex)
OSUnlockMutex(pMutex);
}
BOOL tryLock(void) {
if(!pMutex)
return false;
return (OSTryLockMutex(pMutex) != 0);
}
private:
OSMutex *pMutex;
};
class CMutexLock
{
public:
CMutexLock() {
mutex.lock();
}
virtual ~CMutexLock() {
mutex.unlock();
}
private:
CMutex mutex;
};
#endif // _CMUTEX_H_

View File

@ -0,0 +1,133 @@
/****************************************************************************
* Copyright (C) 2015 Dimok
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
****************************************************************************/
#ifndef CTHREAD_H_
#define CTHREAD_H_
#include <malloc.h>
#include <unistd.h>
#include <coreinit/systeminfo.h>
#include <coreinit/thread.h>
class CThread {
public:
typedef void (* Callback)(CThread *thread, void *arg);
//! constructor
CThread(int32_t iAttr, int32_t iPriority = 16, int32_t iStackSize = 0x8000, CThread::Callback callback = NULL, void *callbackArg = NULL)
: pThread(NULL)
, pThreadStack(NULL)
, pCallback(callback)
, pCallbackArg(callbackArg) {
//! save attribute assignment
iAttributes = iAttr;
//! allocate the thread
pThread = (OSThread*)memalign(8, sizeof(OSThread));
//! allocate the stack
pThreadStack = (uint8_t *) memalign(0x20, iStackSize);
//! create the thread
if(pThread && pThreadStack)
OSCreateThread(pThread, &CThread::threadCallback, 1, (char*)this, pThreadStack+iStackSize, iStackSize, iPriority, iAttributes);
}
//! destructor
virtual ~CThread() {
shutdownThread();
}
static CThread *create(CThread::Callback callback, void *callbackArg, int32_t iAttr = eAttributeNone, int32_t iPriority = 16, int32_t iStackSize = 0x8000) {
return ( new CThread(iAttr, iPriority, iStackSize, callback, callbackArg) );
}
//! Get thread ID
virtual void* getThread() const {
return pThread;
}
//! Thread entry function
virtual void executeThread(void) {
if(pCallback)
pCallback(this, pCallbackArg);
}
//! Suspend thread
virtual void suspendThread(void) {
if(isThreadSuspended()) return;
if(pThread) OSSuspendThread(pThread);
}
//! Resume thread
virtual void resumeThread(void) {
if(!isThreadSuspended()) return;
if(pThread) OSResumeThread(pThread);
}
//! Set thread priority
virtual void setThreadPriority(int prio) {
if(pThread) OSSetThreadPriority(pThread, prio);
}
//! Check if thread is suspended
virtual BOOL isThreadSuspended(void) const {
if(pThread) return OSIsThreadSuspended(pThread);
return false;
}
//! Check if thread is terminated
virtual BOOL isThreadTerminated(void) const {
if(pThread) return OSIsThreadTerminated(pThread);
return false;
}
//! Check if thread is running
virtual BOOL isThreadRunning(void) const {
return !isThreadSuspended() && !isThreadRunning();
}
//! Shutdown thread
virtual void shutdownThread(void) {
//! wait for thread to finish
if(pThread && !(iAttributes & eAttributeDetach)) {
if(isThreadSuspended())
resumeThread();
OSJoinThread(pThread, NULL);
}
//! free the thread stack buffer
if(pThreadStack)
free(pThreadStack);
if(pThread)
free(pThread);
pThread = NULL;
pThreadStack = NULL;
}
//! Thread attributes
enum eCThreadAttributes {
eAttributeNone = 0x07,
eAttributeAffCore0 = 0x01,
eAttributeAffCore1 = 0x02,
eAttributeAffCore2 = 0x04,
eAttributeDetach = 0x08,
eAttributePinnedAff = 0x10
};
private:
static int threadCallback(int argc, const char **argv) {
//! After call to start() continue with the internal function
((CThread *) argv)->executeThread();
return 0;
}
int iAttributes;
OSThread *pThread;
uint8_t *pThreadStack;
Callback pCallback;
void *pCallbackArg;
};
#endif

View File

@ -28,7 +28,7 @@
#include <gx2/display.h> #include <gx2/display.h>
#include <gui/gx2_ext.h> #include <gui/gx2_ext.h>
#include <video/shaders/Shader.h> #include <gui/video/shaders/Shader.h>
class CVideo { class CVideo {
public: public:

View File

@ -17,9 +17,9 @@
#ifndef __COLOR_SHADER_H_ #ifndef __COLOR_SHADER_H_
#define __COLOR_SHADER_H_ #define __COLOR_SHADER_H_
#include <video/shaders/VertexShader.h> #include <gui/video/shaders/VertexShader.h>
#include <video/shaders/PixelShader.h> #include <gui/video/shaders/PixelShader.h>
#include <video/shaders/FetchShader.h> #include <gui/video/shaders/FetchShader.h>
class ColorShader : public Shader { class ColorShader : public Shader {
private: private:

View File

@ -17,9 +17,9 @@
#ifndef __FXAA_SHADER_H_ #ifndef __FXAA_SHADER_H_
#define __FXAA_SHADER_H_ #define __FXAA_SHADER_H_
#include <video/shaders/VertexShader.h> #include <gui/video/shaders/VertexShader.h>
#include <video/shaders/PixelShader.h> #include <gui/video/shaders/PixelShader.h>
#include <video/shaders/FetchShader.h> #include <gui/video/shaders/FetchShader.h>
class FXAAShader : public Shader { class FXAAShader : public Shader {
public: public:

View File

@ -17,7 +17,7 @@
#ifndef FETCH_SHADER_H #ifndef FETCH_SHADER_H
#define FETCH_SHADER_H #define FETCH_SHADER_H
#include <video/shaders/Shader.h> #include <gui/video/shaders/Shader.h>
class FetchShader : public Shader { class FetchShader : public Shader {
public: public:

View File

@ -17,7 +17,7 @@
#ifndef PIXEL_SHADER_H #ifndef PIXEL_SHADER_H
#define PIXEL_SHADER_H #define PIXEL_SHADER_H
#include <video/shaders/Shader.h> #include <gui/video/shaders/Shader.h>
class PixelShader : public Shader { class PixelShader : public Shader {
public: public:

View File

@ -19,12 +19,12 @@
#include <glm/glm.hpp> #include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp> #include <glm/gtc/matrix_transform.hpp>
#include <utils/utils.h>
#include <gx2/shaders.h> #include <gx2/shaders.h>
#include <gx2/mem.h> #include <gx2/mem.h>
#include <gx2/enum.h> #include <gx2/enum.h>
#include <gx2/registers.h> #include <gx2/registers.h>
#include <gx2/draw.h> #include <gx2/draw.h>
#include <malloc.h>
class Shader { class Shader {
protected: protected:

View File

@ -17,9 +17,9 @@
#ifndef SHADER_3D_H_ #ifndef SHADER_3D_H_
#define SHADER_3D_H_ #define SHADER_3D_H_
#include <video/shaders/VertexShader.h> #include <gui/video/shaders/VertexShader.h>
#include <video/shaders/PixelShader.h> #include <gui/video/shaders/PixelShader.h>
#include <video/shaders/FetchShader.h> #include <gui/video/shaders/FetchShader.h>
class Shader3D : public Shader { class Shader3D : public Shader {
private: private:

View File

@ -17,9 +17,9 @@
#ifndef SHADER_FRACTAL_COLOR_H_ #ifndef SHADER_FRACTAL_COLOR_H_
#define SHADER_FRACTAL_COLOR_H_ #define SHADER_FRACTAL_COLOR_H_
#include <video/shaders/VertexShader.h> #include <gui/video/shaders/VertexShader.h>
#include <video/shaders/PixelShader.h> #include <gui/video/shaders/PixelShader.h>
#include <video/shaders/FetchShader.h> #include <gui/video/shaders/FetchShader.h>
class ShaderFractalColor : public Shader { class ShaderFractalColor : public Shader {
private: private:
ShaderFractalColor(); ShaderFractalColor();

View File

@ -17,9 +17,9 @@
#ifndef __TEXTURE_2D_SHADER_H_ #ifndef __TEXTURE_2D_SHADER_H_
#define __TEXTURE_2D_SHADER_H_ #define __TEXTURE_2D_SHADER_H_
#include <video/shaders/VertexShader.h> #include <gui/video/shaders/VertexShader.h>
#include <video/shaders/PixelShader.h> #include <gui/video/shaders/PixelShader.h>
#include <video/shaders/FetchShader.h> #include <gui/video/shaders/FetchShader.h>
class Texture2DShader : public Shader { class Texture2DShader : public Shader {

View File

@ -18,7 +18,7 @@
#define VERTEX_SHADER_H #define VERTEX_SHADER_H
#include <string.h> #include <string.h>
#include <video/shaders/Shader.h> #include <gui/video/shaders/Shader.h>
#include <gui/gx2_ext.h> #include <gui/gx2_ext.h>
class VertexShader : public Shader { class VertexShader : public Shader {

View File

@ -1,33 +0,0 @@
#ifndef RECOURCES_H_
#define RECOURCES_H_
#include <map>
#include <stdint.h>
//! forward declaration
class GuiImageData;
class GuiSound;
class Resources {
public:
static void Clear();
static bool LoadFiles(const char * path);
static const uint8_t * GetFile(const char * filename);
static uint32_t GetFileSize(const char * filename);
static GuiImageData * GetImageData(const char * filename);
static void RemoveImageData(GuiImageData * image);
static GuiSound * GetSound(const char * filename);
static void RemoveSound(GuiSound * sound);
private:
static Resources *instance;
Resources() {}
~Resources() {}
std::map<std::string, std::pair<uint32_t, GuiImageData *> > imageDataMap;
std::map<std::string, std::pair<uint32_t, GuiSound *> > soundDataMap;
};
#endif

View File

@ -1,16 +0,0 @@
#ifndef _FILELIST_H_
#define _FILELIST_H_
#include <stdint.h>
typedef struct _ResourceFile {
const char *filename;
const uint8_t *DefaultFile;
const uint32_t &DefaultFileSize;
uint8_t *CustomFile;
uint32_t CustomFileSize;
} ResourceFile;
ResourceFile * getResourceList();
#endif

Binary file not shown.

61
source/fs/CFile.hpp Normal file
View File

@ -0,0 +1,61 @@
#ifndef CFILE_HPP_
#define CFILE_HPP_
#include <stdio.h>
#include <string>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <wut_types.h>
class CFile {
public:
enum eOpenTypes {
ReadOnly,
WriteOnly,
ReadWrite,
Append
};
CFile();
CFile(const std::string & filepath, eOpenTypes mode);
CFile(const uint8_t * memory, int32_t memsize);
virtual ~CFile();
int32_t open(const std::string & filepath, eOpenTypes mode);
int32_t open(const uint8_t * memory, int32_t memsize);
BOOL isOpen() const {
if(iFd >= 0)
return true;
if(mem_file)
return true;
return false;
}
void close();
int32_t read(uint8_t * ptr, size_t size);
int32_t write(const uint8_t * ptr, size_t size);
int32_t fwrite(const char *format, ...);
int32_t seek(long int offset, int32_t origin);
uint64_t tell() {
return pos;
};
uint64_t size() {
return filesize;
};
void rewind() {
this->seek(0, SEEK_SET);
};
protected:
int32_t iFd;
const uint8_t * mem_file;
uint64_t filesize;
uint64_t pos;
};
#endif

103
source/fs/DirList.h Normal file
View File

@ -0,0 +1,103 @@
/****************************************************************************
* Copyright (C) 2010
* by Dimok
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any
* damages arising from the use of this software.
*
* Permission is granted to anyone to use this software for any
* purpose, including commercial applications, and to alter it and
* redistribute it freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you
* must not claim that you wrote the original software. If you use
* this software in a product, an acknowledgment in the product
* documentation would be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and
* must not be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*
* DirList Class
* for WiiXplorer 2010
***************************************************************************/
#ifndef ___DIRLIST_H_
#define ___DIRLIST_H_
#include <vector>
#include <string>
#include <wut_types.h>
typedef struct {
char * FilePath;
BOOL isDir;
} DirEntry;
class DirList {
public:
//!Constructor
DirList(void);
//!\param path Path from where to load the filelist of all files
//!\param filter A fileext that needs to be filtered
//!\param flags search/filter flags from the enum
DirList(const std::string & path, const char *filter = NULL, uint32_t flags = Files | Dirs, uint32_t maxDepth = 0xffffffff);
//!Destructor
virtual ~DirList();
//! Load all the files from a directory
BOOL LoadPath(const std::string & path, const char *filter = NULL, uint32_t flags = Files | Dirs, uint32_t maxDepth = 0xffffffff);
//! Get a filename of the list
//!\param list index
const char * GetFilename(int32_t index) const;
//! Get the a filepath of the list
//!\param list index
const char *GetFilepath(int32_t index) const {
if (!valid(index)) return "";
else return FileInfo[index].FilePath;
}
//! Get the a filesize of the list
//!\param list index
uint64_t GetFilesize(int32_t index) const;
//! Is index a dir or a file
//!\param list index
BOOL IsDir(int32_t index) const {
if(!valid(index)) return false;
return FileInfo[index].isDir;
};
//! Get the filecount of the whole list
int32_t GetFilecount() const {
return FileInfo.size();
};
//! Sort list by filepath
void SortList();
//! Custom sort command for custom sort functions definitions
void SortList(BOOL (*SortFunc)(const DirEntry &a, const DirEntry &b));
//! Get the index of the specified filename
int32_t GetFileIndex(const char *filename) const;
//! Enum for search/filter flags
enum {
Files = 0x01,
Dirs = 0x02,
CheckSubfolders = 0x08,
};
protected:
// Internal parser
BOOL InternalLoadPath(std::string &path);
//!Add a list entrie
void AddEntrie(const std::string &filepath, const char * filename, BOOL isDir);
//! Clear the list
void ClearList();
//! Check if valid pos is requested
inline BOOL valid(uint32_t pos) const {
return (pos < FileInfo.size());
};
uint32_t Flags;
uint32_t Depth;
const char *Filter;
std::vector<DirEntry> FileInfo;
};
#endif

16
source/fs/FSUtils.h Normal file
View File

@ -0,0 +1,16 @@
#ifndef __FS_UTILS_H_
#define __FS_UTILS_H_
#include <wut_types.h>
class FSUtils {
public:
static int32_t LoadFileToMem(const char *filepath, uint8_t **inbuffer, uint32_t *size);
//! todo: C++ class
static int32_t CreateSubfolder(const char * fullpath);
static int32_t CheckFile(const char * filepath);
static BOOL saveBufferToFile(const char * path, void * buffer, uint32_t size);
};
#endif // __FS_UTILS_H_

View File

@ -21,8 +21,8 @@
*/ */
#include <gui/FreeTypeGX.h> #include <gui/FreeTypeGX.h>
#include <video/CVideo.h> #include <gui/video/CVideo.h>
#include <video/shaders/Texture2DShader.h> #include <gui/video/shaders/Texture2DShader.h>
using namespace std; using namespace std;
@ -258,7 +258,7 @@ void FreeTypeGX::loadGlyphData(FT_Bitmap *bmp, ftgxCharData *charData) {
uint8_t *src = (uint8_t *)bmp->buffer; uint8_t *src = (uint8_t *)bmp->buffer;
uint16_t *dst = (uint16_t *)charData->texture->surface.image; uint16_t *dst = (uint16_t *)charData->texture->surface.image;
int32_t x, y; uint32_t x, y;
for(y = 0; y < bmp->rows; y++) { for(y = 0; y < bmp->rows; y++) {
for(x = 0; x < bmp->width; x++) { for(x = 0; x < bmp->width; x++) {

View File

@ -1,6 +1,6 @@
#include <gui/GameBgImage.h> #include <gui/GameBgImage.h>
#include <video/CVideo.h> #include <gui/video/CVideo.h>
#include <video/shaders/Shader3D.h> #include <gui/video/shaders/Shader3D.h>
GameBgImage::GameBgImage(const std::string & filename, GuiImageData *preloadImage) GameBgImage::GameBgImage(const std::string & filename, GuiImageData *preloadImage)
: GuiImageAsync(filename, preloadImage) { : GuiImageAsync(filename, preloadImage) {

View File

@ -1,6 +1,7 @@
#include <gui/GridBackground.h> #include <gui/GridBackground.h>
#include <video/CVideo.h> #include <gui/video/CVideo.h>
#include <video/shaders/Shader3D.h> #include <gui/video/shaders/Shader3D.h>
#include "utils/utils.h"
static const float bgRepeat = 1000.0f; static const float bgRepeat = 1000.0f;
static const float bgTexRotate = 39.0f; static const float bgTexRotate = 39.0f;

View File

@ -17,7 +17,6 @@
****************************************************************************/ ****************************************************************************/
#include <gui/GuiDragListener.h> #include <gui/GuiDragListener.h>
#include <gui/GuiController.h> #include <gui/GuiController.h>
#include <utils/logger.h>
/** /**
* Constructor for the GuiDragListener class. * Constructor for the GuiDragListener class.

View File

@ -15,9 +15,10 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
****************************************************************************/ ****************************************************************************/
#include <gui/GuiImage.h> #include <gui/GuiImage.h>
#include <video/CVideo.h> #include <gui/video/CVideo.h>
#include <video/shaders/Texture2DShader.h> #include <gui/video/shaders/Texture2DShader.h>
#include <video/shaders/ColorShader.h> #include <gui/video/shaders/ColorShader.h>
#include "utils/utils.h"
static const float fPiDiv180 = ((float)M_PI / 180.0f); static const float fPiDiv180 = ((float)M_PI / 180.0f);

View File

@ -16,7 +16,7 @@
****************************************************************************/ ****************************************************************************/
#include <unistd.h> #include <unistd.h>
#include <gui/GuiImageAsync.h> #include <gui/GuiImageAsync.h>
#include <fs/FSUtils.h> #include "fs/FSUtils.h"
std::vector<GuiImageAsync *> GuiImageAsync::imageQueue; std::vector<GuiImageAsync *> GuiImageAsync::imageQueue;
CThread * GuiImageAsync::pThread = NULL; CThread * GuiImageAsync::pThread = NULL;

View File

@ -15,8 +15,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
****************************************************************************/ ****************************************************************************/
#include <gui/GuiParticleImage.h> #include <gui/GuiParticleImage.h>
#include <video/CVideo.h> #include <gui/video/CVideo.h>
#include <video/shaders/ColorShader.h> #include <gui/video/shaders/ColorShader.h>
#include "utils/utils.h"
#define CIRCLE_VERTEX_COUNT 36 #define CIRCLE_VERTEX_COUNT 36

View File

@ -22,7 +22,8 @@
* distribution. * distribution.
***************************************************************************/ ***************************************************************************/
#include <gui/GuiScrollbar.h> #include <gui/GuiScrollbar.h>
#include <resources/Resources.h> #include <gui/resources/Resources.h>
#include "utils/utils.h"
GuiScrollbar::GuiScrollbar(int32_t h) GuiScrollbar::GuiScrollbar(int32_t h)
: touchTrigger(GuiTrigger::CHANNEL_1, GuiTrigger::VPAD_TOUCH) : touchTrigger(GuiTrigger::CHANNEL_1, GuiTrigger::VPAD_TOUCH)

View File

@ -16,8 +16,6 @@
****************************************************************************/ ****************************************************************************/
#include <vector> #include <vector>
#include <string> #include <string>
#include <utils/StringTools.h>
#include <utils/logger.h>
#include <gui/GuiSelectBox.h> #include <gui/GuiSelectBox.h>
#include <gui/GuiImage.h> #include <gui/GuiImage.h>

View File

@ -14,8 +14,11 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
****************************************************************************/ ****************************************************************************/
#include <string.h>
#include <string>
#include <stdio.h>
#include <gui/GuiSound.h> #include <gui/GuiSound.h>
#include <sounds/SoundHandler.hpp> #include <gui/sounds/SoundHandler.hpp>
GuiSound::GuiSound(const char * filepath) { GuiSound::GuiSound(const char * filepath) {
voice = -1; voice = -1;

View File

@ -17,7 +17,6 @@
#include <gui/GuiSwitch.h> #include <gui/GuiSwitch.h>
#include <gui/GuiImage.h> #include <gui/GuiImage.h>
#include <gui/GuiImageData.h> #include <gui/GuiImageData.h>
#include <utils/logger.h>
/** /**
* Constructor for the GuiSwitch class. * Constructor for the GuiSwitch class.
*/ */

View File

@ -16,7 +16,7 @@
****************************************************************************/ ****************************************************************************/
#include <gui/GuiText.h> #include <gui/GuiText.h>
#include <gui/FreeTypeGX.h> #include <gui/FreeTypeGX.h>
#include <video/CVideo.h> #include <gui/video/CVideo.h>
FreeTypeGX * GuiText::presentFont = NULL; FreeTypeGX * GuiText::presentFont = NULL;
int32_t GuiText::presetSize = 28; int32_t GuiText::presetSize = 28;

View File

@ -1,180 +0,0 @@
#include <malloc.h>
#include <string.h>
#include <resources/Resources.h>
#include <resources/filelist.h>
#include <system/AsyncDeleter.h>
#include <fs/FSUtils.h>
#include <gui/GuiImageAsync.h>
#include <gui/GuiSound.h>
Resources * Resources::instance = NULL;
void Resources::Clear() {
ResourceFile * ResourceList = getResourceList();
if(ResourceList == NULL) return;
for(int32_t i = 0; ResourceList[i].filename != NULL; ++i) {
if(ResourceList[i].CustomFile) {
free(ResourceList[i].CustomFile);
ResourceList[i].CustomFile = NULL;
}
if(ResourceList[i].CustomFileSize != 0)
ResourceList[i].CustomFileSize = 0;
}
if(instance)
delete instance;
instance = NULL;
}
bool Resources::LoadFiles(const char * path) {
if(!path)
return false;
bool result = false;
Clear();
ResourceFile * ResourceList = getResourceList();
if(ResourceList == NULL) return false;
for(int32_t i = 0; ResourceList[i].filename != NULL; ++i) {
std::string fullpath(path);
fullpath += "/";
fullpath += ResourceList[i].filename;
uint8_t * buffer = NULL;
uint32_t filesize = 0;
FSUtils::LoadFileToMem(fullpath.c_str(), &buffer, &filesize);
ResourceList[i].CustomFile = buffer;
ResourceList[i].CustomFileSize = (uint32_t) filesize;
result |= (buffer != 0);
}
return result;
}
const uint8_t * Resources::GetFile(const char * filename) {
ResourceFile * ResourceList = getResourceList();
if(ResourceList == NULL) return NULL;
for(int32_t i = 0; ResourceList[i].filename != NULL; ++i) {
if(strcasecmp(filename, ResourceList[i].filename) == 0) {
return (ResourceList[i].CustomFile ? ResourceList[i].CustomFile : ResourceList[i].DefaultFile);
}
}
return NULL;
}
uint32_t Resources::GetFileSize(const char * filename) {
ResourceFile * ResourceList = getResourceList();
if(ResourceList == NULL) return 0;
for(int32_t i = 0; ResourceList[i].filename != NULL; ++i) {
if(strcasecmp(filename, ResourceList[i].filename) == 0) {
return (ResourceList[i].CustomFile ? ResourceList[i].CustomFileSize : ResourceList[i].DefaultFileSize);
}
}
return 0;
}
GuiImageData * Resources::GetImageData(const char * filename) {
if(!instance)
instance = new Resources;
ResourceFile * ResourceList = getResourceList();
if(ResourceList == NULL) return NULL;
std::map<std::string, std::pair<uint32_t, GuiImageData *> >::iterator itr = instance->imageDataMap.find(std::string(filename));
if(itr != instance->imageDataMap.end()) {
itr->second.first++;
return itr->second.second;
}
for(int32_t i = 0; ResourceList[i].filename != NULL; ++i) {
if(strcasecmp(filename, ResourceList[i].filename) == 0) {
const uint8_t * buff = ResourceList[i].CustomFile ? ResourceList[i].CustomFile : ResourceList[i].DefaultFile;
const uint32_t size = ResourceList[i].CustomFile ? ResourceList[i].CustomFileSize : ResourceList[i].DefaultFileSize;
if(buff == NULL)
return NULL;
GuiImageData * image = new GuiImageData(buff, size);
instance->imageDataMap[std::string(filename)].first = 1;
instance->imageDataMap[std::string(filename)].second = image;
return image;
}
}
return NULL;
}
void Resources::RemoveImageData(GuiImageData * image) {
std::map<std::string, std::pair<uint32_t, GuiImageData *> >::iterator itr;
for(itr = instance->imageDataMap.begin(); itr != instance->imageDataMap.end(); itr++) {
if(itr->second.second == image) {
itr->second.first--;
if(itr->second.first == 0) {
AsyncDeleter::pushForDelete( itr->second.second );
instance->imageDataMap.erase(itr);
}
break;
}
}
}
GuiSound * Resources::GetSound(const char * filename) {
if(!instance)
instance = new Resources;
std::map<std::string, std::pair<uint32_t, GuiSound *> >::iterator itr = instance->soundDataMap.find(std::string(filename));
if(itr != instance->soundDataMap.end()) {
itr->second.first++;
return itr->second.second;
}
ResourceFile * ResourceList = getResourceList();
if(ResourceList == NULL) return NULL;
for(int32_t i = 0; ResourceList[i].filename != NULL; ++i) {
if(strcasecmp(filename, ResourceList[i].filename) == 0) {
const uint8_t * buff = ResourceList[i].CustomFile ? ResourceList[i].CustomFile : ResourceList[i].DefaultFile;
const uint32_t size = ResourceList[i].CustomFile ? ResourceList[i].CustomFileSize : ResourceList[i].DefaultFileSize;
if(buff == NULL)
return NULL;
GuiSound * sound = new GuiSound(buff, size);
instance->soundDataMap[std::string(filename)].first = 1;
instance->soundDataMap[std::string(filename)].second = sound;
return sound;
}
}
return NULL;
}
void Resources::RemoveSound(GuiSound * sound) {
std::map<std::string, std::pair<uint32_t, GuiSound *> >::iterator itr;
for(itr = instance->soundDataMap.begin(); itr != instance->soundDataMap.end(); itr++) {
if(itr->second.second == sound) {
itr->second.first--;
if(itr->second.first == 0) {
AsyncDeleter::pushForDelete( itr->second.second );
instance->soundDataMap.erase(itr);
}
break;
}
}
}

View File

@ -25,7 +25,7 @@
***************************************************************************/ ***************************************************************************/
#include <malloc.h> #include <malloc.h>
#include <utils/utils.h> #include <utils/utils.h>
#include <sounds/BufferCircle.hpp> #include <gui/sounds/BufferCircle.hpp>
BufferCircle::BufferCircle() { BufferCircle::BufferCircle() {
which = 0; which = 0;

View File

@ -31,7 +31,8 @@
#include <math.h> #include <math.h>
#include <coreinit/time.h> #include <coreinit/time.h>
#include <coreinit/thread.h> #include <coreinit/thread.h>
#include <sounds/Mp3Decoder.hpp> #include <gui/sounds/Mp3Decoder.hpp>
#include "fs/CFile.hpp"
Mp3Decoder::Mp3Decoder(const char * filepath) Mp3Decoder::Mp3Decoder(const char * filepath)
: SoundDecoder(filepath) : SoundDecoder(filepath)

View File

@ -27,7 +27,8 @@
#include <malloc.h> #include <malloc.h>
#include <coreinit/time.h> #include <coreinit/time.h>
#include <coreinit/thread.h> #include <coreinit/thread.h>
#include <sounds/OggDecoder.hpp> #include <gui/sounds/OggDecoder.hpp>
#include "fs/CFile.hpp"
static int ogg_read(void * punt, int bytes, int blocks, int *f) { static int ogg_read(void * punt, int bytes, int blocks, int *f) {
return ((CFile *) f)->read((uint8_t *) punt, bytes*blocks); return ((CFile *) f)->read((uint8_t *) punt, bytes*blocks);

View File

@ -21,7 +21,8 @@
#include <coreinit/time.h> #include <coreinit/time.h>
#include <coreinit/thread.h> #include <coreinit/thread.h>
#include <coreinit/cache.h> #include <coreinit/cache.h>
#include <sounds/SoundDecoder.hpp> #include <gui/sounds/SoundDecoder.hpp>
#include "fs/CFile.hpp"
static const uint32_t FixedPointShift = 15; static const uint32_t FixedPointShift = 15;
static const uint32_t FixedPointScale = 1 << FixedPointShift; static const uint32_t FixedPointScale = 1 << FixedPointShift;
@ -58,6 +59,11 @@ SoundDecoder::~SoundDecoder() {
free(ResampleBuffer); free(ResampleBuffer);
} }
int32_t SoundDecoder::Seek(int32_t pos) {
CurPos = pos;
return file_fd->seek(CurPos, SEEK_SET);
}
void SoundDecoder::Init() { void SoundDecoder::Init() {
SoundType = SOUND_RAW; SoundType = SOUND_RAW;
SoundBlocks = 8; SoundBlocks = 8;

View File

@ -26,10 +26,10 @@
#include <unistd.h> #include <unistd.h>
#include <malloc.h> #include <malloc.h>
#include <fs/CFile.hpp> #include <fs/CFile.hpp>
#include <sounds/SoundHandler.hpp> #include <gui/sounds/SoundHandler.hpp>
#include <sounds/WavDecoder.hpp> #include <gui/sounds/WavDecoder.hpp>
#include <sounds/Mp3Decoder.hpp> #include <gui/sounds/Mp3Decoder.hpp>
#include <sounds/OggDecoder.hpp> #include <gui/sounds/OggDecoder.hpp>
#include <sndcore2/core.h> #include <sndcore2/core.h>
SoundHandler * SoundHandler::handlerInstance = NULL; SoundHandler * SoundHandler::handlerInstance = NULL;
@ -86,7 +86,11 @@ void SoundHandler::RemoveDecoder(int32_t voice) {
if(voiceList[voice]->getState() != Voice::STATE_STOP) if(voiceList[voice]->getState() != Voice::STATE_STOP)
voiceList[voice]->setState(Voice::STATE_STOP); voiceList[voice]->setState(Voice::STATE_STOP);
while(voiceList[voice]->getState() != Voice::STATE_STOPPED) // it shouldn't take longer than 3 ms actually but we wait up to 20
// on application quit the AX frame callback is not called anymore
// therefore this would end in endless loop if no timeout is defined
int timeOut = 20;
while(--timeOut && (voiceList[voice]->getState() != Voice::STATE_STOPPED))
OSSleepTicks(OSMicrosecondsToTicks(1000)); OSSleepTicks(OSMicrosecondsToTicks(1000));
} }
SoundDecoder *decoder = DecoderList[voice]; SoundDecoder *decoder = DecoderList[voice];

View File

@ -24,8 +24,9 @@
* for WiiXplorer 2010 * for WiiXplorer 2010
***************************************************************************/ ***************************************************************************/
#include <string.h> #include <string.h>
#include <utils/utils.h> #include <gui/sounds/WavDecoder.hpp>
#include <sounds/WavDecoder.hpp> #include "fs/CFile.hpp"
#include "utils/utils.h"
WavDecoder::WavDecoder(const char * filepath) WavDecoder::WavDecoder(const char * filepath)
: SoundDecoder(filepath) { : SoundDecoder(filepath) {

42
source/system/memory.h Normal file
View File

@ -0,0 +1,42 @@
/****************************************************************************
* Copyright (C) 2015 Dimok
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
****************************************************************************/
#ifndef __MEMORY_H_
#define __MEMORY_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <malloc.h>
void memoryInitialize(void);
void memoryRelease(void);
void * MEM2_alloc(uint32_t size, uint32_t align);
void MEM2_free(void *ptr);
void * MEM1_alloc(uint32_t size, uint32_t align);
void MEM1_free(void *ptr);
void * MEMBucket_alloc(uint32_t size, uint32_t align);
void MEMBucket_free(void *ptr);
#ifdef __cplusplus
}
#endif
#endif // __MEMORY_H_

35
source/utils/utils.h Normal file
View File

@ -0,0 +1,35 @@
#ifndef __UTILS_H_
#define __UTILS_H_
#include <malloc.h>
#ifdef __cplusplus
extern "C" {
#endif
#define LIMIT(x, min, max) \
({ \
typeof( x ) _x = x; \
typeof( min ) _min = min; \
typeof( max ) _max = max; \
( ( ( _x ) < ( _min ) ) ? ( _min ) : ( ( _x ) > ( _max ) ) ? ( _max) : ( _x ) ); \
})
#define DegToRad(a) ( (a) * 0.01745329252f )
#define RadToDeg(a) ( (a) * 57.29577951f )
#define ALIGN4(x) (((x) + 3) & ~3)
#define ALIGN32(x) (((x) + 31) & ~31)
#define le16(i) ((((uint16_t) ((i) & 0xFF)) << 8) | ((uint16_t) (((i) & 0xFF00) >> 8)))
#define le32(i) ((((uint32_t)le16((i) & 0xFFFF)) << 16) | ((uint32_t)le16(((i) & 0xFFFF0000) >> 16)))
#define le64(i) ((((uint64_t)le32((i) & 0xFFFFFFFFLL)) << 32) | ((uint64_t)le32(((i) & 0xFFFFFFFF00000000LL) >> 32)))
//Needs to have log_init() called beforehand.
void dumpHex(const void* data, size_t size);
#ifdef __cplusplus
}
#endif
#endif // __UTILS_H_

View File

@ -16,13 +16,15 @@
****************************************************************************/ ****************************************************************************/
#include <malloc.h> #include <malloc.h>
#include <string.h> #include <string.h>
#include <video/CVideo.h> #include <gui/video/CVideo.h>
#include <system/memory.h> #include "system/memory.h"
#include <video/shaders/Texture2DShader.h> #include <gui/video/shaders/Texture2DShader.h>
#include <video/shaders/ColorShader.h> #include <gui/video/shaders/ColorShader.h>
#include <video/shaders/Shader3D.h> #include <gui/video/shaders/Shader3D.h>
#include <video/shaders/ShaderFractalColor.h> #include <gui/video/shaders/ShaderFractalColor.h>
#include <video/shaders/FXAAShader.h> #include <gui/video/shaders/FXAAShader.h>
#include "utils/utils.h"
CVideo::CVideo(int32_t forceTvScanMode, int32_t forceDrcScanMode) { CVideo::CVideo(int32_t forceTvScanMode, int32_t forceDrcScanMode) {
tvEnabled = false; tvEnabled = false;
drcEnabled = false; drcEnabled = false;

View File

@ -18,12 +18,12 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <video/shaders/ColorShader.h> #include <gui/video/shaders/ColorShader.h>
#include <video/shaders/FXAAShader.h> #include <gui/video/shaders/FXAAShader.h>
#include <video/shaders/Shader3D.h> #include <gui/video/shaders/Shader3D.h>
#include <video/shaders/ShaderFractalColor.h> #include <gui/video/shaders/ShaderFractalColor.h>
#include <video/shaders/Texture2DShader.h> #include <gui/video/shaders/Texture2DShader.h>
#include <video/CursorDrawer.h> #include <gui/video/CursorDrawer.h>
CursorDrawer *CursorDrawer::instance = NULL; CursorDrawer *CursorDrawer::instance = NULL;

View File

@ -16,7 +16,7 @@
****************************************************************************/ ****************************************************************************/
#include <malloc.h> #include <malloc.h>
#include <string.h> #include <string.h>
#include <video/shaders/ColorShader.h> #include <gui/video/shaders/ColorShader.h>
static const uint32_t cpVertexShaderProgram[] = { static const uint32_t cpVertexShaderProgram[] = {
0x00000000,0x00008009,0x20000000,0x000078a0, 0x00000000,0x00008009,0x20000000,0x000078a0,

View File

@ -16,7 +16,7 @@
****************************************************************************/ ****************************************************************************/
#include <malloc.h> #include <malloc.h>
#include <string.h> #include <string.h>
#include <video/shaders/FXAAShader.h> #include <gui/video/shaders/FXAAShader.h>
static const uint32_t cpVertexShaderProgram[] = { static const uint32_t cpVertexShaderProgram[] = {
0x00000000,0x00008009,0x20000000,0x000004a0, 0x00000000,0x00008009,0x20000000,0x000004a0,

View File

@ -16,7 +16,7 @@
****************************************************************************/ ****************************************************************************/
#include <malloc.h> #include <malloc.h>
#include <string.h> #include <string.h>
#include <video/shaders/Shader3D.h> #include <gui/video/shaders/Shader3D.h>
static const uint32_t cpVertexShaderProgram[] = { static const uint32_t cpVertexShaderProgram[] = {
0x00000000,0x00008009,0x20000000,0x0000e4a1, 0x00000000,0x00008009,0x20000000,0x0000e4a1,

View File

@ -16,7 +16,7 @@
****************************************************************************/ ****************************************************************************/
#include <malloc.h> #include <malloc.h>
#include <string.h> #include <string.h>
#include <video/shaders/ShaderFractalColor.h> #include <gui/video/shaders/ShaderFractalColor.h>
static const uint32_t cpVertexShaderProgram[] = { static const uint32_t cpVertexShaderProgram[] = {
0x00000000,0x00008009,0x20000000,0x0000eca1, 0x00000000,0x00008009,0x20000000,0x0000eca1,

View File

@ -16,7 +16,7 @@
****************************************************************************/ ****************************************************************************/
#include <malloc.h> #include <malloc.h>
#include <string.h> #include <string.h>
#include <video/shaders/Texture2DShader.h> #include <gui/video/shaders/Texture2DShader.h>
static const uint32_t cpVertexShaderProgram[] = { static const uint32_t cpVertexShaderProgram[] = {
0x00000000,0x00008009,0x20000000,0x000080a0, 0x00000000,0x00008009,0x20000000,0x000080a0,