--- deliantra/Deliantra-Client/DC/OpenGL.pm 2006/05/26 18:28:23 1.2 +++ deliantra/Deliantra-Client/DC/OpenGL.pm 2007/08/09 05:38:30 1.7 @@ -1,9 +1,9 @@ -package CFClient::OpenGL; +package CFPlus::OpenGL; use strict; use Carp (); -use CFClient; +use CFPlus; our %GL_EXT; our $GL_VERSION; @@ -12,13 +12,14 @@ our $DEBUG = 1; our %INIT_HOOK; +our %SHUTDOWN_HOOK; sub import { my $caller = caller; no strict; - my $symtab = *{"main::CFClient::OpenGL::"}{HASH}; + my $symtab = *{"main::CFPlus::OpenGL::"}{HASH}; for (keys %$symtab) { *{"$caller\::$_"} = *$_ @@ -30,7 +31,8 @@ $GL_VERSION = gl_version * 1; %GL_EXT = map +($_ => 1), split /\s+/, gl_extensions; - $GL_NPOT = $GL_EXT{GL_ARB_texture_non_power_of_two} || $GL_VERSION >= 2; +# $GL_NPOT = $GL_EXT{GL_ARB_texture_non_power_of_two} || $GL_VERSION >= 2; + $GL_NPOT = $GL_VERSION >= 2; # some pre-2.0 cards seem to fall back to software rendering $GL_NPOT = 0 if gl_vendor =~ /ATI Technologies/; # ATI doesn't get it right... glDisable GL_COLOR_MATERIAL; @@ -38,11 +40,23 @@ glDisable GL_DITHER; glDisable GL_DEPTH_TEST; glDepthMask 0; - glHint GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST; + + my $hint = $::FAST ? GL_FASTEST : GL_NICEST; + glHint GL_PERSPECTIVE_CORRECTION_HINT, $hint; + glHint GL_POINT_SMOOTH_HINT , $hint; + glHint GL_LINE_SMOOTH_HINT , $hint; + glHint GL_POLYGON_SMOOTH_HINT , $hint; + glHint GL_GENERATE_MIPMAP_HINT , $hint; + #glDrawBuffer GL_BACK; + #glReadBuffer GL_BACK; $_->() for values %INIT_HOOK; } +sub shutdown { + $_->() for values %SHUTDOWN_HOOK; +} + sub gl_check { return unless $DEBUG;