Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 8775 in orxonox.OLD


Ignore:
Timestamp:
Jun 25, 2006, 11:30:59 AM (18 years ago)
Author:
ponder
Message:
  • Applied a small change to sounrd_buffer and ogg_player in order to load the buffers correctly on big endian systems.
  • Did a lot of cleanup for the terrain rendering system. Added destructors and constructors.
  • The cameras clip-space has to be set to a very large range to display the skybox. The maximum clip distance for the terrain needs to be smaller.
Location:
branches/terrain/src
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • branches/terrain/src/lib/graphics/importer/terrain/buffer_broker.h

    r8697 r8775  
    1919#include "glincl.h"
    2020#include "debug.h"
    21 
     21#include "types.h"
    2222/**
    2323 * @brief       Manages the streaming of the vertex buffer objects for the terrain page.
     
    5555                        }
    5656                        head = tail = NULL;
     57                }
     58                ~BufferBroker()
     59                {
     60                        pBufferPair bp = head;
     61                        while ( bp ) {
     62                                pBufferPair tmp = bp->next;
     63                                release( bp->vertexName, bp->indexName );
     64                                bp = tmp;
     65                        }
     66                        glDeleteBuffersARB( capacity, freeVertexBuffers );
     67                        glDeleteBuffersARB( capacity, freeIndexBuffers );
     68                        SAVE_DELETE_ARRAY( freeIndexBuffers );
     69                        SAVE_DELETE_ARRAY( freeVertexBuffers );                 
    5770                }
    5871                inline int getIBSize() { return ibSize; }
  • branches/terrain/src/lib/graphics/importer/terrain/frustum.h

    r8697 r8775  
    1818#include "glincl.h"
    1919#include <stdio.h>
     20
     21
     22#define MAX_CLIP_DISTANCE 400.0f
    2023#define m( _row,_col )  _m[_col*4+_row-5]
    2124
     
    9598                                                         m( 3, 3 ) + m( 4, 3 ),
    9699                                                         m( 3, 4 ) + m( 4, 4 ) );
     100                                                       
    97101                        planes[FAR].setCoefficients(
    98102                                                        -m( 3, 1 ) + m( 4, 1 ),
     
    100104                                                        -m( 3, 3 ) + m( 4, 3 ),
    101105                                                        -m( 3, 4 ) + m( 4, 4 ) );
     106                                                       
    102107                        planes[BOTTOM].setCoefficients(
    103108                                                         m( 2, 1 ) + m( 4, 1 ),
     
    105110                                                         m( 2, 3 ) + m( 4, 3 ),
    106111                                                         m( 2, 4 ) + m( 4, 4 ) );
     112                                                       
    107113                        planes[TOP].setCoefficients( 
    108114                                                        -m( 2, 1 ) + m( 4, 1 ),
     
    110116                                                        -m( 2, 3 ) + m( 4, 3 ),
    111117                                                        -m( 2, 4 ) + m( 4, 4 ) );
     118                                                       
    112119                        planes[LEFT].setCoefficients( 
    113120                                                         m( 1, 1 ) + m( 4, 1 ),
     
    115122                                                         m( 1, 3 ) + m( 4, 3 ),
    116123                                                         m( 1, 4 ) + m( 4, 4 ) );
     124                                                       
    117125                        planes[RIGHT].setCoefficients(
    118126                                                        -m( 1, 1 ) + m( 4, 1 ),
     
    120128                                                        -m( 1, 3 ) + m( 4, 3 ),
    121129                                                        -m( 1, 4 ) + m( 4, 4 ) );
     130                                                       
     131                        if ( planes[NEAR].d +planes[FAR].d  > MAX_CLIP_DISTANCE ) {
     132                                planes[FAR].d = -planes[NEAR].d+MAX_CLIP_DISTANCE;
     133                        }
    122134                }
    123135               
  • branches/terrain/src/lib/graphics/importer/terrain/terrain.cc

    r8770 r8775  
    176176        pTerrainPage page = NULL;
    177177        frustum->extractPlanes();
    178        
     178        glPushAttrib( GL_ALL_ATTRIB_BITS );
     179        glPushClientAttrib( GL_CLIENT_VERTEX_ARRAY_BIT );
    179180        /*
    180181         * Enable texture and vertex arrays for the first and the second texture
     
    256257                        indices, GL_DYNAMIC_DRAW_ARB );
    257258        }
    258         glPushAttrib( GL_COLOR_BUFFER_BIT );
    259259        glEnable( GL_BLEND );
    260260        glDepthFunc( GL_LEQUAL );
     
    323323        glActiveTextureARB( GL_TEXTURE1_ARB );
    324324        glDisable( GL_TEXTURE_2D );
    325         glDisableClientState( GL_VERTEX_ARRAY );
    326         glDisableClientState( GL_TEXTURE_COORD_ARRAY );
    327         glDisableClientState( GL_VERTEX_ARRAY );
    328         glDisableClientState( GL_TEXTURE_COORD_ARRAY );
    329325        glActiveTextureARB( GL_TEXTURE0_ARB );
    330         glClientActiveTextureARB( GL_TEXTURE0_ARB );   
    331         glDisableClientState( GL_VERTEX_ARRAY );
    332         glDisableClientState( GL_TEXTURE_COORD_ARRAY );
    333326        glEnable( GL_LIGHTING );
    334327        glMatrixMode( GL_TEXTURE );
    335328        glLoadIdentity();
    336329        glPopAttrib();
     330        glPopClientAttrib();
    337331}
    338332
  • branches/terrain/src/lib/graphics/importer/terrain/terrain.h

    r8770 r8775  
    9797                }
    9898               
     99                ~Terrain( )
     100                {
     101                        //The pages are deleted through the SAVE_DELETE( root ) call.
     102                        SAVE_DELETE_ARRAY( pages );
     103                        SAVE_DELETE_ARRAY( vertices );
     104                        SAVE_DELETE_ARRAY( indices );
     105                        SAVE_DELETE( lightmap );
     106                        SAVE_DELETE( root );
     107#ifdef USE_VBO
     108                        SAVE_DELETE( broker );
     109#endif                 
     110                }
    99111                /**
    100112                 * Draws the terrain.
     
    119131                 * coordinates.
    120132                 */
    121                 inline void incActivated() { activatedCount++; }
    122                 inline void incDeactivated() { deactivatedCount++; }
    123133                inline float getAltitude( int _x, int _z ) const;
    124134               
     
    150160               
    151161                inline void setScale( const Triple& _scale )
    152                 {
    153                         scale = _scale;
    154                 }
     162                { scale = _scale; }
    155163#ifdef USE_VBO
    156164                inline pBufferBroker getBufferBroker() { return broker; }
  • branches/terrain/src/lib/graphics/importer/terrain/terrain_page.cc

    r8770 r8775  
    2626        }\
    2727        while ( 0 )
     28       
     29TerrainPage::~TerrainPage( )
     30{
     31        SAVE_DELETE_ARRAY( indices );
     32        SAVE_DELETE_ARRAY( vertices );
     33        SAVE_DELETE_ARRAY( indexHash );         
     34        SAVE_DELETE_ARRAY( errors );   
     35}
    2836
    2937TerrainPage::TerrainPage( Terrain *_owner, int _xOffset, int _zOffset )
     
    668676        owner->getBufferBroker()->release( vbIdentifier, ibIdentifier );       
    669677#endif
    670         if ( vertices ) {
    671                 delete[] vertices;
    672                 vertices = NULL;
    673         }
    674         if ( indices ) {
    675                 delete[] indices;
    676                 indices = NULL;
    677                 numIndices = 0;
    678         }
     678        SAVE_DELETE_ARRAY( vertices );
     679        numVertices = 0;
     680        SAVE_DELETE_ARRAY( indices );
     681        numIndices = 0;
    679682        deactivate();
    680683}
  • branches/terrain/src/lib/graphics/importer/terrain/terrain_page.h

    r8770 r8775  
    4343                enum { TP_LEFT = 0, TP_RIGHT = 1, TP_BOTTOM = 2, TP_TOP = 3 };
    4444                const static int MAX_LODS                       = 5;
     45               
    4546                /**
    4647                 * Creates a new terrain page with its lower left corner set
     
    5859                inline bool isActive() { return active; }
    5960               
    60                
    61                 ~TerrainPage( )
    62                 {
    63                         if ( isVisible )
    64                                 hide();
    65                 }
    66                
     61                virtual ~TerrainPage();
    6762                /**
    6863                 * @brief Makes the terrain look as if it were created with the given level of
  • branches/terrain/src/lib/graphics/importer/terrain/terrain_quad.cc

    r8697 r8775  
    2121{
    2222        scale = owner->getScale();
     23        children[0] = children[1] = children[2] = children[3] = NULL;
    2324}
    2425
  • branches/terrain/src/lib/graphics/importer/terrain/terrain_quad.h

    r8697 r8775  
    3232                virtual ~TerrainQuad( )
    3333                {
    34                         for ( int i = 0; i < 4; ++i )
    35                                 if ( children[i] != NULL )
    36                                         delete children[i];                                     
     34                        for ( int i = 0; i < 4; ++i ) {
     35                                if ( !children[i]->isChildless() )
     36                                        SAVE_DELETE( children[i] );
     37                        }       
    3738                }
    3839                int cull( );
  • branches/terrain/src/lib/graphics/importer/terrain/types.h

    r8770 r8775  
    2121#include <math.h>
    2222#include "texture.h"
     23
     24#define SAVE_DELETE_ARRAY( _a ) if ( _a ) { delete[] _a; _a = NULL; }
     25#define SAVE_DELETE( _a ) if ( _a ) { delete _a; _a = NULL; }
    2326
    2427struct Triple {
  • branches/terrain/src/lib/sound/ogg_player.cc

    r8362 r8775  
    399399    if(size == 0)
    400400      return false;
    401 /*#ifdef SDL_BIG_ENDIAN
    402                         int cnt = wavLength/2;
    403                         Uint16* wavBufferAsShorts = ( Uint16* )wavBuffer;
    404                         for ( int i = 0; i < cnt; ++i, ++wavBufferAsShorts )
    405                                 *wavBufferAsShorts = SDL_Swap16( *wavBufferAsShorts );
    406 #endif*/
     401#ifdef SDL_BIG_ENDIAN
     402        int cnt = OGG_PLAYER_BUFFER_SIZE/2;
     403        Uint16* wavBufferAsShorts = ( Uint16* )pcm;
     404        for ( int i = 0; i < cnt; ++i, ++wavBufferAsShorts )
     405                *wavBufferAsShorts = SDL_Swap16( *wavBufferAsShorts );
     406#endif
    407407    alBufferData(buffer, format, pcm, size, vorbisInfo->rate);
    408408    if (DEBUG_LEVEL >= 3)
  • branches/terrain/src/lib/sound/sound_buffer.cc

    r8619 r8775  
    7676    }
    7777#if SDL_BYTEORDER == SDL_BIG_ENDIAN
    78                 if ( !( wavSpec.format == AUDIO_U8 || wavSpec.format == AUDIO_S8 ) ) {
    79                         int cnt = wavLength/2;
    80                         Uint16* wavBufferAsShorts = ( Uint16* )wavBuffer;
    81                         for ( int i = 0; i < cnt; ++i, ++wavBufferAsShorts )
    82                                 *wavBufferAsShorts = SDL_Swap16( *wavBufferAsShorts );
    83                 }
     78        if ( !( wavSpec.format == AUDIO_U8 || wavSpec.format == AUDIO_S8 ) ) {
     79                int cnt = wavLength/2;
     80                Uint16* wavBufferAsShorts = ( Uint16* )wavBuffer;
     81                for ( int i = 0; i < cnt; ++i, ++wavBufferAsShorts )
     82                        *wavBufferAsShorts = SDL_Swap16( *wavBufferAsShorts );
     83        }
    8484#endif
    8585    alBufferData(this->bufferID, SoundBuffer::sdlAudioSpecToAlFormat(&wavSpec),
  • branches/terrain/src/world_entities/camera.cc

    r8697 r8775  
    8383{
    8484  this->nearClip = nearClip;
    85   this->farClip = 400.0f;//farClip;
     85  this->farClip = farClip;
    8686}
    8787
Note: See TracChangeset for help on using the changeset viewer.