Skip to content

Commit

Permalink
Make extension GL_ARB_framebuffer_object mandatory.
Browse files Browse the repository at this point in the history
  • Loading branch information
gimhael committed Mar 5, 2016
1 parent fdd40f0 commit f2229b1
Show file tree
Hide file tree
Showing 10 changed files with 19 additions and 121 deletions.
2 changes: 1 addition & 1 deletion daemon/src/engine/renderer/gl_shader.cpp
Expand Up @@ -484,7 +484,7 @@ std::string GLShaderManager::BuildGPUShaderText( Str::StringRef mainShaderNa
break;
}

if ( r_shadows->integer >= Util::ordinal(shadowingMode_t::SHADOWING_ESM16) && glConfig2.textureFloatAvailable && glConfig2.framebufferObjectAvailable )
if ( r_shadows->integer >= Util::ordinal(shadowingMode_t::SHADOWING_ESM16) && glConfig2.textureFloatAvailable )
{
if ( r_shadows->integer == Util::ordinal(shadowingMode_t::SHADOWING_ESM16) || r_shadows->integer == Util::ordinal(shadowingMode_t::SHADOWING_ESM32) )
{
Expand Down
18 changes: 6 additions & 12 deletions daemon/src/engine/renderer/tr_backend.cpp
Expand Up @@ -796,10 +796,7 @@ static void RB_SetGL2D()
GLimp_LogComment( "--- RB_SetGL2D ---\n" );

// disable offscreen rendering
if ( glConfig2.framebufferObjectAvailable )
{
R_BindNullFBO();
}
R_BindNullFBO();

backEnd.projection2D = true;

Expand Down Expand Up @@ -2080,7 +2077,7 @@ static void RB_RenderInteractionsShadowMapped()
0.5, 0.5, 0.5, 1.0
};

if ( !glConfig2.framebufferObjectAvailable || !glConfig2.textureFloatAvailable )
if ( !glConfig2.textureFloatAvailable )
{
RB_RenderInteractions();
return;
Expand Down Expand Up @@ -2748,7 +2745,7 @@ void RB_RenderBloom()

GLimp_LogComment( "--- RB_RenderBloom ---\n" );

if ( ( backEnd.refdef.rdflags & ( RDF_NOWORLDMODEL | RDF_NOBLOOM ) ) || !r_bloom->integer || backEnd.viewParms.isPortal || !glConfig2.framebufferObjectAvailable )
if ( ( backEnd.refdef.rdflags & ( RDF_NOWORLDMODEL | RDF_NOBLOOM ) ) || !r_bloom->integer || backEnd.viewParms.isPortal )
{
return;
}
Expand Down Expand Up @@ -2870,7 +2867,7 @@ void RB_RenderMotionBlur()

GLimp_LogComment( "--- RB_RenderMotionBlur ---\n" );

if ( ( backEnd.refdef.rdflags & RDF_NOWORLDMODEL ) || backEnd.viewParms.isPortal || !glConfig2.framebufferObjectAvailable )
if ( ( backEnd.refdef.rdflags & RDF_NOWORLDMODEL ) || backEnd.viewParms.isPortal )
{
return;
}
Expand Down Expand Up @@ -2920,7 +2917,7 @@ void RB_RenderSSAO()
return;
}

if ( ( backEnd.refdef.rdflags & RDF_NOWORLDMODEL ) || backEnd.viewParms.isPortal || !glConfig2.framebufferObjectAvailable )
if ( ( backEnd.refdef.rdflags & RDF_NOWORLDMODEL ) || backEnd.viewParms.isPortal )
{
return;
}
Expand Down Expand Up @@ -4421,10 +4418,7 @@ static void RB_RenderView()
}

// disable offscreen rendering
if ( glConfig2.framebufferObjectAvailable )
{
R_BindNullFBO();
}
R_BindNullFBO();

// we will need to change the projection matrix before drawing
// 2D images again
Expand Down
2 changes: 1 addition & 1 deletion daemon/src/engine/renderer/tr_bsp.cpp
Expand Up @@ -4477,7 +4477,7 @@ void R_LoadEntities( lump_t *l )
vec_t rad_y, rad_z;
sscanf( value, "%f %f %f", &light->l.radius, &rad_y, &rad_z );
if( rad_y != light->l.radius || rad_z != light->l.radius )
ri.Printf( PRINT_WARNING, "WARNING: non-spherical light\n" );
Log::Warn( "non-spherical light\n" );
s = &value[ 0 ];
}
// check for light_target
Expand Down
16 changes: 0 additions & 16 deletions daemon/src/engine/renderer/tr_fbo.cpp
Expand Up @@ -402,11 +402,6 @@ void R_InitFBOs()

Log::Debug("------- R_InitFBOs -------" );

if ( !glConfig2.framebufferObjectAvailable )
{
return;
}

tr.numFBOs = 0;

GL_CheckErrors();
Expand Down Expand Up @@ -588,11 +583,6 @@ void R_ShutdownFBOs()

Log::Debug("------- R_ShutdownFBOs -------" );

if ( !glConfig2.framebufferObjectAvailable )
{
return;
}

R_BindNullFBO();

for ( i = 0; i < tr.numFBOs; i++ )
Expand Down Expand Up @@ -634,12 +624,6 @@ void R_FBOList_f()
int i;
FBO_t *fbo;

if ( !glConfig2.framebufferObjectAvailable )
{
Log::Notice("GL_ARB_framebuffer_object is not available." );
return;
}

Log::Notice(" size name" );
Log::Notice("----------------------------------------------------------" );

Expand Down
70 changes: 2 additions & 68 deletions daemon/src/engine/renderer/tr_image.cpp
Expand Up @@ -1430,77 +1430,11 @@ void R_UploadImage( const byte **dataArray, int numLayers, int numMips,

if ( image->filterType == filterType_t::FT_DEFAULT )
{
if ( glConfig.driverType == glDriverType_t::GLDRV_OPENGL3 || glConfig2.framebufferObjectAvailable )
{
if( image->type != GL_TEXTURE_CUBE_MAP || i == 5 ) {
glGenerateMipmap( image->type );
glTexParameteri( image->type, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); // default to trilinear
}
}
else if ( glConfig2.generateMipmapAvailable )
{
glTexParameteri( image->type, GL_GENERATE_MIPMAP_SGIS, GL_TRUE );
if( image->type != GL_TEXTURE_CUBE_MAP || i == 5 ) {
glGenerateMipmap( image->type );
glTexParameteri( image->type, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); // default to trilinear
}
}

if ( glConfig.driverType != glDriverType_t::GLDRV_OPENGL3 && !glConfig2.framebufferObjectAvailable && !glConfig2.generateMipmapAvailable )
{
if ( image->filterType == filterType_t::FT_DEFAULT && !( image->bits & ( IF_DEPTH16 | IF_DEPTH24 | IF_DEPTH32 | IF_PACKED_DEPTH24_STENCIL8 ) ) )
{
int mipLevel;
int mipWidth, mipHeight;

mipLevel = 0;
mipWidth = scaledWidth;
mipHeight = scaledHeight;

while ( mipWidth > 1 || mipHeight > 1 )
{
if ( image->bits & IF_NORMALMAP )
{
R_MipNormalMap( scaledBuffer, mipWidth, mipHeight );
}
else
{
R_MipMap( scaledBuffer, mipWidth, mipHeight );
}

mipWidth >>= 1;
mipHeight >>= 1;

if ( mipWidth < 1 )
{
mipWidth = 1;
}

if ( mipHeight < 1 )
{
mipHeight = 1;
}

mipLevel++;

if ( r_colorMipLevels->integer && !( image->bits & IF_NORMALMAP ) )
{
R_BlendOverTexture( scaledBuffer, mipWidth * mipHeight, mipBlendColors[ mipLevel ] );
}

switch ( image->type )
{
case GL_TEXTURE_CUBE_MAP:
glTexImage2D( target + i, mipLevel, internalFormat, mipWidth, mipHeight, 0, format, GL_UNSIGNED_BYTE,
scaledBuffer );
break;

default:
glTexImage2D( target, mipLevel, internalFormat, mipWidth, mipHeight, 0, format, GL_UNSIGNED_BYTE,
scaledBuffer );
break;
}
}
}
}
}
} else {
// already compressed texture data, precomputed mipmaps must be
Expand Down
18 changes: 5 additions & 13 deletions daemon/src/engine/renderer/tr_init.cpp
Expand Up @@ -100,7 +100,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
cvar_t *r_ext_texture_float;
cvar_t *r_ext_texture_rg;
cvar_t *r_ext_texture_filter_anisotropic;
cvar_t *r_arb_framebuffer_object;
cvar_t *r_ext_packed_depth_stencil;
cvar_t *r_ext_generate_mipmap;
cvar_t *r_arb_buffer_storage;
Expand Down Expand Up @@ -886,12 +885,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
bound.
*/

if ( glConfig2.framebufferObjectAvailable )
{
glBindFramebuffer( GL_FRAMEBUFFER, 0 );
glBindRenderbuffer( GL_RENDERBUFFER, 0 );
glState.currentFBO = nullptr;
}
glBindFramebuffer( GL_FRAMEBUFFER, 0 );
glBindRenderbuffer( GL_RENDERBUFFER, 0 );
glState.currentFBO = nullptr;

GL_PolygonMode( GL_FRONT_AND_BACK, GL_FILL );
GL_DepthMask( GL_TRUE );
Expand Down Expand Up @@ -957,11 +953,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Log::Debug("GL_TEXTURE_MAX_ANISOTROPY_EXT: %f", glConfig2.maxTextureAnisotropy );
}

if ( glConfig2.framebufferObjectAvailable )
{
Log::Debug("GL_MAX_RENDERBUFFER_SIZE: %d", glConfig2.maxRenderbufferSize );
Log::Debug("GL_MAX_COLOR_ATTACHMENTS: %d", glConfig2.maxColorAttachments );
}
Log::Debug("GL_MAX_RENDERBUFFER_SIZE: %d", glConfig2.maxRenderbufferSize );
Log::Debug("GL_MAX_COLOR_ATTACHMENTS: %d", glConfig2.maxColorAttachments );

Log::Debug("\nPIXELFORMAT: color(%d-bits) Z(%d-bit) stencil(%d-bits)", glConfig.colorBits,
glConfig.depthBits, glConfig.stencilBits );
Expand Down Expand Up @@ -1081,7 +1074,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
r_ext_texture_float = ri.Cvar_Get( "r_ext_texture_float", "1", CVAR_CHEAT | CVAR_LATCH );
r_ext_texture_rg = ri.Cvar_Get( "r_ext_texture_rg", "1", CVAR_CHEAT | CVAR_LATCH );
r_ext_texture_filter_anisotropic = ri.Cvar_Get( "r_ext_texture_filter_anisotropic", "4", CVAR_LATCH | CVAR_ARCHIVE );
r_arb_framebuffer_object = ri.Cvar_Get( "r_arb_framebuffer_object", "1", CVAR_LATCH );
r_ext_packed_depth_stencil = ri.Cvar_Get( "r_ext_packed_depth_stencil", "1", CVAR_CHEAT | CVAR_LATCH );
r_ext_generate_mipmap = ri.Cvar_Get( "r_ext_generate_mipmap", "1", CVAR_CHEAT | CVAR_LATCH );
r_arb_buffer_storage = ri.Cvar_Get( "r_arb_buffer_storage", "1", CVAR_CHEAT | CVAR_LATCH );
Expand Down
1 change: 0 additions & 1 deletion daemon/src/engine/renderer/tr_local.h
Expand Up @@ -2833,7 +2833,6 @@ static inline void halfToFloat( const f16vec4_t in, vec4_t out )
extern cvar_t *r_ext_texture_float;
extern cvar_t *r_ext_texture_rg;
extern cvar_t *r_ext_texture_filter_anisotropic;
extern cvar_t *r_arb_framebuffer_object;
extern cvar_t *r_ext_packed_depth_stencil;
extern cvar_t *r_ext_generate_mipmap;
extern cvar_t *r_arb_buffer_storage;
Expand Down
2 changes: 1 addition & 1 deletion daemon/src/engine/renderer/tr_shade_calc.cpp
Expand Up @@ -201,7 +201,7 @@ static float GetOpValue( const expOperation_t *op )
break;

case opcode_t::OP_FRAMEBUFFEROBJECTS:
value = glConfig2.framebufferObjectAvailable;
value = 1.0f;
break;

case opcode_t::OP_SOUND:
Expand Down
1 change: 0 additions & 1 deletion daemon/src/engine/renderer/tr_types.h
Expand Up @@ -399,7 +399,6 @@ struct glconfig2_t
float maxTextureAnisotropy;
bool textureAnisotropyAvailable;

bool framebufferObjectAvailable;
int maxRenderbufferSize;
int maxColorAttachments;
bool framebufferPackedDepthStencilAvailable;
Expand Down
10 changes: 3 additions & 7 deletions daemon/src/engine/sys/sdl_glimp.cpp
Expand Up @@ -1118,15 +1118,11 @@ static void GLimp_InitExtensions()
//REQUIRE_EXTENSION( ARB_vertex_array_object );
REQUIRE_EXTENSION( ARB_vertex_buffer_object );
REQUIRE_EXTENSION( ARB_half_float_vertex );
REQUIRE_EXTENSION( ARB_framebuffer_object );

// FBO
glConfig2.framebufferObjectAvailable = false;
if ( LOAD_EXTENSION_WITH_CVAR(ARB_framebuffer_object, r_arb_framebuffer_object) )
{
glGetIntegerv( GL_MAX_RENDERBUFFER_SIZE, &glConfig2.maxRenderbufferSize );
glGetIntegerv( GL_MAX_COLOR_ATTACHMENTS, &glConfig2.maxColorAttachments );
glConfig2.framebufferObjectAvailable = true;
}
glGetIntegerv( GL_MAX_RENDERBUFFER_SIZE, &glConfig2.maxRenderbufferSize );
glGetIntegerv( GL_MAX_COLOR_ATTACHMENTS, &glConfig2.maxColorAttachments );

// Other
REQUIRE_EXTENSION( ARB_shader_objects );
Expand Down

0 comments on commit f2229b1

Please sign in to comment.