static void file_phys_fclearerr(ALLEGRO_FILE *f) { ALLEGRO_FILE_PHYSFS *fp = cast_stream(f); fp->error_indicator = false; /* PhysicsFS doesn't provide a way to clear the EOF indicator. */ }
static void file_phys_fclose(ALLEGRO_FILE *f) { ALLEGRO_FILE_PHYSFS *fp = cast_stream(f); PHYSFS_close(fp->phys); al_free(fp); }
static bool file_phys_fflush(ALLEGRO_FILE *f) { ALLEGRO_FILE_PHYSFS *fp = cast_stream(f); if (!PHYSFS_flush(fp->phys)) { phys_set_errno(fp); return false; } return true; }
static off_t file_phys_fsize(ALLEGRO_FILE *f) { ALLEGRO_FILE_PHYSFS *fp = cast_stream(f); PHYSFS_sint64 n; n = PHYSFS_fileLength(fp->phys); if (n < 0) { phys_set_errno(fp); return -1; } return n; }
static int64_t file_phys_ftell(ALLEGRO_FILE *f) { ALLEGRO_FILE_PHYSFS *fp = cast_stream(f); PHYSFS_sint64 n; n = PHYSFS_tell(fp->phys); if (n < 0) { phys_set_errno(fp); return -1; } return n; }
static size_t file_phys_fwrite(ALLEGRO_FILE *f, const void *buf, size_t buf_size) { ALLEGRO_FILE_PHYSFS *fp = cast_stream(f); PHYSFS_sint64 n; n = PHYSFS_write(fp->phys, buf, 1, buf_size); if (n < 0) { phys_set_errno(fp); return 0; } return n; }
static size_t file_phys_fread(ALLEGRO_FILE *f, void *buf, size_t buf_size) { ALLEGRO_FILE_PHYSFS *fp = cast_stream(f); PHYSFS_sint64 n; if (buf_size == 0) return 0; n = PHYSFS_read(fp->phys, buf, 1, buf_size); if (n < 0) { phys_set_errno(fp); return 0; } return n; }
static bool file_phys_seek(ALLEGRO_FILE *f, int64_t offset, int whence) { ALLEGRO_FILE_PHYSFS *fp = cast_stream(f); PHYSFS_sint64 base; switch (whence) { case ALLEGRO_SEEK_SET: base = 0; break; case ALLEGRO_SEEK_CUR: base = PHYSFS_tell(fp->phys); if (base < 0) { phys_set_errno(fp); return false; } break; case ALLEGRO_SEEK_END: base = PHYSFS_fileLength(fp->phys); if (base < 0) { phys_set_errno(fp); return false; } break; default: al_set_errno(EINVAL); return false; } if (!PHYSFS_seek(fp->phys, base + offset)) { phys_set_errno(fp); return false; } return true; }
static bool file_phys_ferror(ALLEGRO_FILE *f) { ALLEGRO_FILE_PHYSFS *fp = cast_stream(f); return fp->error_indicator; }
static bool file_phys_feof(ALLEGRO_FILE *f) { ALLEGRO_FILE_PHYSFS *fp = cast_stream(f); return PHYSFS_eof(fp->phys); }
void StateManager::varconf_callback(const std::string §ion, const std::string &key, varconf::Config &config) { StateID sID = m_state_name_map[section]; SPtr<StateProperties> record = SPtr<StateProperties>(); bool create_record = false; if (sID > 0) { // Record ID already exists, lets see if the record is valid. record = m_states[sID]; if (record.isValid()) { // Record already exists, all good } else { // Record does not exist, lets make a new one. create_record = true; } } else { // Not seen this record name yet, so need to fill in all the data structures. sID = m_state_counter++; create_record = true; } // If record does not exist, create it. if (create_record) { record = SPtr<StateProperties> (new StateProperties()); record->state = section; // Setup default values record->alpha_test = false; record->blend = false; record->lighting = false; record->two_sided_lighting = false; for (unsigned int i = 0; i < MAX_UNITS; ++i) record->textures[i] = false; record->colour_material = false; record->depth_test = false; record->depth_write = true; record->cull_face = false; record->cull_face_cw = false; record->stencil = false; record->fog = false; record->rescale_normals = false; record->normalise = false; record->alpha_function = GL_GREATER; record->alpha_value = 0.1f; record->blend_src_function = GL_SRC_ALPHA; record->blend_dest_function = GL_ONE_MINUS_SRC_ALPHA; m_states[sID] = record; m_state_name_map[record->state] = sID; m_name_state_vector[sID] = record->state; if (debug) printf("[StateManager] Adding State: %s\n", section.c_str()); } if (key == ALPHA_TEST) record->alpha_test = (bool)config.getItem(section, key); else if (key == BLEND) record->blend = (bool)config.getItem(section, key); else if (key == LIGHTING) record->lighting = (bool)config.getItem(section, key); else if (key == TWO_SIDED_LIGHTING) record->two_sided_lighting = (bool)config.getItem(section, key); else if (key == COLOUR_MATERIAL) record->colour_material = (bool)config.getItem(section, key); else if (key == DEPTH_TEST) record->depth_test = (bool)config.getItem(section, key); else if (key == DEPTH_WRITE) record->depth_write = (bool)config.getItem(section, key); else if (key == CULL_FACE) record->cull_face = (bool)config.getItem(section, key); else if (key == CULL_FACE_CW) record->cull_face_cw = (bool)config.getItem(section, key); else if (key == STENCIL) record->stencil = (bool)config.getItem(section, key); else if (key == FOG) record->fog = (bool)config.getItem(section, key); else if (key == RESCALE_NORMALS) record->rescale_normals = (bool)config.getItem(section, key); else if (key == NORMALISE) record->normalise = (bool)config.getItem(section, key); else if (key == ALPHA_FUNCTION) record->alpha_function = getAlphaFunction((std::string)config.getItem(section, key)); else if (key == ALPHA_VALUE) record->alpha_value = (double)config.getItem(section, key); else if (key == BLEND_SRC_FUNCTION) record->blend_src_function = getBlendFunction((std::string)config.getItem(section, key)); else if (key == BLEND_DEST_FUNCTION) record->blend_dest_function = getBlendFunction((std::string)config.getItem(section, key)); else if (key.substr(0, TEXTURE.size()) == TEXTURE) { unsigned int unit; cast_stream(key.substr(TEXTURE.size()), unit); if (unit < MAX_UNITS) { record->textures[unit] = (bool)config.getItem(section, key); } } }