void SpriteManager::exit()
{
    if(!mInitalized) return;
    mSprites.clear();
    SDL_LockMutex(mGetSpriteMutex); LOG_WARNING_SDL();
    SDL_UnlockMutex(mGetSpriteMutex); LOG_WARNING_SDL();
    SDL_DestroyMutex(mGetSpriteMutex); LOG_WARNING_SDL();
    LOG_INFO("SpriteManager closed");
    mInitalized = false;
}
SpritePtr SpriteManager::getSprite(const char* filename)
{
    DHASH id = DRMakeFilenameHash(filename);
    SDL_LockMutex(mGetSpriteMutex); LOG_WARNING_SDL();
    if(mSprites.find(id) != mSprites.end())
    {
        SDL_UnlockMutex(mGetSpriteMutex); LOG_WARNING_SDL();
        return mSprites[id];
    }
    SpritePtr sprite(new Sprite(filename));
    mSprites.insert(SPRITE_PAIR(id, sprite));
    SDL_UnlockMutex(mGetSpriteMutex); LOG_WARNING_SDL();
    return sprite;
}
void HeightMapTexture::copyPixelData(u8* data, DRVector2i size)
{
    if(!mPixelHeightData || mSize != size) 
    {
        DR_SAVE_DELETE_ARRAY(mPixelHeightData);
        mSize = size;
        mMaxGradient = -10.0f;
        mMaxHeight = -10.0f;
        mPixelHeightData = new float[size.x*size.y];
    }
    if(sizeof(float) != sizeof(u8)*4) LOG_ERROR_VOID("datatypes not like expected");
    //memcpy(mPixelHeightData, data, 4*size.x*size.y*sizeof(u8));
    
    for(uint y = 0; y < size.y; y++)
    {
        for(uint x = 0; x < size.x; x++)
        {
            int i = x+y*size.x;
            int ix = x-1+y*size.x;
            int iy = x+(y-1)*size.x;
            float red = static_cast<float>(data[i*4+2]);
            float green = static_cast<float>(data[i*4+1]);
            float blue = static_cast<float>(data[i*4]);
            mPixelHeightData[i] = ((red+green*256.0f + (blue*256.0f*256.0f))/(256.0f*256.0f*256.0f))*2.0f-1.0f; 

            if(mPixelHeightData[i] > mMaxHeight)
                mMaxHeight = mPixelHeightData[i];
            if(x > 0)
            {
                float xGradient = fabs(mPixelHeightData[i] - mPixelHeightData[ix]);
                if(xGradient > mMaxGradient)
                    mMaxGradient = xGradient;
            }
            if(y > 0)
            {
                float yGradient = fabs(mPixelHeightData[i] - mPixelHeightData[iy]);
                if(yGradient > mMaxGradient)
                    mMaxGradient = yGradient;
            }
            
        }
    }
    //DREngineLog.writeToLog("[HeightMapTexture::copyPixelData]: maxHeight: %f, maxGradient: %f", mMaxHeight, mMaxGradient);
    
    SDL_LockMutex(mPixelCopyMutex); LOG_WARNING_SDL();    
    mState++;
    SDL_UnlockMutex(mPixelCopyMutex); LOG_WARNING_SDL();    
}
HeightMapTexture::HeightMapTexture(int stepSize)
: mPixelHeightData(NULL), mLoadStepSize(stepSize), mSize(0), mState(0), mPixelCopyMutex(NULL),
  mMaxHeight(0.0f), mMaxGradient(0.0f)
{
    mPixelCopyMutex = SDL_CreateMutex(); LOG_WARNING_SDL();
        
}
Exemple #5
0
DRThread::DRThread(const char* threadName/* = NULL*/)
: mutex(NULL), thread(NULL), condition(NULL), semaphore(NULL), exitCalled(false)
{
    semaphore = SDL_CreateSemaphore(1);
    if(!semaphore) LOG_WARNING_SDL();
    condition = SDL_CreateCond(); 
    if(!condition) LOG_WARNING_SDL();
    if(SDL_SemWait(semaphore)) LOG_WARNING_SDL();
    mutex = SDL_CreateMutex(); 
    if(!mutex) LOG_WARNING_SDL();  
    
#if SDL_VERSION_ATLEAST(1,3,0)
    thread = SDL_CreateThread(Thread, threadName, this);
#else
    thread = SDL_CreateThread(Thread, this);
#endif
    
} 
DRReturn SpriteManager::init()
{
    if(mInitalized) return DR_OK;

    mSpriteGeometrie = DRSpriteGeometriePtr(new SpriteGeometrie);
    mGetSpriteMutex = SDL_CreateMutex(); LOG_WARNING_SDL();

    LOG_INFO("SpriteManager initalized");
    mInitalized = true;
    return DR_OK;
}
Exemple #7
0
DRThread::~DRThread()
{
    if(thread)
    {
        //Post Exit to Stream Thread
        exitCalled = true;
        if(SDL_SemPost(semaphore)) LOG_WARNING_SDL();
		condSignal();
        //kill TextureLoad Thread after 1/2 second
        
        SDL_Delay(500);
//        SDL_KillThread(thread);
        SDL_WaitThread(thread, NULL);
        //LOG_WARNING_SDL();

        thread = NULL;
        SDL_DestroySemaphore(semaphore);
        SDL_DestroyMutex(mutex);
        SDL_DestroyCond(condition);
    }
}
Exemple #8
0
DRReturn load()
{
    if(EnInit_Simple())
        return DR_ERROR;
    DRFileManager::Instance().addOrdner("data/blockView");
    DRFileManager::Instance().addOrdner("data/shader");
    test();
    sizeOfClasses();
    
    //Steuerung
    u16 i = 0;
    gControlModes[i++] = ControlMode(Unit(20, M), 120.0f);
    gControlModes[i++] = ControlMode(Unit(0.100, KM), 100.0f);
    gControlModes[i++] = ControlMode(Unit(10, KM), 80.0f);
    gControlModes[i++] = ControlMode(Unit(100, KM), 60.0f);
    gControlModes[i++] = ControlMode(Unit(1000, KM), 30.0f);
    gControlModes[i++] = ControlMode(Unit(20000, KM), 10.0f);
    gControlModes[i++] = ControlMode(Unit(400000, KM), 4.0f);
    gControlModes[i++] = ControlMode(Unit(0.1, AE), 1.0f);
    gControlModes[i++] = ControlMode(Unit(1, AE), 1.0f);
    //gControlModes[i++] = ControlMode(Unit(10, AE), 1.0f);
    gControlModes[i++] = ControlMode(Unit(500, AE), 1.0f);
     
    //if(EnInit_OpenGL(1.0f, DRVideoConfig(800, 600), "Space Craft - Techdemo"))
    if(EnInit_INI("data/config.ini"))
        LOG_ERROR("Fehler bei init OpenGL", DR_ERROR);       
	LOG_WARNING_SDL();
    
    //check maximal multitextures
    int textureCount = 0;
    glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &textureCount);
    if(textureCount < 4) LOG_ERROR("Multitexturing mit mindestens 4 Texturen wird nicht unterstuetzt!", DR_ERROR);
    DREngineLog.writeToLog("Multitexturing supported up to: %d textures\n", textureCount);
    
    g_Font = new DRFont();
    g_Font->init("data/MalgunGothic.tga", "data/MalgunGothic.tbf");

    DREngineLog.writeToLog("CPU-Count: %d", g_CPU_Count);   
    
    
    
  //  glShadeModel(GL_SMOOTH);
  //  glDepthFunc(GL_LEQUAL);								// The Type Of Depth Testing To Do
   // glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);	// Really Nice Perspective Calculations

    //Reseten der Matrixen
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    gluPerspective(40.0f, (GLfloat)XWIDTH/(GLfloat)YHEIGHT, 0.1f, 2000.0f);
    glMatrixMode(GL_MODELVIEW);          // Select the modelview matrix

    glLoadIdentity();                    // Reset (init) the modelview matrix


    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
    glShadeModel(GL_SMOOTH);             // Enable smooth shading
    glClearDepth(1.0f);                  // Clear depth buffer
    glEnable(GL_DEPTH_TEST);             // Enables depth test
    glDepthFunc(GL_LEQUAL);              // Type of depth test to perform

    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);

    glLineWidth(1.0f);
    glEnable(GL_NORMALIZE);

    // Enhances image quality
    glColor3f(0.5f, 0.5f, 1.0f);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glDisable(GL_LIGHTING);
    //glEnable(GL_LIGHTING);
    glDisable(GL_FOG);
    
	if(GlobalRenderer::getSingleton().init("data/config.ini"))
		LOG_ERROR("error by init GlobalRenderer", DR_ERROR);
    
    if(ShaderManager::getSingleton().init())
        LOG_ERROR("error by init ShaderManager", DR_ERROR);
    if(DRGeometrieManager::getSingleton().init())
        LOG_ERROR("error by init DRGeometrieManager", DR_ERROR);

    if(g_Player.init())
        LOG_ERROR("Fehler bei Player::init", DR_ERROR);
    g_cam = g_Player.getCamera();
       
    if(g_RenderBlockLoader.init())
        LOG_ERROR("Fehler bei RenderBloockLoader::init", DR_ERROR);
    
    Uint32 start = SDL_GetTicks();
    //g_terrain = new DRTextur("data/terrainsurface.bmp", GL_NEAREST, GL_NEAREST);
    DREngineLog.writeToLog("%.0f Sekunden fuer Planeten laden/generieren", ((float)SDL_GetTicks()-start)/1000.0f);

    return DR_OK;
}
HeightMapTexture::~HeightMapTexture()
{
    DR_SAVE_DELETE_ARRAY(mPixelHeightData);
    SDL_LockMutex(mPixelCopyMutex); SDL_UnlockMutex(mPixelCopyMutex); 
    SDL_DestroyMutex(mPixelCopyMutex); LOG_WARNING_SDL();    
}