mirror of https://github.com/PCSX2/pcsx2.git
GregMiscellaneous: zzogl-pg: Rework CreateFillExtensionsMap to be less depreciated (and so it writes the extension list to the log, but doesn't print it except in debug mode). Fix a few minor potential bugs. Other minor changes.
git-svn-id: http://pcsx2.googlecode.com/svn/branches/GregMiscellaneous@4011 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
3aabab685a
commit
0779f7bc32
|
@ -51,6 +51,8 @@ class GLWindow
|
||||||
u32 width, height, depth;
|
u32 width, height, depth;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
char title[256];
|
||||||
|
|
||||||
void SwapGLBuffers();
|
void SwapGLBuffers();
|
||||||
bool ReleaseContext();
|
bool ReleaseContext();
|
||||||
|
|
||||||
|
|
|
@ -122,7 +122,11 @@ bool GLWindow::CreateWindow(void *pDisplay)
|
||||||
hInstance, // Instance
|
hInstance, // Instance
|
||||||
NULL); // Don't Pass Anything To WM_CREATE
|
NULL); // Don't Pass Anything To WM_CREATE
|
||||||
|
|
||||||
if (GShwnd == NULL) return false;
|
if (GShwnd == NULL)
|
||||||
|
{
|
||||||
|
ZZLog::Error_Log("Failed to create window. Exiting...");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (pDisplay != NULL) *(HWND*)pDisplay = GShwnd;
|
if (pDisplay != NULL) *(HWND*)pDisplay = GShwnd;
|
||||||
|
|
||||||
|
@ -135,6 +139,7 @@ bool GLWindow::CreateWindow(void *pDisplay)
|
||||||
|
|
||||||
SetFocus(GShwnd);
|
SetFocus(GShwnd);
|
||||||
|
|
||||||
|
if (pDisplay == NULL) ZZLog::Error_Log("Failed to create window. Exiting...");
|
||||||
return (pDisplay != NULL);
|
return (pDisplay != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -195,6 +200,8 @@ bool GLWindow::DisplayWindow(int _width, int _height)
|
||||||
{
|
{
|
||||||
dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
|
dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
|
||||||
dwStyle = WS_OVERLAPPEDWINDOW;
|
dwStyle = WS_OVERLAPPEDWINDOW;
|
||||||
|
nBackbufferWidth = _width;
|
||||||
|
nBackbufferHeight = _height;
|
||||||
}
|
}
|
||||||
dwStyle |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
|
dwStyle |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,11 @@ bool GLWindow::CreateWindow(void *pDisplay)
|
||||||
glDisplay = XOpenDisplay(0);
|
glDisplay = XOpenDisplay(0);
|
||||||
glScreen = DefaultScreen(glDisplay);
|
glScreen = DefaultScreen(glDisplay);
|
||||||
|
|
||||||
if (pDisplay == NULL) return false;
|
if (pDisplay == NULL)
|
||||||
|
{
|
||||||
|
ZZLog::Error_Log("Failed to create window. Exiting...");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
*(Display**)pDisplay = glDisplay;
|
*(Display**)pDisplay = glDisplay;
|
||||||
|
|
||||||
|
@ -251,6 +255,9 @@ void GLWindow::ToggleFullscreen()
|
||||||
|
|
||||||
bool GLWindow::DisplayWindow(int _width, int _height)
|
bool GLWindow::DisplayWindow(int _width, int _height)
|
||||||
{
|
{
|
||||||
|
nBackbufferWidth = _width;
|
||||||
|
nBackbufferHeight = _height;
|
||||||
|
|
||||||
if (!CreateVisual()) return false;
|
if (!CreateVisual()) return false;
|
||||||
|
|
||||||
/* create a GLX context */
|
/* create a GLX context */
|
||||||
|
|
|
@ -34,7 +34,6 @@ extern void SaveSnapshot(const char* filename);
|
||||||
GLWindow GLWin;
|
GLWindow GLWin;
|
||||||
GSinternal gs;
|
GSinternal gs;
|
||||||
GSconf conf;
|
GSconf conf;
|
||||||
char GStitle[256];
|
|
||||||
|
|
||||||
int ppf, g_GSMultiThreaded, CurrentSavestate = 0;
|
int ppf, g_GSMultiThreaded, CurrentSavestate = 0;
|
||||||
int g_LastCRC = 0, g_TransferredToGPU = 0, s_frameskipping = 0;
|
int g_LastCRC = 0, g_TransferredToGPU = 0, s_frameskipping = 0;
|
||||||
|
@ -269,22 +268,23 @@ s32 CALLBACK GSinit()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#if defined(_WIN32) && defined(_DEBUG)
|
||||||
|
|
||||||
#ifdef _DEBUG
|
|
||||||
HANDLE g_hCurrentThread = NULL;
|
HANDLE g_hCurrentThread = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
__forceinline void InitMisc()
|
||||||
extern LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
{
|
||||||
extern HINSTANCE hInst;
|
WriteBilinear();
|
||||||
#endif
|
WriteAA();
|
||||||
|
InitProfile();
|
||||||
|
InitPath();
|
||||||
|
ResetRegs();
|
||||||
|
}
|
||||||
|
|
||||||
s32 CALLBACK GSopen(void *pDsp, char *Title, int multithread)
|
s32 CALLBACK GSopen(void *pDsp, char *Title, int multithread)
|
||||||
{
|
{
|
||||||
FUNCLOG
|
FUNCLOG
|
||||||
|
|
||||||
bool err = false;
|
|
||||||
g_GSMultiThreaded = multithread;
|
g_GSMultiThreaded = multithread;
|
||||||
|
|
||||||
ZZLog::WriteLn("Calling GSopen.");
|
ZZLog::WriteLn("Calling GSopen.");
|
||||||
|
@ -294,28 +294,16 @@ s32 CALLBACK GSopen(void *pDsp, char *Title, int multithread)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
LoadConfig();
|
LoadConfig();
|
||||||
strcpy(GStitle, Title);
|
strcpy(GLWin.title, Title);
|
||||||
|
|
||||||
ZZLog::GS_Log("Using %s:%d.%d.%d.", libraryName, zgsrevision, zgsbuild, zgsminor);
|
ZZLog::GS_Log("Using %s:%d.%d.%d.", libraryName, zgsrevision, zgsbuild, zgsminor);
|
||||||
|
|
||||||
err = GLWin.CreateWindow(pDsp);
|
|
||||||
if (!err)
|
|
||||||
{
|
|
||||||
ZZLog::Error_Log("Failed to create window. Exiting...");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ZZLog::WriteLn("Creating ZZOgl window.");
|
ZZLog::WriteLn("Creating ZZOgl window.");
|
||||||
|
if ((!GLWin.CreateWindow(pDsp)) || (!ZZCreate(conf.width, conf.height))) return -1;
|
||||||
if (!ZZCreate(conf.width, conf.height)) return -1;
|
|
||||||
|
|
||||||
ZZLog::WriteLn("Initialization successful.");
|
ZZLog::WriteLn("Initialization successful.");
|
||||||
|
|
||||||
WriteBilinear();
|
InitMisc();
|
||||||
WriteAA();
|
|
||||||
InitProfile();
|
|
||||||
InitPath();
|
|
||||||
ResetRegs();
|
|
||||||
ZZLog::GS_Log("GSopen finished.");
|
ZZLog::GS_Log("GSopen finished.");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -336,26 +324,15 @@ s32 CALLBACK GSopen2( void* pDsp, INT32 flags )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
LoadConfig();
|
LoadConfig();
|
||||||
strcpy(GStitle, Title);
|
|
||||||
|
|
||||||
err = GLWin.GetWindow(pDsp); // Needs to be added.
|
|
||||||
if (!err)
|
|
||||||
{
|
|
||||||
ZZLog::Error_Log("Failed to acquire window. Exiting...");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ZZLog::GS_Log("Using %s:%d.%d.%d.", libraryName, zgsrevision, zgsbuild, zgsminor);
|
ZZLog::GS_Log("Using %s:%d.%d.%d.", libraryName, zgsrevision, zgsbuild, zgsminor);
|
||||||
|
|
||||||
if (!ZZCreate2(conf.width, conf.height)) return -1; // Needs to be added.
|
ZZLog::WriteLn("Capturing ZZOgl window.");
|
||||||
|
if ((!GLWin.GetWindow(pDsp)) || (!ZZCreate2(conf.width, conf.height))) return -1;// Needs to be added.
|
||||||
|
|
||||||
ZZLog::WriteLn("Initialization successful.");
|
ZZLog::WriteLn("Initialization successful.");
|
||||||
|
|
||||||
WriteBilinear();
|
InitMisc();
|
||||||
WriteAA();
|
|
||||||
InitProfile();
|
|
||||||
InitPath();
|
|
||||||
ResetRegs();
|
|
||||||
ZZLog::GS_Log("GSopen2 finished.");
|
ZZLog::GS_Log("GSopen2 finished.");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ void SaveConfig()
|
||||||
|
|
||||||
fprintf(f, "mrtdepth = %hhx\n", conf.mrtdepth);
|
fprintf(f, "mrtdepth = %hhx\n", conf.mrtdepth);
|
||||||
fprintf(f, "zzoptions = %x\n", conf.zz_options._u32);
|
fprintf(f, "zzoptions = %x\n", conf.zz_options._u32);
|
||||||
fprintf(f, "options = %x\n", conf.hacks);
|
fprintf(f, "options = %x\n", conf.hacks._u32);
|
||||||
fprintf(f, "bilinear = %hhx\n", conf.bilinear);
|
fprintf(f, "bilinear = %hhx\n", conf.bilinear);
|
||||||
fprintf(f, "aliasing = %hhx\n", conf.aa);
|
fprintf(f, "aliasing = %hhx\n", conf.aa);
|
||||||
fprintf(f, "width = %x\n", conf.width);
|
fprintf(f, "width = %x\n", conf.width);
|
||||||
|
|
|
@ -314,7 +314,7 @@ void Dev_Log(const char *fmt, ...)
|
||||||
|
|
||||||
void Debug_Log(const char *fmt, ...)
|
void Debug_Log(const char *fmt, ...)
|
||||||
{
|
{
|
||||||
#if _DEBUG
|
#ifdef _DEBUG
|
||||||
va_list list;
|
va_list list;
|
||||||
|
|
||||||
va_start(list, fmt);
|
va_start(list, fmt);
|
||||||
|
|
|
@ -126,7 +126,7 @@ void (APIENTRY *zgsBlendFuncSeparateEXT)(GLenum, GLenum, GLenum, GLenum) = NULL;
|
||||||
extern u8* s_lpShaderResources;
|
extern u8* s_lpShaderResources;
|
||||||
|
|
||||||
// String's for shader file in developer mode
|
// String's for shader file in developer mode
|
||||||
#ifdef DEVBUILD
|
#ifdef ZEROGS_DEVBUILD
|
||||||
char* EFFECT_NAME = "";
|
char* EFFECT_NAME = "";
|
||||||
char* EFFECT_DIR = "";
|
char* EFFECT_DIR = "";
|
||||||
#endif
|
#endif
|
||||||
|
@ -277,18 +277,21 @@ inline void CreateOtherCheck()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// open shader file according to build target
|
|
||||||
|
|
||||||
inline bool CreateOpenShadersFile()
|
#ifdef _WIN32
|
||||||
|
__forceinline bool LoadShadersFromRes()
|
||||||
{
|
{
|
||||||
#ifndef DEVBUILD
|
|
||||||
# ifdef _WIN32
|
|
||||||
HRSRC hShaderSrc = FindResource(hInst, MAKEINTRESOURCE(IDR_SHADERS), RT_RCDATA);
|
HRSRC hShaderSrc = FindResource(hInst, MAKEINTRESOURCE(IDR_SHADERS), RT_RCDATA);
|
||||||
assert(hShaderSrc != NULL);
|
assert(hShaderSrc != NULL);
|
||||||
HGLOBAL hShaderGlob = LoadResource(hInst, hShaderSrc);
|
HGLOBAL hShaderGlob = LoadResource(hInst, hShaderSrc);
|
||||||
assert(hShaderGlob != NULL);
|
assert(hShaderGlob != NULL);
|
||||||
s_lpShaderResources = (u8*)LockResource(hShaderGlob);
|
s_lpShaderResources = (u8*)LockResource(hShaderGlob);
|
||||||
# else // not _WIN32
|
return true;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
|
||||||
|
__forceinline bool LoadShadersFromDat()
|
||||||
|
{
|
||||||
FILE* fres = fopen("ps2hw.dat", "rb");
|
FILE* fres = fopen("ps2hw.dat", "rb");
|
||||||
|
|
||||||
if (fres == NULL)
|
if (fres == NULL)
|
||||||
|
@ -309,9 +312,12 @@ inline bool CreateOpenShadersFile()
|
||||||
fseek(fres, 0, SEEK_SET);
|
fseek(fres, 0, SEEK_SET);
|
||||||
fread(s_lpShaderResources, s, 1, fres);
|
fread(s_lpShaderResources, s, 1, fres);
|
||||||
s_lpShaderResources[s] = 0;
|
s_lpShaderResources[s] = 0;
|
||||||
# endif // _WIN32
|
|
||||||
#else // defined(ZEROGS_DEVBUILD)
|
return true;
|
||||||
# ifndef _WIN32 // NOT WINDOWS
|
}
|
||||||
|
|
||||||
|
__forceinline bool LoadShadersFromFX()
|
||||||
|
{
|
||||||
// test if ps2hw.fx exists
|
// test if ps2hw.fx exists
|
||||||
char tempstr[255];
|
char tempstr[255];
|
||||||
char curwd[255];
|
char curwd[255];
|
||||||
|
@ -339,58 +345,55 @@ inline bool CreateOpenShadersFile()
|
||||||
|
|
||||||
sprintf(EFFECT_DIR, "%s/%s", curwd, tempstr);
|
sprintf(EFFECT_DIR, "%s/%s", curwd, tempstr);
|
||||||
sprintf(EFFECT_NAME, "%sps2hw.fx", EFFECT_DIR);
|
sprintf(EFFECT_NAME, "%sps2hw.fx", EFFECT_DIR);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// open shader file according to build target
|
||||||
|
|
||||||
|
inline bool CreateOpenShadersFile()
|
||||||
|
{
|
||||||
|
#ifndef DEVBUILD
|
||||||
|
# ifdef _WIN32
|
||||||
|
return LoadShadersFromRes();
|
||||||
|
# else // not _WIN32
|
||||||
|
return LoadShadersFromDat();
|
||||||
|
# endif // _WIN32
|
||||||
|
#else // defined(ZEROGS_DEVBUILD)
|
||||||
|
# ifndef _WIN32 // NOT WINDOWS
|
||||||
|
return LoadShadersFromFX();
|
||||||
|
|
||||||
|
// No else clause?
|
||||||
#endif
|
#endif
|
||||||
#endif // !defined(ZEROGS_DEVBUILD)
|
#endif // !defined(ZEROGS_DEVBUILD)
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read all extensions name and fill mapGLExtensions
|
// Read all extensions name and fill mapGLExtensions
|
||||||
inline bool CreateFillExtensionsMap()
|
inline bool CreateFillExtensionsMap()
|
||||||
{
|
{
|
||||||
// fill the opengl extension map
|
int max_ext = 0;
|
||||||
const char* ptoken = (const char*)glGetString(GL_EXTENSIONS);
|
glGetIntegerv(GL_NUM_EXTENSIONS, &max_ext);
|
||||||
|
|
||||||
|
PFNGLGETSTRINGIPROC glGetStringi = 0;
|
||||||
|
glGetStringi = (PFNGLGETSTRINGIPROC)wglGetProcAddress("glGetStringi");
|
||||||
|
|
||||||
if (ptoken == NULL) return false;
|
string temp("");
|
||||||
|
for (GLint i = 0; i < max_ext; i++)
|
||||||
int prevlog = conf.log;
|
|
||||||
|
|
||||||
conf.log = 1;
|
|
||||||
|
|
||||||
ZZLog::GS_Log("Supported OpenGL Extensions:\n%s\n", ptoken); // write to the log file
|
|
||||||
|
|
||||||
// Probably a better way to do it, but seems to crash.
|
|
||||||
/*int n;
|
|
||||||
glGetIntegerv(GL_NUM_EXTENSIONS, &n);
|
|
||||||
ZZLog::GS_Log("Supported OpenGL Extensions:\n");
|
|
||||||
for (int i = 0; i < n; i++)
|
|
||||||
{
|
{
|
||||||
ZZLog::GS_Log("%s/n", (const char*)glGetStringi(GL_EXTENSIONS, i));
|
string extension((const char*)glGetStringi(GL_EXTENSIONS, i));
|
||||||
}*/
|
mapGLExtensions[extension];
|
||||||
|
|
||||||
conf.log = prevlog;
|
temp = temp + extension;
|
||||||
|
if (i != (max_ext - 1)) temp += ", ";
|
||||||
// insert all exts into mapGLExtensions
|
|
||||||
|
|
||||||
const char* pend = NULL;
|
|
||||||
|
|
||||||
while (ptoken != NULL)
|
|
||||||
{
|
|
||||||
pend = strchr(ptoken, ' ');
|
|
||||||
|
|
||||||
if (pend != NULL)
|
|
||||||
{
|
|
||||||
mapGLExtensions[string(ptoken, pend-ptoken)];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mapGLExtensions[string(ptoken)];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
ptoken = pend;
|
|
||||||
|
|
||||||
while (*ptoken == ' ') ++ptoken;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Write the extension list to the log, but only write it to the screen on a debug build.
|
||||||
|
#ifndef _DEBUG
|
||||||
|
ZZLog::Log("%d supported OpenGL Extensions: %s\n", max_ext, temp.c_str());
|
||||||
|
#endif
|
||||||
|
ZZLog::Debug_Log("%d supported OpenGL Extensions: %s\n", max_ext, temp.c_str());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -434,14 +437,10 @@ bool ZZCreate(int _width, int _height)
|
||||||
{
|
{
|
||||||
GLenum err = GL_NO_ERROR;
|
GLenum err = GL_NO_ERROR;
|
||||||
bool bSuccess = true;
|
bool bSuccess = true;
|
||||||
int i;
|
|
||||||
|
|
||||||
ZZDestroy();
|
ZZDestroy();
|
||||||
ZZGSStateReset();
|
ZZGSStateReset();
|
||||||
|
|
||||||
nBackbufferWidth = _width;
|
|
||||||
nBackbufferHeight = _height;
|
|
||||||
|
|
||||||
if (!GLWin.DisplayWindow(_width, _height)) return false;
|
if (!GLWin.DisplayWindow(_width, _height)) return false;
|
||||||
|
|
||||||
conf.mrtdepth = 0; // for now
|
conf.mrtdepth = 0; // for now
|
||||||
|
@ -560,7 +559,7 @@ bool ZZCreate(int _width, int _height)
|
||||||
g_vboBuffers.resize(VB_NUMBUFFERS);
|
g_vboBuffers.resize(VB_NUMBUFFERS);
|
||||||
glGenBuffers((GLsizei)g_vboBuffers.size(), &g_vboBuffers[0]);
|
glGenBuffers((GLsizei)g_vboBuffers.size(), &g_vboBuffers[0]);
|
||||||
|
|
||||||
for (i = 0; i < (int)g_vboBuffers.size(); ++i)
|
for (int i = 0; i < (int)g_vboBuffers.size(); ++i)
|
||||||
{
|
{
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, g_vboBuffers[i]);
|
glBindBuffer(GL_ARRAY_BUFFER, g_vboBuffers[i]);
|
||||||
glBufferData(GL_ARRAY_BUFFER, 0x100*sizeof(VertexGPU), NULL, GL_STREAM_DRAW);
|
glBufferData(GL_ARRAY_BUFFER, 0x100*sizeof(VertexGPU), NULL, GL_STREAM_DRAW);
|
||||||
|
@ -676,7 +675,7 @@ bool ZZCreate(int _width, int _height)
|
||||||
|
|
||||||
vector<u32> conv16to32data(256*256);
|
vector<u32> conv16to32data(256*256);
|
||||||
|
|
||||||
for (i = 0; i < 256*256; ++i)
|
for (int i = 0; i < 256*256; ++i)
|
||||||
{
|
{
|
||||||
u32 tempcol = RGBA16to32(i);
|
u32 tempcol = RGBA16to32(i);
|
||||||
// have to flip r and b
|
// have to flip r and b
|
||||||
|
@ -700,7 +699,7 @@ bool ZZCreate(int _width, int _height)
|
||||||
|
|
||||||
u32* dst = &conv32to16data[0];
|
u32* dst = &conv32to16data[0];
|
||||||
|
|
||||||
for (i = 0; i < 32; ++i)
|
for (int i = 0; i < 32; ++i)
|
||||||
{
|
{
|
||||||
for (int j = 0; j < 32; ++j)
|
for (int j = 0; j < 32; ++j)
|
||||||
{
|
{
|
||||||
|
|
|
@ -166,7 +166,7 @@ void ChangeDeviceSize(int nNewWidth, int nNewHeight)
|
||||||
{
|
{
|
||||||
ZZLog::Error_Log("Failed to recreate, changing to old device.");
|
ZZLog::Error_Log("Failed to recreate, changing to old device.");
|
||||||
|
|
||||||
if (ZZCreate(oldwidth, oldheight))
|
if (!ZZCreate(oldwidth, oldheight))
|
||||||
{
|
{
|
||||||
SysMessage("Failed to create device, exiting...");
|
SysMessage("Failed to create device, exiting...");
|
||||||
exit(0);
|
exit(0);
|
||||||
|
|
Loading…
Reference in New Issue