mirror of
https://github.com/RetroDECK/Supermodel.git
synced 2024-11-22 13:55:38 +00:00
Merge pull request #1 from toxieainc/master
Fix some errors, fix some performance warnings, and some simple (but effective) optimizations
This commit is contained in:
commit
d60feab2ca
|
@ -45,7 +45,7 @@ void CBlockFile::ReadString(std::string *str, uint32_t length)
|
|||
str->clear();
|
||||
//TODO: use fstream to get rid of this ugly hack
|
||||
bool keep_loading = true;
|
||||
for (size_t i = 0; i < length; i++)
|
||||
for (uint32_t i = 0; i < length; i++)
|
||||
{
|
||||
char c;
|
||||
fread(&c, sizeof(char), 1, fp);
|
||||
|
|
|
@ -251,8 +251,8 @@ static const char* g_cpcc[64] =
|
|||
{/* 000 001 010 011 100 101 110 111 */
|
||||
"f", "eq", "ogt", "oge", "olt", "ole", "ogl", "or", /* 000 */
|
||||
"un", "ueq", "ugt", "uge", "ult", "ule", "ne", "t", /* 001 */
|
||||
"sf", "seq", "gt", "ge", "lt", "le", "gl" "gle", /* 010 */
|
||||
"ngle", "ngl", "nle", "nlt", "nge", "ngt", "sne", "st", /* 011 */
|
||||
"sf", "seq", "gt", "ge", "lt", "le", "gl", "gle", /* 010 */
|
||||
"ngle", "ngl", "nle", "nlt", "nge", "ngt", "sne","st", /* 011 */
|
||||
"?", "?", "?", "?", "?", "?", "?", "?", /* 100 */
|
||||
"?", "?", "?", "?", "?", "?", "?", "?", /* 101 */
|
||||
"?", "?", "?", "?", "?", "?", "?", "?", /* 110 */
|
||||
|
|
|
@ -60,7 +60,7 @@
|
|||
#ifndef stricmp
|
||||
#ifdef _MSC_VER // MS VisualC++
|
||||
#define stricmp _stricmp
|
||||
#else // Assume GC
|
||||
#elif defined(__GNUC__)
|
||||
#define stricmp strcasecmp
|
||||
#endif // _MSC_VER
|
||||
#endif // stricmp
|
||||
|
|
|
@ -20,7 +20,7 @@ bool GameLoader::LoadZipArchive(ZipArchive *zip, const std::string &zipfilename)
|
|||
zip->zfs.push_back(zf);
|
||||
|
||||
// Identify all files in zip archive
|
||||
int err = UNZ_OK;
|
||||
int err;
|
||||
for (err = unzGoToFirstFile(zf); err == UNZ_OK; err = unzGoToNextFile(zf))
|
||||
{
|
||||
unz_file_info file_info;
|
||||
|
@ -135,7 +135,7 @@ bool GameLoader::MissingAttrib(const GameLoader &loader, const Util::Config::Nod
|
|||
|
||||
GameLoader::File::ptr_t GameLoader::File::Create(const GameLoader &loader, const Util::Config::Node &file_node)
|
||||
{
|
||||
if (GameLoader::MissingAttrib(loader, file_node, "name") | GameLoader::MissingAttrib(loader, file_node, "offset"))
|
||||
if (GameLoader::MissingAttrib(loader, file_node, "name") | GameLoader::MissingAttrib(loader, file_node, "offset")) // no || to easier detect errors
|
||||
return ptr_t();
|
||||
ptr_t file = std::make_shared<File>();
|
||||
file->offset = file_node["offset"].ValueAs<uint32_t>();
|
||||
|
@ -159,7 +159,7 @@ bool GameLoader::File::operator==(const File &rhs) const
|
|||
|
||||
GameLoader::Region::ptr_t GameLoader::Region::Create(const GameLoader &loader, const Util::Config::Node ®ion_node)
|
||||
{
|
||||
if (GameLoader::MissingAttrib(loader, region_node, "name") | MissingAttrib(loader, region_node, "stride") | GameLoader::MissingAttrib(loader, region_node, "chunk_size"))
|
||||
if (GameLoader::MissingAttrib(loader, region_node, "name") | MissingAttrib(loader, region_node, "stride") | GameLoader::MissingAttrib(loader, region_node, "chunk_size")) // no || to easier detect errors
|
||||
return ptr_t();
|
||||
ptr_t region = std::make_shared<Region>();
|
||||
region->region_name = region_node["name"].Value<std::string>();
|
||||
|
@ -191,7 +191,7 @@ bool GameLoader::Region::FindFileIndexByOffset(size_t *idx, uint32_t offset) con
|
|||
static void PopulateGameInfo(Game *game, const Util::Config::Node &game_node)
|
||||
{
|
||||
game->name = game_node["name"].ValueAs<std::string>();
|
||||
game->parent = game_node["parent"].ValueAsDefault<std::string>(std::string());
|
||||
game->parent = game_node["parent"].ValueAsDefault<std::string>("");
|
||||
game->title = game_node["identity/title"].ValueAsDefault<std::string>("Unknown");
|
||||
game->version = game_node["identity/version"].ValueAsDefault<std::string>("");
|
||||
game->manufacturer = game_node["identity/manufacturer"].ValueAsDefault<std::string>("Unknown");
|
||||
|
@ -210,7 +210,7 @@ static void PopulateGameInfo(Game *game, const Util::Config::Node &game_node)
|
|||
{ "QuadRearFrontReversed", Game::QUAD_1_RRL_2_FRL },
|
||||
{ "QuadMix", Game::QUAD_1_LR_2_FR_MIX}
|
||||
};
|
||||
std::string audio_type = game_node["hardware/audio"].ValueAsDefault<std::string>(std::string());
|
||||
std::string audio_type = game_node["hardware/audio"].ValueAsDefault<std::string>("");
|
||||
game->audio = audio_types[audio_type];
|
||||
game->pci_bridge = game_node["hardware/pci_bridge"].ValueAsDefault<std::string>("");
|
||||
game->real3d_pci_id = game_node["hardware/real3d_pci_id"].ValueAsDefault<uint32_t>(0);
|
||||
|
@ -849,7 +849,7 @@ std::string StripFilename(const std::string &filepath)
|
|||
|
||||
// If none found, there is directory component here
|
||||
if (last_slash == std::string::npos)
|
||||
return "";
|
||||
return std::string();
|
||||
|
||||
// Otherwise, strip everything after the slash
|
||||
return std::string(filepath, 0, last_slash + 1);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#include "GLSLShader.h"
|
||||
#include <stdio.h>
|
||||
#include <cstdio>
|
||||
|
||||
GLSLShader::GLSLShader() {
|
||||
|
||||
|
@ -107,6 +107,3 @@ int GLSLShader::GetAttributeLocation(const char *str)
|
|||
{
|
||||
return glGetAttribLocation(m_program, str);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -3,9 +3,8 @@
|
|||
|
||||
#include <vector>
|
||||
#include <unordered_map>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <string.h>
|
||||
#include <cstring>
|
||||
#include "Texture.h"
|
||||
#include "Mat4.h"
|
||||
|
||||
|
@ -32,24 +31,19 @@ struct Vertex // half vertex
|
|||
|
||||
static bool Equal(const Vertex& p1, const Vertex& p2)
|
||||
{
|
||||
if (p1.pos[0] == p2.pos[0] &&
|
||||
return (p1.pos[0] == p2.pos[0] &&
|
||||
p1.pos[1] == p2.pos[1] &&
|
||||
p1.pos[2] == p2.pos[2])
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
p1.pos[2] == p2.pos[2]);
|
||||
}
|
||||
|
||||
static void Average(const Vertex& p1, const Vertex& p2, Vertex& p3)
|
||||
{
|
||||
p3.pos[3] = 1.0f; //always 1
|
||||
p3.fixedShade = (p1.fixedShade + p2.fixedShade) / 2.0f;
|
||||
p3.fixedShade = (p1.fixedShade + p2.fixedShade) * 0.5f;
|
||||
|
||||
for (int i = 0; i < 3; i++) { p3.pos[i] = (p1.pos[i] + p2.pos[i]) / 2.0f; }
|
||||
for (int i = 0; i < 3; i++) { p3.normal[i] = (p1.normal[i] + p2.normal[i]) / 2.0f; }
|
||||
for (int i = 0; i < 2; i++) { p3.texcoords[i] = (p1.texcoords[i] + p2.texcoords[i]) / 2.0f; }
|
||||
for (int i = 0; i < 3; i++) { p3.pos[i] = (p1.pos[i] + p2.pos[i]) * 0.5f; }
|
||||
for (int i = 0; i < 3; i++) { p3.normal[i] = (p1.normal[i] + p2.normal[i]) * 0.5f; }
|
||||
for (int i = 0; i < 2; i++) { p3.texcoords[i] = (p1.texcoords[i] + p2.texcoords[i]) * 0.5f; }
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -117,7 +117,7 @@ int PolyHeader::NumVerts()
|
|||
|
||||
int PolyHeader::NumSharedVerts()
|
||||
{
|
||||
int sharedVerts[] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 };
|
||||
static const int sharedVerts[] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 };
|
||||
|
||||
return sharedVerts[header[0] & 0xf];
|
||||
}
|
||||
|
@ -135,9 +135,9 @@ bool PolyHeader::SharedVertex(int vertex)
|
|||
|
||||
void PolyHeader::FaceNormal(float n[3])
|
||||
{
|
||||
n[0] = (float)(((INT32)header[1]) >> 8) * (1.0f / 4194304.0f);
|
||||
n[1] = (float)(((INT32)header[2]) >> 8) * (1.0f / 4194304.0f);
|
||||
n[2] = (float)(((INT32)header[3]) >> 8) * (1.0f / 4194304.0f);
|
||||
n[0] = (float)(((INT32)header[1]) >> 8) * (float)(1.0 / 4194304.0);
|
||||
n[1] = (float)(((INT32)header[2]) >> 8) * (float)(1.0 / 4194304.0);
|
||||
n[2] = (float)(((INT32)header[3]) >> 8) * (float)(1.0 / 4194304.0);
|
||||
}
|
||||
|
||||
float PolyHeader::UVScale()
|
||||
|
|
|
@ -43,7 +43,7 @@ void main()
|
|||
position = spotEllipse.xy;
|
||||
size = spotEllipse.zw;
|
||||
ellipse = length((gl_FragCoord.xy - position) / size);
|
||||
ellipse = pow(ellipse, 2.0); // decay rate = square of distance from center
|
||||
ellipse = ellipse * ellipse; // decay rate = square of distance from center
|
||||
ellipse = 1.0 - ellipse; // invert
|
||||
ellipse = max(0.0, ellipse); // clamp
|
||||
|
||||
|
|
|
@ -134,6 +134,7 @@ GLint R3DShader::GetVertexAttribPos(const std::string& attrib)
|
|||
if (m_vertexLocCache.count(attrib)==0) {
|
||||
auto pos = glGetAttribLocation(m_shaderProgram, attrib.c_str());
|
||||
m_vertexLocCache[attrib] = pos;
|
||||
return pos;
|
||||
}
|
||||
|
||||
return m_vertexLocCache[attrib];
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#include <GL/glew.h>
|
||||
#include "Util/NewConfig.h"
|
||||
#include "Model.h"
|
||||
#include <map>
|
||||
#include <unordered_map>
|
||||
#include <string>
|
||||
|
||||
namespace New3D {
|
||||
|
@ -109,7 +109,7 @@ private:
|
|||
GLint m_locDiscardAlpha;
|
||||
|
||||
// vertex attribute position cache
|
||||
std::map<std::string, GLint> m_vertexLocCache;
|
||||
std::unordered_map<std::string, GLint> m_vertexLocCache;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ namespace New3D {
|
|||
|
||||
TextureSheet::TextureSheet()
|
||||
{
|
||||
m_temp.resize(1024 * 1024 * 4); // temporay buffer for textures
|
||||
m_temp.resize(1024 * 1024 * 4); // temporary buffer for textures
|
||||
}
|
||||
|
||||
int TextureSheet::ToIndex(int x, int y)
|
||||
|
|
|
@ -1,33 +1,9 @@
|
|||
#include "Vec.h"
|
||||
#include <cmath>
|
||||
#include <algorithm>
|
||||
|
||||
namespace New3D {
|
||||
|
||||
static float fastSqrt(float number) {
|
||||
long i;
|
||||
float x, y;
|
||||
const float f = 1.5F;
|
||||
|
||||
x = number * 0.5F;
|
||||
y = number;
|
||||
i = * ( long * ) &y;
|
||||
i = 0x5f375a86 - ( i >> 1 );
|
||||
y = * ( float * ) &i;
|
||||
y = y * ( f - ( x * y * y ) );
|
||||
y = y * ( f - ( x * y * y ) );
|
||||
return number * y;
|
||||
}
|
||||
|
||||
static float fastInvSqrt(float x)
|
||||
{
|
||||
float xhalf = 0.5f*x;
|
||||
int i = *(int*)&x; // get bits for floating value
|
||||
i = 0x5f375a86- (i>>1); // gives initial guess y0
|
||||
x = *(float*)&i; // convert bits back to float
|
||||
x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy
|
||||
return x;
|
||||
}
|
||||
|
||||
void V3::subtract(const Vec3 a, const Vec3 b, Vec3 out) {
|
||||
|
||||
out[0] = a[0] - b[0];
|
||||
|
@ -58,7 +34,7 @@ void V3::add(Vec3 a, const Vec3 b) {
|
|||
|
||||
void V3::divide(Vec3 a, float number) {
|
||||
|
||||
multiply(a,1/number);
|
||||
multiply(a,1.f/number);
|
||||
}
|
||||
|
||||
void V3::multiply(Vec3 a, float number) {
|
||||
|
@ -123,13 +99,13 @@ float V3::length(const Vec3 v) {
|
|||
void V3::normalise(Vec3 v) {
|
||||
|
||||
//========
|
||||
float len;
|
||||
float inv_len;
|
||||
//========
|
||||
|
||||
len = v[0]*v[0] + v[1]*v[1] + v[2]*v[2];
|
||||
len = fastInvSqrt(len);
|
||||
inv_len = v[0]*v[0] + v[1]*v[1] + v[2]*v[2];
|
||||
inv_len = 1.f/std::sqrt(inv_len);
|
||||
|
||||
multiply(v,len);
|
||||
multiply(v,inv_len);
|
||||
}
|
||||
|
||||
void V3::multiplyAdd(const Vec3 a, float scale, const Vec3 b, Vec3 out) {
|
||||
|
@ -141,9 +117,9 @@ void V3::multiplyAdd(const Vec3 a, float scale, const Vec3 b, Vec3 out) {
|
|||
|
||||
void V3::reset(Vec3 v) {
|
||||
|
||||
v[0] = 0;
|
||||
v[1] = 0;
|
||||
v[2] = 0;
|
||||
v[0] = 0.f;
|
||||
v[1] = 0.f;
|
||||
v[2] = 0.f;
|
||||
}
|
||||
|
||||
void V3::set(Vec3 v, float value) {
|
||||
|
@ -171,7 +147,7 @@ void V3::reflect(const Vec3 a, const Vec3 b, Vec3 out) {
|
|||
|
||||
V3::copy(a,v);
|
||||
|
||||
temp = V3::dotProduct(a,b) * 2;
|
||||
temp = V3::dotProduct(a,b) * 2.f;
|
||||
|
||||
V3::multiply(v,temp);
|
||||
V3::subtract(b,v,out);
|
||||
|
@ -191,16 +167,16 @@ void V3::createNormal(const Vec3 a, const Vec3 b, const Vec3 c, Vec3 outNormal)
|
|||
|
||||
void V3::_max(Vec3 a, const Vec3 compare) {
|
||||
|
||||
if(a[0] < compare[0]) a[0] = compare[0];
|
||||
if(a[1] < compare[1]) a[1] = compare[1];
|
||||
if(a[2] < compare[2]) a[2] = compare[2];
|
||||
a[0] = std::max(compare[0], a[0]);
|
||||
a[1] = std::max(compare[1], a[1]);
|
||||
a[2] = std::max(compare[2], a[2]);
|
||||
}
|
||||
|
||||
void V3::_min(Vec3 a, const Vec3 compare) {
|
||||
|
||||
if(a[0] > compare[0]) a[0] = compare[0];
|
||||
if(a[1] > compare[1]) a[1] = compare[1];
|
||||
if(a[2] > compare[2]) a[2] = compare[2];
|
||||
a[0] = std::min(compare[0], a[0]);
|
||||
a[1] = std::min(compare[1], a[1]);
|
||||
a[2] = std::min(compare[2], a[2]);
|
||||
}
|
||||
|
||||
bool V3::cmp(const Vec3 a, float b) {
|
||||
|
@ -223,14 +199,9 @@ bool V3::cmp(const Vec3 a, const Vec3 b) {
|
|||
|
||||
void V3::clamp(Vec3 a, float _min, float _max) {
|
||||
|
||||
if(a[0] < _min) a[0] = _min;
|
||||
if(a[0] > _max) a[0] = _max;
|
||||
|
||||
if(a[1] < _min) a[1] = _min;
|
||||
if(a[1] > _max) a[1] = _max;
|
||||
|
||||
if(a[2] < _min) a[2] = _min;
|
||||
if(a[2] > _max) a[2] = _max;
|
||||
a[0] = std::min(std::max(_min, a[0]), _max);
|
||||
a[1] = std::min(std::max(_min, a[1]), _max);
|
||||
a[2] = std::min(std::max(_min, a[2]), _max);
|
||||
}
|
||||
|
||||
} // New3D
|
||||
|
|
|
@ -333,23 +333,13 @@ static inline void DrawTileLine(uint32_t *line, int pixelOffset, uint16_t tile,
|
|||
uint32_t pattern = vram[patternOffset + patternLine];
|
||||
for (int p = 7; p >= 0; p--)
|
||||
{
|
||||
if (!clip || (clip && pixelOffset >= 0 && pixelOffset < 496))
|
||||
if (!clip || (/*pixelOffset >= 0 &&*/ (unsigned int)pixelOffset < 496u)) // the >= 0 check is accounted for, as the cast to uint makes them appear as very large unsigned values
|
||||
{
|
||||
uint16_t maskTest = 1 << (15-((pixelOffset+0)/32));
|
||||
bool visible = (mask & maskTest) != 0;
|
||||
uint32_t pixel = palette[((pattern >> (p*4)) & 0xF) | colorHi];
|
||||
if (alphaTest)
|
||||
{
|
||||
if (visible && (pixel >> 24) != 0) // only draw opaque pixels
|
||||
uint32_t pixel = visible ? palette[((pattern >> (p*4)) & 0xF) | colorHi] : 0;
|
||||
if (!alphaTest || (visible && (pixel >> 24) != 0)) // only draw opaque pixels
|
||||
line[pixelOffset] = pixel;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (visible)
|
||||
line[pixelOffset] = pixel;
|
||||
else
|
||||
line[pixelOffset] = 0;
|
||||
}
|
||||
}
|
||||
++pixelOffset;
|
||||
}
|
||||
|
@ -361,23 +351,13 @@ static inline void DrawTileLine(uint32_t *line, int pixelOffset, uint16_t tile,
|
|||
uint32_t pattern = vram[patternOffset + patternLine + i];
|
||||
for (int p = 3; p >= 0; p--)
|
||||
{
|
||||
if (!clip || (clip && pixelOffset >= 0 && pixelOffset < 496))
|
||||
if (!clip || (/*pixelOffset >= 0 &&*/ (unsigned int)pixelOffset < 496u)) // the >= 0 check is accounted for, as the cast to uint makes them appear as very large unsigned values
|
||||
{
|
||||
uint16_t maskTest = 1 << (15-((pixelOffset+0)/32));
|
||||
bool visible = (mask & maskTest) != 0;
|
||||
uint32_t pixel = palette[((pattern >> (p*8)) & 0xFF) | colorHi];
|
||||
if (alphaTest)
|
||||
{
|
||||
if (visible && (pixel >> 24) != 0)
|
||||
uint32_t pixel = visible ? palette[((pattern >> (p*8)) & 0xFF) | colorHi] : 0;
|
||||
if (!alphaTest || (visible && (pixel >> 24) != 0))
|
||||
line[pixelOffset] = pixel;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (visible)
|
||||
line[pixelOffset] = pixel;
|
||||
else
|
||||
line[pixelOffset] = 0; // transparent
|
||||
}
|
||||
}
|
||||
++pixelOffset;
|
||||
}
|
||||
|
@ -417,12 +397,11 @@ static void DrawLayer(uint32_t *pixels, int layerNum, const uint32_t *vram, cons
|
|||
int extraTile = (hFine != 0) ? 1 : 0; // h-scrolling requires part of 63rd tile
|
||||
|
||||
// First tile may be clipped
|
||||
int tx = 0;
|
||||
DrawTileLine<bits, alphaTest, true>(line, pixelOffset, nameTable[(hTile ^ 1) & 63], vFine, vram, palette, mask);
|
||||
++hTile;
|
||||
pixelOffset += 8;
|
||||
// Middle tiles will not be clipped
|
||||
for (tx = 1; tx < (62 - 1 + extraTile); tx++)
|
||||
for (int tx = 1; tx < (62 - 1 + extraTile); tx++)
|
||||
{
|
||||
DrawTileLine<bits, alphaTest, false>(line, pixelOffset, nameTable[(hTile ^ 1) & 63], vFine, vram, palette, mask);
|
||||
++hTile;
|
||||
|
|
|
@ -82,7 +82,7 @@ static char *LoadShaderSource(const char *file)
|
|||
return buf;
|
||||
}
|
||||
|
||||
bool LoadShaderProgram(GLuint *shaderProgramPtr, GLuint *vertexShaderPtr, GLuint *fragmentShaderPtr, std::string vsFile, std::string fsFile, const char *vsString, const char *fsString)
|
||||
bool LoadShaderProgram(GLuint *shaderProgramPtr, GLuint *vertexShaderPtr, GLuint *fragmentShaderPtr, const std::string& vsFile, const std::string& fsFile, const char *vsString, const char *fsString)
|
||||
{
|
||||
char infoLog[2048];
|
||||
const char *vsSource, *fsSource; // source code
|
||||
|
|
|
@ -53,8 +53,8 @@
|
|||
* OKAY is successfully loaded, otherwise FAIL. Prints own error messages.
|
||||
*/
|
||||
extern bool LoadShaderProgram(GLuint *shaderProgramPtr, GLuint *vertexShaderPtr,
|
||||
GLuint *fragmentShaderPtr, std::string vsFile,
|
||||
std::string fsFile, const char *vsString,
|
||||
GLuint *fragmentShaderPtr, const std::string& vsFile,
|
||||
const std::string& fsFile, const char *vsString,
|
||||
const char *fsString);
|
||||
|
||||
/*
|
||||
|
|
|
@ -724,7 +724,7 @@ void CInputSystem::CheckKeySources(int kbdNum, bool fullAxisOnly, vector<CInputS
|
|||
find(badSources.begin(), badSources.end(), source) == badSources.end())
|
||||
{
|
||||
// Update mapping string and add source to list
|
||||
if (sources.size() == 0)
|
||||
if (sources.empty())
|
||||
mapping.assign("KEY");
|
||||
else
|
||||
mapping.append("+KEY");
|
||||
|
@ -758,7 +758,7 @@ void CInputSystem::CheckMouseSources(int mseNum, bool fullAxisOnly, bool mseCent
|
|||
{
|
||||
// Otherwise, update mapping string and add source to list
|
||||
const char *partName = LookupName(msePart);
|
||||
if (sources.size() == 0)
|
||||
if (sources.empty())
|
||||
mapping.assign("MOUSE");
|
||||
else
|
||||
mapping.append("+MOUSE");
|
||||
|
@ -787,7 +787,7 @@ void CInputSystem::CheckJoySources(int joyNum, bool fullAxisOnly, vector<CInputS
|
|||
{
|
||||
// Otherwise, update mapping string and add source to list
|
||||
const char *partName = LookupName(joyPart);
|
||||
if (sources.size() == 0)
|
||||
if (sources.empty())
|
||||
mapping.assign("JOY");
|
||||
else
|
||||
mapping.append("+JOY");
|
||||
|
@ -800,7 +800,7 @@ void CInputSystem::CheckJoySources(int joyNum, bool fullAxisOnly, vector<CInputS
|
|||
}
|
||||
}
|
||||
|
||||
bool CInputSystem::ParseInt(string str, int &num)
|
||||
bool CInputSystem::ParseInt(const string& str, int &num)
|
||||
{
|
||||
stringstream ss(str);
|
||||
return !(ss >> num).fail();
|
||||
|
@ -813,9 +813,9 @@ string CInputSystem::IntToString(int num)
|
|||
return ss.str();
|
||||
}
|
||||
|
||||
bool CInputSystem::EqualsIgnoreCase(string str1, const char *str2)
|
||||
bool CInputSystem::EqualsIgnoreCase(const string& str1, const char *str2)
|
||||
{
|
||||
for (string::const_iterator ci = str1.begin(); ci < str1.end(); ci++)
|
||||
for (string::const_iterator ci = str1.begin(); ci < str1.end(); ++ci)
|
||||
{
|
||||
if (*str2 == '\0' || tolower(*ci) != tolower(*str2))
|
||||
return false;
|
||||
|
@ -824,9 +824,9 @@ bool CInputSystem::EqualsIgnoreCase(string str1, const char *str2)
|
|||
return *str2 == '\0';
|
||||
}
|
||||
|
||||
bool CInputSystem::StartsWithIgnoreCase(string str1, const char *str2)
|
||||
bool CInputSystem::StartsWithIgnoreCase(const string& str1, const char *str2)
|
||||
{
|
||||
for (string::const_iterator ci = str1.begin(); ci < str1.end(); ci++)
|
||||
for (string::const_iterator ci = str1.begin(); ci < str1.end(); ++ci)
|
||||
{
|
||||
if (*str2 == '\0')
|
||||
return true;
|
||||
|
@ -837,7 +837,7 @@ bool CInputSystem::StartsWithIgnoreCase(string str1, const char *str2)
|
|||
return *str2 == '\0';
|
||||
}
|
||||
|
||||
bool CInputSystem::IsValidKeyName(string str)
|
||||
bool CInputSystem::IsValidKeyName(const string& str)
|
||||
{
|
||||
for (size_t i = 0; i < NUM_VALID_KEYS; i++)
|
||||
{
|
||||
|
@ -847,7 +847,7 @@ bool CInputSystem::IsValidKeyName(string str)
|
|||
return false;
|
||||
}
|
||||
|
||||
EMousePart CInputSystem::LookupMousePart(string str)
|
||||
EMousePart CInputSystem::LookupMousePart(const string& str)
|
||||
{
|
||||
for (int i = 0; s_mseParts[i].id != NULL; i++)
|
||||
{
|
||||
|
@ -867,7 +867,7 @@ const char *CInputSystem::LookupName(EMousePart msePart)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
EJoyPart CInputSystem::LookupJoyPart(string str)
|
||||
EJoyPart CInputSystem::LookupJoyPart(const string& str)
|
||||
{
|
||||
for (int i = 0; s_joyParts[i].id != NULL; i++)
|
||||
{
|
||||
|
@ -887,7 +887,7 @@ const char *CInputSystem::LookupName(EJoyPart joyPart)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
size_t CInputSystem::ParseDevMapping(string str, const char *devType, int &devNum)
|
||||
size_t CInputSystem::ParseDevMapping(const string& str, const char *devType, int &devNum)
|
||||
{
|
||||
if (!StartsWithIgnoreCase(str, devType))
|
||||
return -1;
|
||||
|
@ -913,7 +913,7 @@ size_t CInputSystem::ParseDevMapping(string str, const char *devType, int &devNu
|
|||
return -1;
|
||||
}
|
||||
|
||||
CInputSource* CInputSystem::ParseMultiSource(string str, bool fullAxisOnly, bool isOr)
|
||||
CInputSource* CInputSystem::ParseMultiSource(const string& str, bool fullAxisOnly, bool isOr)
|
||||
{
|
||||
// Check for empty or NONE mapping
|
||||
size_t size = str.size();
|
||||
|
@ -1023,7 +1023,7 @@ CInputSource *CInputSystem::ParseSingleSource(string str)
|
|||
if (rightSource != NULL)
|
||||
sources.push_back(rightSource);
|
||||
}
|
||||
if (sources.size() > 0)
|
||||
if (!sources.empty())
|
||||
return new CMultiInputSource(true, sources);
|
||||
}
|
||||
return m_emptySource;
|
||||
|
@ -1265,7 +1265,7 @@ void CInputSystem::StoreJoySettings(Util::Config::Node *config, JoySettings *set
|
|||
KeySettings *CInputSystem::GetKeySettings(int kbdNum, bool useDefault)
|
||||
{
|
||||
KeySettings *common = NULL;
|
||||
for (vector<KeySettings*>::iterator it = m_keySettings.begin(); it != m_keySettings.end(); it++)
|
||||
for (vector<KeySettings*>::iterator it = m_keySettings.begin(); it != m_keySettings.end(); ++it)
|
||||
{
|
||||
if ((*it)->kbdNum == kbdNum)
|
||||
return *it;
|
||||
|
@ -1280,7 +1280,7 @@ KeySettings *CInputSystem::GetKeySettings(int kbdNum, bool useDefault)
|
|||
MouseSettings *CInputSystem::GetMouseSettings(int mseNum, bool useDefault)
|
||||
{
|
||||
MouseSettings *common = NULL;
|
||||
for (vector<MouseSettings*>::iterator it = m_mseSettings.begin(); it != m_mseSettings.end(); it++)
|
||||
for (vector<MouseSettings*>::iterator it = m_mseSettings.begin(); it != m_mseSettings.end(); ++it)
|
||||
{
|
||||
if ((*it)->mseNum == mseNum)
|
||||
return *it;
|
||||
|
@ -1295,7 +1295,7 @@ MouseSettings *CInputSystem::GetMouseSettings(int mseNum, bool useDefault)
|
|||
JoySettings *CInputSystem::GetJoySettings(int joyNum, bool useDefault)
|
||||
{
|
||||
JoySettings *common = NULL;
|
||||
for (vector<JoySettings*>::iterator it = m_joySettings.begin(); it != m_joySettings.end(); it++)
|
||||
for (vector<JoySettings*>::iterator it = m_joySettings.begin(); it != m_joySettings.end(); ++it)
|
||||
{
|
||||
if ((*it)->joyNum == joyNum)
|
||||
return *it;
|
||||
|
@ -1340,7 +1340,7 @@ int CInputSystem::GetButtonNumber(EMousePart msePart)
|
|||
|
||||
EMousePart CInputSystem::GetMouseAxis(int axisNum, int axisDir)
|
||||
{
|
||||
if (axisNum > 0 || axisNum >= NUM_MOUSE_AXES || axisDir < 0 || axisDir > 3)
|
||||
if (axisNum < 0 || axisNum >= NUM_MOUSE_AXES || axisDir < 0 || axisDir > 3)
|
||||
return MouseUnknown;
|
||||
return (EMousePart)(MouseXAxis + 4 * axisNum + axisDir);
|
||||
}
|
||||
|
@ -1587,17 +1587,17 @@ CInputSource* CInputSystem::ParseSource(const char *mapping, bool fullAxisOnly)
|
|||
void CInputSystem::ClearSettings()
|
||||
{
|
||||
// Delete all key settings
|
||||
for (vector<KeySettings*>::iterator it = m_keySettings.begin(); it != m_keySettings.end(); it++)
|
||||
for (vector<KeySettings*>::iterator it = m_keySettings.begin(); it != m_keySettings.end(); ++it)
|
||||
delete *it;
|
||||
m_keySettings.clear();
|
||||
|
||||
// Delete all mouse settings
|
||||
for (vector<MouseSettings*>::iterator it = m_mseSettings.begin(); it != m_mseSettings.end(); it++)
|
||||
for (vector<MouseSettings*>::iterator it = m_mseSettings.begin(); it != m_mseSettings.end(); ++it)
|
||||
delete *it;
|
||||
m_mseSettings.clear();
|
||||
|
||||
// Delete all joystick settings
|
||||
for (vector<JoySettings*>::iterator it = m_joySettings.begin(); it != m_joySettings.end(); it++)
|
||||
for (vector<JoySettings*>::iterator it = m_joySettings.begin(); it != m_joySettings.end(); ++it)
|
||||
delete *it;
|
||||
m_joySettings.clear();
|
||||
}
|
||||
|
@ -1715,15 +1715,15 @@ void CInputSystem::LoadFromConfig(const Util::Config::Node &config)
|
|||
void CInputSystem::StoreToConfig(Util::Config::Node *config)
|
||||
{
|
||||
// Write all key settings
|
||||
for (vector<KeySettings*>::iterator it = m_keySettings.begin(); it != m_keySettings.end(); it++)
|
||||
for (vector<KeySettings*>::iterator it = m_keySettings.begin(); it != m_keySettings.end(); ++it)
|
||||
StoreKeySettings(config, *it);
|
||||
|
||||
// Write all mouse settings
|
||||
for (vector<MouseSettings*>::iterator it = m_mseSettings.begin(); it != m_mseSettings.end(); it++)
|
||||
for (vector<MouseSettings*>::iterator it = m_mseSettings.begin(); it != m_mseSettings.end(); ++it)
|
||||
StoreMouseSettings(config, *it);
|
||||
|
||||
// Write all joystick settings
|
||||
for (vector<JoySettings*>::iterator it = m_joySettings.begin(); it != m_joySettings.end(); it++)
|
||||
for (vector<JoySettings*>::iterator it = m_joySettings.begin(); it != m_joySettings.end(); ++it)
|
||||
StoreJoySettings(config, *it);
|
||||
}
|
||||
|
||||
|
@ -1772,11 +1772,11 @@ bool CInputSystem::ReadMapping(char *buffer, unsigned bufSize, bool fullAxisOnly
|
|||
CheckAllSources(readFlags, fullAxisOnly, mseCentered, sources, mapping, badSources);
|
||||
|
||||
// When some inputs have been activated, keep looping until they have all been released again.
|
||||
if (sources.size() > 0)
|
||||
if (!sources.empty())
|
||||
{
|
||||
// Check each source is no longer active
|
||||
bool active = false;
|
||||
for (vector<CInputSource*>::iterator it = sources.begin(); it != sources.end(); it++)
|
||||
for (vector<CInputSource*>::iterator it = sources.begin(); it != sources.end(); ++it)
|
||||
{
|
||||
if ((*it)->IsActive())
|
||||
{
|
||||
|
|
|
@ -420,23 +420,23 @@ private:
|
|||
*/
|
||||
void CheckJoySources(int joyNum, bool fullAxisOnly, std::vector<CInputSource*> &sources, std::string &mapping, std::vector<CInputSource*> &badSources);
|
||||
|
||||
bool ParseInt(std::string str, int &num);
|
||||
bool ParseInt(const std::string& str, int &num);
|
||||
|
||||
std::string IntToString(int num);
|
||||
|
||||
bool EqualsIgnoreCase(std::string str1, const char *str2);
|
||||
bool EqualsIgnoreCase(const std::string& str1, const char *str2);
|
||||
|
||||
bool StartsWithIgnoreCase(std::string str1, const char *str2);
|
||||
bool StartsWithIgnoreCase(const std::string& str1, const char *str2);
|
||||
|
||||
/*
|
||||
* Returns true if the given string represents a valid key name.
|
||||
*/
|
||||
bool IsValidKeyName(std::string str);
|
||||
bool IsValidKeyName(const std::string& str);
|
||||
|
||||
/*
|
||||
* Returns the EMousePart with the given mapping name or MouseUnknown if not found.
|
||||
*/
|
||||
EMousePart LookupMousePart(std::string str);
|
||||
EMousePart LookupMousePart(const std::string& str);
|
||||
|
||||
/*
|
||||
* Returns the mapping name for the given EMousePart.
|
||||
|
@ -446,21 +446,21 @@ private:
|
|||
/*
|
||||
* Returns the EJoyPart with the given mapping name or JoyUnknown if not found.
|
||||
*/
|
||||
EJoyPart LookupJoyPart(std::string str);
|
||||
EJoyPart LookupJoyPart(const std::string& str);
|
||||
|
||||
/*
|
||||
* Returns the mapping name for the given EJoyPart.
|
||||
*/
|
||||
const char *LookupName(EJoyPart joyPart);
|
||||
|
||||
size_t ParseDevMapping(std::string str, const char *devType, int &devNum);
|
||||
size_t ParseDevMapping(const std::string& str, const char *devType, int &devNum);
|
||||
|
||||
/*
|
||||
* Parses the given mapping string, possibly representing more than one mapping, and returns an input source for it or NULL if the
|
||||
* mapping is invalid.
|
||||
* If fullAxisOnly is true, then only mappings that represent a full axis range (eg MouseXAxis) are parsed.
|
||||
*/
|
||||
CInputSource* ParseMultiSource(std::string str, bool fullAxisOnly, bool isOr);
|
||||
CInputSource* ParseMultiSource(const std::string& str, bool fullAxisOnly, bool isOr);
|
||||
|
||||
/*
|
||||
* Parses the given single mapping string and returns an input source for it, or NULL if non exists.
|
||||
|
|
|
@ -278,7 +278,7 @@ CInputs::CInputs(CInputSystem *system)
|
|||
|
||||
CInputs::~CInputs()
|
||||
{
|
||||
for (vector<CInput*>::iterator it = m_inputs.begin(); it != m_inputs.end(); it++)
|
||||
for (vector<CInput*>::iterator it = m_inputs.begin(); it != m_inputs.end(); ++it)
|
||||
delete *it;
|
||||
m_inputs.clear();
|
||||
}
|
||||
|
@ -383,7 +383,7 @@ CInput *CInputs::operator[](const unsigned index)
|
|||
|
||||
CInput *CInputs::operator[](const char *idOrLabel)
|
||||
{
|
||||
for (vector<CInput*>::iterator it = m_inputs.begin(); it != m_inputs.end(); it++)
|
||||
for (vector<CInput*>::iterator it = m_inputs.begin(); it != m_inputs.end(); ++it)
|
||||
{
|
||||
if (stricmp((*it)->id, idOrLabel) == 0 || stricmp((*it)->label, idOrLabel) == 0)
|
||||
return *it;
|
||||
|
@ -403,7 +403,7 @@ bool CInputs::Initialize()
|
|||
return false;
|
||||
|
||||
// Initialize all the inputs
|
||||
for (vector<CInput*>::iterator it = m_inputs.begin(); it != m_inputs.end(); it++)
|
||||
for (vector<CInput*>::iterator it = m_inputs.begin(); it != m_inputs.end(); ++it)
|
||||
(*it)->Initialize(m_system);
|
||||
|
||||
return true;
|
||||
|
@ -413,7 +413,7 @@ void CInputs::LoadFromConfig(const Util::Config::Node &config)
|
|||
{
|
||||
m_system->LoadFromConfig(config);
|
||||
|
||||
for (vector<CInput*>::iterator it = m_inputs.begin(); it != m_inputs.end(); it++)
|
||||
for (vector<CInput*>::iterator it = m_inputs.begin(); it != m_inputs.end(); ++it)
|
||||
(*it)->LoadFromConfig(config);
|
||||
}
|
||||
|
||||
|
@ -421,7 +421,7 @@ void CInputs::StoreToConfig(Util::Config::Node *config)
|
|||
{
|
||||
m_system->StoreToConfig(config);
|
||||
|
||||
for (vector<CInput*>::iterator it = m_inputs.begin(); it != m_inputs.end(); it++)
|
||||
for (vector<CInput*>::iterator it = m_inputs.begin(); it != m_inputs.end(); ++it)
|
||||
(*it)->StoreToConfig(config);
|
||||
}
|
||||
|
||||
|
@ -446,7 +446,7 @@ bool CInputs::ConfigureInputs(const Game &game)
|
|||
// Get all inputs to be configured
|
||||
vector<CInput*> toConfigure;
|
||||
vector<CInput*>::iterator it;
|
||||
for (it = m_inputs.begin(); it != m_inputs.end(); it++)
|
||||
for (it = m_inputs.begin(); it != m_inputs.end(); ++it)
|
||||
{
|
||||
if ((*it)->IsConfigurable() && ((*it)->gameFlags & gameFlags))
|
||||
toConfigure.push_back(*it);
|
||||
|
@ -455,7 +455,7 @@ bool CInputs::ConfigureInputs(const Game &game)
|
|||
// Remember current mappings for each input in case changes need to be undone later
|
||||
vector<string> oldMappings(toConfigure.size());
|
||||
size_t index = 0;
|
||||
for (it = toConfigure.begin(); it != toConfigure.end(); it++)
|
||||
for (it = toConfigure.begin(); it != toConfigure.end(); ++it)
|
||||
oldMappings[index++] = (*it)->GetMapping();
|
||||
|
||||
const char *groupLabel = NULL;
|
||||
|
@ -495,7 +495,7 @@ Redisplay:
|
|||
{
|
||||
// If user pressed aborted input, then undo all changes and finish configuration
|
||||
index = 0;
|
||||
for (it = toConfigure.begin(); it != toConfigure.end(); it++)
|
||||
for (it = toConfigure.begin(); it != toConfigure.end(); ++it)
|
||||
{
|
||||
(*it)->SetMapping(oldMappings[index].c_str());
|
||||
index++;
|
||||
|
@ -697,7 +697,7 @@ void CInputs::CalibrateJoystick(int joyNum)
|
|||
puts("");
|
||||
if (m_system->CalibrateJoystickAxis(joyNum, axisNum))
|
||||
{
|
||||
for (vector<CInput*>::iterator it = m_inputs.begin(); it != m_inputs.end(); it++)
|
||||
for (vector<CInput*>::iterator it = m_inputs.begin(); it != m_inputs.end(); ++it)
|
||||
(*it)->InputSystemChanged();
|
||||
}
|
||||
return;
|
||||
|
@ -720,7 +720,7 @@ void CInputs::PrintInputs(const Game *game)
|
|||
}
|
||||
|
||||
const char *groupLabel = NULL;
|
||||
for (vector<CInput*>::iterator it = m_inputs.begin(); it != m_inputs.end(); it++)
|
||||
for (vector<CInput*>::iterator it = m_inputs.begin(); it != m_inputs.end(); ++it)
|
||||
{
|
||||
if (!(*it)->IsConfigurable() || !((*it)->gameFlags & gameFlags))
|
||||
continue;
|
||||
|
@ -749,7 +749,7 @@ bool CInputs::Poll(const Game *game, unsigned dispX, unsigned dispY, unsigned di
|
|||
|
||||
// Poll all UI inputs and all the inputs used by the current game, or all inputs if game is NULL
|
||||
uint32_t gameFlags = game ? game->inputs : Game::INPUT_ALL;
|
||||
for (vector<CInput*>::iterator it = m_inputs.begin(); it != m_inputs.end(); it++)
|
||||
for (vector<CInput*>::iterator it = m_inputs.begin(); it != m_inputs.end(); ++it)
|
||||
{
|
||||
if ((*it)->IsUIInput() || ((*it)->gameFlags & gameFlags))
|
||||
(*it)->Poll();
|
||||
|
@ -773,7 +773,7 @@ void CInputs::DumpState(const Game *game)
|
|||
}
|
||||
|
||||
// Loop through the inputs used by the current game, or all inputs if game is NULL, and dump their values to stdout
|
||||
for (vector<CInput*>::iterator it = m_inputs.begin(); it != m_inputs.end(); it++)
|
||||
for (vector<CInput*>::iterator it = m_inputs.begin(); it != m_inputs.end(); ++it)
|
||||
{
|
||||
if (!(*it)->IsUIInput() && !((*it)->gameFlags & gameFlags))
|
||||
continue;
|
||||
|
|
|
@ -36,13 +36,13 @@ using namespace std;
|
|||
ESourceType CMultiInputSource::GetCombinedType(vector<CInputSource*> &sources)
|
||||
{
|
||||
// Check if vector is empty
|
||||
if (sources.size() == 0)
|
||||
if (sources.empty())
|
||||
return SourceEmpty;
|
||||
// Otherwise, see whether all sources are switches, or if have a full- or half-axis present
|
||||
bool allSwitches = true;
|
||||
bool hasFullAxis = false;
|
||||
bool hasHalfAxis = false;
|
||||
for (vector<CInputSource*>::iterator it = sources.begin(); it != sources.end(); it++)
|
||||
for (vector<CInputSource*>::iterator it = sources.begin(); it != sources.end(); ++it)
|
||||
{
|
||||
if ((*it)->type == SourceInvalid)
|
||||
return SourceInvalid; // An invalid source makes the whole lot invalid
|
||||
|
|
|
@ -29,10 +29,10 @@
|
|||
* be decoded incorrectly.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#ifdef STANDALONE
|
||||
#include <stdlib.h>
|
||||
#include <cstdlib>
|
||||
#endif
|
||||
#include "Types.h"
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
|
||||
#include "93C46.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <cstring>
|
||||
#include "Supermodel.h"
|
||||
|
||||
|
||||
|
|
|
@ -143,7 +143,7 @@ int CDSBResampler::UpSampleAndMix(INT16 *outL, INT16 *outR, INT16 *inL, INT16 *i
|
|||
int outIdx = 0;
|
||||
int inIdx = 0;
|
||||
INT32 leftSample, rightSample, leftSoundSample, rightSoundSample;
|
||||
INT32 v[2], musicVol, soundVol;
|
||||
INT32 v[2], musicVol;
|
||||
|
||||
// Obtain program volume settings and convert to 24.8 fixed point (0-200 -> 0x00-0x200)
|
||||
musicVol = m_config["MusicVolume"].ValueAs<int>();
|
||||
|
|
|
@ -686,7 +686,7 @@ void CModel3::WriteInputs(unsigned reg, UINT8 data)
|
|||
case 0x87: // Read light gun register
|
||||
serialFIFO1 = 0; // clear serial FIFO 1
|
||||
serialFIFO2 = 0;
|
||||
if ((m_game.inputs & Game::INPUT_GUN1||m_game.inputs & Game::INPUT_GUN2))
|
||||
if ((m_game.inputs & Game::INPUT_GUN1)||(m_game.inputs & Game::INPUT_GUN2))
|
||||
{
|
||||
switch (gunReg)
|
||||
{
|
||||
|
@ -1144,7 +1144,7 @@ UINT16 CModel3::Read16(UINT32 addr)
|
|||
|
||||
#ifdef NET_BOARD
|
||||
case 0xc0: // spikeout call this
|
||||
// interresting : poking @4 master to same value as slave (0x100) or simply !=0 -> connected and go in game, but freeze (prints comm error) as soon as players appear after the gate
|
||||
// interesting : poking @4 master to same value as slave (0x100) or simply !=0 -> connected and go in game, but freeze (prints comm error) as soon as players appear after the gate
|
||||
// sort of sync ack ? who writes this 16b value ?
|
||||
{
|
||||
UINT16 result;
|
||||
|
@ -1906,7 +1906,7 @@ void CModel3::LoadState(CBlockFile *SaveState)
|
|||
SaveState->Read(securityRAM, 0x20000);
|
||||
SaveState->Read(&midiCtrlPort, sizeof(midiCtrlPort));
|
||||
int32_t securityFirstRead;
|
||||
SaveState->Write(&securityFirstRead, sizeof(securityFirstRead));
|
||||
SaveState->Read(&securityFirstRead, sizeof(securityFirstRead));
|
||||
m_securityFirstRead = securityFirstRead != 0;
|
||||
|
||||
// All devices...
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
|
||||
#include "RTC72421.h"
|
||||
|
||||
#include <time.h>
|
||||
#include <ctime>
|
||||
#include "Supermodel.h"
|
||||
|
||||
|
||||
|
@ -43,11 +43,16 @@
|
|||
|
||||
UINT8 CRTC72421::ReadRegister(unsigned reg)
|
||||
{
|
||||
time_t currentTime;
|
||||
struct tm *Time;
|
||||
static time_t oldTime{0};
|
||||
time_t currentTime;
|
||||
static struct tm *Time;
|
||||
|
||||
time(¤tTime);
|
||||
Time = localtime(¤tTime);
|
||||
if (currentTime != oldTime)
|
||||
{
|
||||
Time = localtime(¤tTime);
|
||||
oldTime = currentTime;
|
||||
}
|
||||
|
||||
switch (reg&0xF)
|
||||
{
|
||||
|
|
|
@ -809,7 +809,7 @@ uint32_t CReal3D::ReadRegister(unsigned reg)
|
|||
int index = (reg - 20) / 4;
|
||||
float val = Render3D->GetLosValue(index);
|
||||
|
||||
if (val) {
|
||||
if (val != 0.f) {
|
||||
//val = 1.0f / val; // test program indicate z values are 1 over
|
||||
return 0xffffffff; // infinity
|
||||
}
|
||||
|
@ -922,7 +922,6 @@ uint32_t CReal3D::GetASICIDCode(ASIC asic) const
|
|||
}
|
||||
|
||||
void CReal3D::SetStepping(int stepping, uint32_t pciIDValue)
|
||||
|
||||
{
|
||||
step = stepping;
|
||||
if ((step!=0x10) && (step!=0x15) && (step!=0x20) && (step!=0x21))
|
||||
|
@ -979,7 +978,7 @@ void CReal3D::SetStepping(int stepping, uint32_t pciIDValue)
|
|||
|
||||
bool CReal3D::Init(const uint8_t *vromPtr, IBus *BusObjectPtr, CIRQ *IRQObjectPtr, unsigned dmaIRQBit)
|
||||
{
|
||||
uint32_t memSize = (m_config["GPUMultiThreaded"].ValueAs<bool>() ? MEMORY_POOL_SIZE : MEM_POOL_SIZE_RW);
|
||||
uint32_t memSize = (m_gpuMultiThreaded ? MEMORY_POOL_SIZE : MEM_POOL_SIZE_RW);
|
||||
float memSizeMB = (float)memSize/(float)0x100000;
|
||||
|
||||
// IRQ and bus objects
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
#include "Util/NewConfig.h"
|
||||
|
||||
#include <cstdint>
|
||||
#include <map>
|
||||
#include <unordered_map>
|
||||
|
||||
/*
|
||||
* QueuedUploadTextures:
|
||||
|
@ -505,7 +505,7 @@ private:
|
|||
bool m_evenFrame = false;
|
||||
|
||||
// Internal ASIC state
|
||||
std::map<ASIC, uint32_t> m_asicID;
|
||||
std::unordered_map<ASIC, uint32_t> m_asicID;
|
||||
uint64_t m_internalRenderConfig[2];
|
||||
};
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ public:
|
|||
|
||||
virtual bool Init(UINT8* netRAMPtr, UINT8* netBufferPtr) = 0;
|
||||
|
||||
virtual void GetGame(Game) = 0;
|
||||
virtual void GetGame(const Game&) = 0;
|
||||
|
||||
virtual UINT8 ReadCommRAM8(unsigned addr) = 0;
|
||||
virtual UINT16 ReadCommRAM16(unsigned addr) = 0;
|
||||
|
|
|
@ -1309,7 +1309,7 @@ bool CNetBoard::IsRunning(void)
|
|||
return m_attached && (ioreg[0xc0] != 0);
|
||||
}
|
||||
|
||||
void CNetBoard::GetGame(Game gameinfo)
|
||||
void CNetBoard::GetGame(const Game& gameinfo)
|
||||
{
|
||||
Gameinfo = gameinfo;
|
||||
}
|
||||
|
|
|
@ -60,7 +60,7 @@ public:
|
|||
|
||||
bool Init(UINT8 *netRAMPtr, UINT8 *netBufferPtr);
|
||||
|
||||
void GetGame(Game);
|
||||
void GetGame(const Game&);
|
||||
|
||||
UINT8 ReadCommRAM8(unsigned addr);
|
||||
UINT16 ReadCommRAM16(unsigned addr);
|
||||
|
@ -104,7 +104,7 @@ private:
|
|||
// netsock
|
||||
UINT16 port_in = 0;
|
||||
UINT16 port_out = 0;
|
||||
std::string addr_out = "";
|
||||
std::string addr_out;
|
||||
|
||||
std::unique_ptr<TCPSend> nets;
|
||||
std::unique_ptr<TCPReceive> netr;
|
||||
|
|
|
@ -520,7 +520,7 @@ bool CSimNetBoard::IsRunning(void)
|
|||
return m_attached && m_running;
|
||||
}
|
||||
|
||||
void CSimNetBoard::GetGame(Game gameInfo)
|
||||
void CSimNetBoard::GetGame(const Game& gameInfo)
|
||||
{
|
||||
m_gameInfo = gameInfo;
|
||||
}
|
||||
|
|
|
@ -60,7 +60,7 @@ public:
|
|||
bool IsAttached(void);
|
||||
bool IsRunning(void);
|
||||
|
||||
void GetGame(Game gameInfo);
|
||||
void GetGame(const Game& gameInfo);
|
||||
|
||||
uint8_t ReadCommRAM8(unsigned addr);
|
||||
uint16_t ReadCommRAM16(unsigned addr);
|
||||
|
@ -85,7 +85,7 @@ private:
|
|||
// netsock
|
||||
uint16_t port_in = 0;
|
||||
uint16_t port_out = 0;
|
||||
std::string addr_out = "";
|
||||
std::string addr_out;
|
||||
std::thread m_connectThread;
|
||||
std::atomic_bool m_quit = false;
|
||||
std::atomic_bool m_connected = false;
|
||||
|
|
|
@ -60,9 +60,7 @@ bool TCPSend::Send(const void * data, int length)
|
|||
|
||||
DPRINTF("Sending %i bytes\n", length);
|
||||
|
||||
int sent = 0;
|
||||
|
||||
sent = SDLNet_TCP_Send(m_socket, &length, sizeof(int)); // pack the length at the start of transmission.
|
||||
int sent = SDLNet_TCP_Send(m_socket, &length, sizeof(int)); // pack the length at the start of transmission.
|
||||
|
||||
if (!length)
|
||||
return true; // 0 sized packet will blow our connex
|
||||
|
|
|
@ -112,7 +112,7 @@ std::shared_ptr<CLogger> CreateLogger(const Util::Config::Node &config)
|
|||
loggers.push_back(std::make_shared<CConsoleErrorLogger>());
|
||||
|
||||
// Parse other log outputs
|
||||
std::string logOutputs = config["LogOutput"].ValueAsDefault<std::string>("");
|
||||
std::string logOutputs = config["LogOutput"].ValueAsDefault<std::string>(std::string());
|
||||
std::vector<std::string> outputs = Util::Format(logOutputs).Split(',');
|
||||
|
||||
std::set<std::string> supportedDestinations { "stdout", "stderr", "syslog" };
|
||||
|
|
|
@ -326,13 +326,14 @@ static void PrintGLInfo(bool createScreen, bool infoLog, bool printExtensions)
|
|||
strcpy(strLocal, (char *) str);
|
||||
if (infoLog) InfoLog(" Supported Extensions : %s", (strLocal = strtok(strLocal, " \t\n")));
|
||||
else printf(" Supported Extensions : %s\n", (strLocal = strtok(strLocal, " \t\n")));
|
||||
while ((strLocal = strtok(NULL, " \t\n")) != NULL)
|
||||
char* strLocalTmp = strLocal;
|
||||
while ((strLocalTmp = strtok(NULL, " \t\n")) != NULL)
|
||||
{
|
||||
if (infoLog) InfoLog(" %s", strLocal);
|
||||
else printf(" %s\n", strLocal);
|
||||
if (infoLog) InfoLog(" %s", strLocalTmp);
|
||||
else printf(" %s\n", strLocalTmp);
|
||||
}
|
||||
}
|
||||
free(strLocal);
|
||||
free(strLocal);
|
||||
}
|
||||
if (infoLog) InfoLog("");
|
||||
else printf("\n");
|
||||
|
@ -1735,7 +1736,7 @@ static ParsedCommandLine ParseCommandLine(int argc, char **argv)
|
|||
else
|
||||
{
|
||||
unsigned x, y;
|
||||
if (2 == sscanf(&argv[i][4],"=%d,%d", &x, &y))
|
||||
if (2 == sscanf(&argv[i][4],"=%u,%u", &x, &y))
|
||||
{
|
||||
std::string xres = Util::Format() << x;
|
||||
std::string yres = Util::Format() << y;
|
||||
|
|
|
@ -781,7 +781,7 @@ void CDirectInputSystem::PollKeyboardsAndMice()
|
|||
if (m_useRawInput)
|
||||
{
|
||||
// For RawInput, only thing to do is update wheelDir from wheelData for each mouse state. Everything else is updated via WM events.
|
||||
for (std::vector<RawMseState>::iterator it = m_rawMseStates.begin(); it != m_rawMseStates.end(); it++)
|
||||
for (std::vector<RawMseState>::iterator it = m_rawMseStates.begin(); it != m_rawMseStates.end(); ++it)
|
||||
{
|
||||
if (it->wheelDelta != 0)
|
||||
{
|
||||
|
@ -875,7 +875,7 @@ void CDirectInputSystem::CloseKeyboardsAndMice()
|
|||
}
|
||||
|
||||
// Delete storage for keyboards
|
||||
for (std::vector<bool*>::iterator it = m_rawKeyStates.begin(); it != m_rawKeyStates.end(); it++)
|
||||
for (std::vector<bool*>::iterator it = m_rawKeyStates.begin(); it != m_rawKeyStates.end(); ++it)
|
||||
delete[] *it;
|
||||
m_keyDetails.clear();
|
||||
m_rawKeyboards.clear();
|
||||
|
@ -915,7 +915,7 @@ void CDirectInputSystem::ResetMice()
|
|||
m_combRawMseState.x = p.x;
|
||||
m_combRawMseState.y = p.y;
|
||||
m_combRawMseState.z = 0;
|
||||
for (std::vector<RawMseState>::iterator it = m_rawMseStates.begin(); it != m_rawMseStates.end(); it++)
|
||||
for (std::vector<RawMseState>::iterator it = m_rawMseStates.begin(); it != m_rawMseStates.end(); ++it)
|
||||
{
|
||||
it->x = p.x;
|
||||
it->y = p.y;
|
||||
|
@ -1057,7 +1057,7 @@ void CDirectInputSystem::ProcessRawInput(HRAWINPUT hInput)
|
|||
}
|
||||
|
||||
m_combRawMseState.buttons = 0;
|
||||
for (std::vector<RawMseState>::iterator it = m_rawMseStates.begin(); it != m_rawMseStates.end(); it++)
|
||||
for (std::vector<RawMseState>::iterator it = m_rawMseStates.begin(); it != m_rawMseStates.end(); ++it)
|
||||
m_combRawMseState.buttons |= it->buttons;
|
||||
}
|
||||
}
|
||||
|
@ -1080,7 +1080,7 @@ void CDirectInputSystem::OpenJoysticks()
|
|||
// Loop through those found
|
||||
int joyNum = 0;
|
||||
int xNum = 0;
|
||||
for (std::vector<DIJoyInfo>::iterator it = m_diJoyInfos.begin(); it != m_diJoyInfos.end(); it++)
|
||||
for (std::vector<DIJoyInfo>::iterator it = m_diJoyInfos.begin(); it != m_diJoyInfos.end(); ++it)
|
||||
{
|
||||
joyNum++;
|
||||
|
||||
|
@ -1145,7 +1145,7 @@ void CDirectInputSystem::OpenJoysticks()
|
|||
}
|
||||
|
||||
// Gather joystick details (name, num POVs & buttons, which axes are available and whether force feedback is available)
|
||||
DIPROPSTRING didps;
|
||||
DIPROPSTRING didps{};
|
||||
didps.diph.dwSize = sizeof(DIPROPSTRING);
|
||||
didps.diph.dwHeaderSize = sizeof(DIPROPHEADER);
|
||||
didps.diph.dwHow = DIPH_DEVICE;
|
||||
|
@ -1293,7 +1293,7 @@ void CDirectInputSystem::ActivateJoysticks()
|
|||
{
|
||||
// Set DirectInput cooperative level of joysticks
|
||||
unsigned joyNum = 0;
|
||||
for (std::vector<DIJoyInfo>::iterator it = m_diJoyInfos.begin(); it != m_diJoyInfos.end(); it++)
|
||||
for (std::vector<DIJoyInfo>::iterator it = m_diJoyInfos.begin(); it != m_diJoyInfos.end(); ++it)
|
||||
{
|
||||
if (!it->isXInput)
|
||||
{
|
||||
|
@ -1313,7 +1313,7 @@ void CDirectInputSystem::PollJoysticks()
|
|||
{
|
||||
// Get current joystick states from XInput and DirectInput
|
||||
int i = 0;
|
||||
for (std::vector<DIJoyInfo>::iterator it = m_diJoyInfos.begin(); it != m_diJoyInfos.end(); it++)
|
||||
for (std::vector<DIJoyInfo>::iterator it = m_diJoyInfos.begin(); it != m_diJoyInfos.end(); ++it)
|
||||
{
|
||||
LPDIJOYSTATE2 pJoyState = &m_diJoyStates[i++];
|
||||
|
||||
|
@ -1394,7 +1394,7 @@ void CDirectInputSystem::PollJoysticks()
|
|||
void CDirectInputSystem::CloseJoysticks()
|
||||
{
|
||||
// Release any DirectInput force feedback effects that were created
|
||||
for (std::vector<DIJoyInfo>::iterator it = m_diJoyInfos.begin(); it != m_diJoyInfos.end(); it++)
|
||||
for (std::vector<DIJoyInfo>::iterator it = m_diJoyInfos.begin(); it != m_diJoyInfos.end(); ++it)
|
||||
{
|
||||
for (unsigned axisNum = 0; axisNum < NUM_JOY_AXES; axisNum++)
|
||||
{
|
||||
|
@ -1410,7 +1410,7 @@ void CDirectInputSystem::CloseJoysticks()
|
|||
}
|
||||
|
||||
// Release each DirectInput joystick
|
||||
for (std::vector<LPDIRECTINPUTDEVICE8>::iterator it = m_di8Joysticks.begin(); it != m_di8Joysticks.end(); it++)
|
||||
for (std::vector<LPDIRECTINPUTDEVICE8>::iterator it = m_di8Joysticks.begin(); it != m_di8Joysticks.end(); ++it)
|
||||
{
|
||||
(*it)->Unacquire();
|
||||
(*it)->Release();
|
||||
|
@ -1444,7 +1444,7 @@ HRESULT CDirectInputSystem::CreateJoystickEffect(LPDIRECTINPUTDEVICE8 joystick,
|
|||
DICONSTANTFORCE dicf;
|
||||
DICONDITION dic;
|
||||
DIPERIODIC dip;
|
||||
DIENVELOPE die;
|
||||
//DIENVELOPE die;
|
||||
GUID guid;
|
||||
|
||||
// Set common effects parameters
|
||||
|
@ -1883,7 +1883,7 @@ bool CDirectInputSystem::ProcessForceFeedbackCmd(int joyNum, int axisNum, ForceF
|
|||
DICONSTANTFORCE dicf;
|
||||
DICONDITION dic;
|
||||
DIPERIODIC dip;
|
||||
DIENVELOPE die;
|
||||
//DIENVELOPE die;
|
||||
|
||||
// Set common parameters
|
||||
DIEFFECT eff;
|
||||
|
|
|
@ -111,7 +111,7 @@ void CWinOutputs::SendOutput(EOutputs output, UINT8 prevValue, UINT8 value)
|
|||
|
||||
// Loop through all registered clients and send them new output value
|
||||
LPARAM param = (LPARAM)output + 1;
|
||||
for (vector<RegisteredClient>::iterator it = m_clients.begin(), end = m_clients.end(); it != end; it++)
|
||||
for (vector<RegisteredClient>::iterator it = m_clients.begin(), end = m_clients.end(); it != end; ++it)
|
||||
PostMessage(it->hwnd, m_updateState, param, value);
|
||||
}
|
||||
|
||||
|
@ -178,7 +178,7 @@ LRESULT CWinOutputs::OutputWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
|
|||
LRESULT CWinOutputs::RegisterClient(HWND hwnd, LPARAM id)
|
||||
{
|
||||
// Check that given client is not already registered
|
||||
for (vector<RegisteredClient>::iterator it = m_clients.begin(), end = m_clients.end(); it != end; it++)
|
||||
for (vector<RegisteredClient>::iterator it = m_clients.begin(), end = m_clients.end(); it != end; ++it)
|
||||
{
|
||||
if (it->id == id)
|
||||
{
|
||||
|
@ -224,7 +224,7 @@ LRESULT CWinOutputs::UnregisterClient(HWND hwnd, LPARAM id)
|
|||
found = true;
|
||||
}
|
||||
else
|
||||
it++;
|
||||
++it;
|
||||
}
|
||||
|
||||
// Return error if no matches found
|
||||
|
|
|
@ -772,7 +772,7 @@ bool SCSP_Init(const Util::Config::Node &config, int n)
|
|||
buffertmpfr=(signed int*) malloc(44100*sizeof(signed int));
|
||||
if (NULL == buffertmpfr)
|
||||
{
|
||||
free(buffertmpfr);
|
||||
free(buffertmpfl);
|
||||
return ErrorLog("Insufficient memory for internal SCSP buffers.");
|
||||
}
|
||||
|
||||
|
@ -781,8 +781,10 @@ bool SCSP_Init(const Util::Config::Node &config, int n)
|
|||
return ErrorLog("Insufficient memory for internal SCSP buffers.");
|
||||
buffertmprr=(signed int*)malloc(44100*sizeof(signed int));
|
||||
if (NULL == buffertmprr)
|
||||
{
|
||||
free(buffertmprl);
|
||||
return ErrorLog("Insufficient memory for internal SCSP buffers.");
|
||||
|
||||
}
|
||||
|
||||
memset(buffertmpfl, 0, 44100*sizeof(signed int));
|
||||
memset(buffertmpfr, 0, 44100*sizeof(signed int));
|
||||
|
|
|
@ -54,14 +54,14 @@
|
|||
// stricmp() is non-standard, apparently...
|
||||
#ifdef _MSC_VER // MS VisualC++
|
||||
#define stricmp _stricmp
|
||||
#else // assume GCC
|
||||
#elif defined(__GNUC__)
|
||||
#define stricmp strcasecmp
|
||||
#endif
|
||||
|
||||
// 32-bit rotate left
|
||||
#ifdef _MSC_VER // MS VisualC++ - use VS intrinsic function _rotl
|
||||
#define rotl(val, shift) val = _rotl(val, shift)
|
||||
#else // Otherwise assume GCC which should optimise following to asm
|
||||
#elif defined(__GNUC__) // GCC should optimise following to asm
|
||||
#define rotl(val, shift) val = (val>>shift)|(val<<(32-shift))
|
||||
#endif
|
||||
|
||||
|
|
|
@ -276,7 +276,7 @@ namespace Util
|
|||
std::string BitRegister::ToBinaryString() const
|
||||
{
|
||||
if (Empty())
|
||||
return std::string("");
|
||||
return std::string();
|
||||
std::string out(Size(), '0');
|
||||
for (size_t i = 0; i < Size(); i++)
|
||||
{
|
||||
|
@ -287,9 +287,9 @@ namespace Util
|
|||
|
||||
std::string BitRegister::ToHexString() const
|
||||
{
|
||||
const char digits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
|
||||
static const char digits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
|
||||
if (Empty())
|
||||
return std::string("");
|
||||
return std::string();
|
||||
size_t partial = Size() & 3;
|
||||
size_t num_digits = Size() / 4 + (partial != 0 ? 1 : 0);
|
||||
std::string out(num_digits + 2, '0');
|
||||
|
|
|
@ -1,19 +1,41 @@
|
|||
#include "Util/ByteSwap.h"
|
||||
#ifdef _MSC_VER
|
||||
#include <intrin.h>
|
||||
#endif
|
||||
|
||||
namespace Util
|
||||
{
|
||||
void FlipEndian16(uint8_t *buffer, size_t size)
|
||||
void FlipEndian16(uint8_t * const buffer, const size_t size)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
uint16_t * const buffer16 = (uint16_t*)buffer;
|
||||
for (size_t i = 0; i < size/2; i++)
|
||||
buffer16[i] = _byteswap_ushort(buffer16[i]);
|
||||
#elif defined(__GNUC__)
|
||||
uint16_t * const buffer16 = (uint16_t*)buffer;
|
||||
for (size_t i = 0; i < size/2; i++)
|
||||
buffer16[i] = __builtin_bswap16(buffer16[i]);
|
||||
#else
|
||||
for (size_t i = 0; i < (size & ~1); i += 2)
|
||||
{
|
||||
uint8_t tmp = buffer[i + 0];
|
||||
buffer[i + 0] = buffer[i + 1];
|
||||
buffer[i + 1] = tmp;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void FlipEndian32(uint8_t *buffer, size_t size)
|
||||
void FlipEndian32(uint8_t * const buffer, const size_t size)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
uint32_t * const buffer32 = (uint32_t*)buffer;
|
||||
for (size_t i = 0; i < size/4; i++)
|
||||
buffer32[i] = _byteswap_ulong(buffer32[i]);
|
||||
#elif defined(__GNUC__)
|
||||
uint32_t * const buffer32 = (uint32_t*)buffer;
|
||||
for (size_t i = 0; i < size/4; i++)
|
||||
buffer32[i] = __builtin_bswap32(buffer32[i]);
|
||||
#else
|
||||
for (size_t i = 0; i < (size & ~3); i += 4)
|
||||
{
|
||||
uint8_t tmp1 = buffer[i+0];
|
||||
|
@ -23,5 +45,6 @@ namespace Util
|
|||
buffer[i+2] = tmp2;
|
||||
buffer[i+3] = tmp1;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
} // Util
|
||||
|
|
|
@ -156,7 +156,7 @@ namespace Util
|
|||
{
|
||||
if (m_missing)
|
||||
throw std::range_error(Util::Format() << "Node \"" << m_key << "\" does not exist");
|
||||
if (Empty() && !m_missing)
|
||||
if (Empty())
|
||||
throw std::logic_error(Util::Format() << "Node \"" << m_key << "\" has no value" );
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue