Fixed some memory leaks. Only one was mine ;P
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7392 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
017735b9ff
commit
f8620fcd0b
|
@ -31,6 +31,8 @@ namespace AudioCommon
|
|||
{
|
||||
SoundStream *InitSoundStream(CMixer *mixer, void *hWnd)
|
||||
{
|
||||
// TODO: possible memleak with mixer
|
||||
|
||||
std::string backend = ac_Config.sBackend;
|
||||
if (backend == BACKEND_OPENAL && OpenALStream::isValid())
|
||||
soundStream = new OpenALStream(mixer);
|
||||
|
|
|
@ -119,9 +119,12 @@ public:
|
|||
|
||||
// Store vectors.
|
||||
template<class T>
|
||||
void Do(std::vector<T> &x) {
|
||||
// TODO
|
||||
PanicAlert("Do(vector<>) does not yet work.");
|
||||
void Do(std::vector<T> &x)
|
||||
{
|
||||
u32 vec_size = (u32)x.size();
|
||||
Do(vec_size);
|
||||
x.resize(vec_size);
|
||||
DoArray(&x[0], vec_size);
|
||||
}
|
||||
|
||||
// Store strings.
|
||||
|
@ -138,23 +141,6 @@ public:
|
|||
}
|
||||
(*ptr) += stringLen;
|
||||
}
|
||||
|
||||
void DoBuffer(u8** pBuffer, u32& _Size)
|
||||
{
|
||||
Do(_Size);
|
||||
|
||||
if (_Size > 0) {
|
||||
switch (mode) {
|
||||
case MODE_READ: delete[] *pBuffer; *pBuffer = new u8[_Size]; memcpy(*pBuffer, *ptr, _Size); break;
|
||||
case MODE_WRITE: memcpy(*ptr, *pBuffer, _Size); break;
|
||||
case MODE_MEASURE: break;
|
||||
case MODE_VERIFY: if(*pBuffer) for(u32 i = 0; i < _Size; i++) _dbg_assert_msg_(COMMON, (*pBuffer)[i] == (*ptr)[i], "Savestate verification failure: %d (0x%X) (at %p) != %d (0x%X) (at %p).\n", (*pBuffer)[i], (*pBuffer)[i], &(*pBuffer)[i], (*ptr)[i], (*ptr)[i], &(*ptr)[i]); break;
|
||||
}
|
||||
} else {
|
||||
*pBuffer = NULL;
|
||||
}
|
||||
(*ptr) += _Size;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
void DoArray(T *x, int count) {
|
||||
|
@ -260,9 +246,9 @@ public:
|
|||
u8 *ptr = 0;
|
||||
PointerWrap p(&ptr, PointerWrap::MODE_MEASURE);
|
||||
_class.DoState(p);
|
||||
size_t sz = (size_t)ptr;
|
||||
u8 *buffer = new u8[sz];
|
||||
ptr = buffer;
|
||||
size_t const sz = (size_t)ptr;
|
||||
std::vector<u8> buffer(sz);
|
||||
ptr = &buffer[0];
|
||||
p.SetMode(PointerWrap::MODE_WRITE);
|
||||
_class.DoState(p);
|
||||
|
||||
|
@ -279,7 +265,7 @@ public:
|
|||
return false;
|
||||
}
|
||||
|
||||
if (!pFile.WriteBytes(buffer, sz))
|
||||
if (!pFile.WriteBytes(&buffer[0], sz))
|
||||
{
|
||||
ERROR_LOG(COMMON,"ChunkReader: Failed writing data");
|
||||
return false;
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include <math.h>
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
#include <array>
|
||||
#else
|
||||
#include <stdarg.h>
|
||||
#endif
|
||||
|
@ -175,8 +176,8 @@ void ConsoleListener::PixelSpace(int Left, int Top, int Width, int Height, bool
|
|||
bool DAft = true;
|
||||
std::string SLog = "";
|
||||
|
||||
HWND hWnd = GetConsoleWindow();
|
||||
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
const HWND hWnd = GetConsoleWindow();
|
||||
const HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
|
||||
// Get console info
|
||||
CONSOLE_SCREEN_BUFFER_INFO ConInfo;
|
||||
|
@ -189,30 +190,30 @@ void ConsoleListener::PixelSpace(int Left, int Top, int Width, int Height, bool
|
|||
DWORD cCharsRead = 0;
|
||||
COORD coordScreen = { 0, 0 };
|
||||
|
||||
std::vector<char*> Str;
|
||||
std::vector<WORD*> Attr;
|
||||
static const int MAX_BYTES = 1024 * 16;
|
||||
|
||||
std::vector<std::array<CHAR, MAX_BYTES>> Str;
|
||||
std::vector<std::array<WORD, MAX_BYTES>> Attr;
|
||||
|
||||
// ReadConsoleOutputAttribute seems to have a limit at this level
|
||||
const int MAX_BYTES = 1024 * 16;
|
||||
int ReadBufferSize = MAX_BYTES - 32;
|
||||
static const int ReadBufferSize = MAX_BYTES - 32;
|
||||
|
||||
DWORD cAttrRead = ReadBufferSize;
|
||||
DWORD BytesRead = 0;
|
||||
int i = 0;
|
||||
int LastAttrRead = 0;
|
||||
while (BytesRead < BufferSize)
|
||||
{
|
||||
Str.push_back(new char[MAX_BYTES]);
|
||||
if (!ReadConsoleOutputCharacter(hConsole, Str[i], ReadBufferSize, coordScreen, &cCharsRead))
|
||||
Str.resize(Str.size() + 1);
|
||||
if (!ReadConsoleOutputCharacter(hConsole, Str.back().data(), ReadBufferSize, coordScreen, &cCharsRead))
|
||||
SLog += StringFromFormat("WriteConsoleOutputCharacter error");
|
||||
Attr.push_back(new WORD[MAX_BYTES]);
|
||||
if (!ReadConsoleOutputAttribute(hConsole, Attr[i], ReadBufferSize, coordScreen, &cAttrRead))
|
||||
|
||||
Attr.resize(Attr.size() + 1);
|
||||
if (!ReadConsoleOutputAttribute(hConsole, Attr.back().data(), ReadBufferSize, coordScreen, &cAttrRead))
|
||||
SLog += StringFromFormat("WriteConsoleOutputAttribute error");
|
||||
|
||||
// Break on error
|
||||
if (cAttrRead == 0) break;
|
||||
BytesRead += cAttrRead;
|
||||
i++;
|
||||
coordScreen = GetCoordinates(BytesRead, ConInfo.dwSize.X);
|
||||
LastAttrRead = cAttrRead;
|
||||
}
|
||||
// Letter space
|
||||
int LWidth = (int)(floor((float)Width / 8.0f) - 1.0f);
|
||||
|
@ -232,16 +233,16 @@ void ConsoleListener::PixelSpace(int Left, int Top, int Width, int Height, bool
|
|||
DWORD cAttrWritten = 0;
|
||||
for (size_t i = 0; i < Attr.size(); i++)
|
||||
{
|
||||
if (!WriteConsoleOutputCharacter(hConsole, Str[i], ReadBufferSize, coordScreen, &cCharsWritten))
|
||||
if (!WriteConsoleOutputCharacter(hConsole, Str[i].data(), ReadBufferSize, coordScreen, &cCharsWritten))
|
||||
SLog += StringFromFormat("WriteConsoleOutputCharacter error");
|
||||
if (!WriteConsoleOutputAttribute(hConsole, Attr[i], ReadBufferSize, coordScreen, &cAttrWritten))
|
||||
if (!WriteConsoleOutputAttribute(hConsole, Attr[i].data(), ReadBufferSize, coordScreen, &cAttrWritten))
|
||||
SLog += StringFromFormat("WriteConsoleOutputAttribute error");
|
||||
|
||||
BytesWritten += cAttrWritten;
|
||||
coordScreen = GetCoordinates(BytesWritten, LBufWidth);
|
||||
}
|
||||
|
||||
int OldCursor = ConInfo.dwCursorPosition.Y * ConInfo.dwSize.X + ConInfo.dwCursorPosition.X;
|
||||
const int OldCursor = ConInfo.dwCursorPosition.Y * ConInfo.dwSize.X + ConInfo.dwCursorPosition.X;
|
||||
COORD Coo = GetCoordinates(OldCursor, LBufWidth);
|
||||
SetConsoleCursorPosition(hConsole, Coo);
|
||||
|
||||
|
|
|
@ -677,7 +677,7 @@ bool WriteStringToFile(bool text_file, const std::string &str, const char *filen
|
|||
if (!f)
|
||||
return false;
|
||||
size_t len = str.size();
|
||||
if (len != fwrite(str.data(), 1, str.size(), f))
|
||||
if (len != fwrite(str.data(), 1, str.size(), f)) // TODO: string::data() may not be contiguous
|
||||
{
|
||||
fclose(f);
|
||||
return false;
|
||||
|
|
|
@ -41,7 +41,6 @@ DSPEmitter::DSPEmitter() : gpr(*this), storeIndex(-1), storeIndex2(-1)
|
|||
blocks = new DSPCompiledCode[MAX_BLOCKS];
|
||||
blockLinks = new Block[MAX_BLOCKS];
|
||||
blockSize = new u16[MAX_BLOCKS];
|
||||
unresolvedJumps = new std::list<u16>[MAX_BLOCKS];
|
||||
|
||||
compileSR = 0;
|
||||
compileSR |= SR_INT_ENABLE;
|
||||
|
|
|
@ -260,7 +260,7 @@ public:
|
|||
u16 startAddr;
|
||||
Block *blockLinks;
|
||||
u16 *blockSize;
|
||||
std::list<u16> *unresolvedJumps;
|
||||
std::list<u16> unresolvedJumps[MAX_BLOCKS];
|
||||
|
||||
DSPJitRegCache gpr;
|
||||
private:
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
#ifndef _DSPEMULATOR_H_
|
||||
#define _DSPEMULATOR_H_
|
||||
|
||||
|
||||
#include "ChunkFile.h"
|
||||
#include "SoundStream.h"
|
||||
|
||||
class DSPEmulator
|
||||
{
|
||||
|
@ -43,6 +43,9 @@ public:
|
|||
virtual void DSP_Update(int cycles) = 0;
|
||||
virtual void DSP_StopSoundStream() = 0;
|
||||
virtual void DSP_ClearAudioBuffer(bool mute) = 0;
|
||||
|
||||
protected:
|
||||
SoundStream *soundStream;
|
||||
};
|
||||
|
||||
DSPEmulator *CreateDSPEmulator(bool LLE);
|
||||
|
|
|
@ -61,7 +61,6 @@ private:
|
|||
bool m_bWii;
|
||||
|
||||
bool m_InitMixer;
|
||||
SoundStream *soundStream;
|
||||
|
||||
// Fake mailbox utility
|
||||
struct DSPState
|
||||
|
|
|
@ -48,7 +48,6 @@ private:
|
|||
static void dsp_thread(DSPLLE* lpParameter);
|
||||
|
||||
std::thread m_hDSPThread;
|
||||
SoundStream *soundStream;
|
||||
bool m_InitMixer;
|
||||
void *m_hWnd;
|
||||
bool m_bWii;
|
||||
|
|
|
@ -117,25 +117,21 @@ bool CWII_IPC_HLE_Device_di::IOCtlV(u32 _CommandAddress)
|
|||
_dbg_assert_msg_(WII_IPC_DVD, CommandBuffer.InBuffer[1].m_Address == 0, "DVDLowOpenPartition with ticket");
|
||||
_dbg_assert_msg_(WII_IPC_DVD, CommandBuffer.InBuffer[2].m_Address == 0, "DVDLowOpenPartition with cert chain");
|
||||
|
||||
bool readOK = false;
|
||||
|
||||
// Get TMD offset for requested partition...
|
||||
u64 TMDOffset = ((u64)Memory::Read_U32(CommandBuffer.InBuffer[0].m_Address + 4) << 2 ) + 0x2c0;
|
||||
u64 const TMDOffset = ((u64)Memory::Read_U32(CommandBuffer.InBuffer[0].m_Address + 4) << 2 ) + 0x2c0;
|
||||
|
||||
INFO_LOG(WII_IPC_DVD, "DVDLowOpenPartition: TMDOffset 0x%016llx", TMDOffset);
|
||||
|
||||
u32 TMDsz = 0x208; //CommandBuffer.PayloadBuffer[0].m_Size;
|
||||
u8 *pTMD = new u8[TMDsz];
|
||||
if (pTMD)
|
||||
{
|
||||
// Read TMD to the buffer
|
||||
VolumeHandler::RAWReadToPtr(pTMD, TMDOffset, TMDsz);
|
||||
static u32 const TMDsz = 0x208; //CommandBuffer.PayloadBuffer[0].m_Size;
|
||||
u8 pTMD[TMDsz];
|
||||
|
||||
memcpy(Memory::GetPointer(CommandBuffer.PayloadBuffer[0].m_Address), pTMD, TMDsz);
|
||||
readOK |= true;
|
||||
WII_IPC_HLE_Interface::ES_DIVerify(pTMD, TMDsz);
|
||||
}
|
||||
ReturnValue = readOK ? 1 : 0;
|
||||
// Read TMD to the buffer
|
||||
VolumeHandler::RAWReadToPtr(pTMD, TMDOffset, TMDsz);
|
||||
|
||||
memcpy(Memory::GetPointer(CommandBuffer.PayloadBuffer[0].m_Address), pTMD, TMDsz);
|
||||
WII_IPC_HLE_Interface::ES_DIVerify(pTMD, TMDsz);
|
||||
|
||||
ReturnValue = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -164,7 +164,7 @@ private:
|
|||
ACLQ(const u8* data, const size_t size, const u16 conn_handle)
|
||||
: m_size(size), m_conn_handle(conn_handle)
|
||||
{
|
||||
m_buffer = new u8[m_size];
|
||||
m_buffer = new u8[m_size]; // TODO: memleak
|
||||
memcpy(m_buffer, data, m_size);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -147,6 +147,12 @@ CGameListCtrl::~CGameListCtrl()
|
|||
{
|
||||
if (m_imageListSmall)
|
||||
delete m_imageListSmall;
|
||||
|
||||
while (!m_ISOFiles.empty()) // so lazy
|
||||
{
|
||||
delete m_ISOFiles.back();
|
||||
m_ISOFiles.pop_back();
|
||||
}
|
||||
}
|
||||
|
||||
void CGameListCtrl::InitBitmaps()
|
||||
|
@ -276,7 +282,7 @@ void CGameListCtrl::Update()
|
|||
for (int i = 0; i < (int)m_ISOFiles.size(); i++)
|
||||
{
|
||||
InsertItemInReportView(i);
|
||||
if (m_ISOFiles[i].IsCompressed())
|
||||
if (m_ISOFiles[i]->IsCompressed())
|
||||
SetItemTextColour(i, wxColour(0xFF0000));
|
||||
}
|
||||
|
||||
|
@ -375,7 +381,7 @@ void CGameListCtrl::OnPaintDrawImages(wxPaintEvent& event)
|
|||
if (GetItemRect(i, itemRect))
|
||||
{
|
||||
int itemY = itemRect.GetTop();
|
||||
const GameListItem& rISOFile = m_ISOFiles[GetItemData(i)];
|
||||
const GameListItem& rISOFile = *m_ISOFiles[GetItemData(i)];
|
||||
|
||||
m_imageListSmall->Draw(m_PlatformImageIndex[rISOFile.GetPlatform()],
|
||||
dc, itemRect.GetX()+3, itemY);
|
||||
|
@ -415,7 +421,7 @@ void CGameListCtrl::InsertItemInReportView(long _Index)
|
|||
wxCSConv SJISConv(wxFontMapper::GetEncodingName(wxFONTENCODING_EUC_JP));
|
||||
#endif
|
||||
|
||||
GameListItem& rISOFile = m_ISOFiles[_Index];
|
||||
GameListItem& rISOFile = *m_ISOFiles[_Index];
|
||||
m_gamePath.append(rISOFile.GetFileName() + '\n');
|
||||
|
||||
// Insert a first row with the platform image, that will be used as the Index
|
||||
|
@ -612,7 +618,9 @@ void CGameListCtrl::ScanForISOs()
|
|||
if (!Cont)
|
||||
break;
|
||||
|
||||
GameListItem ISOFile(rFilenames[i]);
|
||||
GameListItem* const iso_file = new GameListItem(rFilenames[i]);
|
||||
const GameListItem& ISOFile = *iso_file;
|
||||
|
||||
if (ISOFile.IsValid())
|
||||
{
|
||||
bool list = true;
|
||||
|
@ -665,21 +673,21 @@ void CGameListCtrl::ScanForISOs()
|
|||
}
|
||||
|
||||
if (list)
|
||||
m_ISOFiles.push_back(ISOFile);
|
||||
m_ISOFiles.push_back(iso_file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (SConfig::GetInstance().m_ListDrives)
|
||||
{
|
||||
std::vector<std::string> drives = cdio_get_devices();
|
||||
GameListItem * Drive[24];
|
||||
// Another silly Windows limitation of 24 drive letters
|
||||
for (u32 i = 0; i < drives.size() && i < 24; i++)
|
||||
const std::vector<std::string> drives = cdio_get_devices();
|
||||
|
||||
for (std::vector<std::string>::const_iterator iter = drives.begin(); iter != drives.end(); ++iter)
|
||||
{
|
||||
Drive[i] = new GameListItem(drives[i].c_str());
|
||||
if (Drive[i]->IsValid())
|
||||
m_ISOFiles.push_back(*Drive[i]);
|
||||
std::auto_ptr<GameListItem> gli(new GameListItem(*iter));
|
||||
|
||||
if (gli->IsValid())
|
||||
m_ISOFiles.push_back(gli.release());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -692,10 +700,12 @@ void CGameListCtrl::OnColBeginDrag(wxListEvent& event)
|
|||
event.Veto();
|
||||
}
|
||||
|
||||
const GameListItem *CGameListCtrl::GetISO(int index) const
|
||||
const GameListItem *CGameListCtrl::GetISO(size_t index) const
|
||||
{
|
||||
if (index >= (int)m_ISOFiles.size()) return NULL;
|
||||
return &m_ISOFiles[index];
|
||||
if (index < m_ISOFiles.size())
|
||||
return m_ISOFiles[index];
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
CGameListCtrl *caller;
|
||||
|
@ -906,7 +916,7 @@ void CGameListCtrl::OnMouseMotion(wxMouseEvent& event)
|
|||
return;
|
||||
}
|
||||
|
||||
const GameListItem& rISO = m_ISOFiles[GetItemData(item)];
|
||||
const GameListItem& rISO = *m_ISOFiles[GetItemData(item)];
|
||||
|
||||
IniFile ini;
|
||||
ini.Load(File::GetUserPath(D_GAMECONFIG_IDX) + rISO.GetUniqueID() + ".ini");
|
||||
|
@ -1061,7 +1071,7 @@ const GameListItem * CGameListCtrl::GetSelectedISO()
|
|||
if (GetSelectedItemCount() > 1)
|
||||
SetItemState(item, 0, wxLIST_STATE_SELECTED);
|
||||
|
||||
return &m_ISOFiles[GetItemData(item)];
|
||||
return m_ISOFiles[GetItemData(item)];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@ public:
|
|||
|
||||
void BrowseForDirectory();
|
||||
const GameListItem *GetSelectedISO();
|
||||
const GameListItem *GetISO(int index) const;
|
||||
const GameListItem *GetISO(size_t index) const;
|
||||
|
||||
enum
|
||||
{
|
||||
|
@ -71,7 +71,7 @@ private:
|
|||
std::vector<int> m_FlagImageIndex;
|
||||
std::vector<int> m_PlatformImageIndex;
|
||||
std::vector<int> m_EmuStateImageIndex;
|
||||
std::vector<GameListItem> m_ISOFiles;
|
||||
std::vector<GameListItem*> m_ISOFiles;
|
||||
|
||||
// NetPlay string for the gamelist
|
||||
std::string m_gameList;
|
||||
|
|
|
@ -47,8 +47,6 @@ GameListItem::GameListItem(const std::string& _rFileName)
|
|||
, m_FileSize(0)
|
||||
, m_Valid(false)
|
||||
, m_BlobCompressed(false)
|
||||
, m_pImage(NULL)
|
||||
, m_ImageSize(0)
|
||||
{
|
||||
if (LoadFromCache())
|
||||
{
|
||||
|
@ -100,9 +98,8 @@ GameListItem::GameListItem(const std::string& _rFileName)
|
|||
pBannerLoader->GetDescription(m_Description);
|
||||
if (pBannerLoader->GetBanner(g_ImageTemp))
|
||||
{
|
||||
m_ImageSize = DVD_BANNER_WIDTH * DVD_BANNER_HEIGHT * 3;
|
||||
//use malloc(), since wxImage::Create below calls free() afterwards.
|
||||
m_pImage = (u8*)malloc(m_ImageSize);
|
||||
// resize vector to image size
|
||||
m_pImage.resize(DVD_BANNER_WIDTH * DVD_BANNER_HEIGHT * 3);
|
||||
|
||||
for (size_t i = 0; i < DVD_BANNER_WIDTH * DVD_BANNER_HEIGHT; i++)
|
||||
{
|
||||
|
@ -124,14 +121,14 @@ GameListItem::GameListItem(const std::string& _rFileName)
|
|||
|
||||
// If not Gamecube, create a cache file only if we have an image.
|
||||
// Wii isos create their images after you have generated the first savegame
|
||||
if (m_Platform == GAMECUBE_DISC || m_pImage)
|
||||
if (m_Platform == GAMECUBE_DISC || !m_pImage.empty())
|
||||
SaveToCache();
|
||||
}
|
||||
}
|
||||
|
||||
if (m_pImage)
|
||||
if (!m_pImage.empty())
|
||||
{
|
||||
m_Image.Create(DVD_BANNER_WIDTH, DVD_BANNER_HEIGHT, m_pImage);
|
||||
m_Image.Create(DVD_BANNER_WIDTH, DVD_BANNER_HEIGHT, &m_pImage[0], true);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -173,7 +170,7 @@ void GameListItem::DoState(PointerWrap &p)
|
|||
p.Do(m_VolumeSize);
|
||||
p.Do(m_Country);
|
||||
p.Do(m_BlobCompressed);
|
||||
p.DoBuffer(&m_pImage, m_ImageSize);
|
||||
p.Do(m_pImage);
|
||||
p.Do(m_Platform);
|
||||
}
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
#endif
|
||||
|
||||
class PointerWrap;
|
||||
class GameListItem
|
||||
class GameListItem : NonCopyable
|
||||
{
|
||||
public:
|
||||
GameListItem(const std::string& _rFileName);
|
||||
|
@ -78,7 +78,7 @@ private:
|
|||
#endif
|
||||
bool m_Valid;
|
||||
bool m_BlobCompressed;
|
||||
u8* m_pImage;
|
||||
std::vector<u8> m_pImage;
|
||||
u32 m_ImageSize;
|
||||
|
||||
bool LoadFromCache();
|
||||
|
|
|
@ -447,7 +447,7 @@ ControllerInterface::Device* ControllerInterface::FindDevice(const ControllerInt
|
|||
ControllerInterface::Device::Control* ControllerInterface::InputReference::Detect(const unsigned int ms, Device* const device)
|
||||
{
|
||||
unsigned int time = 0;
|
||||
bool* const states = new bool[device->Inputs().size()];
|
||||
std::vector<bool> states(device->Inputs().size());
|
||||
|
||||
if (device->Inputs().size() == 0)
|
||||
return NULL;
|
||||
|
@ -457,14 +457,14 @@ ControllerInterface::Device::Control* ControllerInterface::InputReference::Detec
|
|||
std::vector<Device::Input*>::const_iterator
|
||||
i = device->Inputs().begin(),
|
||||
e = device->Inputs().end();
|
||||
for (bool* state=states; i != e; ++i)
|
||||
for (std::vector<bool>::iterator state = states.begin(); i != e; ++i)
|
||||
*state++ = ((*i)->GetState() > INPUT_DETECT_THRESHOLD);
|
||||
|
||||
while (time < ms)
|
||||
{
|
||||
device->UpdateInput();
|
||||
i = device->Inputs().begin();
|
||||
for (bool* state=states; i != e; ++i,++state)
|
||||
for (std::vector<bool>::iterator state = states.begin(); i != e; ++i,++state)
|
||||
{
|
||||
// detected an input
|
||||
if ((*i)->IsDetectable() && (*i)->GetState() > INPUT_DETECT_THRESHOLD)
|
||||
|
@ -480,8 +480,6 @@ ControllerInterface::Device::Control* ControllerInterface::InputReference::Detec
|
|||
Common::SleepCurrentThread(10); time += 10;
|
||||
}
|
||||
|
||||
delete[] states;
|
||||
|
||||
// no input was detected
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -114,7 +114,7 @@ void TexDecoder_OpenCL_Initialize()
|
|||
else
|
||||
{
|
||||
binary_size = input.GetSize();
|
||||
header = new char[HEADER_SIZE];
|
||||
header = new char[HEADER_SIZE]; // TODO: memleak possible
|
||||
binary = new char[binary_size];
|
||||
input.ReadBytes(header, HEADER_SIZE);
|
||||
input.ReadBytes(binary, binary_size);
|
||||
|
|
|
@ -1571,7 +1571,7 @@ bool Renderer::SaveScreenshot(const std::string &filename, const TargetRectangle
|
|||
{
|
||||
u32 W = back_rc.GetWidth();
|
||||
u32 H = back_rc.GetHeight();
|
||||
u8 *data = new u8[3 * W * H];
|
||||
u8 *data = new u8[3 * W * H]; // TODO: possible memleak, and new'd data is given to wxImage which requires malloc
|
||||
glPixelStorei(GL_PACK_ALIGNMENT, 1);
|
||||
|
||||
glReadPixels(back_rc.left, back_rc.bottom, W, H, GL_RGB, GL_UNSIGNED_BYTE, data);
|
||||
|
|
Loading…
Reference in New Issue