HRESULT CDECL wined3d_texture_create_2d(struct wined3d_device *device, UINT width, UINT height, UINT level_count, DWORD usage, enum wined3d_format_id format_id, enum wined3d_pool pool, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_texture **texture) { struct wined3d_texture *object; HRESULT hr; TRACE("device %p, width %u, height %u, level_count %u, usage %#x\n", device, width, height, level_count, usage); TRACE("format %s, pool %#x, parent %p, parent_ops %p, texture %p.\n", debug_d3dformat(format_id), pool, parent, parent_ops, texture); object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) { ERR("Out of memory.\n"); *texture = NULL; return WINED3DERR_OUTOFVIDEOMEMORY; } hr = texture_init(object, width, height, level_count, device, usage, format_id, pool, parent, parent_ops); if (FAILED(hr)) { WARN("Failed to initialize texture, returning %#x.\n", hr); HeapFree(GetProcessHeap(), 0, object); *texture = NULL; return hr; } TRACE("Created texture %p.\n", object); *texture = object; return WINED3D_OK; }
/************* * DESCRIPTION: load texture * INPUT: texture texture * OUTPUT: FALSE if failed else TRUE *************/ BOOL RPREVIEW_TEXTURE::Load(TEXTURE *texture) { #ifndef __AMIGA__ INITPROC texture_init; #endif // __AMIGA__ #if !defined(__MIXEDBINARY__) || defined(__PPC__) #ifdef __AMIGA__ Base = OpenLibrary(texture->GetName(), 0); if(!Base) return FALSE; TextureBase = Base; #else // __AMIGA__ if (!(hLib = LoadLibrary(texture->GetName()))) return FALSE; if (!(texture_init = (INITPROC)GetProcAddress(hLib, "texture_init"))) return FALSE; #endif // __AMIGA__ tinfo = texture_init(); #else tinfo = PPC_STUB(texture_init)(texture->GetName(), &Base); #endif // __MIXEDBINARY__ this->texture = (RAYSTORM_TEXTURE*)texture; return TRUE; }
void tilemap_init(void) { texture_init(); if (0 == shader) shader = build_shader_program("tilemap", tilemap_vertex_shader_src, tilemap_fragment_shader_src); ENSURE(shader); glGenBuffers(1, &a_vertices); }
extern "ASM" void *__saveds _68kStub_ppc_texture_init__PFP09IM_TTABLEjpj(register __a0 long *args) { IM_TTABLE* (*texture_init)(LONG) = (IM_TTABLE* (*)(LONG))args[0]; return texture_init( (LONG) args[1] ); }
TEXTURE_INFO *stub_texture_init(char *name, struct Library **Base) { *Base = OpenLibrary(name, 0); if(!Base) return NULL; TextureBase = *Base; return texture_init(); }
/************* * DESCRIPTION: load texture * INPUT: texture texture * OUTPUT: FALSE if failed else TRUE *************/ BOOL IPREVIEW_TEXTURE::Load(TEXTURE *texture) { /* Load Imagine texture */ #ifdef __AMIGA__ IM_TTABLE* (*texture_init)(LONG arg0); seglist = LoadSeg(texture->name); if(!seglist) return FALSE; *(ULONG*)(&texture_init) = 4*seglist+4; #ifdef __PPC__ ttable = ITextureInit(texture_init); #else ttable = texture_init(0x60FFFF); #endif #else INQUIRETEXTURE InquireTexture; PREFS prefs; char szBuffer[256]; prefs.id = ID_TXTP; if (prefs.GetPrefs()) ExpandPath((char *)prefs.data, texture->name, szBuffer); else strcpy(szBuffer, texture->name); prefs.data = NULL; // VERY important ! hInst = LoadLibrary(szBuffer); if (!hInst) return FALSE; InquireTexture = (INQUIRETEXTURE)GetProcAddress(hInst, "InquireTexture"); if (!InquireTexture) return FALSE; ttable = InquireTexture(0x70, 0x1); #endif if(!ttable) return FALSE; // copy parameters memcpy(params, ((IMAGINE_TEXTURE*)texture)->params, 16*sizeof(float)); form.pos = pos; form.orient_x = orient_x; form.orient_y = orient_y; form.orient_z = orient_z; form.size = size; return TRUE; }
int view_load_media() { int success = 1; texture_init(&digits_texture); if(!texture_load(&digits_texture, "digits.bmp")) { printf("Failed to load digits texture!\n"); success = 0; } return success; }
static void update_variables(void) { struct retro_variable var = { .key = "Hatari_resolution", }; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { char *pch; char str[100]; snprintf(str, sizeof(str), "%s", var.value); pch = strtok(str, "x"); if (pch) retrow = strtoul(pch, NULL, 0); pch = strtok(NULL, "x"); if (pch) retroh = strtoul(pch, NULL, 0); fprintf(stderr, "[libretro-test]: Got size: %u x %u.\n", retrow, retroh); CROP_WIDTH =retrow; CROP_HEIGHT= (retroh-80); VIRTUAL_WIDTH = retrow; texture_init(); //reset_screen(); } } static void retro_wrap_emulator() { pre_main(RPATH); pauseg=-1; environ_cb(RETRO_ENVIRONMENT_SHUTDOWN, 0); // Were done here co_switch(mainThread); // Dead emulator, but libco says not to return while(true) { LOGI("Running a dead emulator."); co_switch(mainThread); } }
void retro_init(void) { const char *system_dir = NULL; if (environ_cb(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &system_dir) && system_dir) { // if defined, use the system directory retro_system_directory=system_dir; } const char *content_dir = NULL; if (environ_cb(RETRO_ENVIRONMENT_GET_CONTENT_DIRECTORY, &content_dir) && content_dir) { // if defined, use the system directory retro_content_directory=content_dir; } const char *save_dir = NULL; if (environ_cb(RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY, &save_dir) && save_dir) { // If save directory is defined use it, otherwise use system directory retro_save_directory = *save_dir ? save_dir : retro_system_directory; } else { // make retro_save_directory the same in case RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY is not implemented by the frontend retro_save_directory=retro_system_directory; } if(retro_system_directory==NULL)sprintf(RETRO_DIR, "%s\0","."); else sprintf(RETRO_DIR, "%s\0", retro_system_directory); printf("Retro SYSTEM_DIRECTORY %s\n",retro_system_directory); printf("Retro SAVE_DIRECTORY %s\n",retro_save_directory); printf("Retro CONTENT_DIRECTORY %s\n",retro_content_directory); enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_RGB565; if (!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) { fprintf(stderr, "RGB565 is not supported.\n"); exit(0); } Emu_init(); texture_init(); }
HRESULT CDECL wined3d_texture_create(struct wined3d_device *device, const struct wined3d_resource_desc *desc, UINT level_count, DWORD surface_flags, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_texture **texture) { struct wined3d_texture *object; HRESULT hr; TRACE("device %p, desc %p, level_count %u, surface_flags %#x, parent %p, parent_ops %p, texture %p.\n", device, desc, level_count, surface_flags, parent, parent_ops, texture); if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)))) return E_OUTOFMEMORY; switch (desc->resource_type) { case WINED3D_RTYPE_TEXTURE: hr = texture_init(object, desc, level_count, surface_flags, device, parent, parent_ops); break; case WINED3D_RTYPE_VOLUME_TEXTURE: hr = volumetexture_init(object, desc, level_count, device, parent, parent_ops); break; case WINED3D_RTYPE_CUBE_TEXTURE: hr = cubetexture_init(object, desc, level_count, surface_flags, device, parent, parent_ops); break; default: ERR("Invalid resource type %s.\n", debug_d3dresourcetype(desc->resource_type)); hr = WINED3DERR_INVALIDCALL; break; } if (FAILED(hr)) { WARN("Failed to initialize texture, returning %#x.\n", hr); HeapFree(GetProcessHeap(), 0, object); return hr; } TRACE("Created texture %p.\n", object); *texture = object; return WINED3D_OK; }
int pixel_init(lua_State *L) { luaL_checkversion(L); luaL_requiref(L, "pixel.framework", pixel_framework, 0); luaL_requiref(L, "pixel.texture", pixel_texture, 0); luaL_requiref(L, "pixel.shader", pixel_shader, 0); luaL_requiref(L, "pixel.renderbuffer", pixel_renderbuffer, 0); luaL_requiref(L, "pixel.matrix", pixel_matrix, 0); luaL_requiref(L, "pixel.color", pixel_color, 0); luaL_requiref(L, "pixel.geometry", pixel_geometry, 0); luaL_requiref(L, "pixel.sprite", pixel_sprite, 0); luaL_requiref(L, "pixel.spritepack", pixel_spritepack, 0); luaL_requiref(L, "pixel.particle", pixel_particle, 0); lua_settop(L, 0); shader_init(); texture_init(); label_init(0); return 0; }
/************* * DESCRIPTION: Load hyper texture and init it * INPUT: filename texture filename * path texture path * OUTPUT: ERR_NONE if ok, else error number *************/ int HYPER_TEXTURE::Load(RSICONTEXT *rc, char *filename, char *path) { char buffer[256]; #ifndef __AMIGA__ INITPROC texture_init; #endif // __AMIGA__ if(!ExpandPath(path,filename,buffer)) return ERR_OPENTEXTUREFILE; #ifdef __AMIGA__ Base = OpenLibrary(buffer, 0); if(!Base) return ERR_OPENTEXTUREFILE; TextureBase = Base; #else // __AMIGA__ if (!(hLib = LoadLibrary(buffer))) return ERR_OPENTEXTUREFILE; if (!(texture_init = (INITPROC)GetProcAddress(hLib, "texture_init"))) return ERR_OPENTEXTUREFILE; #endif // __AMIGA__ tinfo = texture_init(); data = new UBYTE[tinfo->datasize]; if(!data) { tinfo->cleanup(tinfo); #ifdef __AMIGA__ CloseLibrary(Base); Base = NULL; #else // __AMIGA__ FreeLibrary(hLib); hLib = NULL; #endif // __AMIGA__ return ERR_MEM; } // copy default parameters memcpy(data, tinfo->defaultdata, tinfo->datasize); return ERR_NONE; }
int fbo_create(fbo *fbo, unsigned int w, unsigned int h) { // Texture and Renderbuffer object (RBO) rbo_create(&fbo->rbo, w, h); texture_create(&fbo->tex); texture_init(&fbo->tex, 0, w, h); // Create FBO glGenFramebuffers(1, &fbo->id); glBindFramebuffer(GL_FRAMEBUFFER, fbo->id); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fbo->tex.id, 0); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, fbo->rbo.id); // Make sure everything worked. int status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if(status != GL_FRAMEBUFFER_COMPLETE) { PERROR("Unable to create fbo: %s.", fbo_get_status(status)); return 1; } return 0; }
int font_load(font *font, const char* filename, unsigned int size) { sd_rgba_image *img; sd_font *sdfont; int pixsize; texture *tex; // Find vertical size switch(size) { case FONT_BIG: pixsize = 8; break; case FONT_SMALL: pixsize = 6; break; default: return 1; } // Open font file sdfont = sd_font_create(); if(sd_font_load(sdfont, filename, pixsize)) { sd_font_delete(sdfont); return 2; } // Load into textures img = sd_rgba_image_create(pixsize, pixsize); for(int i = 0; i < 224; i++) { tex = malloc(sizeof(texture)); sd_font_decode(sdfont, img, i, 0xFF, 0xFF, 0xFF); texture_create(tex); texture_init(tex, img->data, img->w, img->h); vector_append(&font->textures, &tex); } // Set font info vars font->w = pixsize; font->h = pixsize; font->size = size; // Free resources sd_rgba_image_delete(img); sd_font_delete(sdfont); return 0; }
int load_image( texture_image_t * image, int mipmaps ) //, float gamma ) { int format = 0; ILboolean rv; texture_init(); ilGenImages(1, &image->id); ilBindImage(image->id); rv = ilLoadImage(image->path); if (rv == IL_false) return -1; if(mipmaps==0) { rv = iluBuildMipmaps(); if (rv == IL_false) return -1; } //else //{ // // TODO - use iluScale to ensure power of two //} //rv = iluGammaCorrect( gamma ); //if (rv == IL_false) // return -1; image->w = ilGetInteger(IL_IMAGE_WIDTH); image->h = ilGetInteger(IL_IMAGE_HEIGHT); format = ilGetInteger(IL_IMAGE_FORMAT); // by projectx convention // textures that we want to color key are rbga if(format == IL_RGBA) image->colorkey = 1; // true else image->colorkey = 0; // false image->size = image->w * image->h * IMAGE_COMPONENTS * sizeof(unsigned char); image->data = (ILubyte *)malloc(image->size); ilCopyPixels(0, 0, 0, image->w, image->h, 1, IL_RGBA, IL_UNSIGNED_BYTE, image->data); return 0; }
void retro_init(void) { const char *system_dir = NULL; if (environ_cb(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &system_dir) && system_dir) { // if defined, use the system directory retro_system_directory=system_dir; } const char *content_dir = NULL; if (environ_cb(RETRO_ENVIRONMENT_GET_CONTENT_DIRECTORY, &content_dir) && content_dir) { // if defined, use the system directory retro_content_directory=content_dir; } const char *save_dir = NULL; if (environ_cb(RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY, &save_dir) && save_dir) { // If save directory is defined use it, otherwise use system directory retro_save_directory = *save_dir ? save_dir : retro_system_directory; } else { // make retro_save_directory the same in case RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY is not implemented by the frontend retro_save_directory=retro_system_directory; } if(retro_system_directory==NULL)sprintf(RETRO_DIR, "%s\0","."); else sprintf(RETRO_DIR, "%s\0", retro_system_directory); printf("Retro SYSTEM_DIRECTORY %s\n",retro_system_directory); printf("Retro SAVE_DIRECTORY %s\n",retro_save_directory); printf("Retro CONTENT_DIRECTORY %s\n",retro_content_directory); enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_RGB565; if (!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) { fprintf(stderr, "RGB565 is not supported.\n"); exit(0); } struct retro_input_descriptor inputDescriptors[] = { { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "A" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "B" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "X" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "Y" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "Right" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "Left" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "Up" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "Down" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "R" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "L" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2, "R2" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "L2" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R3, "R3" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L3, "L3" } }; environ_cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, &inputDescriptors); Emu_init(); texture_init(); }
init_all() { u_long *dop; GsDOBJ2 *objp; int i; ResetGraph(0); PadInit(0); GsInitVcount(); padd = 0; ismip = 0; GsInitGraph(320, 240, GsNONINTER | GsOFSGPU, 1, 0); GsDefDispBuff(0, 0, 0, 240); GsInit3D(); Wot[0].length = OT_LENGTH; Wot[0].org = zsorttable[0]; Wot[1].length = OT_LENGTH; Wot[1].org = zsorttable[1]; /* 座標定義 */ GsInitCoordinate2(WORLD, &DWorld); PWorld.vx = 70*ONE/360; PWorld.vy = PWorld.vz = 0; DWorld.coord.t[2] = -400; /* モデリングデータ読み込み */ dop = (u_long *) MODEL_ADDR; dop++; GsMapModelingData(dop); dop++; Objnum = *dop; dop++; for (i = 0; i < Objnum; i++) GsLinkObject4((u_long) dop, &object[i], i); for (i = 0, objp = object; i < Objnum; i++, objp++) { objp->coord2 = &DWorld; objp->attribute = 0; } /* 視点設定 */ GsSetProjection(250); view.vpx = 0; view.vpy = 000; view.vpz = 400; view.vrx = 0; view.vry = 0; view.vrz = 0; view.rz = 0; view.super = WORLD; GsSetRefView2(&view); /* 平行光源設定 */ pslt[0].vx = 0; pslt[0].vy = 0; pslt[0].vz = -100; pslt[0].r = 0xf0; pslt[0].g = 0xf0; pslt[0].b = 0xf0; GsSetFlatLight(0, &pslt[0]); pslt[1].vx = 0; pslt[1].vy = 100; pslt[1].vz = -100; pslt[1].r = 0xf0; pslt[1].g = 0xf0; pslt[1].b = 0xf0; GsSetFlatLight(1, &pslt[1]); pslt[2].vx = 0; pslt[2].vy = 100; pslt[2].vz = 0; pslt[2].r = 0x60; pslt[2].g = 0x60; pslt[2].b = 0x60; GsSetFlatLight(2, &pslt[2]); GsSetAmbient(0, 0, 0); GsSetLightMode(0); /* テクスチャデータの読み込み */ texture_init(TEX_ADDR); texture_init(TEX_ADDR1); /* デバッグプリントの準備 */ KanjiFntOpen(-120,-100,256,200,896,0,768,256,0,512); }
//extern void drawModelSetMax(void); int glInit(void){ cvar_register(&cvar_gl_MSAA_Samples); cvar_pset(&cvar_gl_MSAA_Samples, "0"); // console_printf("cvar id is %i\n", cvar_gl_MSAA_Samples.myid); // console_printf("cvar name is %s\n", cvar_gl_MSAA_Samples.name); // console_printf("cvar value is %s\n", cvar_gl_MSAA_Samples.valuestring); glewExperimental = TRUE; GLenum glewError = glewInit(); CHECKGLERROR if(glewError != GLEW_OK){ console_printf("ERROR with the glew: %s\n", glewGetErrorString(glewError)); return FALSE; } shader_init(); CHECKGLERROR if(!shader_ok){ //todo call some sort of shutdown of everything return FALSE; } texture_init(); CHECKGLERROR if(!texture_ok){ //todo call some sort of shutdown of everything return FALSE; } framebuffer_init(); CHECKGLERROR if(!framebuffer_ok){ //todo call some sort of shutdown of everything return FALSE; } vbo_init(); CHECKGLERROR if(!vbo_ok){ return FALSE; //todo call some sort of shutdown of everything } ubo_init(); CHECKGLERROR if(!ubo_ok){ return FALSE; //todo call some sort of shutdown of everything } anim_init(); CHECKGLERROR if(!anim_ok){ //todo call some sort of shutdown of everything return FALSE; } model_init(); CHECKGLERROR if(!model_ok){ //todo call some sort of shutdown of everything return FALSE; } /* initParticleSystem(128); if(!particlesOK){ //todo call some sort of shutdown of everything return FALSE; } */ light_init(); CHECKGLERROR if(!light_ok){ //todo call some sort of shutdown of everything return FALSE; } lighttile_init(); CHECKGLERROR if(!lighttile_ok){ //todo call some sort of shutdown of everything return FALSE; } viewport_init(); CHECKGLERROR if(!viewport_ok){ //todo call some sort of shutdown of everything return FALSE; } text_init(); CHECKGLERROR if(!text_ok){ //todo call some sort of shutdown of everything return FALSE; } rendermodel_init(); CHECKGLERROR //todo errorcheck drawbb_init(); CHECKGLERROR //todo errorcheck states_enableForce(GL_MULTISAMPLE); glClearDepth(1.0); glClearColor(0.0, 0.0, 0.0, 0.0); CHECKGLERROR // states_disableForce(GL_FOG); states_enableForce(GL_DEPTH_TEST); CHECKGLERROR // glDepthFunc(GL_LESS); states_depthFunc(GL_LESS); states_enableForce(GL_CULL_FACE); states_cullFace(GL_BACK); // states_depthMask(GL_TRUE); int maxSamples = 0, maxIntSamples = 0, maxColorTextureSamples = 0, maxDepthTextureSamples = 0; glGetIntegerv(GL_MAX_SAMPLES, &maxSamples); glGetIntegerv(GL_MAX_INTEGER_SAMPLES, &maxIntSamples); glGetIntegerv(GL_MAX_COLOR_TEXTURE_SAMPLES, &maxColorTextureSamples); glGetIntegerv(GL_MAX_DEPTH_TEXTURE_SAMPLES, &maxDepthTextureSamples); maxMSAASamples = maxSamples; if(maxIntSamples < maxMSAASamples) maxMSAASamples = maxIntSamples; if(maxColorTextureSamples < maxMSAASamples) maxMSAASamples = maxColorTextureSamples; if(maxDepthTextureSamples < maxMSAASamples) maxMSAASamples = maxDepthTextureSamples; console_printf("Max multisample samples: %i\n", maxMSAASamples); cam = createAndAddViewportRPOINT("cam", 1); camid = cam->myid; cam->outfbid = findFramebufferByNameRINT("screen"); unsigned char dflags[] = {3, 7, 3}; // unsigned char drb = FRAMEBUFFERRBFLAGSDEPTH| 2; unsigned char drb = FRAMEBUFFERRBFLAGSDEPTH; unsigned char dcount = 3; cam->dfbid = createAndAddFramebufferRINT("screend", dcount, drb, dflags); resizeViewport(cam, 800, 600); screenWidth = 800; screenHeight = 600; glGenBuffers(1, &instancevbo); glGenBuffers(1, &instancevbo2); //temporary CHECKGLERROR vbo_t * tvbo = createAndAddVBORPOINT("text", 2); textvbo = tvbo->myid; textshaderid = shader_createAndAddRINT("text"); fsblendshaderid = shader_createAndAddRINT("fsblend"); depthonlyid = shader_createAndAddRINT("depthmodel"); forwardmodelid = shader_createAndAddRINT("forwardmodel"); fsquadmodel = model_findByNameRINT("fsquad"); readyRenderQueueBuffers(); return TRUE; // so far so good }
/************* * DESCRIPTION: Load Imagine texture and init it * INPUT: filename texture filename * path texture path * OUTPUT: ERR_NONE if ok, else error number *************/ int IMAGINE_TEXTURE::Load(RSICONTEXT *rc, char *filename, char *path) { #ifdef __AMIGA__ IM_TTABLE* (*texture_init)(LONG arg0); #endif // __AMIGA__ char buffer[256]; texture = rc->text_root->FindIMTexture(filename); if(!texture) { /* don't found the texture => load it again */ texture = new IM_TEXT; if(!texture) return ERR_MEM; /* Load Imagine texture */ if(!ExpandPath(path,filename,buffer)) { delete texture; return ERR_OPENTEXTUREFILE; } #ifdef __AMIGA__ texture->seglist = LoadSeg(buffer); if(!texture->seglist) { delete texture; return ERR_OPENTEXTUREFILE; } *(ULONG*)(&texture_init) = 4*texture->seglist+4; #ifdef __PPC__ texture->ttable = ppc_texture_init(texture_init, 0x60FFFF); #else texture->ttable = texture_init(0x60FFFF); #endif // __PPC__ #else texture->ttable = NULL; INQUIRETEXTURE InquireTexture; texture->hInst = LoadLibrary(buffer); if (!texture->hInst) { delete texture; return ERR_INITTEXTURE; } InquireTexture = (INQUIRETEXTURE)GetProcAddress(texture->hInst, "InquireTexture"); if (!InquireTexture) { delete texture; return ERR_INITTEXTURE; } texture->ttable = InquireTexture(0x70, 0x1); #endif if(!texture->ttable) { #ifndef __WATCOMC__ delete texture; #endif return ERR_INITTEXTURE; } texture->name = new char[strlen(filename)+1]; if(!texture->name) { delete texture; return ERR_MEM; } strcpy(texture->name,filename); texture->Insert(rc); } /* Copy default parameters */ memcpy(param, texture->ttable->params, 16*sizeof(float)); /* Copy default geometry */ memcpy(&pos, texture->ttable->tform, 5*sizeof(VECTOR)); return ERR_NONE; }
void game_font_init() { DEBUG30(":: font init start"); float scale = 1.0; int seg; int ch; int ch_bit; // // FAT FONT #1 (OK) // float scales[4] = { 0.4, 0.6, 0.2, 2 }; // 2,1,1,1 // float pows[4] = { 15.0, 19.0, 200.0, 22.0 }; // float ks1[4] = { 1.2, 1.0, 1.2, 0.90 }; // 0.75 straight // float ks2[4] = { -1.0, -1.0, -1.0, -1.0 }; // float pows1[4] = { 1.0, 0.79, 1.0, 1.0 }; // float pows2[4] = { 1.0, 0.79, 1.0, 1.0 }; // float clamp1[4] = { 0.8, 0.75, 0.65, 0.87 }; // 0.8 to 0.86 // float clamp2[4] = { 0.85, 0.85, 0.85, 0.92 }; // float radiuses[4] = { 1.0, 1.1, 1.2, 0.87 }; float scales[4] = { 0.4, 0.6, 0.2, 2 }; // 2,1,1,1 //float pows[4] = { 45.0, 100.0, 200.0, 22.0 }; float pows[4] = { 15.0, 15.0, 15.0, 22.0 }; float ks1[4] = { 1.0, 1.2, 1.2, 0.90 }; // 0.75 straight float ks2[4] = { -1.0, -1.0, -1.0, -1.0 }; float pows1[4] = { 1.3, 1.0, 1.0, 1.0 }; float pows2[4] = { 1.2, 0.9, 1.0, 1.0 }; float clamp1[4] = { 0.7, 0.79, 0.65, 0.87 }; // 0.8 to 0.86 float clamp2[4] = { 0.9, 0.85, 0.85, 0.92 }; float radiuses[4] = { 0.93, 0.93, 1.2, 0.87 }; float colors_r[4] = { 1.0, 0.3, 1.0, 0.3 }; float colors_g[4] = { 1.0, 0.6, 1.0, 0.6 }; float colors_b[4] = { 1.0, 1.0, 1.0, 0.9 }; // 1: 0.5, 0.74, 0.79 DEBUG20(":: font init label-a"); int font_index = 0; int font_index_color = 0; for (font_index_color = 0; font_index_color < FONTS_COUNT; font_index_color++) { font_index = font_index_color % 3; DEBUG30f(":: font init label-b (font index %d) \n", font_index); scale = scales[font_index]; rs_gen_reg.cell_scale = scale; int char_tex_size = scale*32; // DEBUG10f("char_tex_size %d \n", char_tex_size); rs_gen_init(97, char_tex_size); for (seg = 0; seg < 32; seg++) { rs_gen_func_cell(seg, 1, 2, &pp_seg[8*seg], ks1[font_index], pows1[font_index], ks2[font_index], pows2[font_index], 0.0, 0.0); //rs_gen_func_cell(seg, 1, 2, &pp_seg[8*seg], 1.2, 1.0, -1.0, 1.0, 0.0, 0.0); //rs_gen_func_cell(seg, 1, 2, &pp_seg[8*seg], 0.48450032, 1.0, -1.0, 2.20, 0.0, 0.0); // toon rs_gen_func_normalize(seg, 0.0, 1.0); // 0.1 to 1.0 rs_gen_func_clamp(seg, clamp1[font_index], clamp2[font_index]); // 0.8, 0.86); // toon 0.775, 0.839889 rs_gen_func_normalize(seg, 0.0, 1.0); // 0.1 to 1.0 rs_gen_func_set(96, 0.0); rs_gen_func_radial(96, (float)pp_seg[8*seg + 4]/32.0, (float)pp_seg[8*seg + 5]/32.0, (float)pp_seg[8*seg + 6]/32.0*radiuses[font_index], 1.0, pows[font_index]); rs_gen_func_mult(seg, seg, 96); }; for (ch = 0; ch < 64; ch++) { rs_gen_func_set(32+ch, 0.0); for (ch_bit = 0; ch_bit < 32; ch_bit++) { if ( (1<<ch_bit) & (ch_seg[ch]) ) { rs_gen_func_add_lerped(32+ch, 32+ch, ch_bit, 1.0, 1.0); } } rs_gen_func_clamp(32+ch, (ch+ch/8)%2 ? 0.0 : 0.0, 1.0); // rs_gen_func_set(32+ch, (ch+ch/8)%2 ? 0.5 : 0.0); rs_gen_tex_out_rgba_set(0.0, 0.0, 0.0, 0.0); rs_gen_tex_out_rgba(32+ch, 32+ch, 32+ch, 32+ch, colors_b[font_index_color], colors_g[font_index_color], colors_r[font_index_color], 1.0); texture_init(&game.tex_font[font_index_color*64 + ch], char_tex_size, char_tex_size); memcpy(game.tex_font[font_index_color*64 + ch].data, rs_gen_reg.tex_out, char_tex_size*char_tex_size*4 ); } /* float *fontdata = malloc(256*scale*256*scale*4); int i, j, k; for (i = 0; i < 8; i++) { for (j = 0; j < 8; j++) { for (k = 0; k < 32*scale; k++) { memcpy( &(fontdata[i*256*(32*scale)*scale + k*256*scale + (j)*(32*scale)]), &(rs_gen_reg.tex[k*(32*scale) + (32+j+i*8)*(32*scale)*(32*scale)] ), 32*4*scale ); }; }; }; rs_gen_term(); int font_tex_size = 256*scale; rs_gen_init(2, font_tex_size); memcpy( rs_gen_reg.tex, fontdata, 256*256 * 4 *scale*scale); rs_gen_func_set(1, 1.0); rs_gen_tex_out_rgba_set(0.0, 0.0, 0.0, 0.0); rs_gen_tex_out_rgba(1, 1, 1, 0, 1.0, 1.0, 1.0, 1.0); //game.font_texture[font_index] = rs_tx_create_from_data(font_tex_size, font_tex_size, 4, 1, 0, rs_gen_reg.tex_out); game_loader_create_texture( &(game.font_texture[font_index]), font_tex_size, font_tex_size, 4, 1, 0, rs_gen_reg.tex_out ); save_image(0, rs_gen_reg.tex_out, 256*scale, 256*scale, 4); */ rs_gen_term(); // free(fontdata); // // game.loader_progress = font_index+2; }; rs_gen_reg.cell_scale = 1; };