RageDisplay_Legacy style cleanup.
This commit is contained in:
+150
-159
@@ -212,7 +212,7 @@ static void FixLittleEndian()
|
|||||||
{
|
{
|
||||||
#if defined(ENDIAN_LITTLE)
|
#if defined(ENDIAN_LITTLE)
|
||||||
static bool bInitialized = false;
|
static bool bInitialized = false;
|
||||||
if( bInitialized )
|
if (bInitialized)
|
||||||
return;
|
return;
|
||||||
bInitialized = true;
|
bInitialized = true;
|
||||||
|
|
||||||
@@ -222,7 +222,7 @@ static void FixLittleEndian()
|
|||||||
|
|
||||||
/* OpenGL and RageSurface handle byte formats differently; we need
|
/* OpenGL and RageSurface handle byte formats differently; we need
|
||||||
* to flip non-paletted masks to make them line up. */
|
* to flip non-paletted masks to make them line up. */
|
||||||
if( g_GLPixFmtInfo[i].type != GL_UNSIGNED_BYTE || pf.bpp == 8 )
|
if (g_GLPixFmtInfo[i].type != GL_UNSIGNED_BYTE || pf.bpp == 8)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
for( int mask = 0; mask < 4; ++mask)
|
for( int mask = 0; mask < 4; ++mask)
|
||||||
@@ -242,10 +242,10 @@ static void FixLittleEndian()
|
|||||||
|
|
||||||
static void TurnOffHardwareVBO()
|
static void TurnOffHardwareVBO()
|
||||||
{
|
{
|
||||||
if( glBindBufferARB )
|
if (GLEW_ARB_vertex_buffer_object)
|
||||||
{
|
{
|
||||||
glBindBufferARB( GL_ARRAY_BUFFER_ARB, 0 );
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
|
||||||
glBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, 0 );
|
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -265,7 +265,7 @@ RString GetInfoLog( GLhandleARB h )
|
|||||||
{
|
{
|
||||||
GLint iLength;
|
GLint iLength;
|
||||||
glGetObjectParameterivARB( h, GL_OBJECT_INFO_LOG_LENGTH_ARB, &iLength );
|
glGetObjectParameterivARB( h, GL_OBJECT_INFO_LOG_LENGTH_ARB, &iLength );
|
||||||
if( !iLength )
|
if (!iLength)
|
||||||
return RString();
|
return RString();
|
||||||
|
|
||||||
GLcharARB *pInfoLog = new GLcharARB[iLength];
|
GLcharARB *pInfoLog = new GLcharARB[iLength];
|
||||||
@@ -281,13 +281,13 @@ GLhandleARB CompileShader( GLenum ShaderType, RString sFile, vector<RString> asD
|
|||||||
RString sBuffer;
|
RString sBuffer;
|
||||||
{
|
{
|
||||||
RageFile file;
|
RageFile file;
|
||||||
if( !file.Open(sFile) )
|
if (!file.Open(sFile))
|
||||||
{
|
{
|
||||||
LOG->Warn( "Error compiling shader %s: %s", sFile.c_str(), file.GetError().c_str() );
|
LOG->Warn( "Error compiling shader %s: %s", sFile.c_str(), file.GetError().c_str() );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( file.Read(sBuffer, file.GetFileSize()) == -1 )
|
if (file.Read(sBuffer, file.GetFileSize()) == -1)
|
||||||
{
|
{
|
||||||
LOG->Warn( "Error compiling shader %s: %s", sFile.c_str(), file.GetError().c_str() );
|
LOG->Warn( "Error compiling shader %s: %s", sFile.c_str(), file.GetError().c_str() );
|
||||||
return 0;
|
return 0;
|
||||||
@@ -317,14 +317,14 @@ GLhandleARB CompileShader( GLenum ShaderType, RString sFile, vector<RString> asD
|
|||||||
|
|
||||||
GLint bCompileStatus = GL_FALSE;
|
GLint bCompileStatus = GL_FALSE;
|
||||||
glGetObjectParameterivARB( hShader, GL_OBJECT_COMPILE_STATUS_ARB, &bCompileStatus );
|
glGetObjectParameterivARB( hShader, GL_OBJECT_COMPILE_STATUS_ARB, &bCompileStatus );
|
||||||
if( !bCompileStatus )
|
if (!bCompileStatus)
|
||||||
{
|
{
|
||||||
LOG->Warn( "Error compiling shader %s:\n%s", sFile.c_str(), sInfo.c_str() );
|
LOG->Warn( "Error compiling shader %s:\n%s", sFile.c_str(), sInfo.c_str() );
|
||||||
glDeleteObjectARB( hShader );
|
glDeleteObjectARB( hShader );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !sInfo.empty() )
|
if (!sInfo.empty())
|
||||||
LOG->Trace( "Messages compiling shader %s:\n%s", sFile.c_str(), sInfo.c_str() );
|
LOG->Trace( "Messages compiling shader %s:\n%s", sFile.c_str(), sInfo.c_str() );
|
||||||
|
|
||||||
return hShader;
|
return hShader;
|
||||||
@@ -333,26 +333,26 @@ GLhandleARB CompileShader( GLenum ShaderType, RString sFile, vector<RString> asD
|
|||||||
GLhandleARB LoadShader( GLenum ShaderType, RString sFile, vector<RString> asDefines )
|
GLhandleARB LoadShader( GLenum ShaderType, RString sFile, vector<RString> asDefines )
|
||||||
{
|
{
|
||||||
// Don't do anything here if not the hardware/driver can't do it!
|
// Don't do anything here if not the hardware/driver can't do it!
|
||||||
if( !GLEW_ARB_fragment_shader && ShaderType == GL_FRAGMENT_SHADER_ARB )
|
if (!GLEW_ARB_fragment_program && GLEW_ARB_shading_language_100 && ShaderType == GL_FRAGMENT_SHADER_ARB)
|
||||||
return 0;
|
return 0;
|
||||||
if( !GLEW_ARB_vertex_shader && ShaderType == GL_VERTEX_SHADER_ARB )
|
if (!GLEW_ARB_vertex_shader && ShaderType == GL_VERTEX_SHADER_ARB)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
// XXX: dumb, but I don't feel like refactoring ragedisplay for this. -Colby
|
// XXX: dumb, but I don't feel like refactoring ragedisplay for this. -Colby
|
||||||
GLhandleARB secondaryShader = 0;
|
GLhandleARB secondaryShader = 0;
|
||||||
if ( sFile == "Data/Shaders/GLSL/Cel.vert" )
|
if (sFile == "Data/Shaders/GLSL/Cel.vert")
|
||||||
secondaryShader = CompileShader( GL_FRAGMENT_SHADER_ARB, "Data/Shaders/GLSL/Cel.frag", asDefines);
|
secondaryShader = CompileShader( GL_FRAGMENT_SHADER_ARB, "Data/Shaders/GLSL/Cel.frag", asDefines);
|
||||||
else if ( sFile == "Data/Shaders/GLSL/Shell.vert" )
|
else if (sFile == "Data/Shaders/GLSL/Shell.vert")
|
||||||
secondaryShader = CompileShader( GL_FRAGMENT_SHADER_ARB, "Data/Shaders/GLSL/Shell.frag", asDefines);
|
secondaryShader = CompileShader( GL_FRAGMENT_SHADER_ARB, "Data/Shaders/GLSL/Shell.frag", asDefines);
|
||||||
|
|
||||||
GLhandleARB hShader = CompileShader( ShaderType, sFile, asDefines );
|
GLhandleARB hShader = CompileShader( ShaderType, sFile, asDefines );
|
||||||
if( hShader == 0 )
|
if (hShader == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
GLhandleARB hProgram = glCreateProgramObjectARB();
|
GLhandleARB hProgram = glCreateProgramObjectARB();
|
||||||
glAttachObjectARB( hProgram, hShader );
|
glAttachObjectARB( hProgram, hShader );
|
||||||
|
|
||||||
if( secondaryShader )
|
if (secondaryShader)
|
||||||
{
|
{
|
||||||
glAttachObjectARB( hProgram, secondaryShader );
|
glAttachObjectARB( hProgram, secondaryShader );
|
||||||
glDeleteObjectARB( secondaryShader );
|
glDeleteObjectARB( secondaryShader );
|
||||||
@@ -364,7 +364,7 @@ GLhandleARB LoadShader( GLenum ShaderType, RString sFile, vector<RString> asDefi
|
|||||||
GLint bLinkStatus = false;
|
GLint bLinkStatus = false;
|
||||||
glGetObjectParameterivARB( hProgram, GL_OBJECT_LINK_STATUS_ARB, &bLinkStatus );
|
glGetObjectParameterivARB( hProgram, GL_OBJECT_LINK_STATUS_ARB, &bLinkStatus );
|
||||||
|
|
||||||
if( !bLinkStatus )
|
if (!bLinkStatus)
|
||||||
{
|
{
|
||||||
LOG->Warn( "Error linking shader %s: %s", sFile.c_str(), GetInfoLog(hProgram).c_str() );
|
LOG->Warn( "Error linking shader %s: %s", sFile.c_str(), GetInfoLog(hProgram).c_str() );
|
||||||
glDeleteObjectARB( hProgram );
|
glDeleteObjectARB( hProgram );
|
||||||
@@ -411,11 +411,11 @@ void InitShaders()
|
|||||||
g_hYUYV422Shader = LoadShader( GL_FRAGMENT_SHADER_ARB, "Data/Shaders/GLSL/YUYV422.frag", asDefines );
|
g_hYUYV422Shader = LoadShader( GL_FRAGMENT_SHADER_ARB, "Data/Shaders/GLSL/YUYV422.frag", asDefines );
|
||||||
|
|
||||||
// Bind attributes.
|
// Bind attributes.
|
||||||
if( g_bTextureMatrixShader )
|
if (g_bTextureMatrixShader)
|
||||||
{
|
{
|
||||||
FlushGLErrors();
|
FlushGLErrors();
|
||||||
g_iAttribTextureMatrixScale = glGetAttribLocationARB( g_bTextureMatrixShader, "TextureMatrixScale" );
|
g_iAttribTextureMatrixScale = glGetAttribLocationARB( g_bTextureMatrixShader, "TextureMatrixScale" );
|
||||||
if( g_iAttribTextureMatrixScale == -1 )
|
if (g_iAttribTextureMatrixScale == -1)
|
||||||
{
|
{
|
||||||
LOG->Trace( "Scaling shader link failed: couldn't bind attribute \"TextureMatrixScale\"" );
|
LOG->Trace( "Scaling shader link failed: couldn't bind attribute \"TextureMatrixScale\"" );
|
||||||
glDeleteObjectARB( g_bTextureMatrixShader );
|
glDeleteObjectARB( g_bTextureMatrixShader );
|
||||||
@@ -428,7 +428,7 @@ void InitShaders()
|
|||||||
/* Older Catalyst drivers seem to throw GL_INVALID_OPERATION here. */
|
/* Older Catalyst drivers seem to throw GL_INVALID_OPERATION here. */
|
||||||
glVertexAttrib2fARB( g_iAttribTextureMatrixScale, 1, 1 );
|
glVertexAttrib2fARB( g_iAttribTextureMatrixScale, 1, 1 );
|
||||||
GLenum iError = glGetError();
|
GLenum iError = glGetError();
|
||||||
if( iError == GL_INVALID_OPERATION )
|
if (iError == GL_INVALID_OPERATION)
|
||||||
{
|
{
|
||||||
LOG->Trace( "Scaling shader failed: glVertexAttrib2fARB returned GL_INVALID_OPERATION" );
|
LOG->Trace( "Scaling shader failed: glVertexAttrib2fARB returned GL_INVALID_OPERATION" );
|
||||||
glDeleteObjectARB( g_bTextureMatrixShader );
|
glDeleteObjectARB( g_bTextureMatrixShader );
|
||||||
@@ -450,7 +450,7 @@ RString RageDisplay_Legacy::Init( const VideoModeParams &p, bool bAllowUnacceler
|
|||||||
|
|
||||||
bool bIgnore = false;
|
bool bIgnore = false;
|
||||||
RString sError = SetVideoMode( p, bIgnore );
|
RString sError = SetVideoMode( p, bIgnore );
|
||||||
if( sError != "" )
|
if (sError != "")
|
||||||
return sError;
|
return sError;
|
||||||
|
|
||||||
// Log driver details
|
// Log driver details
|
||||||
@@ -479,15 +479,15 @@ RString RageDisplay_Legacy::Init( const VideoModeParams &p, bool bAllowUnacceler
|
|||||||
vector<RString> asBits;
|
vector<RString> asBits;
|
||||||
split( asExtensions[i], "_", asBits );
|
split( asExtensions[i], "_", asBits );
|
||||||
RString sThisType;
|
RString sThisType;
|
||||||
if( asBits.size() > 2 )
|
if (asBits.size() > 2)
|
||||||
sThisType = join( "_", asBits.begin(), asBits.begin()+2 );
|
sThisType = join( "_", asBits.begin(), asBits.begin()+2 );
|
||||||
if( i > iNextToPrint && sThisType != sType )
|
if (i > iNextToPrint && sThisType != sType)
|
||||||
break;
|
break;
|
||||||
sType = sThisType;
|
sType = sThisType;
|
||||||
iLastToPrint = i;
|
iLastToPrint = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( iNextToPrint == iLastToPrint )
|
if (iNextToPrint == iLastToPrint)
|
||||||
{
|
{
|
||||||
LOG->Info( " %s", asExtensions[iNextToPrint].c_str() );
|
LOG->Info( " %s", asExtensions[iNextToPrint].c_str() );
|
||||||
++iNextToPrint;
|
++iNextToPrint;
|
||||||
@@ -501,9 +501,9 @@ RString RageDisplay_Legacy::Init( const VideoModeParams &p, bool bAllowUnacceler
|
|||||||
split( asExtensions[iNextToPrint], "_", asBits );
|
split( asExtensions[iNextToPrint], "_", asBits );
|
||||||
RString sShortExt = join( "_", asBits.begin()+2, asBits.end() );
|
RString sShortExt = join( "_", asBits.begin()+2, asBits.end() );
|
||||||
sList += sShortExt;
|
sList += sShortExt;
|
||||||
if( iNextToPrint < iLastToPrint )
|
if (iNextToPrint < iLastToPrint)
|
||||||
sList += ", ";
|
sList += ", ";
|
||||||
if( iNextToPrint == iLastToPrint || sList.size() + asExtensions[iNextToPrint+1].size() > 120 )
|
if (iNextToPrint == iLastToPrint || sList.size() + asExtensions[iNextToPrint+1].size() > 120)
|
||||||
{
|
{
|
||||||
LOG->Info( "%s", sList.c_str() );
|
LOG->Info( "%s", sList.c_str() );
|
||||||
sList = " ";
|
sList = " ";
|
||||||
@@ -513,9 +513,9 @@ RString RageDisplay_Legacy::Init( const VideoModeParams &p, bool bAllowUnacceler
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( g_pWind->IsSoftwareRenderer(sError) )
|
if (g_pWind->IsSoftwareRenderer(sError))
|
||||||
{
|
{
|
||||||
if( !bAllowUnacceleratedRenderer )
|
if (!bAllowUnacceleratedRenderer)
|
||||||
return sError + " " + OBTAIN_AN_UPDATED_VIDEO_DRIVER.GetValue() + "\n\n";
|
return sError + " " + OBTAIN_AN_UPDATED_VIDEO_DRIVER.GetValue() + "\n\n";
|
||||||
LOG->Warn( "Low-performance OpenGL renderer: %s", sError.c_str() );
|
LOG->Warn( "Low-performance OpenGL renderer: %s", sError.c_str() );
|
||||||
}
|
}
|
||||||
@@ -525,7 +525,7 @@ RString RageDisplay_Legacy::Init( const VideoModeParams &p, bool bAllowUnacceler
|
|||||||
* any case GLDirect can successfully render us, we should be able to do so
|
* any case GLDirect can successfully render us, we should be able to do so
|
||||||
* too using Direct3D directly. (If we can't, it's a bug that we can work
|
* too using Direct3D directly. (If we can't, it's a bug that we can work
|
||||||
* around--if GLDirect can do it, so can we!) */
|
* around--if GLDirect can do it, so can we!) */
|
||||||
if( !strncmp( (const char *) glGetString(GL_RENDERER), "GLDirect", 8 ) )
|
if (!strncmp( (const char *) glGetString(GL_RENDERER), "GLDirect", 8 ))
|
||||||
return GLDIRECT_IS_NOT_COMPATIBLE.GetValue() + "\n";
|
return GLDIRECT_IS_NOT_COMPATIBLE.GetValue() + "\n";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -553,24 +553,12 @@ static void CheckPalettedTextures()
|
|||||||
RString sError;
|
RString sError;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if(!GLEW_EXT_paletted_texture)
|
if (!GLEW_EXT_paletted_texture)
|
||||||
{
|
{
|
||||||
sError = "GL_EXT_paletted_texture missing";
|
sError = "GL_EXT_paletted_texture missing";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( glColorTableEXT == NULL )
|
|
||||||
{
|
|
||||||
sError = "glColorTableEXT missing";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( glGetColorTableParameterivEXT == NULL )
|
|
||||||
{
|
|
||||||
sError = "glGetColorTableParameterivEXT missing";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check to see if paletted textures really work. */
|
/* Check to see if paletted textures really work. */
|
||||||
GLenum glTexFormat = g_GLPixFmtInfo[PixelFormat_PAL].internalfmt;
|
GLenum glTexFormat = g_GLPixFmtInfo[PixelFormat_PAL].internalfmt;
|
||||||
GLenum glImageFormat = g_GLPixFmtInfo[PixelFormat_PAL].format;
|
GLenum glImageFormat = g_GLPixFmtInfo[PixelFormat_PAL].format;
|
||||||
@@ -582,7 +570,7 @@ static void CheckPalettedTextures()
|
|||||||
#define GL_CHECK_ERROR(f) \
|
#define GL_CHECK_ERROR(f) \
|
||||||
{ \
|
{ \
|
||||||
GLenum glError = glGetError(); \
|
GLenum glError = glGetError(); \
|
||||||
if( glError != GL_NO_ERROR ) { \
|
if (glError != GL_NO_ERROR) { \
|
||||||
sError = ssprintf(f " failed (%s)", GLToString(glError).c_str() ); \
|
sError = ssprintf(f " failed (%s)", GLToString(glError).c_str() ); \
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
@@ -597,7 +585,7 @@ static void CheckPalettedTextures()
|
|||||||
GLuint iFormat = 0;
|
GLuint iFormat = 0;
|
||||||
glGetTexLevelParameteriv( GL_PROXY_TEXTURE_2D, 0, GLenum(GL_TEXTURE_INTERNAL_FORMAT), (GLint *) &iFormat );
|
glGetTexLevelParameteriv( GL_PROXY_TEXTURE_2D, 0, GLenum(GL_TEXTURE_INTERNAL_FORMAT), (GLint *) &iFormat );
|
||||||
GL_CHECK_ERROR( "glGetTexLevelParameteriv(GL_TEXTURE_INTERNAL_FORMAT)" );
|
GL_CHECK_ERROR( "glGetTexLevelParameteriv(GL_TEXTURE_INTERNAL_FORMAT)" );
|
||||||
if( iFormat != glTexFormat )
|
if (iFormat != glTexFormat)
|
||||||
{
|
{
|
||||||
sError = ssprintf( "Expected format %s, got %s instead",
|
sError = ssprintf( "Expected format %s, got %s instead",
|
||||||
GLToString(glTexFormat).c_str(), GLToString(iFormat).c_str() );
|
GLToString(glTexFormat).c_str(), GLToString(iFormat).c_str() );
|
||||||
@@ -612,7 +600,7 @@ static void CheckPalettedTextures()
|
|||||||
GLint iSize = 0;
|
GLint iSize = 0;
|
||||||
glGetTexLevelParameteriv( GL_PROXY_TEXTURE_2D, 0, GLenum(GL_TEXTURE_INDEX_SIZE_EXT), &iSize );
|
glGetTexLevelParameteriv( GL_PROXY_TEXTURE_2D, 0, GLenum(GL_TEXTURE_INDEX_SIZE_EXT), &iSize );
|
||||||
GL_CHECK_ERROR( "glGetTexLevelParameteriv(GL_TEXTURE_INDEX_SIZE_EXT)" );
|
GL_CHECK_ERROR( "glGetTexLevelParameteriv(GL_TEXTURE_INDEX_SIZE_EXT)" );
|
||||||
if( iBits > iSize || iSize > 8 )
|
if (iBits > iSize || iSize > 8)
|
||||||
{
|
{
|
||||||
sError = ssprintf( "Expected %i-bit palette, got a %i-bit one instead", iBits, int(iSize) );
|
sError = ssprintf( "Expected %i-bit palette, got a %i-bit one instead", iBits, int(iSize) );
|
||||||
break;
|
break;
|
||||||
@@ -621,7 +609,7 @@ static void CheckPalettedTextures()
|
|||||||
GLint iRealWidth = 0;
|
GLint iRealWidth = 0;
|
||||||
glGetColorTableParameterivEXT( GL_PROXY_TEXTURE_2D, GL_COLOR_TABLE_WIDTH, &iRealWidth );
|
glGetColorTableParameterivEXT( GL_PROXY_TEXTURE_2D, GL_COLOR_TABLE_WIDTH, &iRealWidth );
|
||||||
GL_CHECK_ERROR( "glGetColorTableParameterivEXT(GL_COLOR_TABLE_WIDTH)" );
|
GL_CHECK_ERROR( "glGetColorTableParameterivEXT(GL_COLOR_TABLE_WIDTH)" );
|
||||||
if( iRealWidth != 1 << iBits )
|
if (iRealWidth != 1 << iBits)
|
||||||
{
|
{
|
||||||
sError = ssprintf( "GL_COLOR_TABLE_WIDTH returned %i instead of %i", int(iRealWidth), 1 << iBits );
|
sError = ssprintf( "GL_COLOR_TABLE_WIDTH returned %i instead of %i", int(iRealWidth), 1 << iBits );
|
||||||
break;
|
break;
|
||||||
@@ -630,7 +618,7 @@ static void CheckPalettedTextures()
|
|||||||
GLint iRealFormat = 0;
|
GLint iRealFormat = 0;
|
||||||
glGetColorTableParameterivEXT( GL_PROXY_TEXTURE_2D, GL_COLOR_TABLE_FORMAT, &iRealFormat );
|
glGetColorTableParameterivEXT( GL_PROXY_TEXTURE_2D, GL_COLOR_TABLE_FORMAT, &iRealFormat );
|
||||||
GL_CHECK_ERROR( "glGetColorTableParameterivEXT(GL_COLOR_TABLE_FORMAT)" );
|
GL_CHECK_ERROR( "glGetColorTableParameterivEXT(GL_COLOR_TABLE_FORMAT)" );
|
||||||
if( iRealFormat != GL_RGBA8 )
|
if (iRealFormat != GL_RGBA8)
|
||||||
{
|
{
|
||||||
sError = ssprintf( "GL_COLOR_TABLE_FORMAT returned %s instead of GL_RGBA8", GLToString(iRealFormat).c_str() );
|
sError = ssprintf( "GL_COLOR_TABLE_FORMAT returned %s instead of GL_RGBA8", GLToString(iRealFormat).c_str() );
|
||||||
break;
|
break;
|
||||||
@@ -638,7 +626,7 @@ static void CheckPalettedTextures()
|
|||||||
} while(0);
|
} while(0);
|
||||||
#undef GL_CHECK_ERROR
|
#undef GL_CHECK_ERROR
|
||||||
|
|
||||||
if( sError == "" )
|
if (sError == "")
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* If 8-bit palettes don't work, disable them entirely--don't trust 4-bit
|
/* If 8-bit palettes don't work, disable them entirely--don't trust 4-bit
|
||||||
@@ -658,7 +646,7 @@ static void CheckReversePackedPixels()
|
|||||||
GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, NULL );
|
GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, NULL );
|
||||||
|
|
||||||
const GLenum glError = glGetError();
|
const GLenum glError = glGetError();
|
||||||
if( glError == GL_NO_ERROR )
|
if (glError == GL_NO_ERROR)
|
||||||
{
|
{
|
||||||
g_bReversePackedPixelsWorks = true;
|
g_bReversePackedPixelsWorks = true;
|
||||||
}
|
}
|
||||||
@@ -681,7 +669,7 @@ void SetupExtensions()
|
|||||||
glewInit();
|
glewInit();
|
||||||
|
|
||||||
g_iMaxTextureUnits = 1;
|
g_iMaxTextureUnits = 1;
|
||||||
if( glActiveTextureARB != NULL )
|
if (GLEW_ARB_multitexture)
|
||||||
glGetIntegerv( GL_MAX_TEXTURE_UNITS_ARB, (GLint *) &g_iMaxTextureUnits );
|
glGetIntegerv( GL_MAX_TEXTURE_UNITS_ARB, (GLint *) &g_iMaxTextureUnits );
|
||||||
|
|
||||||
CheckPalettedTextures();
|
CheckPalettedTextures();
|
||||||
@@ -690,7 +678,7 @@ void SetupExtensions()
|
|||||||
{
|
{
|
||||||
GLint iMaxTableSize = 0;
|
GLint iMaxTableSize = 0;
|
||||||
glGetIntegerv( GL_MAX_PIXEL_MAP_TABLE, &iMaxTableSize );
|
glGetIntegerv( GL_MAX_PIXEL_MAP_TABLE, &iMaxTableSize );
|
||||||
if( iMaxTableSize < 256 )
|
if (iMaxTableSize < 256)
|
||||||
{
|
{
|
||||||
/* The minimum GL_MAX_PIXEL_MAP_TABLE is 32; if it's not at least 256,
|
/* The minimum GL_MAX_PIXEL_MAP_TABLE is 32; if it's not at least 256,
|
||||||
* we can't fit a palette in it, so we can't send paletted data as input
|
* we can't fit a palette in it, so we can't send paletted data as input
|
||||||
@@ -710,7 +698,7 @@ void RageDisplay_Legacy::ResolutionChanged()
|
|||||||
//LOG->Warn( "RageDisplay_Legacy::ResolutionChanged" );
|
//LOG->Warn( "RageDisplay_Legacy::ResolutionChanged" );
|
||||||
|
|
||||||
/* Clear any junk that's in the framebuffer. */
|
/* Clear any junk that's in the framebuffer. */
|
||||||
if( BeginFrame() )
|
if (BeginFrame())
|
||||||
EndFrame();
|
EndFrame();
|
||||||
|
|
||||||
RageDisplay::ResolutionChanged();
|
RageDisplay::ResolutionChanged();
|
||||||
@@ -725,18 +713,18 @@ RString RageDisplay_Legacy::TryVideoMode( const VideoModeParams &p, bool &bNewDe
|
|||||||
|
|
||||||
RString err;
|
RString err;
|
||||||
err = g_pWind->TryVideoMode( p, bNewDeviceOut );
|
err = g_pWind->TryVideoMode( p, bNewDeviceOut );
|
||||||
if( err != "" )
|
if (err != "")
|
||||||
return err; // failed to set video mode
|
return err; // failed to set video mode
|
||||||
|
|
||||||
/* Now that we've initialized, we can search for extensions. Do this before InvalidateObjects,
|
/* Now that we've initialized, we can search for extensions. Do this before InvalidateObjects,
|
||||||
* since AllocateBuffers needs it. */
|
* since AllocateBuffers needs it. */
|
||||||
SetupExtensions();
|
SetupExtensions();
|
||||||
|
|
||||||
if( bNewDeviceOut )
|
if (bNewDeviceOut)
|
||||||
{
|
{
|
||||||
/* We have a new OpenGL context, so we have to tell our textures that
|
/* We have a new OpenGL context, so we have to tell our textures that
|
||||||
* their OpenGL texture number is invalid. */
|
* their OpenGL texture number is invalid. */
|
||||||
if( TEXTUREMAN )
|
if (TEXTUREMAN)
|
||||||
TEXTUREMAN->InvalidateTextures();
|
TEXTUREMAN->InvalidateTextures();
|
||||||
|
|
||||||
/* Delete all render targets. They may have associated resources other than
|
/* Delete all render targets. They may have associated resources other than
|
||||||
@@ -755,7 +743,7 @@ RString RageDisplay_Legacy::TryVideoMode( const VideoModeParams &p, bool &bNewDe
|
|||||||
#if defined(WINDOWS)
|
#if defined(WINDOWS)
|
||||||
/* Set vsync the Windows way, if we can. (What other extensions are there
|
/* Set vsync the Windows way, if we can. (What other extensions are there
|
||||||
* to do this, for other archs?) */
|
* to do this, for other archs?) */
|
||||||
if( GLEW_WGL_EXT_swap_control )
|
if (GLEW_WGL_EXT_swap_control)
|
||||||
wglSwapIntervalEXT(p.vsync);
|
wglSwapIntervalEXT(p.vsync);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -825,7 +813,7 @@ RageSurface* RageDisplay_Legacy::CreateScreenshot()
|
|||||||
|
|
||||||
RageSurface *RageDisplay_Legacy::GetTexture( unsigned iTexture )
|
RageSurface *RageDisplay_Legacy::GetTexture( unsigned iTexture )
|
||||||
{
|
{
|
||||||
if( iTexture == 0 )
|
if (iTexture == 0)
|
||||||
return NULL; // XXX
|
return NULL; // XXX
|
||||||
|
|
||||||
FlushGLErrors();
|
FlushGLErrors();
|
||||||
@@ -857,7 +845,7 @@ static void SetupVertices( const RageSpriteVertex v[], int iNumVerts )
|
|||||||
static float *Vertex, *Texture, *Normal;
|
static float *Vertex, *Texture, *Normal;
|
||||||
static GLubyte *Color;
|
static GLubyte *Color;
|
||||||
static int Size = 0;
|
static int Size = 0;
|
||||||
if( iNumVerts > Size )
|
if (iNumVerts > Size)
|
||||||
{
|
{
|
||||||
Size = iNumVerts;
|
Size = iNumVerts;
|
||||||
delete [] Vertex;
|
delete [] Vertex;
|
||||||
@@ -894,7 +882,7 @@ static void SetupVertices( const RageSpriteVertex v[], int iNumVerts )
|
|||||||
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
|
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
|
||||||
glTexCoordPointer( 2, GL_FLOAT, 0, Texture );
|
glTexCoordPointer( 2, GL_FLOAT, 0, Texture );
|
||||||
|
|
||||||
if( glClientActiveTextureARB != NULL )
|
if (GLEW_ARB_multitexture)
|
||||||
{
|
{
|
||||||
glClientActiveTextureARB( GL_TEXTURE1_ARB );
|
glClientActiveTextureARB( GL_TEXTURE1_ARB );
|
||||||
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
|
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
|
||||||
@@ -911,7 +899,7 @@ void RageDisplay_Legacy::SendCurrentMatrices()
|
|||||||
RageMatrix projection;
|
RageMatrix projection;
|
||||||
RageMatrixMultiply( &projection, GetCentering(), GetProjectionTop() );
|
RageMatrixMultiply( &projection, GetCentering(), GetProjectionTop() );
|
||||||
|
|
||||||
if( g_bInvertY )
|
if (g_bInvertY)
|
||||||
{
|
{
|
||||||
RageMatrix flip;
|
RageMatrix flip;
|
||||||
RageMatrixScale( &flip, +1, -1, +1 );
|
RageMatrixScale( &flip, +1, -1, +1 );
|
||||||
@@ -985,7 +973,7 @@ public:
|
|||||||
glEnableClientState(GL_NORMAL_ARRAY);
|
glEnableClientState(GL_NORMAL_ARRAY);
|
||||||
glNormalPointer(GL_FLOAT, 0, &m_vNormal[0]);
|
glNormalPointer(GL_FLOAT, 0, &m_vNormal[0]);
|
||||||
|
|
||||||
if( meshInfo.m_bNeedsTextureMatrixScale )
|
if (meshInfo.m_bNeedsTextureMatrixScale)
|
||||||
{
|
{
|
||||||
// Kill the texture translation.
|
// Kill the texture translation.
|
||||||
// XXX: Change me to scale the translation by the TextureTranslationScale of the first vertex.
|
// XXX: Change me to scale the translation by the TextureTranslationScale of the first vertex.
|
||||||
@@ -1097,31 +1085,31 @@ void RageCompiledGeometryHWOGL::AllocateBuffers()
|
|||||||
{
|
{
|
||||||
DebugFlushGLErrors();
|
DebugFlushGLErrors();
|
||||||
|
|
||||||
if( !m_nPositions )
|
if (!m_nPositions)
|
||||||
{
|
{
|
||||||
glGenBuffersARB( 1, &m_nPositions );
|
glGenBuffersARB( 1, &m_nPositions );
|
||||||
DebugAssertNoGLError();
|
DebugAssertNoGLError();
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !m_nTextureCoords )
|
if (!m_nTextureCoords)
|
||||||
{
|
{
|
||||||
glGenBuffersARB( 1, &m_nTextureCoords );
|
glGenBuffersARB( 1, &m_nTextureCoords );
|
||||||
DebugAssertNoGLError();
|
DebugAssertNoGLError();
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !m_nNormals )
|
if (!m_nNormals)
|
||||||
{
|
{
|
||||||
glGenBuffersARB( 1, &m_nNormals );
|
glGenBuffersARB( 1, &m_nNormals );
|
||||||
DebugAssertNoGLError();
|
DebugAssertNoGLError();
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !m_nTriangles )
|
if (!m_nTriangles)
|
||||||
{
|
{
|
||||||
glGenBuffersARB( 1, &m_nTriangles );
|
glGenBuffersARB( 1, &m_nTriangles );
|
||||||
DebugAssertNoGLError();
|
DebugAssertNoGLError();
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !m_nTextureMatrixScale )
|
if (!m_nTextureMatrixScale)
|
||||||
{
|
{
|
||||||
glGenBuffersARB( 1, &m_nTextureMatrixScale );
|
glGenBuffersARB( 1, &m_nTextureMatrixScale );
|
||||||
DebugAssertNoGLError();
|
DebugAssertNoGLError();
|
||||||
@@ -1132,52 +1120,52 @@ void RageCompiledGeometryHWOGL::UploadData()
|
|||||||
{
|
{
|
||||||
DebugFlushGLErrors();
|
DebugFlushGLErrors();
|
||||||
|
|
||||||
glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nPositions );
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_nPositions);
|
||||||
DebugAssertNoGLError();
|
DebugAssertNoGLError();
|
||||||
glBufferDataARB(
|
glBufferDataARB(
|
||||||
GL_ARRAY_BUFFER_ARB,
|
GL_ARRAY_BUFFER_ARB,
|
||||||
GetTotalVertices()*sizeof(RageVector3),
|
GetTotalVertices()*sizeof(RageVector3),
|
||||||
&m_vPosition[0],
|
&m_vPosition[0],
|
||||||
GL_STATIC_DRAW_ARB );
|
GL_STATIC_DRAW_ARB);
|
||||||
DebugAssertNoGLError();
|
DebugAssertNoGLError();
|
||||||
|
|
||||||
glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nTextureCoords );
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_nTextureCoords);
|
||||||
DebugAssertNoGLError();
|
DebugAssertNoGLError();
|
||||||
glBufferDataARB(
|
glBufferDataARB(
|
||||||
GL_ARRAY_BUFFER_ARB,
|
GL_ARRAY_BUFFER_ARB,
|
||||||
GetTotalVertices()*sizeof(RageVector2),
|
GetTotalVertices()*sizeof(RageVector2),
|
||||||
&m_vTexture[0],
|
&m_vTexture[0],
|
||||||
GL_STATIC_DRAW_ARB );
|
GL_STATIC_DRAW_ARB);
|
||||||
DebugAssertNoGLError();
|
DebugAssertNoGLError();
|
||||||
|
|
||||||
glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nNormals );
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_nNormals);
|
||||||
DebugAssertNoGLError();
|
DebugAssertNoGLError();
|
||||||
glBufferDataARB(
|
glBufferDataARB(
|
||||||
GL_ARRAY_BUFFER_ARB,
|
GL_ARRAY_BUFFER_ARB,
|
||||||
GetTotalVertices()*sizeof(RageVector3),
|
GetTotalVertices()*sizeof(RageVector3),
|
||||||
&m_vNormal[0],
|
&m_vNormal[0],
|
||||||
GL_STATIC_DRAW_ARB );
|
GL_STATIC_DRAW_ARB);
|
||||||
DebugAssertNoGLError();
|
DebugAssertNoGLError();
|
||||||
|
|
||||||
glBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, m_nTriangles );
|
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, m_nTriangles);
|
||||||
DebugAssertNoGLError();
|
DebugAssertNoGLError();
|
||||||
glBufferDataARB(
|
glBufferDataARB(
|
||||||
GL_ELEMENT_ARRAY_BUFFER_ARB,
|
GL_ELEMENT_ARRAY_BUFFER_ARB,
|
||||||
GetTotalTriangles()*sizeof(msTriangle),
|
GetTotalTriangles()*sizeof(msTriangle),
|
||||||
&m_vTriangles[0],
|
&m_vTriangles[0],
|
||||||
GL_STATIC_DRAW_ARB );
|
GL_STATIC_DRAW_ARB);
|
||||||
DebugAssertNoGLError();
|
DebugAssertNoGLError();
|
||||||
|
|
||||||
|
|
||||||
if( m_bAnyNeedsTextureMatrixScale )
|
if (m_bAnyNeedsTextureMatrixScale)
|
||||||
{
|
{
|
||||||
glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nTextureMatrixScale );
|
glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_nTextureMatrixScale);
|
||||||
DebugAssertNoGLError();
|
DebugAssertNoGLError();
|
||||||
glBufferDataARB(
|
glBufferDataARB(
|
||||||
GL_ARRAY_BUFFER_ARB,
|
GL_ARRAY_BUFFER_ARB,
|
||||||
GetTotalVertices()*sizeof(RageVector2),
|
GetTotalVertices()*sizeof(RageVector2),
|
||||||
&m_vTexMatrixScale[0],
|
&m_vTexMatrixScale[0],
|
||||||
GL_STATIC_DRAW_ARB );
|
GL_STATIC_DRAW_ARB);
|
||||||
DebugAssertNoGLError();
|
DebugAssertNoGLError();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1256,7 +1244,7 @@ void RageCompiledGeometryHWOGL::Draw( int iMeshIndex ) const
|
|||||||
DebugFlushGLErrors();
|
DebugFlushGLErrors();
|
||||||
|
|
||||||
const MeshInfo& meshInfo = m_vMeshInfo[iMeshIndex];
|
const MeshInfo& meshInfo = m_vMeshInfo[iMeshIndex];
|
||||||
if( !meshInfo.iVertexCount || !meshInfo.iTriangleCount )
|
if (!meshInfo.iVertexCount || !meshInfo.iTriangleCount)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
glEnableClientState(GL_VERTEX_ARRAY);
|
glEnableClientState(GL_VERTEX_ARRAY);
|
||||||
@@ -1285,7 +1273,8 @@ void RageCompiledGeometryHWOGL::Draw( int iMeshIndex ) const
|
|||||||
glGetBooleanv( GL_TEXTURE_GEN_S, &bTextureGenS );
|
glGetBooleanv( GL_TEXTURE_GEN_S, &bTextureGenS );
|
||||||
GLboolean bTextureGenT;
|
GLboolean bTextureGenT;
|
||||||
glGetBooleanv( GL_TEXTURE_GEN_T, &bTextureGenT );
|
glGetBooleanv( GL_TEXTURE_GEN_T, &bTextureGenT );
|
||||||
if( bLighting || bTextureGenS || bTextureGenT )
|
|
||||||
|
if (bLighting || bTextureGenS || bTextureGenT)
|
||||||
{
|
{
|
||||||
glEnableClientState(GL_NORMAL_ARRAY);
|
glEnableClientState(GL_NORMAL_ARRAY);
|
||||||
DebugAssertNoGLError();
|
DebugAssertNoGLError();
|
||||||
@@ -1300,9 +1289,9 @@ void RageCompiledGeometryHWOGL::Draw( int iMeshIndex ) const
|
|||||||
DebugAssertNoGLError();
|
DebugAssertNoGLError();
|
||||||
}
|
}
|
||||||
|
|
||||||
if( meshInfo.m_bNeedsTextureMatrixScale )
|
if (meshInfo.m_bNeedsTextureMatrixScale)
|
||||||
{
|
{
|
||||||
if( g_bTextureMatrixShader != 0 )
|
if (g_bTextureMatrixShader != 0)
|
||||||
{
|
{
|
||||||
/* If we're using texture matrix scales, set up that buffer, too, and enable the
|
/* If we're using texture matrix scales, set up that buffer, too, and enable the
|
||||||
* vertex shader. This shader doesn't support all OpenGL state, so only enable it
|
* vertex shader. This shader doesn't support all OpenGL state, so only enable it
|
||||||
@@ -1360,7 +1349,7 @@ void RageCompiledGeometryHWOGL::Draw( int iMeshIndex ) const
|
|||||||
BUFFER_OFFSET(meshInfo.iTriangleStart*sizeof(msTriangle)) );
|
BUFFER_OFFSET(meshInfo.iTriangleStart*sizeof(msTriangle)) );
|
||||||
DebugAssertNoGLError();
|
DebugAssertNoGLError();
|
||||||
|
|
||||||
if( meshInfo.m_bNeedsTextureMatrixScale && g_bTextureMatrixShader != 0 )
|
if (meshInfo.m_bNeedsTextureMatrixScale && g_bTextureMatrixShader != 0)
|
||||||
{
|
{
|
||||||
glDisableVertexAttribArrayARB( g_iAttribTextureMatrixScale );
|
glDisableVertexAttribArrayARB( g_iAttribTextureMatrixScale );
|
||||||
glUseProgramObjectARB( 0 );
|
glUseProgramObjectARB( 0 );
|
||||||
@@ -1369,7 +1358,7 @@ void RageCompiledGeometryHWOGL::Draw( int iMeshIndex ) const
|
|||||||
|
|
||||||
RageCompiledGeometry* RageDisplay_Legacy::CreateCompiledGeometry()
|
RageCompiledGeometry* RageDisplay_Legacy::CreateCompiledGeometry()
|
||||||
{
|
{
|
||||||
if( glGenBuffersARB )
|
if (GLEW_ARB_vertex_buffer_object)
|
||||||
return new RageCompiledGeometryHWOGL;
|
return new RageCompiledGeometryHWOGL;
|
||||||
else
|
else
|
||||||
return new RageCompiledGeometrySWOGL;
|
return new RageCompiledGeometrySWOGL;
|
||||||
@@ -1476,7 +1465,7 @@ void RageDisplay_Legacy::DrawLineStripInternal( const RageSpriteVertex v[], int
|
|||||||
{
|
{
|
||||||
TurnOffHardwareVBO();
|
TurnOffHardwareVBO();
|
||||||
|
|
||||||
if( !GetActualVideoModeParams().bSmoothLines )
|
if (!GetActualVideoModeParams().bSmoothLines)
|
||||||
{
|
{
|
||||||
/* Fall back on the generic polygon-based line strip. */
|
/* Fall back on the generic polygon-based line strip. */
|
||||||
RageDisplay::DrawLineStripInternal(v, iNumVerts, fLineWidth );
|
RageDisplay::DrawLineStripInternal(v, iNumVerts, fLineWidth );
|
||||||
@@ -1535,7 +1524,7 @@ void RageDisplay_Legacy::DrawLineStripInternal( const RageSpriteVertex v[], int
|
|||||||
RageMatrix mat;
|
RageMatrix mat;
|
||||||
glGetFloatv( GL_MODELVIEW_MATRIX, (float*)mat );
|
glGetFloatv( GL_MODELVIEW_MATRIX, (float*)mat );
|
||||||
|
|
||||||
if( mat.m[0][0] < 1e-5 && mat.m[1][1] < 1e-5 )
|
if (mat.m[0][0] < 1e-5 && mat.m[1][1] < 1e-5)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
glEnable( GL_POINT_SMOOTH );
|
glEnable( GL_POINT_SMOOTH );
|
||||||
@@ -1549,10 +1538,10 @@ void RageDisplay_Legacy::DrawLineStripInternal( const RageSpriteVertex v[], int
|
|||||||
static bool SetTextureUnit( TextureUnit tu )
|
static bool SetTextureUnit( TextureUnit tu )
|
||||||
{
|
{
|
||||||
// If multitexture isn't supported, ignore all textures except for 0.
|
// If multitexture isn't supported, ignore all textures except for 0.
|
||||||
if( glActiveTextureARB == NULL )
|
if (GLEW_ARB_multitexture)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if( (int) tu > g_iMaxTextureUnits )
|
if ((int) tu > g_iMaxTextureUnits)
|
||||||
return false;
|
return false;
|
||||||
glActiveTextureARB( enum_add2(GL_TEXTURE0_ARB, tu) );
|
glActiveTextureARB( enum_add2(GL_TEXTURE0_ARB, tu) );
|
||||||
return true;
|
return true;
|
||||||
@@ -1565,13 +1554,13 @@ void RageDisplay_Legacy::ClearAllTextures()
|
|||||||
|
|
||||||
// HACK: Reset the active texture to 0.
|
// HACK: Reset the active texture to 0.
|
||||||
// TODO: Change all texture functions to take a stage number.
|
// TODO: Change all texture functions to take a stage number.
|
||||||
if( glActiveTextureARB )
|
if (glActiveTextureARB)
|
||||||
glActiveTextureARB(GL_TEXTURE0_ARB);
|
glActiveTextureARB(GL_TEXTURE0_ARB);
|
||||||
}
|
}
|
||||||
|
|
||||||
int RageDisplay_Legacy::GetNumTextureUnits()
|
int RageDisplay_Legacy::GetNumTextureUnits()
|
||||||
{
|
{
|
||||||
if( glActiveTextureARB == NULL )
|
if (GLEW_ARB_multitexture)
|
||||||
return 1;
|
return 1;
|
||||||
else
|
else
|
||||||
return g_iMaxTextureUnits;
|
return g_iMaxTextureUnits;
|
||||||
@@ -1579,10 +1568,10 @@ int RageDisplay_Legacy::GetNumTextureUnits()
|
|||||||
|
|
||||||
void RageDisplay_Legacy::SetTexture( TextureUnit tu, unsigned iTexture )
|
void RageDisplay_Legacy::SetTexture( TextureUnit tu, unsigned iTexture )
|
||||||
{
|
{
|
||||||
if( !SetTextureUnit( tu ) )
|
if (!SetTextureUnit( tu ))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if( iTexture )
|
if (iTexture)
|
||||||
{
|
{
|
||||||
glEnable( GL_TEXTURE_2D );
|
glEnable( GL_TEXTURE_2D );
|
||||||
glBindTexture( GL_TEXTURE_2D, iTexture );
|
glBindTexture( GL_TEXTURE_2D, iTexture );
|
||||||
@@ -1595,7 +1584,7 @@ void RageDisplay_Legacy::SetTexture( TextureUnit tu, unsigned iTexture )
|
|||||||
|
|
||||||
void RageDisplay_Legacy::SetTextureMode( TextureUnit tu, TextureMode tm )
|
void RageDisplay_Legacy::SetTextureMode( TextureUnit tu, TextureMode tm )
|
||||||
{
|
{
|
||||||
if( !SetTextureUnit( tu ) )
|
if (!SetTextureUnit( tu ))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch( tm )
|
switch( tm )
|
||||||
@@ -1608,7 +1597,7 @@ void RageDisplay_Legacy::SetTextureMode( TextureUnit tu, TextureMode tm )
|
|||||||
break;
|
break;
|
||||||
case TextureMode_Glow:
|
case TextureMode_Glow:
|
||||||
// the below function is glowmode,brighten:
|
// the below function is glowmode,brighten:
|
||||||
if( !GLEW_ARB_texture_env_combine && !GLEW_EXT_texture_env_combine )
|
if (!GLEW_ARB_texture_env_combine && !GLEW_EXT_texture_env_combine)
|
||||||
{
|
{
|
||||||
/* This is changing blend state, instead of texture state, which
|
/* This is changing blend state, instead of texture state, which
|
||||||
* isn't great, but it's better than doing nothing. */
|
* isn't great, but it's better than doing nothing. */
|
||||||
@@ -1637,16 +1626,16 @@ void RageDisplay_Legacy::SetTextureFiltering( TextureUnit tu, bool b )
|
|||||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, b? GL_LINEAR: GL_NEAREST );
|
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, b? GL_LINEAR: GL_NEAREST );
|
||||||
|
|
||||||
GLint iMinFilter;
|
GLint iMinFilter;
|
||||||
if( b )
|
if (b)
|
||||||
{
|
{
|
||||||
GLint iWidth1 = -1;
|
GLint iWidth1 = -1;
|
||||||
GLint iWidth2 = -1;
|
GLint iWidth2 = -1;
|
||||||
glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &iWidth1 );
|
glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &iWidth1 );
|
||||||
glGetTexLevelParameteriv( GL_TEXTURE_2D, 1, GL_TEXTURE_WIDTH, &iWidth2 );
|
glGetTexLevelParameteriv( GL_TEXTURE_2D, 1, GL_TEXTURE_WIDTH, &iWidth2 );
|
||||||
if( iWidth1 > 1 && iWidth2 != 0 )
|
if (iWidth1 > 1 && iWidth2 != 0)
|
||||||
{
|
{
|
||||||
/* Mipmaps are enabled. */
|
/* Mipmaps are enabled. */
|
||||||
if( g_pWind->GetActualVideoModeParams().bTrilinearFiltering )
|
if (g_pWind->GetActualVideoModeParams().bTrilinearFiltering)
|
||||||
iMinFilter = GL_LINEAR_MIPMAP_LINEAR;
|
iMinFilter = GL_LINEAR_MIPMAP_LINEAR;
|
||||||
else
|
else
|
||||||
iMinFilter = GL_LINEAR_MIPMAP_NEAREST;
|
iMinFilter = GL_LINEAR_MIPMAP_NEAREST;
|
||||||
@@ -1666,11 +1655,11 @@ void RageDisplay_Legacy::SetTextureFiltering( TextureUnit tu, bool b )
|
|||||||
|
|
||||||
void RageDisplay_Legacy::SetEffectMode( EffectMode effect )
|
void RageDisplay_Legacy::SetEffectMode( EffectMode effect )
|
||||||
{
|
{
|
||||||
if( glUseProgramObjectARB == NULL )
|
if (!GLEW_ARB_fragment_program && !GLEW_ARB_shading_language_100)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
GLhandleARB hShader = 0;
|
GLhandleARB hShader = 0;
|
||||||
switch( effect )
|
switch (effect)
|
||||||
{
|
{
|
||||||
case EffectMode_Normal: hShader = 0; break;
|
case EffectMode_Normal: hShader = 0; break;
|
||||||
case EffectMode_Unpremultiply: hShader = g_bUnpremultiplyShader; break;
|
case EffectMode_Unpremultiply: hShader = g_bUnpremultiplyShader; break;
|
||||||
@@ -1685,14 +1674,14 @@ void RageDisplay_Legacy::SetEffectMode( EffectMode effect )
|
|||||||
|
|
||||||
DebugFlushGLErrors();
|
DebugFlushGLErrors();
|
||||||
glUseProgramObjectARB( hShader );
|
glUseProgramObjectARB( hShader );
|
||||||
if( hShader == 0 )
|
if (hShader == 0)
|
||||||
return;
|
return;
|
||||||
GLint iTexture1 = glGetUniformLocationARB( hShader, "Texture1" );
|
GLint iTexture1 = glGetUniformLocationARB( hShader, "Texture1" );
|
||||||
GLint iTexture2 = glGetUniformLocationARB( hShader, "Texture2" );
|
GLint iTexture2 = glGetUniformLocationARB( hShader, "Texture2" );
|
||||||
glUniform1iARB( iTexture1, 0 );
|
glUniform1iARB( iTexture1, 0 );
|
||||||
glUniform1iARB( iTexture2, 1 );
|
glUniform1iARB( iTexture2, 1 );
|
||||||
|
|
||||||
if( effect == EffectMode_YUYV422 )
|
if (effect == EffectMode_YUYV422)
|
||||||
{
|
{
|
||||||
GLint iTextureWidthUniform = glGetUniformLocationARB( hShader, "TextureWidth" );
|
GLint iTextureWidthUniform = glGetUniformLocationARB( hShader, "TextureWidth" );
|
||||||
GLint iWidth;
|
GLint iWidth;
|
||||||
@@ -1725,11 +1714,11 @@ void RageDisplay_Legacy::SetBlendMode( BlendMode mode )
|
|||||||
{
|
{
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
|
|
||||||
if( glBlendEquation != NULL )
|
if (glBlendEquation != NULL)
|
||||||
{
|
{
|
||||||
if( mode == BLEND_INVERT_DEST )
|
if (mode == BLEND_INVERT_DEST)
|
||||||
glBlendEquation( GL_FUNC_SUBTRACT );
|
glBlendEquation( GL_FUNC_SUBTRACT );
|
||||||
else if( mode == BLEND_SUBTRACT )
|
else if (mode == BLEND_SUBTRACT)
|
||||||
glBlendEquation( GL_FUNC_REVERSE_SUBTRACT );
|
glBlendEquation( GL_FUNC_REVERSE_SUBTRACT );
|
||||||
else
|
else
|
||||||
glBlendEquation( GL_FUNC_ADD );
|
glBlendEquation( GL_FUNC_ADD );
|
||||||
@@ -1782,7 +1771,7 @@ void RageDisplay_Legacy::SetBlendMode( BlendMode mode )
|
|||||||
DEFAULT_FAIL( mode );
|
DEFAULT_FAIL( mode );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( glBlendFuncSeparateEXT != NULL )
|
if (GLEW_EXT_blend_equation_separate)
|
||||||
glBlendFuncSeparateEXT( iSourceRGB, iDestRGB, iSourceAlpha, iDestAlpha );
|
glBlendFuncSeparateEXT( iSourceRGB, iDestRGB, iSourceAlpha, iDestAlpha );
|
||||||
else
|
else
|
||||||
glBlendFunc( iSourceRGB, iDestRGB );
|
glBlendFunc( iSourceRGB, iDestRGB );
|
||||||
@@ -1863,7 +1852,7 @@ void RageDisplay_Legacy::SetMaterial(
|
|||||||
GLboolean bLighting;
|
GLboolean bLighting;
|
||||||
glGetBooleanv( GL_LIGHTING, &bLighting );
|
glGetBooleanv( GL_LIGHTING, &bLighting );
|
||||||
|
|
||||||
if( bLighting )
|
if (bLighting)
|
||||||
{
|
{
|
||||||
glMaterialfv( GL_FRONT, GL_EMISSION, emissive );
|
glMaterialfv( GL_FRONT, GL_EMISSION, emissive );
|
||||||
glMaterialfv( GL_FRONT, GL_AMBIENT, ambient );
|
glMaterialfv( GL_FRONT, GL_AMBIENT, ambient );
|
||||||
@@ -1883,8 +1872,10 @@ void RageDisplay_Legacy::SetMaterial(
|
|||||||
|
|
||||||
void RageDisplay_Legacy::SetLighting( bool b )
|
void RageDisplay_Legacy::SetLighting( bool b )
|
||||||
{
|
{
|
||||||
if( b ) glEnable( GL_LIGHTING );
|
if (b)
|
||||||
else glDisable( GL_LIGHTING );
|
glEnable(GL_LIGHTING);
|
||||||
|
else
|
||||||
|
glDisable(GL_LIGHTING);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RageDisplay_Legacy::SetLightOff( int index )
|
void RageDisplay_Legacy::SetLightOff( int index )
|
||||||
@@ -1968,10 +1959,10 @@ void RageDisplay_Legacy::EndConcurrentRendering()
|
|||||||
|
|
||||||
void RageDisplay_Legacy::DeleteTexture( unsigned iTexture )
|
void RageDisplay_Legacy::DeleteTexture( unsigned iTexture )
|
||||||
{
|
{
|
||||||
if( iTexture == 0 )
|
if (iTexture == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if( g_mapRenderTargets.find(iTexture) != g_mapRenderTargets.end() )
|
if (g_mapRenderTargets.find(iTexture) != g_mapRenderTargets.end())
|
||||||
{
|
{
|
||||||
delete g_mapRenderTargets[iTexture];
|
delete g_mapRenderTargets[iTexture];
|
||||||
g_mapRenderTargets.erase( iTexture );
|
g_mapRenderTargets.erase( iTexture );
|
||||||
@@ -1991,13 +1982,13 @@ PixelFormat RageDisplay_Legacy::GetImgPixelFormat( RageSurface* &img, bool &bFre
|
|||||||
/* If img is paletted, we're setting up a non-paletted texture, and color indexes
|
/* If img is paletted, we're setting up a non-paletted texture, and color indexes
|
||||||
* are too small, depalettize. */
|
* are too small, depalettize. */
|
||||||
bool bSupported = true;
|
bool bSupported = true;
|
||||||
if( !bPalettedTexture && img->fmt.BytesPerPixel == 1 && !g_bColorIndexTableWorks )
|
if (!bPalettedTexture && img->fmt.BytesPerPixel == 1 && !g_bColorIndexTableWorks)
|
||||||
bSupported = false;
|
bSupported = false;
|
||||||
|
|
||||||
if( pixfmt == PixelFormat_Invalid || !SupportsSurfaceFormat(pixfmt) )
|
if (pixfmt == PixelFormat_Invalid || !SupportsSurfaceFormat(pixfmt))
|
||||||
bSupported = false;
|
bSupported = false;
|
||||||
|
|
||||||
if( !bSupported )
|
if (!bSupported)
|
||||||
{
|
{
|
||||||
/* The source isn't in a supported, known pixel format. We need to convert
|
/* The source isn't in a supported, known pixel format. We need to convert
|
||||||
* it ourself. Just convert it to RGBA8, and let OpenGL convert it back
|
* it ourself. Just convert it to RGBA8, and let OpenGL convert it back
|
||||||
@@ -2025,7 +2016,7 @@ PixelFormat RageDisplay_Legacy::GetImgPixelFormat( RageSurface* &img, bool &bFre
|
|||||||
/* If we're sending a paletted surface to a non-paletted texture, set the palette. */
|
/* If we're sending a paletted surface to a non-paletted texture, set the palette. */
|
||||||
void SetPixelMapForSurface( int glImageFormat, int glTexFormat, const RageSurfacePalette *palette )
|
void SetPixelMapForSurface( int glImageFormat, int glTexFormat, const RageSurfacePalette *palette )
|
||||||
{
|
{
|
||||||
if( glImageFormat != GL_COLOR_INDEX || glTexFormat == GL_COLOR_INDEX8_EXT )
|
if (glImageFormat != GL_COLOR_INDEX || glTexFormat == GL_COLOR_INDEX8_EXT)
|
||||||
{
|
{
|
||||||
glPixelTransferi( GL_MAP_COLOR, false );
|
glPixelTransferi( GL_MAP_COLOR, false );
|
||||||
return;
|
return;
|
||||||
@@ -2075,7 +2066,7 @@ unsigned RageDisplay_Legacy::CreateTexture(
|
|||||||
// HACK: OpenGL 1.2 types aren't available in GLU 1.3. Don't call GLU for mip
|
// HACK: OpenGL 1.2 types aren't available in GLU 1.3. Don't call GLU for mip
|
||||||
// mapping if we're using an OGL 1.2 type and don't have >= GLU 1.3.
|
// mapping if we're using an OGL 1.2 type and don't have >= GLU 1.3.
|
||||||
// http://pyopengl.sourceforge.net/documentation/manual/gluBuild2DMipmaps.3G.html
|
// http://pyopengl.sourceforge.net/documentation/manual/gluBuild2DMipmaps.3G.html
|
||||||
if( bGenerateMipMaps && g_gluVersion < 13 )
|
if (bGenerateMipMaps && g_gluVersion < 13)
|
||||||
{
|
{
|
||||||
switch( pixfmt )
|
switch( pixfmt )
|
||||||
{
|
{
|
||||||
@@ -2102,7 +2093,7 @@ unsigned RageDisplay_Legacy::CreateTexture(
|
|||||||
|
|
||||||
glBindTexture( GL_TEXTURE_2D, iTexHandle );
|
glBindTexture( GL_TEXTURE_2D, iTexHandle );
|
||||||
|
|
||||||
if( g_pWind->GetActualVideoModeParams().bAnisotropicFiltering &&
|
if (g_pWind->GetActualVideoModeParams().bAnisotropicFiltering &&
|
||||||
GLEW_EXT_texture_filter_anisotropic )
|
GLEW_EXT_texture_filter_anisotropic )
|
||||||
{
|
{
|
||||||
GLfloat fLargestSupportedAnisotropy;
|
GLfloat fLargestSupportedAnisotropy;
|
||||||
@@ -2116,7 +2107,7 @@ unsigned RageDisplay_Legacy::CreateTexture(
|
|||||||
glPixelStorei( GL_UNPACK_ROW_LENGTH, pImg->pitch / pImg->format->BytesPerPixel );
|
glPixelStorei( GL_UNPACK_ROW_LENGTH, pImg->pitch / pImg->format->BytesPerPixel );
|
||||||
|
|
||||||
|
|
||||||
if( pixfmt == PixelFormat_PAL )
|
if (pixfmt == PixelFormat_PAL)
|
||||||
{
|
{
|
||||||
/* The texture is paletted; set the texture palette. */
|
/* The texture is paletted; set the texture palette. */
|
||||||
GLubyte palette[256*4];
|
GLubyte palette[256*4];
|
||||||
@@ -2148,7 +2139,7 @@ unsigned RageDisplay_Legacy::CreateTexture(
|
|||||||
|
|
||||||
DebugFlushGLErrors();
|
DebugFlushGLErrors();
|
||||||
|
|
||||||
if( bGenerateMipMaps )
|
if (bGenerateMipMaps)
|
||||||
{
|
{
|
||||||
GLenum error = gluBuild2DMipmaps(
|
GLenum error = gluBuild2DMipmaps(
|
||||||
GL_TEXTURE_2D, glTexFormat,
|
GL_TEXTURE_2D, glTexFormat,
|
||||||
@@ -2162,7 +2153,7 @@ unsigned RageDisplay_Legacy::CreateTexture(
|
|||||||
GL_TEXTURE_2D, 0, glTexFormat,
|
GL_TEXTURE_2D, 0, glTexFormat,
|
||||||
power_of_two(pImg->w), power_of_two(pImg->h), 0,
|
power_of_two(pImg->w), power_of_two(pImg->h), 0,
|
||||||
glImageFormat, glImageType, NULL );
|
glImageFormat, glImageType, NULL );
|
||||||
if( pImg->pixels )
|
if (pImg->pixels)
|
||||||
glTexSubImage2D( GL_TEXTURE_2D, 0,
|
glTexSubImage2D( GL_TEXTURE_2D, 0,
|
||||||
0, 0,
|
0, 0,
|
||||||
pImg->w, pImg->h,
|
pImg->w, pImg->h,
|
||||||
@@ -2173,18 +2164,18 @@ unsigned RageDisplay_Legacy::CreateTexture(
|
|||||||
|
|
||||||
|
|
||||||
/* Sanity check: */
|
/* Sanity check: */
|
||||||
if( pixfmt == PixelFormat_PAL )
|
if (pixfmt == PixelFormat_PAL)
|
||||||
{
|
{
|
||||||
GLint iSize = 0;
|
GLint iSize = 0;
|
||||||
glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GLenum(GL_TEXTURE_INDEX_SIZE_EXT), &iSize );
|
glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GLenum(GL_TEXTURE_INDEX_SIZE_EXT), &iSize );
|
||||||
if( iSize != 8 )
|
if (iSize != 8)
|
||||||
RageException::Throw( "Thought paletted textures worked, but they don't." );
|
RageException::Throw( "Thought paletted textures worked, but they don't." );
|
||||||
}
|
}
|
||||||
|
|
||||||
glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
|
glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
|
||||||
glFlush();
|
glFlush();
|
||||||
|
|
||||||
if( bFreeImg )
|
if (bFreeImg)
|
||||||
delete pImg;
|
delete pImg;
|
||||||
return iTexHandle;
|
return iTexHandle;
|
||||||
}
|
}
|
||||||
@@ -2236,7 +2227,7 @@ public:
|
|||||||
|
|
||||||
pSurface->pixels = (uint8_t *) BUFFER_OFFSET(0);
|
pSurface->pixels = (uint8_t *) BUFFER_OFFSET(0);
|
||||||
|
|
||||||
if( bChanged )
|
if (bChanged)
|
||||||
DISPLAY->UpdateTexture( m_iTexHandle, pSurface, 0, 0, pSurface->w, pSurface->h );
|
DISPLAY->UpdateTexture( m_iTexHandle, pSurface, 0, 0, pSurface->w, pSurface->h );
|
||||||
|
|
||||||
pSurface->pixels = NULL;
|
pSurface->pixels = NULL;
|
||||||
@@ -2248,7 +2239,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
void CreateObject()
|
void CreateObject()
|
||||||
{
|
{
|
||||||
if( m_iBuffer != 0 )
|
if (m_iBuffer != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
DebugFlushGLErrors();
|
DebugFlushGLErrors();
|
||||||
@@ -2263,7 +2254,7 @@ private:
|
|||||||
|
|
||||||
RageTextureLock *RageDisplay_Legacy::CreateTextureLock()
|
RageTextureLock *RageDisplay_Legacy::CreateTextureLock()
|
||||||
{
|
{
|
||||||
if( !GLEW_ARB_pixel_buffer_object )
|
if (!GLEW_ARB_pixel_buffer_object)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return new RageTextureLock_OGL;
|
return new RageTextureLock_OGL;
|
||||||
@@ -2286,7 +2277,7 @@ void RageDisplay_Legacy::UpdateTexture(
|
|||||||
|
|
||||||
/* If the image is paletted, but we're not sending it to a paletted image,
|
/* If the image is paletted, but we're not sending it to a paletted image,
|
||||||
* set up glPixelMap. */
|
* set up glPixelMap. */
|
||||||
if( pImg->format->palette )
|
if (pImg->format->palette)
|
||||||
{
|
{
|
||||||
GLenum glTexFormat = 0;
|
GLenum glTexFormat = 0;
|
||||||
glGetTexLevelParameteriv( GL_PROXY_TEXTURE_2D, 0, GLenum(GL_TEXTURE_INTERNAL_FORMAT), (GLint *) &glTexFormat );
|
glGetTexLevelParameteriv( GL_PROXY_TEXTURE_2D, 0, GLenum(GL_TEXTURE_INTERNAL_FORMAT), (GLint *) &glTexFormat );
|
||||||
@@ -2302,7 +2293,7 @@ void RageDisplay_Legacy::UpdateTexture(
|
|||||||
glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
|
glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
|
||||||
glFlush();
|
glFlush();
|
||||||
|
|
||||||
if( bFreeImg )
|
if (bFreeImg)
|
||||||
delete pImg;
|
delete pImg;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2333,11 +2324,11 @@ RenderTarget_FramebufferObject::RenderTarget_FramebufferObject()
|
|||||||
|
|
||||||
RenderTarget_FramebufferObject::~RenderTarget_FramebufferObject()
|
RenderTarget_FramebufferObject::~RenderTarget_FramebufferObject()
|
||||||
{
|
{
|
||||||
if( m_iDepthBufferHandle )
|
if (m_iDepthBufferHandle)
|
||||||
glDeleteRenderbuffersEXT( 1, reinterpret_cast<GLuint*>(&m_iDepthBufferHandle) );
|
glDeleteRenderbuffersEXT( 1, reinterpret_cast<GLuint*>(&m_iDepthBufferHandle) );
|
||||||
if( m_iFrameBufferHandle )
|
if (m_iFrameBufferHandle)
|
||||||
glDeleteFramebuffersEXT( 1, reinterpret_cast<GLuint*>(&m_iFrameBufferHandle) );
|
glDeleteFramebuffersEXT( 1, reinterpret_cast<GLuint*>(&m_iFrameBufferHandle) );
|
||||||
if( m_iTexHandle )
|
if (m_iTexHandle)
|
||||||
glDeleteTextures( 1, reinterpret_cast<GLuint*>(&m_iTexHandle) );
|
glDeleteTextures( 1, reinterpret_cast<GLuint*>(&m_iTexHandle) );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2360,7 +2351,7 @@ void RenderTarget_FramebufferObject::Create( const RenderTargetParam ¶m, int
|
|||||||
glBindTexture( GL_TEXTURE_2D, m_iTexHandle );
|
glBindTexture( GL_TEXTURE_2D, m_iTexHandle );
|
||||||
GLenum internalformat;
|
GLenum internalformat;
|
||||||
GLenum type = param.bWithAlpha? GL_RGBA:GL_RGB;
|
GLenum type = param.bWithAlpha? GL_RGBA:GL_RGB;
|
||||||
if( param.bFloat && GLEW_ARB_texture_float )
|
if (param.bFloat && GLEW_ARB_texture_float)
|
||||||
internalformat = param.bWithAlpha? GL_RGBA16F_ARB:GL_RGB16F_ARB;
|
internalformat = param.bWithAlpha? GL_RGBA16F_ARB:GL_RGB16F_ARB;
|
||||||
else
|
else
|
||||||
internalformat = param.bWithAlpha? GL_RGBA8:GL_RGB8;
|
internalformat = param.bWithAlpha? GL_RGBA8:GL_RGB8;
|
||||||
@@ -2384,7 +2375,7 @@ void RenderTarget_FramebufferObject::Create( const RenderTargetParam ¶m, int
|
|||||||
DebugAssertNoGLError();
|
DebugAssertNoGLError();
|
||||||
|
|
||||||
/* Attach a depth buffer, if requested. */
|
/* Attach a depth buffer, if requested. */
|
||||||
if( param.bWithDepthBuffer )
|
if (param.bWithDepthBuffer)
|
||||||
{
|
{
|
||||||
glGenRenderbuffersEXT( 1, reinterpret_cast<GLuint*>(&m_iDepthBufferHandle) );
|
glGenRenderbuffersEXT( 1, reinterpret_cast<GLuint*>(&m_iDepthBufferHandle) );
|
||||||
ASSERT( m_iDepthBufferHandle );
|
ASSERT( m_iDepthBufferHandle );
|
||||||
@@ -2438,7 +2429,7 @@ bool RageDisplay_Legacy::SupportsRenderToTexture() const
|
|||||||
unsigned RageDisplay_Legacy::CreateRenderTarget( const RenderTargetParam ¶m, int &iTextureWidthOut, int &iTextureHeightOut )
|
unsigned RageDisplay_Legacy::CreateRenderTarget( const RenderTargetParam ¶m, int &iTextureWidthOut, int &iTextureHeightOut )
|
||||||
{
|
{
|
||||||
RenderTarget *pTarget;
|
RenderTarget *pTarget;
|
||||||
if( GLEW_EXT_framebuffer_object )
|
if (GLEW_EXT_framebuffer_object)
|
||||||
pTarget = new RenderTarget_FramebufferObject;
|
pTarget = new RenderTarget_FramebufferObject;
|
||||||
else
|
else
|
||||||
pTarget = g_pWind->CreateRenderTarget();
|
pTarget = g_pWind->CreateRenderTarget();
|
||||||
@@ -2454,7 +2445,7 @@ unsigned RageDisplay_Legacy::CreateRenderTarget( const RenderTargetParam ¶m,
|
|||||||
|
|
||||||
void RageDisplay_Legacy::SetRenderTarget( unsigned iTexture, bool bPreserveTexture )
|
void RageDisplay_Legacy::SetRenderTarget( unsigned iTexture, bool bPreserveTexture )
|
||||||
{
|
{
|
||||||
if( iTexture == 0 )
|
if (iTexture == 0)
|
||||||
{
|
{
|
||||||
g_bInvertY = false;
|
g_bInvertY = false;
|
||||||
glFrontFace( GL_CCW );
|
glFrontFace( GL_CCW );
|
||||||
@@ -2467,30 +2458,30 @@ void RageDisplay_Legacy::SetRenderTarget( unsigned iTexture, bool bPreserveTextu
|
|||||||
int fHeight = g_pWind->GetActualVideoModeParams().height;
|
int fHeight = g_pWind->GetActualVideoModeParams().height;
|
||||||
glViewport( 0, 0, fWidth, fHeight );
|
glViewport( 0, 0, fWidth, fHeight );
|
||||||
|
|
||||||
if( g_pCurrentRenderTarget )
|
if (g_pCurrentRenderTarget)
|
||||||
g_pCurrentRenderTarget->FinishRenderingTo();
|
g_pCurrentRenderTarget->FinishRenderingTo();
|
||||||
g_pCurrentRenderTarget = NULL;
|
g_pCurrentRenderTarget = NULL;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we already had a render target, disable it. */
|
/* If we already had a render target, disable it. */
|
||||||
if( g_pCurrentRenderTarget != NULL )
|
if (g_pCurrentRenderTarget != NULL)
|
||||||
SetRenderTarget( 0, true );
|
SetRenderTarget(0, true);
|
||||||
|
|
||||||
/* Enable the new render target. */
|
/* Enable the new render target. */
|
||||||
ASSERT( g_mapRenderTargets.find(iTexture) != g_mapRenderTargets.end() );
|
ASSERT(g_mapRenderTargets.find(iTexture) != g_mapRenderTargets.end());
|
||||||
RenderTarget *pTarget = g_mapRenderTargets[iTexture];
|
RenderTarget *pTarget = g_mapRenderTargets[iTexture];
|
||||||
pTarget->StartRenderingTo();
|
pTarget->StartRenderingTo();
|
||||||
g_pCurrentRenderTarget = pTarget;
|
g_pCurrentRenderTarget = pTarget;
|
||||||
|
|
||||||
/* Set the viewport to the size of the render target. */
|
/* Set the viewport to the size of the render target. */
|
||||||
glViewport( 0, 0, pTarget->GetParam().iWidth, pTarget->GetParam().iHeight );
|
glViewport(0, 0, pTarget->GetParam().iWidth, pTarget->GetParam().iHeight);
|
||||||
|
|
||||||
/* If this render target implementation flips Y, compensate. Inverting will
|
/* If this render target implementation flips Y, compensate. Inverting will
|
||||||
* switch the winding order. */
|
* switch the winding order. */
|
||||||
g_bInvertY = pTarget->InvertY();
|
g_bInvertY = pTarget->InvertY();
|
||||||
if( g_bInvertY )
|
if (g_bInvertY)
|
||||||
glFrontFace( GL_CW );
|
glFrontFace(GL_CW);
|
||||||
|
|
||||||
/* The render target may be in a different OpenGL context, so re-send
|
/* The render target may be in a different OpenGL context, so re-send
|
||||||
* state. Push matrixes affected by SetDefaultRenderStates. */
|
* state. Push matrixes affected by SetDefaultRenderStates. */
|
||||||
@@ -2499,38 +2490,38 @@ void RageDisplay_Legacy::SetRenderTarget( unsigned iTexture, bool bPreserveTextu
|
|||||||
|
|
||||||
/* Clear the texture, if requested. Always set the associated state, for
|
/* Clear the texture, if requested. Always set the associated state, for
|
||||||
* consistency. */
|
* consistency. */
|
||||||
glClearColor( 0,0,0,0 );
|
glClearColor(0,0,0,0);
|
||||||
SetZWrite( true );
|
SetZWrite(true);
|
||||||
|
|
||||||
/* If bPreserveTexture is false, clear the render target. Only clear the depth
|
/* If bPreserveTexture is false, clear the render target. Only clear the depth
|
||||||
* buffer if the target has one; otherwise we're clearing the real depth buffer. */
|
* buffer if the target has one; otherwise we're clearing the real depth buffer. */
|
||||||
if( !bPreserveTexture )
|
if (!bPreserveTexture)
|
||||||
{
|
{
|
||||||
int iBit = GL_COLOR_BUFFER_BIT;
|
int iBit = GL_COLOR_BUFFER_BIT;
|
||||||
if( pTarget->GetParam().bWithDepthBuffer )
|
if (pTarget->GetParam().bWithDepthBuffer)
|
||||||
iBit |= GL_DEPTH_BUFFER_BIT;
|
iBit |= GL_DEPTH_BUFFER_BIT;
|
||||||
glClear( iBit );
|
glClear(iBit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RageDisplay_Legacy::SetPolygonMode( PolygonMode pm )
|
void RageDisplay_Legacy::SetPolygonMode(PolygonMode pm)
|
||||||
{
|
{
|
||||||
GLenum m;
|
GLenum m;
|
||||||
switch( pm )
|
switch (pm)
|
||||||
{
|
{
|
||||||
case POLYGON_FILL: m = GL_FILL; break;
|
case POLYGON_FILL: m = GL_FILL; break;
|
||||||
case POLYGON_LINE: m = GL_LINE; break;
|
case POLYGON_LINE: m = GL_LINE; break;
|
||||||
default: ASSERT(0); return;
|
default: ASSERT(0); return;
|
||||||
}
|
}
|
||||||
glPolygonMode( GL_FRONT_AND_BACK, m );
|
glPolygonMode(GL_FRONT_AND_BACK, m);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RageDisplay_Legacy::SetLineWidth( float fWidth )
|
void RageDisplay_Legacy::SetLineWidth(float fWidth)
|
||||||
{
|
{
|
||||||
glLineWidth( fWidth );
|
glLineWidth(fWidth);
|
||||||
}
|
}
|
||||||
|
|
||||||
RString RageDisplay_Legacy::GetTextureDiagnostics( unsigned iTexture ) const
|
RString RageDisplay_Legacy::GetTextureDiagnostics(unsigned iTexture) const
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
s << (bGenerateMipMaps? "gluBuild2DMipmaps":"glTexImage2D");
|
s << (bGenerateMipMaps? "gluBuild2DMipmaps":"glTexImage2D");
|
||||||
@@ -2553,7 +2544,7 @@ RString RageDisplay_Legacy::GetTextureDiagnostics( unsigned iTexture ) const
|
|||||||
glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GLenum(GL_TEXTURE_INTERNAL_FORMAT), (GLint *) &iFormat );
|
glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GLenum(GL_TEXTURE_INTERNAL_FORMAT), (GLint *) &iFormat );
|
||||||
|
|
||||||
GL_CHECK_ERROR( "glGetTexLevelParameteriv(GL_TEXTURE_INTERNAL_FORMAT)" );
|
GL_CHECK_ERROR( "glGetTexLevelParameteriv(GL_TEXTURE_INTERNAL_FORMAT)" );
|
||||||
if( iFormat != glTexFormat )
|
if (iFormat != glTexFormat)
|
||||||
{
|
{
|
||||||
sError = ssprintf( "Expected format %s, got %s instead",
|
sError = ssprintf( "Expected format %s, got %s instead",
|
||||||
GLToString(glTexFormat).c_str(), GLToString(iFormat).c_str() );
|
GLToString(glTexFormat).c_str(), GLToString(iFormat).c_str() );
|
||||||
@@ -2571,7 +2562,7 @@ void RageDisplay_Legacy::SetAlphaTest(bool b)
|
|||||||
{
|
{
|
||||||
// Previously this was 0.01, rather than 0x01.
|
// Previously this was 0.01, rather than 0x01.
|
||||||
glAlphaFunc(GL_GREATER, 0.00390625 /* 1/256 */);
|
glAlphaFunc(GL_GREATER, 0.00390625 /* 1/256 */);
|
||||||
if(b)
|
if (b)
|
||||||
glEnable(GL_ALPHA_TEST);
|
glEnable(GL_ALPHA_TEST);
|
||||||
else
|
else
|
||||||
glDisable(GL_ALPHA_TEST);
|
glDisable(GL_ALPHA_TEST);
|
||||||
@@ -2594,7 +2585,7 @@ void RageDisplay_Legacy::SetAlphaTest(bool b)
|
|||||||
*/
|
*/
|
||||||
bool RageDisplay_Legacy::SupportsSurfaceFormat(PixelFormat pixfmt)
|
bool RageDisplay_Legacy::SupportsSurfaceFormat(PixelFormat pixfmt)
|
||||||
{
|
{
|
||||||
switch( g_GLPixFmtInfo[pixfmt].type )
|
switch (g_GLPixFmtInfo[pixfmt].type)
|
||||||
{
|
{
|
||||||
case GL_UNSIGNED_SHORT_1_5_5_5_REV:
|
case GL_UNSIGNED_SHORT_1_5_5_5_REV:
|
||||||
return GLEW_EXT_bgra && g_bReversePackedPixelsWorks;
|
return GLEW_EXT_bgra && g_bReversePackedPixelsWorks;
|
||||||
@@ -2609,10 +2600,10 @@ bool RageDisplay_Legacy::SupportsTextureFormat(PixelFormat pixfmt, bool bRealtim
|
|||||||
/* If we support a pixfmt for texture formats but not for surface formats, then
|
/* If we support a pixfmt for texture formats but not for surface formats, then
|
||||||
* we'll have to convert the texture to a supported surface format before uploading.
|
* we'll have to convert the texture to a supported surface format before uploading.
|
||||||
* This is too slow for dynamic textures. */
|
* This is too slow for dynamic textures. */
|
||||||
if(bRealtime && !SupportsSurfaceFormat(pixfmt))
|
if (bRealtime && !SupportsSurfaceFormat(pixfmt))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
switch(g_GLPixFmtInfo[pixfmt].format)
|
switch (g_GLPixFmtInfo[pixfmt].format)
|
||||||
{
|
{
|
||||||
case GL_COLOR_INDEX:
|
case GL_COLOR_INDEX:
|
||||||
return glColorTableEXT && glGetColorTableParameterivEXT;
|
return glColorTableEXT && glGetColorTableParameterivEXT;
|
||||||
@@ -2633,10 +2624,10 @@ bool RageDisplay_Legacy::SupportsPerVertexMatrixScale()
|
|||||||
|
|
||||||
void RageDisplay_Legacy::SetSphereEnvironmentMapping(TextureUnit tu, bool b)
|
void RageDisplay_Legacy::SetSphereEnvironmentMapping(TextureUnit tu, bool b)
|
||||||
{
|
{
|
||||||
if(!SetTextureUnit(tu))
|
if (!SetTextureUnit(tu))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(b)
|
if (b)
|
||||||
{
|
{
|
||||||
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
|
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
|
||||||
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
|
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
|
||||||
@@ -2654,7 +2645,7 @@ GLint iCelTexture1, iCelTexture2 = 0;
|
|||||||
|
|
||||||
void RageDisplay_Legacy::SetCelShaded( int stage )
|
void RageDisplay_Legacy::SetCelShaded( int stage )
|
||||||
{
|
{
|
||||||
if(!GLEW_ARB_fragment_program && !GL_ARB_shading_language_100)
|
if (!GLEW_ARB_fragment_program && !GL_ARB_shading_language_100)
|
||||||
return; // not supported
|
return; // not supported
|
||||||
|
|
||||||
switch (stage)
|
switch (stage)
|
||||||
|
|||||||
Reference in New Issue
Block a user