Esempio n. 1
0
void Engine::initializeSDL()
{
    std::clog << "Initializing SDL...\n";

    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        throw EngineError("Could not initialize SDL", SDL_GetError());
    }

    /* Some video inforamtion */
    const SDL_VideoInfo *info = SDL_GetVideoInfo();

    if (!info) {
        throw EngineError("Video query failed", SDL_GetError());
    }

    int screen_bpp = info->vfmt->BitsPerPixel;

    SDL_GL_SetAttribute(SDL_GL_RED_SIZE,   8);
    SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
    SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE,  8);
    //SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);

    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1);

    char env[] = "SDL_VIDEO_CENTERED=center";
    SDL_putenv(env);

    int screen_flags = SDL_OPENGL;

    if (m_screenFull)
        screen_flags |= SDL_FULLSCREEN;

    std::clog << "Screen: " << m_screenWidth << "x" << m_screenHeight
              << "x" << screen_bpp << "\n";
    // Screen surface
    SDL_Surface *screen = SDL_SetVideoMode(m_screenWidth, m_screenHeight,
                                           screen_bpp, screen_flags);

    if (!screen) {
        throw EngineError("Setting video mode failed", SDL_GetError());
    }

    SDL_ShowCursor(SDL_DISABLE);
    SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);

    std::clog << "SDL initialized.\n";
}
Esempio n. 2
0
static PackFile *PackOpenFromFile(char *name)
{
    FILE *fp;
    PackFile *pack;
    int num, i;
    int packPtr = 0;
    
    fp = FOpen(name, "rb");
    if (fp == NULL) {
        EngineError("not find %s\n", name);
    }
    pack = (PackFile *)Malloc(sizeof(PackFile));
    fread(&num, sizeof(int), 1, fp);
    packPtr += sizeof(int);
    
    pack->file = (struct Data *)Malloc(sizeof(struct Data) * num);
    pack->num  = num;
    for (i = 0; i < pack->num; i++) {
        struct Data *file = &pack->file[i];
        fread(file->name, sizeof(char), MAX_PATH, fp);
        EncodeName(file->name, 0);
        packPtr += sizeof(char) * MAX_PATH;
        fread(&file->size, sizeof(int), 1, fp);
        packPtr += sizeof(int);
        file->ptr = packPtr;
        fseek(fp, file->ptr + file->size, SEEK_SET);
        packPtr += file->size;
        file->data = NULL;
    }
    FClose(fp);
    return pack;
}
Esempio n. 3
0
static int SbufNew()
{
    int i;

    for (i = 0; i < MAX_SBUF_SIZE; i++) {
        if (!sbuf[i].busy) {
            return i;
        }
    }
    EngineError("sbuf error\n");
    return -1;
}    
Esempio n. 4
0
static char *PackRead(PackFile *pack, char *name, int *size, FILE *fp)
{
    int i;

    if (!pack) {
        EngineError("not open pack file\n");
    }
    for (i = 0; i < pack->num; i++) {
        struct Data *file = &pack->file[i];
        if (!StrCmp(file->name, name)) {
            char *data;
            data  = (char *)Malloc(sizeof(char) * file->size);
            fseek(fp, file->ptr, SEEK_SET);
            fread(data, sizeof(char),  file->size, fp);
            EncodeBuf(data, file->size, 0);
            *size = file->size;
            WriteLog("read from pack file %s\n", name);
            return data;
        }
    }
    EngineError("not find %s\n", name);
    return NULL;
}
Esempio n. 5
0
char *LoadFile(char *name, int *size)
{
    char *buf;
    
    buf = ReadFileBuf(name, size);
    if (buf != NULL) {
        WriteLog("load from file: %s\n", name);
        goto next;
    }
    buf = ReadFromPack(name, size);
    if (buf != NULL) {
        goto next;
    }
    EngineError("not find: %s\n", name);
next:
    return buf;
}