merge
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,155 @@
|
||||
/* RageDisplay_Legacy: OpenGL renderer. */
|
||||
|
||||
#ifndef RAGE_DISPLAY_OGL_H
|
||||
#define RAGE_DISPLAY_OGL_H
|
||||
|
||||
#include "RageDisplay.h"
|
||||
|
||||
/* Making an OpenGL call doesn't also flush the error state; if we happen
|
||||
* to have an error from a previous call, then the assert below will fail.
|
||||
* Flush it. */
|
||||
#define FlushGLErrors() do { } while( glGetError() != GL_NO_ERROR )
|
||||
#define AssertNoGLError() \
|
||||
{ \
|
||||
GLenum error = glGetError(); \
|
||||
ASSERT_M( error == GL_NO_ERROR, RageDisplay_Legacy_Helpers::GLToString(error) ); \
|
||||
}
|
||||
|
||||
#if defined(DEBUG) || !defined(GL_GET_ERROR_IS_SLOW)
|
||||
#define DebugFlushGLErrors() FlushGLErrors()
|
||||
#define DebugAssertNoGLError() AssertNoGLError()
|
||||
#else
|
||||
#define DebugFlushGLErrors()
|
||||
#define DebugAssertNoGLError()
|
||||
#endif
|
||||
|
||||
class RageDisplay_Legacy: public RageDisplay
|
||||
{
|
||||
public:
|
||||
RageDisplay_Legacy();
|
||||
virtual ~RageDisplay_Legacy();
|
||||
virtual RString Init( const VideoModeParams &p, bool bAllowUnacceleratedRenderer );
|
||||
|
||||
virtual RString GetApiDescription() const { return "OpenGL"; }
|
||||
virtual void GetDisplayResolutions( DisplayResolutions &out ) const;
|
||||
void ResolutionChanged();
|
||||
const PixelFormatDesc *GetPixelFormatDesc(PixelFormat pf) const;
|
||||
|
||||
bool SupportsThreadedRendering();
|
||||
void BeginConcurrentRenderingMainThread();
|
||||
void EndConcurrentRenderingMainThread();
|
||||
void BeginConcurrentRendering();
|
||||
void EndConcurrentRendering();
|
||||
|
||||
bool BeginFrame();
|
||||
void EndFrame();
|
||||
VideoModeParams GetActualVideoModeParams() const;
|
||||
void SetBlendMode( BlendMode mode );
|
||||
bool SupportsTextureFormat( PixelFormat pixfmt, bool realtime=false );
|
||||
bool SupportsPerVertexMatrixScale();
|
||||
unsigned CreateTexture(
|
||||
PixelFormat pixfmt,
|
||||
RageSurface* img,
|
||||
bool bGenerateMipMaps );
|
||||
void UpdateTexture(
|
||||
unsigned iTexHandle,
|
||||
RageSurface* img,
|
||||
int xoffset, int yoffset, int width, int height
|
||||
);
|
||||
void DeleteTexture( unsigned iTexHandle );
|
||||
RageSurface *GetTexture( unsigned iTexture );
|
||||
RageTextureLock *CreateTextureLock();
|
||||
|
||||
void ClearAllTextures();
|
||||
int GetNumTextureUnits();
|
||||
void SetTexture( TextureUnit tu, unsigned iTexture );
|
||||
void SetTextureMode( TextureUnit tu, TextureMode tm );
|
||||
void SetTextureWrapping( TextureUnit tu, bool b );
|
||||
int GetMaxTextureSize() const;
|
||||
void SetTextureFiltering( TextureUnit tu, bool b );
|
||||
void SetEffectMode( EffectMode effect );
|
||||
bool IsEffectModeSupported( EffectMode effect );
|
||||
bool SupportsRenderToTexture() const;
|
||||
unsigned CreateRenderTarget( const RenderTargetParam ¶m, int &iTextureWidthOut, int &iTextureHeightOut );
|
||||
void SetRenderTarget( unsigned iHandle, bool bPreserveTexture );
|
||||
bool IsZWriteEnabled() const;
|
||||
bool IsZTestEnabled() const;
|
||||
void SetZWrite( bool b );
|
||||
void SetZBias( float f );
|
||||
void SetZTestMode( ZTestMode mode );
|
||||
void ClearZBuffer();
|
||||
void SetCullMode( CullMode mode );
|
||||
void SetAlphaTest( bool b );
|
||||
void SetMaterial(
|
||||
const RageColor &emissive,
|
||||
const RageColor &ambient,
|
||||
const RageColor &diffuse,
|
||||
const RageColor &specular,
|
||||
float shininess
|
||||
);
|
||||
void SetLighting( bool b );
|
||||
void SetLightOff( int index );
|
||||
void SetLightDirectional(
|
||||
int index,
|
||||
const RageColor &ambient,
|
||||
const RageColor &diffuse,
|
||||
const RageColor &specular,
|
||||
const RageVector3 &dir );
|
||||
|
||||
void SetSphereEnvironmentMapping( TextureUnit tu, bool b );
|
||||
void SetCelShaded( int stage );
|
||||
|
||||
RageCompiledGeometry* CreateCompiledGeometry();
|
||||
void DeleteCompiledGeometry( RageCompiledGeometry* p );
|
||||
|
||||
// hacks for cell-shaded models
|
||||
virtual void SetPolygonMode( PolygonMode pm );
|
||||
virtual void SetLineWidth( float fWidth );
|
||||
|
||||
RString GetTextureDiagnostics( unsigned id ) const;
|
||||
|
||||
protected:
|
||||
void DrawQuadsInternal( const RageSpriteVertex v[], int iNumVerts );
|
||||
void DrawQuadStripInternal( const RageSpriteVertex v[], int iNumVerts );
|
||||
void DrawFanInternal( const RageSpriteVertex v[], int iNumVerts );
|
||||
void DrawStripInternal( const RageSpriteVertex v[], int iNumVerts );
|
||||
void DrawTrianglesInternal( const RageSpriteVertex v[], int iNumVerts );
|
||||
void DrawCompiledGeometryInternal( const RageCompiledGeometry *p, int iMeshIndex );
|
||||
void DrawLineStripInternal( const RageSpriteVertex v[], int iNumVerts, float LineWidth );
|
||||
void DrawSymmetricQuadStripInternal( const RageSpriteVertex v[], int iNumVerts );
|
||||
|
||||
RString TryVideoMode( const VideoModeParams &p, bool &bNewDeviceOut );
|
||||
RageSurface* CreateScreenshot();
|
||||
PixelFormat GetImgPixelFormat( RageSurface* &img, bool &FreeImg, int width, int height, bool bPalettedTexture );
|
||||
bool SupportsSurfaceFormat( PixelFormat pixfmt );
|
||||
|
||||
void SendCurrentMatrices();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001-2011 Chris Danford, Glenn Maynard, Colby Klein
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, and/or sell copies of the Software, and to permit persons to
|
||||
* whom the Software is furnished to do so, provided that the above
|
||||
* copyright notice(s) and this permission notice appear in all copies of
|
||||
* the Software and that both the above copyright notice(s) and this
|
||||
* permission notice appear in supporting documentation.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
||||
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
|
||||
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
|
||||
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
#include "global.h"
|
||||
#include "RageDisplay_Legacy_Helpers.h"
|
||||
#include "RageUtil.h"
|
||||
|
||||
#include "RageLog.h"
|
||||
#include "RageUtil.h"
|
||||
#include "arch/LowLevelWindow/LowLevelWindow.h"
|
||||
|
||||
#include <map>
|
||||
#include <set>
|
||||
|
||||
namespace
|
||||
{
|
||||
map<GLenum, RString> g_Strings;
|
||||
void InitStringMap()
|
||||
{
|
||||
static bool bInitialized = false;
|
||||
if( bInitialized )
|
||||
return;
|
||||
bInitialized = true;
|
||||
|
||||
#define X(a) g_Strings[a] = #a;
|
||||
X(GL_RGBA8); X(GL_RGBA4); X(GL_RGB5_A1); X(GL_RGB5); X(GL_RGBA); X(GL_RGB);
|
||||
X(GL_BGR); X(GL_BGRA);
|
||||
X(GL_COLOR_INDEX8_EXT); X(GL_COLOR_INDEX4_EXT); X(GL_COLOR_INDEX);
|
||||
X(GL_UNSIGNED_BYTE); X(GL_UNSIGNED_SHORT_4_4_4_4); X(GL_UNSIGNED_SHORT_5_5_5_1);
|
||||
X(GL_UNSIGNED_SHORT_1_5_5_5_REV);
|
||||
X(GL_INVALID_ENUM); X(GL_INVALID_VALUE); X(GL_INVALID_OPERATION);
|
||||
X(GL_STACK_OVERFLOW); X(GL_STACK_UNDERFLOW); X(GL_OUT_OF_MEMORY);
|
||||
#undef X
|
||||
}
|
||||
};
|
||||
|
||||
void RageDisplay_Legacy_Helpers::Init()
|
||||
{
|
||||
InitStringMap();
|
||||
}
|
||||
|
||||
RString RageDisplay_Legacy_Helpers::GLToString( GLenum e )
|
||||
{
|
||||
if( g_Strings.find(e) != g_Strings.end() )
|
||||
return g_Strings[e];
|
||||
|
||||
return ssprintf( "%i", int(e) );
|
||||
}
|
||||
/*
|
||||
static void GetGLExtensions( set<string> &ext )
|
||||
{
|
||||
const char *szBuf = (const char *) glGetString( GL_EXTENSIONS );
|
||||
|
||||
vector<RString> asList;
|
||||
split( szBuf, " ", asList );
|
||||
|
||||
for( unsigned i = 0; i < asList.size(); ++i )
|
||||
ext.insert( asList[i] );
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001-2011 Chris Danford, Glenn Maynard, Colby Klein
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, and/or sell copies of the Software, and to permit persons to
|
||||
* whom the Software is furnished to do so, provided that the above
|
||||
* copyright notice(s) and this permission notice appear in all copies of
|
||||
* the Software and that both the above copyright notice(s) and this
|
||||
* permission notice appear in supporting documentation.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
||||
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
|
||||
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
|
||||
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
@@ -0,0 +1,73 @@
|
||||
#ifndef RAGE_DISPLAY_OGL_HELPERS_H
|
||||
#define RAGE_DISPLAY_OGL_HELPERS_H
|
||||
|
||||
#if defined(WIN32)
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#include <GL/glew.h>
|
||||
|
||||
/* Import RageDisplay, for types. Do not include RageDisplay_Legacy.h. */
|
||||
#include "RageDisplay.h"
|
||||
|
||||
/* Windows defines GL_EXT_paletted_texture incompletely: */
|
||||
#ifndef GL_TEXTURE_INDEX_SIZE_EXT
|
||||
#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED
|
||||
#endif
|
||||
|
||||
/** @brief Utilities for working with the RageDisplay. */
|
||||
namespace RageDisplay_Legacy_Helpers
|
||||
{
|
||||
void Init();
|
||||
RString GLToString( GLenum e );
|
||||
};
|
||||
|
||||
class RenderTarget
|
||||
{
|
||||
public:
|
||||
virtual ~RenderTarget() { }
|
||||
virtual void Create( const RenderTargetParam ¶m, int &iTextureWidthOut, int &iTextureHeightOut ) = 0;
|
||||
|
||||
virtual unsigned GetTexture() const = 0;
|
||||
|
||||
/* Render to this RenderTarget. */
|
||||
virtual void StartRenderingTo() = 0;
|
||||
|
||||
/* Stop rendering to this RenderTarget. Update the texture, if necessary, and
|
||||
* make it available. */
|
||||
virtual void FinishRenderingTo() = 0;
|
||||
|
||||
virtual bool InvertY() const { return false; }
|
||||
|
||||
const RenderTargetParam &GetParam() const { return m_Param; }
|
||||
|
||||
protected:
|
||||
RenderTargetParam m_Param;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001-2011 Chris Danford, Glenn Maynard, Colby Klein
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, and/or sell copies of the Software, and to permit persons to
|
||||
* whom the Software is furnished to do so, provided that the above
|
||||
* copyright notice(s) and this permission notice appear in all copies of
|
||||
* the Software and that both the above copyright notice(s) and this
|
||||
* permission notice appear in supporting documentation.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
||||
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
|
||||
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
|
||||
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
+373
-374
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
/* RageDisplay_OGL: OpenGL renderer. */
|
||||
/* RageDisplay_Legacy: OpenGL renderer. */
|
||||
|
||||
#ifndef RAGE_DISPLAY_OGL_H
|
||||
#define RAGE_DISPLAY_OGL_H
|
||||
@@ -12,7 +12,7 @@
|
||||
#define AssertNoGLError() \
|
||||
{ \
|
||||
GLenum error = glGetError(); \
|
||||
ASSERT_M( error == GL_NO_ERROR, RageDisplay_OGL_Helpers::GLToString(error) ); \
|
||||
ASSERT_M( error == GL_NO_ERROR, RageDisplay_Legacy_Helpers::GLToString(error) ); \
|
||||
}
|
||||
|
||||
#if defined(DEBUG) || !defined(GL_GET_ERROR_IS_SLOW)
|
||||
@@ -23,11 +23,11 @@
|
||||
#define DebugAssertNoGLError()
|
||||
#endif
|
||||
|
||||
class RageDisplay_OGL: public RageDisplay
|
||||
class RageDisplay_Legacy: public RageDisplay
|
||||
{
|
||||
public:
|
||||
RageDisplay_OGL();
|
||||
virtual ~RageDisplay_OGL();
|
||||
RageDisplay_Legacy();
|
||||
virtual ~RageDisplay_Legacy();
|
||||
virtual RString Init( const VideoModeParams &p, bool bAllowUnacceleratedRenderer );
|
||||
|
||||
virtual RString GetApiDescription() const { return "OpenGL"; }
|
||||
@@ -129,7 +129,7 @@ protected:
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Chris Danford, Glenn Maynard
|
||||
* Copyright (c) 2001-2011 Chris Danford, Glenn Maynard, Colby Klein
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
||||
@@ -31,61 +31,19 @@ namespace
|
||||
}
|
||||
};
|
||||
|
||||
void RageDisplay_OGL_Helpers::Init()
|
||||
void RageDisplay_Legacy_Helpers::Init()
|
||||
{
|
||||
InitStringMap();
|
||||
}
|
||||
|
||||
RString RageDisplay_OGL_Helpers::GLToString( GLenum e )
|
||||
RString RageDisplay_Legacy_Helpers::GLToString( GLenum e )
|
||||
{
|
||||
if( g_Strings.find(e) != g_Strings.end() )
|
||||
return g_Strings[e];
|
||||
|
||||
return ssprintf( "%i", int(e) );
|
||||
}
|
||||
|
||||
|
||||
GLExt_t GLExt;
|
||||
|
||||
/* Available extensions: */
|
||||
static set<string> g_glExts;
|
||||
|
||||
bool GLExt_t::HasExtension( const RString &sExt ) const
|
||||
{
|
||||
return g_glExts.find(sExt) != g_glExts.end();
|
||||
}
|
||||
|
||||
#define F(n) { (void **)(&GLExt.n), #n }
|
||||
|
||||
struct func_t
|
||||
{
|
||||
void **p;
|
||||
const char *name;
|
||||
};
|
||||
|
||||
static bool LoadAllOrNothing( struct func_t *funcs, LowLevelWindow *pWind )
|
||||
{
|
||||
bool bGotAll = true;
|
||||
for( unsigned i = 0; funcs[i].p != NULL; ++i )
|
||||
{
|
||||
*funcs[i].p = pWind->GetProcAddress( funcs[i].name );
|
||||
if( *funcs[i].p == NULL )
|
||||
{
|
||||
bGotAll = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( bGotAll )
|
||||
return true;
|
||||
|
||||
/* If any function in the array wasn't found, clear them all. */
|
||||
for( unsigned i = 0; funcs[i].p != NULL; ++i )
|
||||
*funcs[i].p = NULL;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
static void GetGLExtensions( set<string> &ext )
|
||||
{
|
||||
const char *szBuf = (const char *) glGetString( GL_EXTENSIONS );
|
||||
@@ -96,190 +54,10 @@ static void GetGLExtensions( set<string> &ext )
|
||||
for( unsigned i = 0; i < asList.size(); ++i )
|
||||
ext.insert( asList[i] );
|
||||
}
|
||||
|
||||
void GLExt_t::Load( LowLevelWindow *pWind )
|
||||
{
|
||||
memset( this, 0, sizeof(*this) );
|
||||
|
||||
GetGLExtensions( g_glExts );
|
||||
|
||||
m_bARB_texture_env_combine = HasExtension("GL_ARB_texture_env_combine");
|
||||
m_bEXT_texture_env_combine = HasExtension("GL_EXT_texture_env_combine");
|
||||
m_bGL_EXT_bgra = HasExtension("GL_EXT_bgra");
|
||||
m_bGL_ARB_texture_float = HasExtension("GL_ARB_texture_float");
|
||||
|
||||
#if defined(WIN32)
|
||||
if( HasExtension("WGL_EXT_swap_control") )
|
||||
wglSwapIntervalEXT = (PWSWAPINTERVALEXTPROC) pWind->GetProcAddress("wglSwapIntervalEXT");
|
||||
#endif
|
||||
|
||||
if( HasExtension("GL_EXT_paletted_texture") )
|
||||
{
|
||||
glColorTableEXT = (PFNGLCOLORTABLEPROC) pWind->GetProcAddress("glColorTableEXT");
|
||||
glGetColorTableParameterivEXT = (PFNGLCOLORTABLEPARAMETERIVPROC) pWind->GetProcAddress("glGetColorTableParameterivEXT");
|
||||
}
|
||||
|
||||
if( HasExtension("GL_ARB_multitexture") )
|
||||
{
|
||||
func_t funcs[] = {
|
||||
F( glActiveTextureARB ),
|
||||
F( glClientActiveTextureARB ),
|
||||
{ NULL, NULL },
|
||||
};
|
||||
LoadAllOrNothing( funcs, pWind);
|
||||
}
|
||||
|
||||
if( HasExtension("GL_EXT_blend_func_separate") )
|
||||
glBlendFuncSeparateEXT = (PFNGLBLENDFUNCSEPARATEEXTPROC) pWind->GetProcAddress("glBlendFuncSeparateEXT");
|
||||
|
||||
if( HasExtension("GL_EXT_blend_subtract") )
|
||||
glBlendEquation = (PFNGLBLENDEQUATIONPROC) pWind->GetProcAddress("glBlendEquation");
|
||||
|
||||
/*
|
||||
* Find extension functions.
|
||||
*
|
||||
* X11R6.7.0 (or possibly ATI's drivers) seem to be returning bogus values for glBindBufferARB
|
||||
* if we don't actually check for GL_ARB_vertex_buffer_object.
|
||||
* https://sf.net/tracker/download.php?group_id=37892&atid=421366&file_id=88086&aid=958820
|
||||
* https://sf.net/tracker/download.php?group_id=37892&atid=421366&file_id=85542&aid=944836
|
||||
*
|
||||
* Let's check them all, to be safe.
|
||||
*/
|
||||
if( HasExtension("GL_ARB_vertex_buffer_object") )
|
||||
{
|
||||
func_t funcs[] = {
|
||||
F( glGenBuffersARB ),
|
||||
F( glBindBufferARB ),
|
||||
F( glBufferDataARB ),
|
||||
F( glBufferSubDataARB ),
|
||||
F( glDeleteBuffersARB ),
|
||||
F( glMapBufferARB ),
|
||||
F( glUnmapBufferARB ),
|
||||
{ NULL, NULL },
|
||||
};
|
||||
|
||||
LoadAllOrNothing( funcs, pWind );
|
||||
}
|
||||
|
||||
if( HasExtension("GL_EXT_draw_range_elements") )
|
||||
GLExt.glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC) pWind->GetProcAddress("glDrawRangeElements");
|
||||
|
||||
m_bGL_ARB_shader_objects = HasExtension("GL_ARB_shader_objects");
|
||||
if( m_bGL_ARB_shader_objects )
|
||||
{
|
||||
func_t funcs[] = {
|
||||
F( glCreateShaderObjectARB ),
|
||||
F( glCreateShaderObjectARB ),
|
||||
F( glCreateProgramObjectARB ),
|
||||
F( glShaderSourceARB ),
|
||||
F( glCompileShaderARB ),
|
||||
F( glGetObjectParameterfvARB ),
|
||||
F( glGetObjectParameterivARB ),
|
||||
F( glGetInfoLogARB ),
|
||||
F( glAttachObjectARB ),
|
||||
F( glDeleteObjectARB ),
|
||||
F( glLinkProgramARB ),
|
||||
F( glUseProgramObjectARB ),
|
||||
F( glVertexAttrib2fARB ),
|
||||
F( glVertexAttrib3fARB ),
|
||||
F( glVertexAttrib4fARB ),
|
||||
F( glEnableVertexAttribArrayARB ),
|
||||
F( glDisableVertexAttribArrayARB ),
|
||||
F( glVertexAttribPointerARB ),
|
||||
F( glGetUniformLocationARB ),
|
||||
F( glUniform1fARB ),
|
||||
F( glUniform2fARB ),
|
||||
F( glUniform3fARB ),
|
||||
F( glUniform4fARB ),
|
||||
F( glUniform1iARB ),
|
||||
F( glUniform2iARB ),
|
||||
F( glUniform3iARB ),
|
||||
F( glUniform4iARB ),
|
||||
F( glUniform1fvARB ),
|
||||
F( glUniform2fvARB ),
|
||||
F( glUniform3fvARB ),
|
||||
F( glUniform4fvARB ),
|
||||
F( glUniform1ivARB ),
|
||||
F( glUniform2ivARB ),
|
||||
F( glUniform3ivARB ),
|
||||
F( glUniform4ivARB ),
|
||||
F( glUniformMatrix2fvARB ),
|
||||
F( glUniformMatrix2fvARB ),
|
||||
F( glUniformMatrix2fvARB ),
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
if( !LoadAllOrNothing(funcs, pWind) )
|
||||
m_bGL_ARB_shader_objects = false;
|
||||
}
|
||||
|
||||
m_bGL_ARB_vertex_shader = m_bGL_ARB_shader_objects && HasExtension("GL_ARB_vertex_shader");
|
||||
m_bGL_ARB_fragment_shader = m_bGL_ARB_shader_objects && HasExtension("GL_ARB_fragment_shader");
|
||||
if( m_bGL_ARB_vertex_shader )
|
||||
{
|
||||
func_t funcs[] =
|
||||
{
|
||||
F( glBindAttribLocationARB ),
|
||||
F( glGetAttribLocationARB ),
|
||||
{ NULL, NULL }
|
||||
};
|
||||
if( !LoadAllOrNothing(funcs, pWind) )
|
||||
m_bGL_ARB_vertex_shader = false;
|
||||
}
|
||||
|
||||
m_bGL_ARB_shading_language_100 = HasExtension("GL_ARB_shading_language_100");
|
||||
if( m_bGL_ARB_shading_language_100 )
|
||||
{
|
||||
while( glGetError() != GL_NO_ERROR )
|
||||
;
|
||||
const char *pzVersion = (const char *) glGetString( GL_SHADING_LANGUAGE_VERSION );
|
||||
|
||||
GLenum glError = glGetError();
|
||||
if( glError == GL_INVALID_ENUM )
|
||||
{
|
||||
LOG->Info( "No GL_SHADING_LANGUAGE_VERSION; assuming 1.0" );
|
||||
m_iShadingLanguageVersion = 100;
|
||||
}
|
||||
else
|
||||
{
|
||||
const float fVersion = StringToFloat( pzVersion );
|
||||
m_iShadingLanguageVersion = lrintf( fVersion * 100 );
|
||||
/* The version string may contain extra information beyond the version number. */
|
||||
LOG->Info( "OpenGL shading language: %s", pzVersion );
|
||||
}
|
||||
}
|
||||
|
||||
m_bGL_EXT_framebuffer_object = HasExtension("GL_EXT_framebuffer_object");
|
||||
if( m_bGL_EXT_framebuffer_object )
|
||||
{
|
||||
func_t funcs[] = {
|
||||
F( glIsRenderbufferEXT ),
|
||||
F( glBindRenderbufferEXT ),
|
||||
F( glDeleteRenderbuffersEXT ),
|
||||
F( glGenRenderbuffersEXT ),
|
||||
F( glRenderbufferStorageEXT ),
|
||||
F( glGetRenderbufferParameterivEXT ),
|
||||
F( glIsFramebufferEXT ),
|
||||
F( glBindFramebufferEXT ),
|
||||
F( glDeleteFramebuffersEXT ),
|
||||
F( glGenFramebuffersEXT ),
|
||||
F( glCheckFramebufferStatusEXT ),
|
||||
F( glFramebufferTexture1DEXT ),
|
||||
F( glFramebufferTexture2DEXT ),
|
||||
F( glFramebufferTexture3DEXT ),
|
||||
F( glFramebufferRenderbufferEXT ),
|
||||
F( glGetFramebufferAttachmentParameterivEXT ),
|
||||
F( glGenerateMipmapEXT ),
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
if( !LoadAllOrNothing(funcs, pWind) )
|
||||
m_bGL_EXT_framebuffer_object = false;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001-2005 Chris Danford, Glenn Maynard
|
||||
* Copyright (c) 2001-2011 Chris Danford, Glenn Maynard, Colby Klein
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
||||
@@ -1,25 +1,13 @@
|
||||
#ifndef RAGE_DISPLAY_OGL_HELPERS_H
|
||||
#define RAGE_DISPLAY_OGL_HELPERS_H
|
||||
|
||||
/* ours may be more up-to-date */
|
||||
#define __glext_h_
|
||||
|
||||
#if defined(WIN32)
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#if !defined(MACOSX)
|
||||
# include <GL/gl.h>
|
||||
# include <GL/glu.h>
|
||||
#else
|
||||
# include <OpenGL/gl.h>
|
||||
# include <OpenGL/glu.h>
|
||||
#endif
|
||||
#include <GL/glew.h>
|
||||
|
||||
#undef __glext_h_
|
||||
#include "glext.h"
|
||||
|
||||
/* Import RageDisplay, for types. Do not include RageDisplay_OGL.h. */
|
||||
/* Import RageDisplay, for types. Do not include RageDisplay_Legacy.h. */
|
||||
#include "RageDisplay.h"
|
||||
|
||||
/* Windows defines GL_EXT_paletted_texture incompletely: */
|
||||
@@ -27,11 +15,8 @@
|
||||
#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED
|
||||
#endif
|
||||
|
||||
/* Not in glext.h: */
|
||||
typedef bool (APIENTRY * PWSWAPINTERVALEXTPROC) (int interval);
|
||||
|
||||
/** @brief Utilities for working with the RageDisplay. */
|
||||
namespace RageDisplay_OGL_Helpers
|
||||
namespace RageDisplay_Legacy_Helpers
|
||||
{
|
||||
void Init();
|
||||
RString GLToString( GLenum e );
|
||||
@@ -60,112 +45,10 @@ protected:
|
||||
RenderTargetParam m_Param;
|
||||
};
|
||||
|
||||
class LowLevelWindow;
|
||||
struct GLExt_t
|
||||
{
|
||||
bool m_bARB_texture_env_combine;
|
||||
bool m_bEXT_texture_env_combine;
|
||||
bool m_bGL_EXT_bgra;
|
||||
bool m_bGL_ARB_texture_float;
|
||||
|
||||
PWSWAPINTERVALEXTPROC wglSwapIntervalEXT;
|
||||
PFNGLCOLORTABLEPROC glColorTableEXT;
|
||||
PFNGLBLENDFUNCSEPARATEEXTPROC glBlendFuncSeparateEXT;
|
||||
PFNGLBLENDEQUATIONPROC glBlendEquation;
|
||||
PFNGLCOLORTABLEPARAMETERIVPROC glGetColorTableParameterivEXT;
|
||||
PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;
|
||||
PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB;
|
||||
PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements;
|
||||
|
||||
// ARB_vertex_buffer_object:
|
||||
PFNGLGENBUFFERSARBPROC glGenBuffersARB;
|
||||
PFNGLBINDBUFFERARBPROC glBindBufferARB;
|
||||
PFNGLBUFFERDATAARBPROC glBufferDataARB;
|
||||
PFNGLBUFFERSUBDATAARBPROC glBufferSubDataARB;
|
||||
PFNGLDELETEBUFFERSARBPROC glDeleteBuffersARB;
|
||||
PFNGLMAPBUFFERARBPROC glMapBufferARB;
|
||||
PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB;
|
||||
|
||||
// GL_ARB_shader_objects:
|
||||
bool m_bGL_ARB_shader_objects;
|
||||
PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;
|
||||
PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB;
|
||||
PFNGLSHADERSOURCEARBPROC glShaderSourceARB;
|
||||
PFNGLCOMPILESHADERARBPROC glCompileShaderARB;
|
||||
PFNGLGETOBJECTPARAMETERFVARBPROC glGetObjectParameterfvARB;
|
||||
PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;
|
||||
PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
|
||||
PFNGLATTACHOBJECTARBPROC glAttachObjectARB;
|
||||
PFNGLDELETEOBJECTARBPROC glDeleteObjectARB;
|
||||
PFNGLLINKPROGRAMARBPROC glLinkProgramARB;
|
||||
PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB;
|
||||
PFNGLVERTEXATTRIB2FARBPROC glVertexAttrib2fARB;
|
||||
PFNGLVERTEXATTRIB3FARBPROC glVertexAttrib3fARB;
|
||||
PFNGLVERTEXATTRIB4FARBPROC glVertexAttrib4fARB;
|
||||
PFNGLENABLEVERTEXATTRIBARRAYARBPROC glEnableVertexAttribArrayARB;
|
||||
PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glDisableVertexAttribArrayARB;
|
||||
PFNGLVERTEXATTRIBPOINTERARBPROC glVertexAttribPointerARB;
|
||||
PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;
|
||||
PFNGLUNIFORM1FARBPROC glUniform1fARB;
|
||||
PFNGLUNIFORM2FARBPROC glUniform2fARB;
|
||||
PFNGLUNIFORM3FARBPROC glUniform3fARB;
|
||||
PFNGLUNIFORM4FARBPROC glUniform4fARB;
|
||||
PFNGLUNIFORM1IARBPROC glUniform1iARB;
|
||||
PFNGLUNIFORM2IARBPROC glUniform2iARB;
|
||||
PFNGLUNIFORM3IARBPROC glUniform3iARB;
|
||||
PFNGLUNIFORM4IARBPROC glUniform4iARB;
|
||||
PFNGLUNIFORM1FVARBPROC glUniform1fvARB;
|
||||
PFNGLUNIFORM2FVARBPROC glUniform2fvARB;
|
||||
PFNGLUNIFORM3FVARBPROC glUniform3fvARB;
|
||||
PFNGLUNIFORM4FVARBPROC glUniform4fvARB;
|
||||
PFNGLUNIFORM1IVARBPROC glUniform1ivARB;
|
||||
PFNGLUNIFORM2IVARBPROC glUniform2ivARB;
|
||||
PFNGLUNIFORM3IVARBPROC glUniform3ivARB;
|
||||
PFNGLUNIFORM4IVARBPROC glUniform4ivARB;
|
||||
PFNGLUNIFORMMATRIX2FVARBPROC glUniformMatrix2fvARB;
|
||||
PFNGLUNIFORMMATRIX3FVARBPROC glUniformMatrix3fvARB;
|
||||
PFNGLUNIFORMMATRIX4FVARBPROC glUniformMatrix4fvARB;
|
||||
|
||||
// GL_ARB_vertex_shader and GL_ARB_fragment_shader:
|
||||
bool m_bGL_ARB_vertex_shader;
|
||||
bool m_bGL_ARB_fragment_shader;
|
||||
PFNGLBINDATTRIBLOCATIONARBPROC glBindAttribLocationARB;
|
||||
PFNGLGETATTRIBLOCATIONARBPROC glGetAttribLocationARB;
|
||||
|
||||
bool m_bGL_ARB_shading_language_100;
|
||||
int m_iShadingLanguageVersion; /* * 100 */
|
||||
|
||||
// GL_EXT_framebuffer_object:
|
||||
bool m_bGL_EXT_framebuffer_object;
|
||||
PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT;
|
||||
PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT;
|
||||
PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT;
|
||||
PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT;
|
||||
PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT;
|
||||
PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glGetRenderbufferParameterivEXT;
|
||||
PFNGLISFRAMEBUFFEREXTPROC glIsFramebufferEXT;
|
||||
PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;
|
||||
PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT;
|
||||
PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT;
|
||||
PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT;
|
||||
PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glFramebufferTexture1DEXT;
|
||||
PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT;
|
||||
PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glFramebufferTexture3DEXT;
|
||||
PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT;
|
||||
PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetFramebufferAttachmentParameterivEXT;
|
||||
PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmapEXT;
|
||||
|
||||
void Load( LowLevelWindow *pWind );
|
||||
|
||||
bool HasExtension( const RString &sExt ) const;
|
||||
};
|
||||
|
||||
extern GLExt_t GLExt;
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001-2005 Chris Danford, Glenn Maynard
|
||||
* Copyright (c) 2001-2011 Chris Danford, Glenn Maynard, Colby Klein
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
||||
+89
-86
@@ -80,7 +80,6 @@ AutoScreenMessage( SM_BackFromTimeSignatureNumeratorChange );
|
||||
AutoScreenMessage( SM_BackFromTimeSignatureDenominatorChange );
|
||||
AutoScreenMessage( SM_BackFromTickcountChange );
|
||||
AutoScreenMessage( SM_BackFromComboChange );
|
||||
AutoScreenMessage( SM_BackFromWarpChange );
|
||||
AutoScreenMessage( SM_DoSaveAndExit );
|
||||
AutoScreenMessage( SM_DoExit );
|
||||
AutoScreenMessage( SM_SaveSuccessful );
|
||||
@@ -95,6 +94,35 @@ static const char *EditStateNames[] = {
|
||||
XToString( EditState );
|
||||
LuaXType( EditState );
|
||||
|
||||
#if defined(XBOX)
|
||||
void ScreenEdit::InitEditMappings()
|
||||
{
|
||||
/* XXX: fill this in */
|
||||
m_EditMappingsDeviceInput.Clear();
|
||||
|
||||
switch( EDIT_MODE.GetValue() )
|
||||
{
|
||||
case EditMode_Practice:
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_SCROLL_PREV_MEASURE][0] = DeviceInput(DEVICE_JOY1, JOY_HAT_UP);
|
||||
m_EditMappingsMenuButton.button[EDIT_BUTTON_SCROLL_PREV_MEASURE][0] = GAME_BUTTON_UP;
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_SCROLL_NEXT_MEASURE][0] = DeviceInput(DEVICE_JOY1, JOY_HAT_DOWN);
|
||||
m_EditMappingsMenuButton.button[EDIT_BUTTON_SCROLL_NEXT_MEASURE][0] = GAME_BUTTON_DOWN;
|
||||
break;
|
||||
default:
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_SCROLL_UP_LINE][0] = DeviceInput(DEVICE_JOY1, JOY_HAT_UP);
|
||||
m_EditMappingsMenuButton.button[EDIT_BUTTON_SCROLL_UP_LINE][0] = GAME_BUTTON_UP;
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_SCROLL_DOWN_LINE][0] = DeviceInput(DEVICE_JOY1, JOY_HAT_DOWN);
|
||||
m_EditMappingsMenuButton.button[EDIT_BUTTON_SCROLL_DOWN_LINE][0] = GAME_BUTTON_DOWN;
|
||||
break;
|
||||
}
|
||||
|
||||
// Map these to the triggers: L goes up, R goes down.
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_SCROLL_UP_PAGE][0] = DeviceInput(DEVICE_JOY1, JOY_BUTTON_7);
|
||||
//m_EditMappingsMenuButton.button[EDIT_BUTTON_SCROLL_UP_PAGE][0] = GAME_BUTTON_UPLEFT;
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_SCROLL_DOWN_PAGE][0] = DeviceInput(DEVICE_JOY1, JOY_BUTTON_8);
|
||||
//m_EditMappingsMenuButton.button[EDIT_BUTTON_SCROLL_DOWN_PAGE][0] = GAME_BUTTON_UPRIGHT;
|
||||
}
|
||||
#else
|
||||
void ScreenEdit::InitEditMappings()
|
||||
{
|
||||
m_EditMappingsDeviceInput.Clear();
|
||||
@@ -207,7 +235,7 @@ void ScreenEdit::InitEditMappings()
|
||||
m_EditMappingsDeviceInput.hold[EDIT_BUTTON_SAMPLE_LENGTH_DOWN][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT);
|
||||
m_EditMappingsDeviceInput.hold[EDIT_BUTTON_SAMPLE_LENGTH_DOWN][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT);
|
||||
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_PLAY_SAMPLE_MUSIC][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cl);
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_PLAY_SAMPLE_MUSIC][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cm);
|
||||
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_OPEN_BGCHANGE_LAYER1_MENU][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cb);
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_OPEN_BGCHANGE_LAYER2_MENU][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cb);
|
||||
@@ -240,7 +268,7 @@ void ScreenEdit::InitEditMappings()
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_RIGHT_SIDE][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RALT);
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_LAY_ROLL][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT);
|
||||
// m_EditMappingsDeviceInput.button[EDIT_BUTTON_LAY_TAP_ATTACK][0] = DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT);
|
||||
|
||||
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_CYCLE_TAP_LEFT][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cn);
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_CYCLE_TAP_RIGHT][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cm);
|
||||
|
||||
@@ -263,7 +291,7 @@ void ScreenEdit::InitEditMappings()
|
||||
m_EditMappingsMenuButton.button[EDIT_BUTTON_OPEN_EDIT_MENU][1] = GAME_BUTTON_BACK;
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_OPEN_AREA_MENU][0] = DeviceInput(DEVICE_KEYBOARD, KEY_ENTER);
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_OPEN_INPUT_HELP][0] = DeviceInput(DEVICE_KEYBOARD, KEY_F1);
|
||||
|
||||
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_BAKE_RANDOM_FROM_SONG_GROUP][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cb);
|
||||
m_EditMappingsDeviceInput.hold[EDIT_BUTTON_BAKE_RANDOM_FROM_SONG_GROUP][0] = DeviceInput(DEVICE_KEYBOARD, KEY_LALT);
|
||||
m_EditMappingsDeviceInput.hold[EDIT_BUTTON_BAKE_RANDOM_FROM_SONG_GROUP][1] = DeviceInput(DEVICE_KEYBOARD, KEY_RALT);
|
||||
@@ -281,7 +309,7 @@ void ScreenEdit::InitEditMappings()
|
||||
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_ADJUST_FINE][0] = DeviceInput(DEVICE_KEYBOARD, KEY_RALT);
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_ADJUST_FINE][1] = DeviceInput(DEVICE_KEYBOARD, KEY_LALT);
|
||||
|
||||
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_SAVE][1] = DeviceInput(DEVICE_KEYBOARD, KEY_Cs);
|
||||
#if defined(MACOSX)
|
||||
/* use cmd */
|
||||
@@ -294,10 +322,10 @@ void ScreenEdit::InitEditMappings()
|
||||
#endif
|
||||
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_UNDO][1] = DeviceInput(DEVICE_KEYBOARD, KEY_Cu);
|
||||
|
||||
|
||||
// Switch players, if it makes sense to do so.
|
||||
m_EditMappingsDeviceInput.button[EDIT_BUTTON_SWITCH_PLAYERS][0] = DeviceInput(DEVICE_KEYBOARD, KEY_SLASH);
|
||||
|
||||
|
||||
m_PlayMappingsDeviceInput.button[EDIT_BUTTON_RETURN_TO_EDIT][0] = DeviceInput(DEVICE_KEYBOARD, KEY_ESC);
|
||||
m_PlayMappingsMenuButton.button[EDIT_BUTTON_RETURN_TO_EDIT][1] = GAME_BUTTON_BACK;
|
||||
|
||||
@@ -318,6 +346,8 @@ void ScreenEdit::InitEditMappings()
|
||||
m_RecordPausedMappingsDeviceInput.button[EDIT_BUTTON_UNDO][0] = DeviceInput(DEVICE_KEYBOARD, KEY_Cu);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* Given a DeviceInput that was just depressed, return an active edit function. */
|
||||
EditButton ScreenEdit::DeviceToEdit( const DeviceInput &DeviceI ) const
|
||||
{
|
||||
@@ -510,7 +540,8 @@ static MenuDef g_AreaMenu(
|
||||
static MenuDef g_StepsInformation(
|
||||
"ScreenMiniMenuStepsInformation",
|
||||
MenuRowDef( ScreenEdit::difficulty, "Difficulty", true, EditMode_Practice, true, true, 0, NULL ),
|
||||
MenuRowDef( ScreenEdit::meter, "Meter", true, EditMode_Practice, true, false, 0, MIN_METER, MAX_METER ),
|
||||
// xxx: this giant list of numbers SUUUUUUUUUUCKS -aj
|
||||
MenuRowDef( ScreenEdit::meter, "Meter", true, EditMode_Practice, true, false, 0, "1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25" ),
|
||||
MenuRowDef( ScreenEdit::description, "Description", true, EditMode_Practice, true, true, 0, NULL ),
|
||||
MenuRowDef( ScreenEdit::chartstyle, "Chart Style", true, EditMode_Practice, true, true, 0, NULL ),
|
||||
MenuRowDef( ScreenEdit::step_credit, "Step Author", true, EditMode_Practice, true, true, 0, NULL ),
|
||||
@@ -538,10 +569,7 @@ static MenuDef g_SongInformation(
|
||||
MenuRowDef( ScreenEdit::main_title_transliteration, "Main title transliteration", true, EditMode_Practice, true, true, 0, NULL ),
|
||||
MenuRowDef( ScreenEdit::sub_title_transliteration, "Sub title transliteration", true, EditMode_Practice, true, true, 0, NULL ),
|
||||
MenuRowDef( ScreenEdit::artist_transliteration, "Artist transliteration", true, EditMode_Practice, true, true, 0, NULL ),
|
||||
MenuRowDef( ScreenEdit::last_beat_hint, "Last beat hint", true, EditMode_Full, true, true, 0, NULL ),
|
||||
MenuRowDef( ScreenEdit::display_bpm, "Display BPM", true, EditMode_Full, true, true, 0, "Actual", "Specified", "Random" ),
|
||||
MenuRowDef( ScreenEdit::min_bpm, "Min BPM", true, EditMode_Full, true, true, 0, NULL ),
|
||||
MenuRowDef( ScreenEdit::max_bpm, "Max BPM", true, EditMode_Full, true, true, 0, NULL )
|
||||
MenuRowDef( ScreenEdit::last_beat_hint, "Last beat hint", true, EditMode_Full, true, true, 0, NULL )
|
||||
);
|
||||
|
||||
static MenuDef g_TimingDataInformation(
|
||||
@@ -552,8 +580,7 @@ static MenuDef g_TimingDataInformation(
|
||||
MenuRowDef( ScreenEdit::time_signature_numerator, "Edit time signature (top)", true, EditMode_Full, true, true, 0, NULL ),
|
||||
MenuRowDef( ScreenEdit::time_signature_denominator, "Edit time signature (bottom)", true, EditMode_Full, true, true, 0, NULL ),
|
||||
MenuRowDef( ScreenEdit::tickcount, "Edit tickcount", true, EditMode_Full, true, true, 0, NULL ),
|
||||
MenuRowDef( ScreenEdit::combo, "Edit combo", true, EditMode_Full, true, true, 0, NULL ),
|
||||
MenuRowDef( ScreenEdit::warp, "Edit warp", true, EditMode_Full, true, true, 0, NULL )
|
||||
MenuRowDef( ScreenEdit::combo, "Edit combo", true, EditMode_Full, true, true, 0, NULL )
|
||||
);
|
||||
|
||||
enum { song_bganimation, song_movie, song_bitmap, global_bganimation, global_movie, global_movie_song_group, global_movie_song_group_and_genre, dynamic_random, baked_random, none };
|
||||
@@ -738,11 +765,8 @@ void ScreenEdit::Init()
|
||||
}
|
||||
}
|
||||
m_PlayerStateEdit.m_PlayerNumber = PLAYER_1;
|
||||
// If we always go with the GAMESTATE NoteSkin, we will have fun effects
|
||||
// like Vivid or Flat in the editor notefield. This is not conducive to
|
||||
// productive editing.
|
||||
// todo: We should allow certain noteskins (note-colored/rhythm) to be
|
||||
// displayed. (Perhaps this should be a noteskin metric.) -aj
|
||||
// If we always go with the GAMESTATE NoteSkin, we will have fun effects like Vivid or Flat in the editor notefield.
|
||||
// This is not conducive to productive editing.
|
||||
if( NOTESKIN->DoesNoteSkinExist( EDITOR_NOTE_SKINS[PLAYER_1].Get() ) )
|
||||
{
|
||||
PO_GROUP_ASSIGN( m_PlayerStateEdit.m_PlayerOptions, ModsLevel_Stage, m_sNoteSkin, EDITOR_NOTE_SKINS[PLAYER_1].Get() );
|
||||
@@ -1219,8 +1243,6 @@ static int FindAttackAtTime( const AttackArray& attacks, float fStartTime )
|
||||
|
||||
static LocalizedString SWITCHED_TO ( "ScreenEdit", "Switched to" );
|
||||
static LocalizedString NO_BACKGROUNDS_AVAILABLE ( "ScreenEdit", "No backgrounds available" );
|
||||
static ThemeMetric<bool> INVERT_SCROLL_BUTTONS ( "ScreenEdit", "InvertScrollSpeedButtons" );
|
||||
|
||||
void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB )
|
||||
{
|
||||
if( input.type == IET_RELEASE )
|
||||
@@ -1342,10 +1364,10 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB )
|
||||
{
|
||||
DEFAULT_FAIL(EditB);
|
||||
case EDIT_BUTTON_SCROLL_SPEED_DOWN:
|
||||
INVERT_SCROLL_BUTTONS ? ++iSpeed : --iSpeed;
|
||||
--iSpeed;
|
||||
break;
|
||||
case EDIT_BUTTON_SCROLL_SPEED_UP:
|
||||
INVERT_SCROLL_BUTTONS ? --iSpeed : ++iSpeed;
|
||||
++iSpeed;
|
||||
break;
|
||||
}
|
||||
iSpeed = clamp( iSpeed, 0, (int) ARRAYLEN(fSpeeds)-1 );
|
||||
@@ -2646,12 +2668,6 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
|
||||
}
|
||||
SetDirty( true );
|
||||
}
|
||||
else if ( SM == SM_BackFromWarpChange )
|
||||
{
|
||||
float fWarp = StringToFloat( ScreenTextEntry::s_sLastAnswer );
|
||||
m_pSong->m_Timing.SetWarpAtBeat( GAMESTATE->m_fSongBeat, fWarp );
|
||||
SetDirty( true );
|
||||
}
|
||||
else if( SM == SM_BackFromBGChange )
|
||||
{
|
||||
HandleBGChangeChoice( (BGChangeChoice)ScreenMiniMenu::s_iLastRowCode, ScreenMiniMenu::s_viLastAnswers );
|
||||
@@ -2851,8 +2867,8 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
|
||||
if( (*s)->IsAutogen() )
|
||||
continue;
|
||||
// If the notedata has content, let it go.
|
||||
if( !(*s)->GetNoteData().IsEmpty() )
|
||||
continue;
|
||||
// if( !(*s)->m_NoteData->IsEmpty() )
|
||||
// continue;
|
||||
// It's hard to say if these steps were saved to disk or not.
|
||||
/*
|
||||
if( !(*s)->GetSavedToDisk() )
|
||||
@@ -2982,16 +2998,6 @@ static void ChangeLastBeatHint( const RString &sNew )
|
||||
GAMESTATE->m_pCurSong->m_fSpecifiedLastBeat = StringToFloat( sNew );
|
||||
}
|
||||
|
||||
static void ChangeMinBPM( const RString &sNew )
|
||||
{
|
||||
GAMESTATE->m_pCurSong->m_fSpecifiedBPMMin = StringToFloat( sNew );
|
||||
}
|
||||
|
||||
static void ChangeMaxBPM( const RString &sNew )
|
||||
{
|
||||
GAMESTATE->m_pCurSong->m_fSpecifiedBPMMax = StringToFloat( sNew );
|
||||
}
|
||||
|
||||
// End helper functions
|
||||
|
||||
static LocalizedString REVERT_LAST_SAVE ( "ScreenEdit", "Do you want to revert to your last save?" );
|
||||
@@ -3183,9 +3189,6 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector<int> &iAns
|
||||
g_SongInformation.rows[sub_title_transliteration].SetOneUnthemedChoice( pSong->m_sSubTitleTranslit );
|
||||
g_SongInformation.rows[artist_transliteration].SetOneUnthemedChoice( pSong->m_sArtistTranslit );
|
||||
g_SongInformation.rows[last_beat_hint].SetOneUnthemedChoice( ssprintf("%.5f", pSong->m_fSpecifiedLastBeat) );
|
||||
g_SongInformation.rows[display_bpm].iDefaultChoice = pSong->m_DisplayBPMType;
|
||||
g_SongInformation.rows[min_bpm].SetOneUnthemedChoice( ssprintf("%.5f", pSong->m_fSpecifiedBPMMin) );
|
||||
g_SongInformation.rows[max_bpm].SetOneUnthemedChoice( ssprintf("%.5f", pSong->m_fSpecifiedBPMMax) );
|
||||
|
||||
EditMiniMenu( &g_SongInformation, SM_BackFromSongInformation );
|
||||
}
|
||||
@@ -3202,7 +3205,6 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector<int> &iAns
|
||||
g_TimingDataInformation.rows[time_signature_denominator].SetOneUnthemedChoice( ssprintf("%d", pTime.GetTimeSignatureDenominatorAtBeat( fBeat ) ) );
|
||||
g_TimingDataInformation.rows[tickcount].SetOneUnthemedChoice( ssprintf("%d", pTime.GetTickcountAtBeat( fBeat ) ) );
|
||||
g_TimingDataInformation.rows[combo].SetOneUnthemedChoice( ssprintf("%d", pTime.GetComboAtBeat( fBeat ) ) );
|
||||
g_TimingDataInformation.rows[warp].SetOneUnthemedChoice( ssprintf("%.5f", pTime.GetWarpAtBeat( fBeat ) ) );
|
||||
|
||||
EditMiniMenu( &g_TimingDataInformation, SM_BackFromTimingDataInformation );
|
||||
}
|
||||
@@ -3415,9 +3417,11 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector<int> &iAns
|
||||
case tempo:
|
||||
{
|
||||
// This affects all steps.
|
||||
const NoteData OldClipboard( m_Clipboard );
|
||||
HandleAreaMenuChoice( cut );
|
||||
|
||||
AlterType at = (AlterType)iAnswers[c];
|
||||
float fScale = -1;
|
||||
|
||||
switch( at )
|
||||
{
|
||||
DEFAULT_FAIL( at );
|
||||
@@ -3428,18 +3432,31 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector<int> &iAns
|
||||
case expand_3_2: fScale = 1.5f; break;
|
||||
case expand_2x: fScale = 2; break;
|
||||
}
|
||||
|
||||
int iStartIndex = m_NoteFieldEdit.m_iBeginMarker;
|
||||
int iEndIndex = m_NoteFieldEdit.m_iEndMarker;
|
||||
int iNewEndIndex = iEndIndex + lrintf( (iEndIndex - iStartIndex) * (fScale - 1) );
|
||||
|
||||
// scale currently editing notes
|
||||
NoteDataUtil::ScaleRegion( m_NoteDataEdit, fScale, iStartIndex, iEndIndex );
|
||||
|
||||
// scale timing data
|
||||
m_pSong->m_Timing.ScaleRegion( fScale, m_NoteFieldEdit.m_iBeginMarker, m_NoteFieldEdit.m_iEndMarker, true );
|
||||
|
||||
// scale all other steps.
|
||||
switch( at )
|
||||
{
|
||||
DEFAULT_FAIL( at );
|
||||
case compress_2x: NoteDataUtil::Scale( m_Clipboard, fScale ); break;
|
||||
case compress_3_2: NoteDataUtil::Scale( m_Clipboard, fScale ); break;
|
||||
case compress_4_3: NoteDataUtil::Scale( m_Clipboard, fScale ); break;
|
||||
case expand_4_3: NoteDataUtil::Scale( m_Clipboard, fScale ); break;
|
||||
case expand_3_2: NoteDataUtil::Scale( m_Clipboard, fScale ); break;
|
||||
case expand_2x: NoteDataUtil::Scale( m_Clipboard, fScale ); break;
|
||||
}
|
||||
|
||||
int iOldClipboardRow = m_NoteFieldEdit.m_iEndMarker - m_NoteFieldEdit.m_iBeginMarker;
|
||||
int iNewClipboardRow = lrintf( iOldClipboardRow * fScale );
|
||||
int iDeltaRows = iNewClipboardRow - iOldClipboardRow;
|
||||
int iNewClipboardEndRow = m_NoteFieldEdit.m_iBeginMarker + iNewClipboardRow;
|
||||
if( iDeltaRows > 0 )
|
||||
NoteDataUtil::InsertRows( m_NoteDataEdit, m_NoteFieldEdit.m_iBeginMarker, iDeltaRows );
|
||||
else
|
||||
NoteDataUtil::DeleteRows( m_NoteDataEdit, m_NoteFieldEdit.m_iBeginMarker, -iDeltaRows );
|
||||
|
||||
m_pSong->m_Timing.ScaleRegion( fScale, m_NoteFieldEdit.m_iBeginMarker, m_NoteFieldEdit.m_iEndMarker );
|
||||
|
||||
HandleAreaMenuChoice( paste_at_begin_marker );
|
||||
|
||||
const vector<Steps*> sIter = m_pSong->GetAllSteps();
|
||||
RString sTempStyle, sTempDiff;
|
||||
for( unsigned i = 0; i < sIter.size(); i++ )
|
||||
@@ -3459,8 +3476,12 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector<int> &iAns
|
||||
sIter[i]->SetNoteData( ndTemp );
|
||||
}
|
||||
|
||||
m_NoteFieldEdit.m_iEndMarker = iNewEndIndex;
|
||||
|
||||
m_NoteFieldEdit.m_iEndMarker = iNewClipboardEndRow;
|
||||
|
||||
float fOldBPM = m_pSong->GetBPMAtBeat( NoteRowToBeat(m_NoteFieldEdit.m_iBeginMarker) );
|
||||
float fNewBPM = fOldBPM * fScale;
|
||||
m_pSong->m_Timing.SetBPMAtRow( m_NoteFieldEdit.m_iBeginMarker, fNewBPM );
|
||||
m_pSong->m_Timing.SetBPMAtRow( iNewClipboardEndRow, fOldBPM );
|
||||
}
|
||||
break;
|
||||
case play:
|
||||
@@ -3520,7 +3541,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector<int> &iAns
|
||||
|
||||
// don't move the step from where it is, just move everything later
|
||||
NoteDataUtil::InsertRows( m_NoteDataEdit, BeatToNoteRow(GAMESTATE->m_fSongBeat) + 1, BeatToNoteRow(fStopBeats) );
|
||||
m_pSong->m_Timing.InsertRows( BeatToNoteRow(GAMESTATE->m_fSongBeat) + 1, BeatToNoteRow(fStopBeats) );
|
||||
m_pSong->m_Timing.InsertRows( BeatToNoteRow(GAMESTATE->m_fSongBeat) + 1, BeatToNoteRow(fStopSeconds) );
|
||||
}
|
||||
break;
|
||||
case undo:
|
||||
@@ -3546,6 +3567,7 @@ void ScreenEdit::HandleStepsInformationChoice( StepsInformationChoice c, const v
|
||||
switch( c )
|
||||
{
|
||||
case description:
|
||||
// todo: Call a screen with class ScreenTextEntry instead. -aj
|
||||
ScreenTextEntry::TextEntry(
|
||||
SM_None,
|
||||
ENTER_NEW_DESCRIPTION,
|
||||
@@ -3590,15 +3612,15 @@ static LocalizedString ENTER_MAIN_TITLE_TRANSLIT ("ScreenEdit","Enter a new main
|
||||
static LocalizedString ENTER_SUB_TITLE_TRANSLIT ("ScreenEdit","Enter a new sub title transliteration.");
|
||||
static LocalizedString ENTER_ARTIST_TRANSLIT ("ScreenEdit","Enter a new artist transliteration.");
|
||||
static LocalizedString ENTER_LAST_BEAT_HINT ("ScreenEdit","Enter a new last beat hint.");
|
||||
static LocalizedString ENTER_MIN_BPM ("ScreenEdit","Enter a new min BPM.");
|
||||
static LocalizedString ENTER_MAX_BPM ("ScreenEdit","Enter a new max BPM.");
|
||||
void ScreenEdit::HandleSongInformationChoice( SongInformationChoice c, const vector<int> &iAnswers )
|
||||
{
|
||||
Song* pSong = GAMESTATE->m_pCurSong;
|
||||
pSong->m_DisplayBPMType = static_cast<DisplayBPM>(iAnswers[display_bpm]);
|
||||
|
||||
// todo: Call a screen with class ScreenTextEntry instead.
|
||||
// multiple times in this section, so I'm only saying it here. -aj
|
||||
switch( c )
|
||||
{
|
||||
DEFAULT_FAIL(c);
|
||||
case main_title:
|
||||
ScreenTextEntry::TextEntry( SM_None, ENTER_MAIN_TITLE, pSong->m_sMainTitle, 100, NULL, ChangeMainTitle, NULL );
|
||||
break;
|
||||
@@ -3624,20 +3646,7 @@ void ScreenEdit::HandleSongInformationChoice( SongInformationChoice c, const vec
|
||||
ScreenTextEntry::TextEntry( SM_None, ENTER_ARTIST_TRANSLIT, pSong->m_sArtistTranslit, 100, NULL, ChangeArtistTranslit, NULL );
|
||||
break;
|
||||
case last_beat_hint:
|
||||
ScreenTextEntry::TextEntry( SM_None, ENTER_LAST_BEAT_HINT,
|
||||
ssprintf("%.5f", pSong->m_fSpecifiedLastBeat), 20,
|
||||
ScreenTextEntry::FloatValidate, ChangeLastBeatHint, NULL );
|
||||
break;
|
||||
case min_bpm:
|
||||
ScreenTextEntry::TextEntry( SM_None, ENTER_MIN_BPM,
|
||||
ssprintf("%.5f", pSong->m_fSpecifiedBPMMin), 20,
|
||||
ScreenTextEntry::FloatValidate, ChangeMinBPM, NULL );
|
||||
break;
|
||||
case max_bpm:
|
||||
ScreenTextEntry::TextEntry( SM_None, ENTER_MAX_BPM,
|
||||
ssprintf("%.5f", pSong->m_fSpecifiedBPMMax), 20,
|
||||
ScreenTextEntry::FloatValidate, ChangeMaxBPM, NULL );
|
||||
break;
|
||||
ScreenTextEntry::TextEntry( SM_None, ENTER_LAST_BEAT_HINT, ssprintf("%.5f", pSong->m_fSpecifiedLastBeat), 20, ScreenTextEntry::FloatValidate, ChangeLastBeatHint, NULL );
|
||||
};
|
||||
}
|
||||
|
||||
@@ -3648,13 +3657,13 @@ static LocalizedString ENTER_TIME_SIGNATURE_NUMERATOR_VALUE ( "ScreenEdit", "Ent
|
||||
static LocalizedString ENTER_TIME_SIGNATURE_DENOMINATOR_VALUE ( "ScreenEdit", "Enter a new Time Signature denominator value." );
|
||||
static LocalizedString ENTER_TICKCOUNT_VALUE ( "ScreenEdit", "Enter a new Tickcount value." );
|
||||
static LocalizedString ENTER_COMBO_VALUE ( "ScreenEdit", "Enter a new Combo value." );
|
||||
static LocalizedString ENTER_WARP_VALUE ( "ScreenEdit", "Enter a new Warp value." );
|
||||
void ScreenEdit::HandleTimingDataInformationChoice( TimingDataInformationChoice c, const vector<int> &iAnswers )
|
||||
{
|
||||
switch( c )
|
||||
{
|
||||
DEFAULT_FAIL( c );
|
||||
case bpm:
|
||||
// todo: Call a screen with class ScreenTextEntry instead. -aj
|
||||
ScreenTextEntry::TextEntry(
|
||||
SM_BackFromBPMChange,
|
||||
ENTER_BPM_VALUE,
|
||||
@@ -3663,6 +3672,7 @@ void ScreenEdit::HandleTimingDataInformationChoice( TimingDataInformationChoice
|
||||
);
|
||||
break;
|
||||
case stop:
|
||||
// todo: Call a screen with class ScreenTextEntry instead. -aj
|
||||
ScreenTextEntry::TextEntry(
|
||||
SM_BackFromStopChange,
|
||||
ENTER_STOP_VALUE,
|
||||
@@ -3671,6 +3681,7 @@ void ScreenEdit::HandleTimingDataInformationChoice( TimingDataInformationChoice
|
||||
);
|
||||
break;
|
||||
case delay:
|
||||
// todo: Call a screen with class ScreenTextEntry instead. -aj
|
||||
ScreenTextEntry::TextEntry(
|
||||
SM_BackFromDelayChange,
|
||||
ENTER_DELAY_VALUE,
|
||||
@@ -3710,14 +3721,6 @@ void ScreenEdit::HandleTimingDataInformationChoice( TimingDataInformationChoice
|
||||
4
|
||||
);
|
||||
break;
|
||||
case warp:
|
||||
ScreenTextEntry::TextEntry(
|
||||
SM_BackFromWarpChange,
|
||||
ENTER_WARP_VALUE,
|
||||
ssprintf( "%.4f", m_pSong->m_Timing.GetWarpAtRow( BeatToNoteRow(GAMESTATE->m_fSongBeat) ) ),
|
||||
10
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+39
-7
@@ -68,12 +68,27 @@
|
||||
#include "SpecialFiles.h"
|
||||
#include "Profile.h"
|
||||
|
||||
#if defined(WIN32)
|
||||
#if defined(XBOX)
|
||||
#include "Archutils/Xbox/VirtualMemory.h"
|
||||
#endif
|
||||
|
||||
#if defined(WIN32) && !defined(XBOX)
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
// since the XBOX SDK only works with VS.Net 2003, this doesn't exist yet.
|
||||
// see http://old.nabble.com/Linking-Error-with-MSVC%2B%2B-6.0-td21608559.html
|
||||
// for more information. -aj
|
||||
#if defined(XBOX)
|
||||
extern "C"
|
||||
{
|
||||
int _get_output_format( void ){ return 0; }
|
||||
}
|
||||
#endif
|
||||
|
||||
static Preference<bool> g_bAllowMultipleInstances( "AllowMultipleInstances", false );
|
||||
|
||||
|
||||
void StepMania::GetPreferredVideoModeParams( VideoModeParams ¶msOut )
|
||||
{
|
||||
/* We can't rely on there being full-screen video modes that give us square
|
||||
@@ -406,7 +421,7 @@ static void AdjustForChangedSystemCapabilities()
|
||||
}
|
||||
|
||||
#if defined(WIN32)
|
||||
#include "RageDisplay_D3D.h"
|
||||
//#include "RageDisplay_D3D.h"
|
||||
#include "archutils/Win32/VideoDriverInfo.h"
|
||||
#endif
|
||||
|
||||
@@ -454,6 +469,14 @@ struct VideoCardDefaults
|
||||
}
|
||||
} const g_VideoCardDefaults[] =
|
||||
{
|
||||
VideoCardDefaults(
|
||||
"Xbox",
|
||||
"d3d",
|
||||
600,400,
|
||||
32,32,32,
|
||||
2048,
|
||||
true
|
||||
),
|
||||
VideoCardDefaults(
|
||||
"Voodoo *5",
|
||||
"d3d,opengl", // received 3 reports of opengl crashing. -Chris
|
||||
@@ -613,6 +636,8 @@ static RString GetVideoDriverName()
|
||||
{
|
||||
#if defined(_WINDOWS)
|
||||
return GetPrimaryVideoDriverName();
|
||||
#elif defined(_XBOX)
|
||||
return "Xbox";
|
||||
#else
|
||||
return "OpenGL";
|
||||
#endif
|
||||
@@ -737,14 +762,15 @@ RageDisplay *CreateDisplay()
|
||||
if( sRenderer.CompareNoCase("opengl")==0 )
|
||||
{
|
||||
#if defined(SUPPORT_OPENGL)
|
||||
pRet = new RageDisplay_OGL;
|
||||
pRet = new RageDisplay_Legacy;
|
||||
#endif
|
||||
}
|
||||
else if( sRenderer.CompareNoCase("d3d")==0 )
|
||||
{
|
||||
#if defined(SUPPORT_D3D)
|
||||
pRet = new RageDisplay_D3D;
|
||||
#endif
|
||||
// TODO: ANGLE/RageDisplay_Modern
|
||||
//#if defined(SUPPORT_D3D)
|
||||
// pRet = new RageDisplay_D3D;
|
||||
//#endif
|
||||
}
|
||||
else if( sRenderer.CompareNoCase("null")==0 )
|
||||
{
|
||||
@@ -854,8 +880,11 @@ static void MountTreeOfZips( const RString &dir )
|
||||
RString path = dirs.back();
|
||||
dirs.pop_back();
|
||||
|
||||
#if !defined(XBOX)
|
||||
// Xbox doesn't detect directories properly, so we'll ignore this
|
||||
if( !IsADirectory(path) )
|
||||
continue;
|
||||
#endif
|
||||
|
||||
vector<RString> zips;
|
||||
GetDirListing( path + "/*.zip", zips, false, true );
|
||||
@@ -969,6 +998,10 @@ int main(int argc, char* argv[])
|
||||
|
||||
ApplyLogPreferences();
|
||||
|
||||
#if defined(XBOX)
|
||||
vmem_Manager.Init();
|
||||
#endif
|
||||
|
||||
WriteLogHeader();
|
||||
|
||||
// Set up alternative filesystem trees.
|
||||
@@ -1534,4 +1567,3 @@ void HandleInputEvents(float fDeltaTime)
|
||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#import "DisplayResolutions.h"
|
||||
#import "RageUtil.h"
|
||||
#import "RageThreads.h"
|
||||
#import "RageDisplay_OGL_Helpers.h"
|
||||
#import "RageDisplay_Legacy_Helpers.h"
|
||||
#import "arch/ArchHooks/ArchHooks.h"
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
@@ -257,7 +257,7 @@ void RenderTarget_MacOSX::Create( const RenderTargetParam ¶m, int &iTextureW
|
||||
iTextureWidth, iTextureHeight, 0, param.bWithAlpha? GL_RGBA:GL_RGB,
|
||||
GL_UNSIGNED_BYTE, NULL );
|
||||
GLenum error = glGetError();
|
||||
ASSERT_M( error == GL_NO_ERROR, RageDisplay_OGL_Helpers::GLToString(error) );
|
||||
ASSERT_M( error == GL_NO_ERROR, RageDisplay_Legacy_Helpers::GLToString(error) );
|
||||
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
|
||||
@@ -284,7 +284,7 @@ void RenderTarget_MacOSX::FinishRenderingTo()
|
||||
glCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, m_iWidth, m_iHeight );
|
||||
|
||||
GLenum error = glGetError();
|
||||
ASSERT_M( error == GL_NO_ERROR, RageDisplay_OGL_Helpers::GLToString(error) );
|
||||
ASSERT_M( error == GL_NO_ERROR, RageDisplay_Legacy_Helpers::GLToString(error) );
|
||||
|
||||
glBindTexture( GL_TEXTURE_2D, 0 );
|
||||
|
||||
@@ -632,4 +632,3 @@ void LowLevelWindow_MacOSX::BeginConcurrentRendering()
|
||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#include "LocalizedString.h"
|
||||
|
||||
#include "RageDisplay_OGL_Helpers.h"
|
||||
using namespace RageDisplay_OGL_Helpers;
|
||||
using namespace RageDisplay_Legacy_Helpers;
|
||||
using namespace X11Helper;
|
||||
|
||||
#include <stack>
|
||||
|
||||
Reference in New Issue
Block a user