mirror of
https://github.com/wiiu-env/libgui.git
synced 2024-12-23 23:11:48 +01:00
Compatible with latest WUT
This commit is contained in:
parent
03ad816adc
commit
21bb3b0417
5
.gitignore
vendored
5
.gitignore
vendored
@ -1,3 +1,6 @@
|
||||
build/*
|
||||
release/*
|
||||
libgui.cbp
|
||||
libgui.cbp
|
||||
lib/
|
||||
*.bz2
|
||||
libgui.layout
|
||||
|
49
.travis.yml
49
.travis.yml
@ -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
|
@ -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
162
Makefile
Normal 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
|
||||
#---------------------------------------------------------------------------------------
|
@ -2,7 +2,7 @@
|
||||
#define _GAME_BG_IMAGE_H_
|
||||
|
||||
#include <gui/GuiImageAsync.h>
|
||||
#include <video/shaders/Shader3D.h>
|
||||
#include <gui/video/shaders/Shader3D.h>
|
||||
|
||||
class GameBgImage : public GuiImageAsync {
|
||||
public:
|
||||
|
@ -2,7 +2,6 @@
|
||||
#define _GRID_BACKGROUND_H_
|
||||
|
||||
#include <gui/GuiImage.h>
|
||||
#include <video/shaders/Shader.h>
|
||||
|
||||
class GridBackground : public GuiImage {
|
||||
public:
|
||||
|
@ -33,10 +33,9 @@
|
||||
#include <gui/sigslot.h>
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
#include <system/AsyncDeleter.h>
|
||||
#include <utils/logger.h>
|
||||
#include <gui/system/AsyncDeleter.h>
|
||||
|
||||
#include <resources/Resources.h>
|
||||
#include <gui/resources/Resources.h>
|
||||
|
||||
enum {
|
||||
EFFECT_NONE = 0x00,
|
||||
|
@ -17,7 +17,7 @@
|
||||
#ifndef GUI_IMAGE_H_
|
||||
#define GUI_IMAGE_H_
|
||||
|
||||
#include <video/shaders/Shader.h>
|
||||
#include <gui/video/shaders/Shader.h>
|
||||
#include <gui/GuiElement.h>
|
||||
#include <gui/GuiImageData.h>
|
||||
#include <gui/gx2_ext.h>
|
||||
|
@ -19,8 +19,8 @@
|
||||
|
||||
#include <vector>
|
||||
#include <gui/GuiImage.h>
|
||||
#include <system/CThread.h>
|
||||
#include <system/CMutex.h>
|
||||
#include <gui/system/CThread.h>
|
||||
#include <gui/system/CMutex.h>
|
||||
|
||||
class GuiImageAsync : public GuiImage {
|
||||
public:
|
||||
|
@ -18,7 +18,7 @@
|
||||
#define GUI_IMAGEDATA_H_
|
||||
|
||||
#include <gd.h>
|
||||
#include <system/AsyncDeleter.h>
|
||||
#include <gui/system/AsyncDeleter.h>
|
||||
#include <gui/gx2_ext.h>
|
||||
#include <gx2/texture.h>
|
||||
|
||||
|
@ -17,7 +17,7 @@
|
||||
#ifndef 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
|
||||
class GuiSound : public AsyncDeleter::Element {
|
||||
|
@ -25,7 +25,7 @@
|
||||
***************************************************************************/
|
||||
#include <mad.h>
|
||||
|
||||
#include <sounds/SoundDecoder.hpp>
|
||||
#include <gui/sounds/SoundDecoder.hpp>
|
||||
|
||||
class Mp3Decoder : public SoundDecoder {
|
||||
public:
|
@ -26,7 +26,7 @@
|
||||
#include <tremor/ivorbiscodec.h>
|
||||
#include <tremor/ivorbisfile.h>
|
||||
|
||||
#include <sounds/SoundDecoder.hpp>
|
||||
#include <gui/sounds/SoundDecoder.hpp>
|
||||
|
||||
class OggDecoder : public SoundDecoder {
|
||||
public:
|
@ -26,9 +26,11 @@
|
||||
#ifndef SOUND_DECODER_HPP
|
||||
#define SOUND_DECODER_HPP
|
||||
|
||||
#include <fs/CFile.hpp>
|
||||
#include <system/CMutex.h>
|
||||
#include <sounds/BufferCircle.hpp>
|
||||
#include <string>
|
||||
#include <gui/system/CMutex.h>
|
||||
#include <gui/sounds/BufferCircle.hpp>
|
||||
|
||||
class CFile;
|
||||
|
||||
class SoundDecoder {
|
||||
public:
|
||||
@ -46,10 +48,8 @@ public:
|
||||
virtual int32_t Tell() {
|
||||
return CurPos;
|
||||
}
|
||||
virtual int32_t Seek(int32_t pos) {
|
||||
CurPos = pos;
|
||||
return file_fd->seek(CurPos, SEEK_SET);
|
||||
}
|
||||
virtual int32_t Seek(int32_t pos);
|
||||
|
||||
virtual int32_t Rewind();
|
||||
virtual uint16_t GetFormat() {
|
||||
return Format;
|
@ -28,9 +28,9 @@
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include <system/CThread.h>
|
||||
#include <sounds/SoundDecoder.hpp>
|
||||
#include <sounds/Voice.h>
|
||||
#include <gui/system/CThread.h>
|
||||
#include <gui/sounds/SoundDecoder.hpp>
|
||||
#include <gui/sounds/Voice.h>
|
||||
#include <sndcore2/voice.h>
|
||||
|
||||
#define MAX_DECODERS 16 // can be increased up to 96
|
@ -26,7 +26,7 @@
|
||||
#ifndef WAVDECODER_HPP_
|
||||
#define WAVDECODER_HPP_
|
||||
|
||||
#include <sounds/SoundDecoder.hpp>
|
||||
#include <gui/sounds/SoundDecoder.hpp>
|
||||
|
||||
typedef struct {
|
||||
uint32_t magicRIFF;
|
76
include/gui/system/AsyncDeleter.h
Normal file
76
include/gui/system/AsyncDeleter.h
Normal 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
|
69
include/gui/system/CMutex.h
Normal file
69
include/gui/system/CMutex.h
Normal 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_
|
133
include/gui/system/CThread.h
Normal file
133
include/gui/system/CThread.h
Normal 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
|
@ -28,7 +28,7 @@
|
||||
#include <gx2/display.h>
|
||||
#include <gui/gx2_ext.h>
|
||||
|
||||
#include <video/shaders/Shader.h>
|
||||
#include <gui/video/shaders/Shader.h>
|
||||
|
||||
class CVideo {
|
||||
public:
|
@ -17,9 +17,9 @@
|
||||
#ifndef __COLOR_SHADER_H_
|
||||
#define __COLOR_SHADER_H_
|
||||
|
||||
#include <video/shaders/VertexShader.h>
|
||||
#include <video/shaders/PixelShader.h>
|
||||
#include <video/shaders/FetchShader.h>
|
||||
#include <gui/video/shaders/VertexShader.h>
|
||||
#include <gui/video/shaders/PixelShader.h>
|
||||
#include <gui/video/shaders/FetchShader.h>
|
||||
|
||||
class ColorShader : public Shader {
|
||||
private:
|
@ -17,9 +17,9 @@
|
||||
#ifndef __FXAA_SHADER_H_
|
||||
#define __FXAA_SHADER_H_
|
||||
|
||||
#include <video/shaders/VertexShader.h>
|
||||
#include <video/shaders/PixelShader.h>
|
||||
#include <video/shaders/FetchShader.h>
|
||||
#include <gui/video/shaders/VertexShader.h>
|
||||
#include <gui/video/shaders/PixelShader.h>
|
||||
#include <gui/video/shaders/FetchShader.h>
|
||||
|
||||
class FXAAShader : public Shader {
|
||||
public:
|
@ -17,7 +17,7 @@
|
||||
#ifndef FETCH_SHADER_H
|
||||
#define FETCH_SHADER_H
|
||||
|
||||
#include <video/shaders/Shader.h>
|
||||
#include <gui/video/shaders/Shader.h>
|
||||
|
||||
class FetchShader : public Shader {
|
||||
public:
|
@ -17,7 +17,7 @@
|
||||
#ifndef PIXEL_SHADER_H
|
||||
#define PIXEL_SHADER_H
|
||||
|
||||
#include <video/shaders/Shader.h>
|
||||
#include <gui/video/shaders/Shader.h>
|
||||
|
||||
class PixelShader : public Shader {
|
||||
public:
|
@ -19,12 +19,12 @@
|
||||
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
#include <utils/utils.h>
|
||||
#include <gx2/shaders.h>
|
||||
#include <gx2/mem.h>
|
||||
#include <gx2/enum.h>
|
||||
#include <gx2/registers.h>
|
||||
#include <gx2/draw.h>
|
||||
#include <malloc.h>
|
||||
|
||||
class Shader {
|
||||
protected:
|
@ -17,9 +17,9 @@
|
||||
#ifndef SHADER_3D_H_
|
||||
#define SHADER_3D_H_
|
||||
|
||||
#include <video/shaders/VertexShader.h>
|
||||
#include <video/shaders/PixelShader.h>
|
||||
#include <video/shaders/FetchShader.h>
|
||||
#include <gui/video/shaders/VertexShader.h>
|
||||
#include <gui/video/shaders/PixelShader.h>
|
||||
#include <gui/video/shaders/FetchShader.h>
|
||||
|
||||
class Shader3D : public Shader {
|
||||
private:
|
@ -17,9 +17,9 @@
|
||||
#ifndef SHADER_FRACTAL_COLOR_H_
|
||||
#define SHADER_FRACTAL_COLOR_H_
|
||||
|
||||
#include <video/shaders/VertexShader.h>
|
||||
#include <video/shaders/PixelShader.h>
|
||||
#include <video/shaders/FetchShader.h>
|
||||
#include <gui/video/shaders/VertexShader.h>
|
||||
#include <gui/video/shaders/PixelShader.h>
|
||||
#include <gui/video/shaders/FetchShader.h>
|
||||
class ShaderFractalColor : public Shader {
|
||||
private:
|
||||
ShaderFractalColor();
|
@ -17,9 +17,9 @@
|
||||
#ifndef __TEXTURE_2D_SHADER_H_
|
||||
#define __TEXTURE_2D_SHADER_H_
|
||||
|
||||
#include <video/shaders/VertexShader.h>
|
||||
#include <video/shaders/PixelShader.h>
|
||||
#include <video/shaders/FetchShader.h>
|
||||
#include <gui/video/shaders/VertexShader.h>
|
||||
#include <gui/video/shaders/PixelShader.h>
|
||||
#include <gui/video/shaders/FetchShader.h>
|
||||
|
||||
|
||||
class Texture2DShader : public Shader {
|
@ -18,7 +18,7 @@
|
||||
#define VERTEX_SHADER_H
|
||||
|
||||
#include <string.h>
|
||||
#include <video/shaders/Shader.h>
|
||||
#include <gui/video/shaders/Shader.h>
|
||||
#include <gui/gx2_ext.h>
|
||||
|
||||
class VertexShader : public Shader {
|
@ -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
|
@ -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
61
source/fs/CFile.hpp
Normal 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
103
source/fs/DirList.h
Normal 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
16
source/fs/FSUtils.h
Normal 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_
|
@ -21,8 +21,8 @@
|
||||
*/
|
||||
|
||||
#include <gui/FreeTypeGX.h>
|
||||
#include <video/CVideo.h>
|
||||
#include <video/shaders/Texture2DShader.h>
|
||||
#include <gui/video/CVideo.h>
|
||||
#include <gui/video/shaders/Texture2DShader.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
@ -258,7 +258,7 @@ void FreeTypeGX::loadGlyphData(FT_Bitmap *bmp, ftgxCharData *charData) {
|
||||
|
||||
uint8_t *src = (uint8_t *)bmp->buffer;
|
||||
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(x = 0; x < bmp->width; x++) {
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include <gui/GameBgImage.h>
|
||||
#include <video/CVideo.h>
|
||||
#include <video/shaders/Shader3D.h>
|
||||
#include <gui/video/CVideo.h>
|
||||
#include <gui/video/shaders/Shader3D.h>
|
||||
|
||||
GameBgImage::GameBgImage(const std::string & filename, GuiImageData *preloadImage)
|
||||
: GuiImageAsync(filename, preloadImage) {
|
||||
|
@ -1,6 +1,7 @@
|
||||
#include <gui/GridBackground.h>
|
||||
#include <video/CVideo.h>
|
||||
#include <video/shaders/Shader3D.h>
|
||||
#include <gui/video/CVideo.h>
|
||||
#include <gui/video/shaders/Shader3D.h>
|
||||
#include "utils/utils.h"
|
||||
|
||||
static const float bgRepeat = 1000.0f;
|
||||
static const float bgTexRotate = 39.0f;
|
||||
|
@ -17,7 +17,6 @@
|
||||
****************************************************************************/
|
||||
#include <gui/GuiDragListener.h>
|
||||
#include <gui/GuiController.h>
|
||||
#include <utils/logger.h>
|
||||
|
||||
/**
|
||||
* Constructor for the GuiDragListener class.
|
||||
|
@ -15,9 +15,10 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
****************************************************************************/
|
||||
#include <gui/GuiImage.h>
|
||||
#include <video/CVideo.h>
|
||||
#include <video/shaders/Texture2DShader.h>
|
||||
#include <video/shaders/ColorShader.h>
|
||||
#include <gui/video/CVideo.h>
|
||||
#include <gui/video/shaders/Texture2DShader.h>
|
||||
#include <gui/video/shaders/ColorShader.h>
|
||||
#include "utils/utils.h"
|
||||
|
||||
static const float fPiDiv180 = ((float)M_PI / 180.0f);
|
||||
|
||||
|
@ -16,7 +16,7 @@
|
||||
****************************************************************************/
|
||||
#include <unistd.h>
|
||||
#include <gui/GuiImageAsync.h>
|
||||
#include <fs/FSUtils.h>
|
||||
#include "fs/FSUtils.h"
|
||||
|
||||
std::vector<GuiImageAsync *> GuiImageAsync::imageQueue;
|
||||
CThread * GuiImageAsync::pThread = NULL;
|
||||
|
@ -15,8 +15,9 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
****************************************************************************/
|
||||
#include <gui/GuiParticleImage.h>
|
||||
#include <video/CVideo.h>
|
||||
#include <video/shaders/ColorShader.h>
|
||||
#include <gui/video/CVideo.h>
|
||||
#include <gui/video/shaders/ColorShader.h>
|
||||
#include "utils/utils.h"
|
||||
|
||||
#define CIRCLE_VERTEX_COUNT 36
|
||||
|
||||
|
@ -22,7 +22,8 @@
|
||||
* distribution.
|
||||
***************************************************************************/
|
||||
#include <gui/GuiScrollbar.h>
|
||||
#include <resources/Resources.h>
|
||||
#include <gui/resources/Resources.h>
|
||||
#include "utils/utils.h"
|
||||
|
||||
GuiScrollbar::GuiScrollbar(int32_t h)
|
||||
: touchTrigger(GuiTrigger::CHANNEL_1, GuiTrigger::VPAD_TOUCH)
|
||||
|
@ -16,8 +16,6 @@
|
||||
****************************************************************************/
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <utils/StringTools.h>
|
||||
#include <utils/logger.h>
|
||||
|
||||
#include <gui/GuiSelectBox.h>
|
||||
#include <gui/GuiImage.h>
|
||||
|
@ -14,8 +14,11 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* 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 <sounds/SoundHandler.hpp>
|
||||
#include <gui/sounds/SoundHandler.hpp>
|
||||
|
||||
GuiSound::GuiSound(const char * filepath) {
|
||||
voice = -1;
|
||||
|
@ -17,7 +17,6 @@
|
||||
#include <gui/GuiSwitch.h>
|
||||
#include <gui/GuiImage.h>
|
||||
#include <gui/GuiImageData.h>
|
||||
#include <utils/logger.h>
|
||||
/**
|
||||
* Constructor for the GuiSwitch class.
|
||||
*/
|
||||
|
@ -16,7 +16,7 @@
|
||||
****************************************************************************/
|
||||
#include <gui/GuiText.h>
|
||||
#include <gui/FreeTypeGX.h>
|
||||
#include <video/CVideo.h>
|
||||
#include <gui/video/CVideo.h>
|
||||
|
||||
FreeTypeGX * GuiText::presentFont = NULL;
|
||||
int32_t GuiText::presetSize = 28;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@ -25,7 +25,7 @@
|
||||
***************************************************************************/
|
||||
#include <malloc.h>
|
||||
#include <utils/utils.h>
|
||||
#include <sounds/BufferCircle.hpp>
|
||||
#include <gui/sounds/BufferCircle.hpp>
|
||||
|
||||
BufferCircle::BufferCircle() {
|
||||
which = 0;
|
||||
|
@ -31,7 +31,8 @@
|
||||
#include <math.h>
|
||||
#include <coreinit/time.h>
|
||||
#include <coreinit/thread.h>
|
||||
#include <sounds/Mp3Decoder.hpp>
|
||||
#include <gui/sounds/Mp3Decoder.hpp>
|
||||
#include "fs/CFile.hpp"
|
||||
|
||||
Mp3Decoder::Mp3Decoder(const char * filepath)
|
||||
: SoundDecoder(filepath)
|
||||
|
@ -27,7 +27,8 @@
|
||||
#include <malloc.h>
|
||||
#include <coreinit/time.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) {
|
||||
return ((CFile *) f)->read((uint8_t *) punt, bytes*blocks);
|
||||
|
@ -21,7 +21,8 @@
|
||||
#include <coreinit/time.h>
|
||||
#include <coreinit/thread.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 FixedPointScale = 1 << FixedPointShift;
|
||||
@ -58,6 +59,11 @@ SoundDecoder::~SoundDecoder() {
|
||||
free(ResampleBuffer);
|
||||
}
|
||||
|
||||
int32_t SoundDecoder::Seek(int32_t pos) {
|
||||
CurPos = pos;
|
||||
return file_fd->seek(CurPos, SEEK_SET);
|
||||
}
|
||||
|
||||
void SoundDecoder::Init() {
|
||||
SoundType = SOUND_RAW;
|
||||
SoundBlocks = 8;
|
||||
|
@ -26,10 +26,10 @@
|
||||
#include <unistd.h>
|
||||
#include <malloc.h>
|
||||
#include <fs/CFile.hpp>
|
||||
#include <sounds/SoundHandler.hpp>
|
||||
#include <sounds/WavDecoder.hpp>
|
||||
#include <sounds/Mp3Decoder.hpp>
|
||||
#include <sounds/OggDecoder.hpp>
|
||||
#include <gui/sounds/SoundHandler.hpp>
|
||||
#include <gui/sounds/WavDecoder.hpp>
|
||||
#include <gui/sounds/Mp3Decoder.hpp>
|
||||
#include <gui/sounds/OggDecoder.hpp>
|
||||
#include <sndcore2/core.h>
|
||||
|
||||
SoundHandler * SoundHandler::handlerInstance = NULL;
|
||||
@ -86,7 +86,11 @@ void SoundHandler::RemoveDecoder(int32_t voice) {
|
||||
if(voiceList[voice]->getState() != 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));
|
||||
}
|
||||
SoundDecoder *decoder = DecoderList[voice];
|
||||
|
@ -24,8 +24,9 @@
|
||||
* for WiiXplorer 2010
|
||||
***************************************************************************/
|
||||
#include <string.h>
|
||||
#include <utils/utils.h>
|
||||
#include <sounds/WavDecoder.hpp>
|
||||
#include <gui/sounds/WavDecoder.hpp>
|
||||
#include "fs/CFile.hpp"
|
||||
#include "utils/utils.h"
|
||||
|
||||
WavDecoder::WavDecoder(const char * filepath)
|
||||
: SoundDecoder(filepath) {
|
||||
|
42
source/system/memory.h
Normal file
42
source/system/memory.h
Normal 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
35
source/utils/utils.h
Normal 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_
|
@ -16,13 +16,15 @@
|
||||
****************************************************************************/
|
||||
#include <malloc.h>
|
||||
#include <string.h>
|
||||
#include <video/CVideo.h>
|
||||
#include <system/memory.h>
|
||||
#include <video/shaders/Texture2DShader.h>
|
||||
#include <video/shaders/ColorShader.h>
|
||||
#include <video/shaders/Shader3D.h>
|
||||
#include <video/shaders/ShaderFractalColor.h>
|
||||
#include <video/shaders/FXAAShader.h>
|
||||
#include <gui/video/CVideo.h>
|
||||
#include "system/memory.h"
|
||||
#include <gui/video/shaders/Texture2DShader.h>
|
||||
#include <gui/video/shaders/ColorShader.h>
|
||||
#include <gui/video/shaders/Shader3D.h>
|
||||
#include <gui/video/shaders/ShaderFractalColor.h>
|
||||
#include <gui/video/shaders/FXAAShader.h>
|
||||
#include "utils/utils.h"
|
||||
|
||||
CVideo::CVideo(int32_t forceTvScanMode, int32_t forceDrcScanMode) {
|
||||
tvEnabled = false;
|
||||
drcEnabled = false;
|
||||
|
@ -18,12 +18,12 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <video/shaders/ColorShader.h>
|
||||
#include <video/shaders/FXAAShader.h>
|
||||
#include <video/shaders/Shader3D.h>
|
||||
#include <video/shaders/ShaderFractalColor.h>
|
||||
#include <video/shaders/Texture2DShader.h>
|
||||
#include <video/CursorDrawer.h>
|
||||
#include <gui/video/shaders/ColorShader.h>
|
||||
#include <gui/video/shaders/FXAAShader.h>
|
||||
#include <gui/video/shaders/Shader3D.h>
|
||||
#include <gui/video/shaders/ShaderFractalColor.h>
|
||||
#include <gui/video/shaders/Texture2DShader.h>
|
||||
#include <gui/video/CursorDrawer.h>
|
||||
|
||||
CursorDrawer *CursorDrawer::instance = NULL;
|
||||
|
||||
|
@ -16,7 +16,7 @@
|
||||
****************************************************************************/
|
||||
#include <malloc.h>
|
||||
#include <string.h>
|
||||
#include <video/shaders/ColorShader.h>
|
||||
#include <gui/video/shaders/ColorShader.h>
|
||||
|
||||
static const uint32_t cpVertexShaderProgram[] = {
|
||||
0x00000000,0x00008009,0x20000000,0x000078a0,
|
||||
|
@ -16,7 +16,7 @@
|
||||
****************************************************************************/
|
||||
#include <malloc.h>
|
||||
#include <string.h>
|
||||
#include <video/shaders/FXAAShader.h>
|
||||
#include <gui/video/shaders/FXAAShader.h>
|
||||
|
||||
static const uint32_t cpVertexShaderProgram[] = {
|
||||
0x00000000,0x00008009,0x20000000,0x000004a0,
|
||||
|
@ -16,7 +16,7 @@
|
||||
****************************************************************************/
|
||||
#include <malloc.h>
|
||||
#include <string.h>
|
||||
#include <video/shaders/Shader3D.h>
|
||||
#include <gui/video/shaders/Shader3D.h>
|
||||
|
||||
static const uint32_t cpVertexShaderProgram[] = {
|
||||
0x00000000,0x00008009,0x20000000,0x0000e4a1,
|
||||
|
@ -16,7 +16,7 @@
|
||||
****************************************************************************/
|
||||
#include <malloc.h>
|
||||
#include <string.h>
|
||||
#include <video/shaders/ShaderFractalColor.h>
|
||||
#include <gui/video/shaders/ShaderFractalColor.h>
|
||||
|
||||
static const uint32_t cpVertexShaderProgram[] = {
|
||||
0x00000000,0x00008009,0x20000000,0x0000eca1,
|
||||
|
@ -16,7 +16,7 @@
|
||||
****************************************************************************/
|
||||
#include <malloc.h>
|
||||
#include <string.h>
|
||||
#include <video/shaders/Texture2DShader.h>
|
||||
#include <gui/video/shaders/Texture2DShader.h>
|
||||
|
||||
static const uint32_t cpVertexShaderProgram[] = {
|
||||
0x00000000,0x00008009,0x20000000,0x000080a0,
|
||||
|
Loading…
Reference in New Issue
Block a user