From ac14fc209187904b49d4de2d799c4a46a2330be2 Mon Sep 17 00:00:00 2001 From: danij Date: Tue, 15 Mar 2011 18:59:52 +0000 Subject: [PATCH] Further preparatory refactoring and clean up for texture atlases. I decided to tackle some of the remaining issues before attempting to merge the atlas stuff. Still a little more to be done however. --- doomsday/engine/api/dd_share.h | 144 +++--- doomsday/engine/api/dd_uri.h | 2 + doomsday/engine/api/doomsday.def | 20 +- doomsday/engine/api/doomsday.h | 19 +- doomsday/engine/portable/include/dd_main.h | 3 + .../engine/portable/include/gl_texmanager.h | 13 +- .../portable/include/p_materialmanager.h | 79 ++-- doomsday/engine/portable/include/r_data.h | 2 +- doomsday/engine/portable/src/bitmapfont.c | 2 +- doomsday/engine/portable/src/cl_oldworld.c | 8 +- doomsday/engine/portable/src/dam_file.c | 2 +- doomsday/engine/portable/src/dd_main.c | 40 +- doomsday/engine/portable/src/def_main.c | 16 +- doomsday/engine/portable/src/def_read.c | 30 +- .../engine/portable/src/finaleinterpreter.c | 8 +- doomsday/engine/portable/src/gl_texmanager.c | 222 +++++----- doomsday/engine/portable/src/p_material.c | 2 +- .../engine/portable/src/p_materialmanager.c | 417 ++++++++---------- doomsday/engine/portable/src/r_data.c | 31 +- doomsday/engine/portable/src/r_draw.c | 2 +- doomsday/engine/portable/src/r_sky.c | 4 +- doomsday/engine/portable/src/r_things.c | 4 +- doomsday/engine/portable/src/rend_console.c | 2 +- doomsday/engine/portable/src/rend_main.c | 20 +- doomsday/engine/portable/src/rend_model.c | 2 +- doomsday/engine/portable/src/rend_sky.c | 8 +- doomsday/engine/portable/src/rend_sprite.c | 4 +- .../engine/portable/src/resourcenamespace.c | 14 +- doomsday/engine/portable/src/uri.c | 10 + doomsday/plugins/common/src/hu_stuff.c | 2 +- doomsday/plugins/common/src/p_mapsetup.c | 2 +- doomsday/plugins/common/src/p_saveg.c | 8 +- doomsday/plugins/common/src/p_svtexarc.c | 27 +- doomsday/plugins/common/src/p_switch.c | 16 +- doomsday/plugins/common/src/p_terraintype.c | 30 +- doomsday/plugins/common/src/p_xgsave.c | 4 +- doomsday/plugins/jdoom/src/m_cheat.c | 4 +- doomsday/plugins/jdoom/src/p_oldsvg.c | 4 +- doomsday/plugins/jdoom/src/p_spec.c | 152 +++---- doomsday/plugins/jdoom64/src/m_cheat.c | 4 +- doomsday/plugins/jdoom64/src/p_spec.c | 152 +++---- doomsday/plugins/jheretic/src/in_lude.c | 2 +- doomsday/plugins/jheretic/src/m_cheat.c | 4 +- doomsday/plugins/jheretic/src/p_oldsvg.c | 4 +- doomsday/plugins/jheretic/src/p_spec.c | 152 +++---- doomsday/plugins/jhexen/src/m_cheat.c | 4 +- doomsday/plugins/jhexen/src/p_acs.c | 20 +- doomsday/plugins/jhexen/src/p_anim.c | 55 +-- doomsday/plugins/jhexen/src/p_mapinfo.c | 10 +- doomsday/plugins/wadmapconverter/src/load.c | 6 +- 50 files changed, 890 insertions(+), 902 deletions(-) diff --git a/doomsday/engine/api/dd_share.h b/doomsday/engine/api/dd_share.h index d6d31926fb..2cdc7057dd 100644 --- a/doomsday/engine/api/dd_share.h +++ b/doomsday/engine/api/dd_share.h @@ -930,25 +930,109 @@ typedef struct { // //------------------------------------------------------------------------ -// Texture Namespaces -#define TEXTURES_SYSTEM_RESOURCE_NAMESPACE_NAME "System" -#define TEXTURES_FLATS_RESOURCE_NAMESPACE_NAME "Flats" -#define TEXTURES_SPRITES_RESOURCE_NAMESPACE_NAME "Sprites" -#define TEXTURES_PATCHES_RESOURCE_NAMESPACE_NAME "Patches" -#define TEXTURES_TEXTURES_RESOURCE_NAMESPACE_NAME "Textures" +/** + * @defgroup materialFlags Material Flags + * @{ + */ +#define MATF_CUSTOM 0x0001 // Material is not derived from an IWAD resource (directly, at least). +#define MATF_NO_DRAW 0x0002 // Material should never be drawn. +#define MATF_SKYMASK 0x0004 // Sky-mask surfaces using this material. +/**@{*/ + +#define DDMAX_MATERIAL_LAYERS 1 + +/** + * @defgroup animationGroupFlags Animation Group Flags + * @{ + */ +#define AGF_SMOOTH 0x1 +#define AGF_FIRST_ONLY 0x2 +#define AGF_PRECACHE 0x4000 // Group is just for precaching. +/**@}*/ + +/** + * Material Namespaces + */ + +/** + * @defgroup materialNamespaceNames Material Namespace Names + * @{ + */ +#define MN_SYSTEM_NAME "System" +#define MN_FLATS_NAME "Flats" +#define MN_TEXTURES_NAME "Textures" +#define MN_SPRITES_NAME "Sprites" +/**@}*/ + +typedef enum { + MN_ANY = -1, + MATERIALNAMESPACE_FIRST = 1000, + MN_SYSTEM = MATERIALNAMESPACE_FIRST, + MN_FLATS, + MN_TEXTURES, + MN_SPRITES, + MATERIALNAMESPACE_LAST = MN_SPRITES +} materialnamespaceid_t; + +#define MATERIALNAMESPACE_COUNT (\ + MATERIALNAMESPACE_LAST + 1 - MATERIALNAMESPACE_FIRST ) + +#define VALID_MATERIALNAMESPACE(id) (\ + (id) >= MATERIALNAMESPACE_FIRST && (id) <= MATERIALNAMESPACE_LAST) + +/** + * Texture Namespaces + */ + +/** + * @defgroup textureNamespaceNames Texture Namespace Names + * @{ + */ +#define TN_SYSTEM_NAME "System" +#define TN_FLATS_NAME "Flats" +#define TN_TEXTURES_NAME "Textures" +#define TN_SPRITES_NAME "Sprites" +#define TN_PATCHES_NAME "Patches" +/**@{*/ typedef enum { TN_ANY = -1, - TEXTURENAMESPACE_FIRST = 0, + TEXTURENAMESPACE_FIRST = 2000, TN_SYSTEM = TEXTURENAMESPACE_FIRST, TN_FLATS, TN_TEXTURES, - TN_PATCHES, TN_SPRITES, - TEXTURENAMESPACE_COUNT + TN_PATCHES, + TEXTURENAMESPACE_LAST = TN_PATCHES } texturenamespaceid_t; -#define VALID_TEXTURENAMESPACEID(id)((id) >= TEXTURENAMESPACE_FIRST && (id) < TEXTURENAMESPACE_COUNT) +#define TEXTURENAMESPACE_COUNT (\ + TEXTURENAMESPACE_LAST + 1 - TEXTURENAMESPACE_FIRST ) + +#define VALID_TEXTURENAMESPACE(id) (\ + (id) >= TEXTURENAMESPACE_FIRST && (id) <= TEXTURENAMESPACE_LAST) + +typedef struct { + patchid_t id; + boolean isCustom; // @c true if the patch does not originate from an IWAD. + short offset; + short topOffset; + short width; + short height; + // Temporary until the big DGL drawing rewrite. + short extraOffset[2]; // Only used with upscaled and sharpened patches. +} patchinfo_t; + +typedef struct { + struct material_s* material; + int flip; + int offset; + int topOffset; + int width; + int height; + float texCoord[2]; // Prepared texture coordinates. + int numFrames; // Number of frames the sprite has. +} spriteinfo_t; /** * Processing modes for GL_LoadGraphics. @@ -960,46 +1044,6 @@ typedef enum gfxmode_e { LGM_WHITE_ALPHA = 3 } gfxmode_t; -#define DDMAX_MATERIAL_LAYERS 1 - -// Material Namespaces -#define MATERIALS_SYSTEM_RESOURCE_NAMESPACE_NAME "System" -#define MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME "Flats" -#define MATERIALS_SPRITES_RESOURCE_NAMESPACE_NAME "Sprites" -#define MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME "Textures" - -// Material flags: -#define MATF_CUSTOM 0x0001 // Material is not derived from an IWAD resource (directly, at least). -#define MATF_NO_DRAW 0x0002 // Material should never be drawn. -#define MATF_SKYMASK 0x0004 // Sky-mask surfaces using this material. - -// Animation group flags. -#define AGF_SMOOTH 0x1 -#define AGF_FIRST_ONLY 0x2 -#define AGF_PRECACHE 0x4000 // Group is just for precaching. - -typedef struct { - patchid_t id; - boolean isCustom; // @c true if the patch does not originate from an IWAD. - short offset; - short topOffset; - short width; - short height; - // temporary until the big DGL drawing rewrite. - short extraOffset[2]; // Only used with upscaled and sharpened patches. -} patchinfo_t; - -typedef struct { - struct material_s* material; - int flip; - int offset; - int topOffset; - int width; - int height; - float texCoord[2]; // Prepared texture coordinates. - int numFrames; // Number of frames the sprite has. -} spriteinfo_t; - typedef unsigned int colorpaletteid_t; //------------------------------------------------------------------------ diff --git a/doomsday/engine/api/dd_uri.h b/doomsday/engine/api/dd_uri.h index 9d73a6eaa9..79456ff5b6 100644 --- a/doomsday/engine/api/dd_uri.h +++ b/doomsday/engine/api/dd_uri.h @@ -43,6 +43,8 @@ const ddstring_t* Uri_Scheme(const dduri_t* uri); const ddstring_t* Uri_Path(const dduri_t* uri); void Uri_SetScheme(dduri_t* uri, const char* scheme); +void Uri_SetPath(dduri_t* uri, const char* path); + void Uri_SetUri3(dduri_t* uri, const char* path, resourceclass_t defaultResourceClass); void Uri_SetUri2(dduri_t* uri, const char* path); void Uri_SetUri(dduri_t* uri, const ddstring_t* path); diff --git a/doomsday/engine/api/doomsday.def b/doomsday/engine/api/doomsday.def index 3b7291782a..d8d21b391e 100644 --- a/doomsday/engine/api/doomsday.def +++ b/doomsday/engine/api/doomsday.def @@ -1,7 +1,7 @@ ; Doomsday Engine API (Routines exported from Doomsday.exe). ; -; Highest ordinal is currently: --> 499 <-- -; Other free ordinals: 30, 437 +; Highest ordinal is currently: --> 503 <-- +; Other free ordinals: 30, 336 NAME "DOOMSDAY" EXPORTS @@ -21,6 +21,8 @@ EXPORTS DD_GetVariable @43 NONAME DD_GetPlayer @44 NONAME DD_MaterialForTextureIndex @234 NONAME + DD_ParseTextureNamespace @502 NONAME + DD_ParseMaterialNamespace @503 NONAME ; Base: Types. ; Animator. @@ -88,6 +90,8 @@ EXPORTS Uri_ComposePath @488 NONAME Uri_ToString @489 NONAME Uri_Equality @493 NONAME + Uri_SetPath @437 NONAME + Uri_SetScheme @500 NONAME ; Base: Definitions. Def_Get @11 NONAME @@ -334,11 +338,10 @@ EXPORTS P_SetPolyobjCallback @83 NONAME ; Play: Materials. - Materials_GetName @337 NONAME - Materials_GetPath @494 NONAME - Materials_CheckNumForName @495 NONAME - Materials_NumForName2 @336 NONAME - Materials_NumForName @496 NONAME + Materials_GetSymbolicName @337 NONAME + Materials_GetUri @494 NONAME + Materials_IndexForName @495 NONAME + Materials_IndexForUri @496 NONAME Materials_Precache @436 NONAME Materials_CreateAnimGroup @241 NONAME Materials_AddAnimGroupFrame @242 NONAME @@ -463,7 +466,8 @@ EXPORTS GL_GrabScreen @109 NONAME GL_SetFilter @132 NONAME GL_SetFilterColor @441 NONAME - GL_TextureIndexForName @438 NONAME + GL_GLTextureIndexForUri @438 NONAME + GL_GLTextureIndexForUri2 @501 NONAME ; Graphics: Text FR_FontIdForName @106 NONAME diff --git a/doomsday/engine/api/doomsday.h b/doomsday/engine/api/doomsday.h index e52f99f349..f59c2fdf35 100644 --- a/doomsday/engine/api/doomsday.h +++ b/doomsday/engine/api/doomsday.h @@ -133,7 +133,10 @@ boolean DD_GetGameInfo(ddgameinfo_t* info); void* DD_GetVariable(int ddvalue); ddplayer_t* DD_GetPlayer(int number); - materialnum_t DD_MaterialForTextureIndex(uint index, texturenamespaceid_t texNamespace); +texturenamespaceid_t DD_ParseTextureNamespace(const char* str); +materialnamespaceid_t DD_ParseMaterialNamespace(const char* str); + +materialnum_t DD_MaterialForTextureIndex(uint index, texturenamespaceid_t texNamespace); // Base: Definitions. int Def_Get(int type, const char* id, void* out); @@ -414,13 +417,11 @@ void Con_SetString(const char* name, char* text); void P_SetPolyobjCallback(void (*func)(struct mobj_s*, void*, void*)); // Play: Materials. - materialnum_t Materials_CheckNumForName2(const dduri_t* path); - materialnum_t Materials_CheckNumForName(const char* path); - materialnum_t Materials_NumForName2(const dduri_t* path); - materialnum_t Materials_NumForName(const char* path); - dduri_t* Materials_GetPath(material_t* mat); + materialnum_t Materials_IndexForUri(const dduri_t* uri); + materialnum_t Materials_IndexForName(const char* path); + dduri_t* Materials_GetUri(material_t* mat); - const char* Materials_GetName(material_t* mat); + const char* Materials_GetSymbolicName(material_t* mat); void Materials_Precache(material_t* mat, boolean yes); int Materials_CreateAnimGroup(int flags); void Materials_AddAnimGroupFrame(int groupNum, materialnum_t num, int tics, int randomTics); @@ -480,7 +481,9 @@ void Con_SetString(const char* name, char* text); byte* GL_GrabScreen(void); void GL_SetFilter(boolean enable); void GL_SetFilterColor(float r, float g, float b, float a); - uint GL_TextureIndexForName(const char* name, texturenamespaceid_t texNamespace); + +uint GL_GLTextureIndexForUri(const dduri_t* uri); +uint GL_GLTextureIndexForUri2(const dduri_t* uri, boolean silent); //------------------------------------------------------------------------ // diff --git a/doomsday/engine/portable/include/dd_main.h b/doomsday/engine/portable/include/dd_main.h index e340492bba..1f950e5321 100644 --- a/doomsday/engine/portable/include/dd_main.h +++ b/doomsday/engine/portable/include/dd_main.h @@ -79,6 +79,9 @@ void* DD_GetVariable(int ddvalue); ddplayer_t* DD_GetPlayer(int number); +texturenamespaceid_t DD_ParseTextureNamespace(const char* str); +materialnamespaceid_t DD_ParseMaterialNamespace(const char* str); + materialnum_t DD_MaterialForTextureIndex(uint index, texturenamespaceid_t texNamespace); const char* value_Str(int val); diff --git a/doomsday/engine/portable/include/gl_texmanager.h b/doomsday/engine/portable/include/gl_texmanager.h index a889b3dab6..c9f7f857bb 100644 --- a/doomsday/engine/portable/include/gl_texmanager.h +++ b/doomsday/engine/portable/include/gl_texmanager.h @@ -252,17 +252,18 @@ boolean GL_OptimalTextureSize(int width, int height, boolean noStretch, void GL_ReleaseGLTexture(gltextureid_t id); -const struct gltexture_s* GL_GetGLTexture(gltextureid_t id); +const struct gltexture_s* GL_ToGLTexture(gltextureid_t id); const struct gltexturevariant_s* GL_PrepareGLTexture(gltextureid_t id, void* context, byte* result); -uint GL_TextureIndexForName(const char* name, texturenamespaceid_t texNamespace); - const struct gltexture_s* GL_CreateGLTexture(const char* name, uint index, gltexture_type_t type); -const struct gltexture_s* GL_GetGLTextureByName(const char* name, texturenamespaceid_t texNamespace); -const struct gltexture_s* GL_GetGLTextureByUri(const dduri_t* uri); +const struct gltexture_s* GL_GLTextureByUri2(const dduri_t* uri, boolean silent); +const struct gltexture_s* GL_GLTextureByUri(const dduri_t* uri); + +const struct gltexture_s* GL_GLTextureByIndex(int index, texturenamespaceid_t texNamespace); -const struct gltexture_s* GL_GetGLTextureByIndex(int index, texturenamespaceid_t texNamespace); +uint GL_GLTextureIndexForUri2(const dduri_t* uri, boolean silent); +uint GL_GLTextureIndexForUri(const dduri_t* uri); /** * Updates the minification mode of ALL gltextures. diff --git a/doomsday/engine/portable/include/p_materialmanager.h b/doomsday/engine/portable/include/p_materialmanager.h index f8a1b9e338..68fa38b85a 100644 --- a/doomsday/engine/portable/include/p_materialmanager.h +++ b/doomsday/engine/portable/include/p_materialmanager.h @@ -29,56 +29,79 @@ #include "def_data.h" #include "p_material.h" -void P_MaterialsRegister(void); +void P_MaterialsRegister(void); -void Materials_Initialize(void); -void Materials_Shutdown(void); +/** + * One time initialization of the materials list. + */ +void Materials_Initialize(void); + +/** + * Release all memory acquired for the materials list. + */ +void Materials_Shutdown(void); + +/** + * Find name-associated definitions for the known material bindings. + */ +void Materials_LinkAssociatedDefinitions(void); -void Materials_Ticker(timespan_t elapsed); +/** + * Deletes all GL texture instances, linked to materials. + * + * @param mnamespace @c MN_ANY = delete everything, ELSE + * Only delete those currently in use by materials in the specified namespace. + */ +void Materials_DeleteTextures(const char* namespaceName); -void Materials_DeleteTextures(const char* namespaceName); -void Materials_LinkAssociatedDefinitions(void); +void Materials_Ticker(timespan_t elapsed); -const ddstring_t* Materials_NamespaceNameForTextureNamespaceId(texturenamespaceid_t texNamespace); +const ddstring_t* Materials_NamespaceNameForTextureNamespace(texturenamespaceid_t texNamespace); -material_t* Materials_New(const dduri_t* name, short width, short height, byte flags, gltextureid_t tex, short texOriginX, short texOriginY); -material_t* Materials_NewFromDef(ded_material_t* def); +material_t* Materials_New(const dduri_t* name, short width, short height, byte flags, gltextureid_t tex, short texOriginX, short texOriginY); +material_t* Materials_NewFromDef(ded_material_t* def); -material_t* Materials_ToMaterial(materialnum_t num); +material_t* Materials_ToMaterial(materialnum_t num); -materialnum_t Materials_ToMaterialNum(const material_t* mat); +materialnum_t Materials_ToMaterialNum(const material_t* mat); -materialnum_t Materials_CheckNumForName2(const dduri_t* path); -materialnum_t Materials_CheckNumForName(const char* path); -materialnum_t Materials_NumForName2(const dduri_t* path); -materialnum_t Materials_NumForName(const char* path); +/** + * Search the Materials db for a match. + * \note Part of the Doomsday public API. + * + * @param path Path of the material to search for. + * + * @return Unique identifier of the found material, else zero. + */ +materialnum_t Materials_IndexForUri(const dduri_t* uri); +materialnum_t Materials_IndexForName(const char* path); -const char* Materials_GetName(material_t* mat); -dduri_t* Materials_GetPath(material_t* mat); +const char* Materials_GetSymbolicName(material_t* mat); +dduri_t* Materials_GetUri(material_t* mat); -void Materials_Precache(material_t* mat, boolean yes); +void Materials_Precache(material_t* mat, boolean yes); -uint Materials_Count(void); +uint Materials_Count(void); const ded_detailtexture_t* Materials_Detail(materialnum_t num); const ded_reflection_t* Materials_Reflection(materialnum_t num); const ded_decor_t* Materials_Decoration(materialnum_t num); const ded_ptcgen_t* Materials_PtcGen(materialnum_t num); -byte Materials_Prepare(struct material_snapshot_s* snapshot, material_t* mat, boolean smoothed, struct material_load_params_s* params); +byte Materials_Prepare(struct material_snapshot_s* snapshot, material_t* mat, boolean smoothed, struct material_load_params_s* params); -int Materials_AnimGroupCount(void); -void Materials_ResetAnimGroups(void); -void Materials_DestroyAnimGroups(void); +int Materials_AnimGroupCount(void); +void Materials_ResetAnimGroups(void); +void Materials_DestroyAnimGroups(void); -int Materials_CreateAnimGroup(int flags); -void Materials_AddAnimGroupFrame(int animGroupNum, materialnum_t num, int tics, int randomTics); -boolean Materials_MaterialLinkedToAnimGroup(int animGroupNum, material_t* mat); +int Materials_CreateAnimGroup(int flags); +void Materials_AddAnimGroupFrame(int animGroupNum, materialnum_t num, int tics, int randomTics); +boolean Materials_MaterialLinkedToAnimGroup(int animGroupNum, material_t* mat); // @todo Refactor interface, doesn't fit the current design. -boolean Materials_IsPrecacheAnimGroup(int groupNum); +boolean Materials_IsPrecacheAnimGroup(int groupNum); // @todo Refactor away. -void Materials_PrecacheAnimGroup(material_t* mat, boolean yes); +void Materials_PrecacheAnimGroup(material_t* mat, boolean yes); #endif /* LIBDENG2_MATERIALS_H */ diff --git a/doomsday/engine/portable/include/r_data.h b/doomsday/engine/portable/include/r_data.h index b2c989ec8e..085b95c0da 100644 --- a/doomsday/engine/portable/include/r_data.h +++ b/doomsday/engine/portable/include/r_data.h @@ -361,7 +361,7 @@ masktex_t* R_GetMaskTexture(const dduri_t* uri); void R_DestroyMaskTextures(void); // Called at shutdown. patchid_t R_PrecachePatch(const char* name, patchinfo_t* info); -patchid_t R_RegisterAsPatch(const char* name); +patchid_t R_RegisterPatch(const char* name); patchtex_t* R_PatchTextureByIndex(patchid_t id); void R_ClearPatchTexs(void); diff --git a/doomsday/engine/portable/src/bitmapfont.c b/doomsday/engine/portable/src/bitmapfont.c index 653b0b27ec..391203f9e4 100644 --- a/doomsday/engine/portable/src/bitmapfont.c +++ b/doomsday/engine/portable/src/bitmapfont.c @@ -487,7 +487,7 @@ void BitmapFont_CharSetPatch(bitmapfont_t* font, unsigned char ch, const char* p font->_chars[ch].dlist = 0; } - font->_chars[ch].patch = R_RegisterAsPatch(patchName); + font->_chars[ch].patch = R_RegisterPatch(patchName); { patchinfo_t info; R_GetPatchInfo(font->_chars[ch].patch, &info); font->_chars[ch].x = info.offset + info.extraOffset[0] + font->_marginWidth; diff --git a/doomsday/engine/portable/src/cl_oldworld.c b/doomsday/engine/portable/src/cl_oldworld.c index 94f4bded68..7f064f1958 100644 --- a/doomsday/engine/portable/src/cl_oldworld.c +++ b/doomsday/engine/portable/src/cl_oldworld.c @@ -90,8 +90,8 @@ int Cl_ReadSectorDelta(void) { material_t* mat; ddstring_t path; Str_Init(&path); - Str_Appendf(&path, MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":%s", W_LumpName(lumpNum)); - mat = Materials_ToMaterial(Materials_NumForName(Str_Text(&path))); + Str_Appendf(&path, MN_FLATS_NAME":%s", W_LumpName(lumpNum)); + mat = Materials_ToMaterial(Materials_IndexForName(Str_Text(&path))); Str_Free(&path); #if _DEBUG if(!mat) @@ -110,8 +110,8 @@ if(!mat) { material_t* mat; ddstring_t path; Str_Init(&path); - Str_Appendf(&path, MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":%s", W_LumpName(lumpNum)); - mat = Materials_ToMaterial(Materials_NumForName(Str_Text(&path))); + Str_Appendf(&path, MN_FLATS_NAME":%s", W_LumpName(lumpNum)); + mat = Materials_ToMaterial(Materials_IndexForName(Str_Text(&path))); Str_Free(&path); #if _DEBUG if(!mat) diff --git a/doomsday/engine/portable/src/dam_file.c b/doomsday/engine/portable/src/dam_file.c index 44997ae095..6b661cc52c 100644 --- a/doomsday/engine/portable/src/dam_file.c +++ b/doomsday/engine/portable/src/dam_file.c @@ -179,7 +179,7 @@ static material_t* lookupMaterialFromDict(materialdict_t* dict, int idx) dictentry_t*e = &dict->table[idx]; // if(!strncmp(Str_Text(&e->path), BADTEXNAME, 8)) return NULL; -// return Materials_ToMaterial(Materials_NumForName(Str_Text(&e->path), e->mnamespace)); +// return Materials_ToMaterial(Materials_IndexForName(Str_Text(&e->path), e->mnamespace)); } static boolean openMapFile(char* path, boolean write) diff --git a/doomsday/engine/portable/src/dd_main.c b/doomsday/engine/portable/src/dd_main.c index 88775ae1cd..2b2058e03b 100644 --- a/doomsday/engine/portable/src/dd_main.c +++ b/doomsday/engine/portable/src/dd_main.c @@ -2146,18 +2146,44 @@ void DD_SetVariable(int ddvalue, void *parm) } } +materialnamespaceid_t DD_ParseMaterialNamespace(const char* str) +{ + if(!str || 0 == strlen(str)) + return MN_ANY; + + if(!stricmp(str, MN_TEXTURES_NAME)) return MN_TEXTURES; + if(!stricmp(str, MN_FLATS_NAME)) return MN_FLATS; + if(!stricmp(str, MN_SPRITES_NAME)) return MN_SPRITES; + if(!stricmp(str, MN_SYSTEM_NAME)) return MN_SYSTEM; + + return MATERIALNAMESPACE_COUNT; // Unknown. +} + +texturenamespaceid_t DD_ParseTextureNamespace(const char* str) +{ + if(!str || 0 == strlen(str)) + return TN_ANY; + + if(!stricmp(str, TN_TEXTURES_NAME)) return TN_TEXTURES; + if(!stricmp(str, TN_FLATS_NAME)) return TN_FLATS; + if(!stricmp(str, TN_SPRITES_NAME)) return TN_SPRITES; + if(!stricmp(str, TN_PATCHES_NAME)) return TN_PATCHES; + if(!stricmp(str, TN_SYSTEM_NAME)) return TN_SYSTEM; + + return TEXTURENAMESPACE_COUNT; // Unknown. +} + materialnum_t DD_MaterialForTextureIndex(uint index, texturenamespaceid_t texNamespace) { const gltexture_t* tex; - if(!VALID_TEXTURENAMESPACEID(texNamespace)) - Con_Error("DD_MaterialForTextureIndex: Invalid namespace id %i.", texNamespace); - if(index != 0 && (tex = GL_GetGLTextureByIndex(index-1, texNamespace))) + if(index != 0 && (tex = GL_GLTextureByIndex(index-1, texNamespace))) { materialnum_t result; - ddstring_t path; Str_Init(&path); - Str_Appendf(&path, "%s%s", Str_Text(Materials_NamespaceNameForTextureNamespaceId(texNamespace)), GLTexture_Name(tex)); - result = Materials_CheckNumForName(Str_Text(&path)); - Str_Free(&path); + dduri_t* path = Uri_ConstructDefault(); + Uri_SetPath(path, GLTexture_Name(tex)); + Uri_SetScheme(path, Str_Text(Materials_NamespaceNameForTextureNamespace(texNamespace))); + result = Materials_IndexForUri(path); + Uri_Destruct(path); return result; } return 0; diff --git a/doomsday/engine/portable/src/def_main.c b/doomsday/engine/portable/src/def_main.c index 75fafd6dd4..8386d42890 100644 --- a/doomsday/engine/portable/src/def_main.c +++ b/doomsday/engine/portable/src/def_main.c @@ -394,7 +394,7 @@ ded_decor_t* Def_GetDecoration(material_t* mat, boolean hasExt) if(!def->material) continue; - defMat = Materials_ToMaterial(Materials_CheckNumForName2(def->material)); + defMat = Materials_ToMaterial(Materials_IndexForUri(def->material)); // Is this suitable? if(mat == defMat && R_IsAllowedDecoration(def, mat, hasExt)) return def; @@ -413,7 +413,7 @@ ded_reflection_t* Def_GetReflection(material_t* mat, boolean hasExt) if(!def->material) continue; - defMat = Materials_ToMaterial(Materials_CheckNumForName2(def->material)); + defMat = Materials_ToMaterial(Materials_IndexForUri(def->material)); // Is this suitable? if(mat == defMat && R_IsAllowedReflection(def, mat, hasExt)) return def; @@ -429,7 +429,7 @@ ded_detailtexture_t* Def_GetDetailTex(material_t* mat, boolean hasExt) { if(def->material1) { - material_t* defMat = Materials_ToMaterial(Materials_CheckNumForName2(def->material1)); + material_t* defMat = Materials_ToMaterial(Materials_IndexForUri(def->material1)); // Is this suitable? if(mat == defMat && R_IsAllowedDetailTex(def, mat, hasExt)) return def; @@ -437,7 +437,7 @@ ded_detailtexture_t* Def_GetDetailTex(material_t* mat, boolean hasExt) if(def->material2) { - material_t* defMat = Materials_ToMaterial(Materials_CheckNumForName2(def->material2)); + material_t* defMat = Materials_ToMaterial(Materials_IndexForUri(def->material2)); // Is this suitable? if(mat == defMat && R_IsAllowedDetailTex(def, mat, hasExt)) return def; @@ -457,7 +457,7 @@ ded_ptcgen_t* Def_GetGenerator(material_t* mat, boolean hasExt) if(!def->material) continue; - if(!(defMat = Materials_ToMaterial(Materials_CheckNumForName2(def->material)))) + if(!(defMat = Materials_ToMaterial(Materials_IndexForUri(def->material)))) continue; // Is this suitable? @@ -1289,12 +1289,12 @@ void Def_CopyLineType(linetype_t* l, ded_linetype_t* def) l->wallSection = def->wallSection; if(def->actMaterial) - l->actMaterial = Materials_CheckNumForName2(def->actMaterial); + l->actMaterial = Materials_IndexForUri(def->actMaterial); else l->actMaterial = 0; if(def->deactMaterial) - l->deactMaterial = Materials_CheckNumForName2(def->deactMaterial); + l->deactMaterial = Materials_IndexForUri(def->deactMaterial); else l->deactMaterial = 0; @@ -1326,7 +1326,7 @@ void Def_CopyLineType(linetype_t* l, ded_linetype_t* def) if(!stricmp(def->iparmStr[k], "-1")) l->iparm[k] = -1; else - l->iparm[k] = Materials_CheckNumForName(def->iparmStr[k]); + l->iparm[k] = Materials_IndexForName(def->iparmStr[k]); } } else if(a & MAP_MUS) diff --git a/doomsday/engine/portable/src/def_read.c b/doomsday/engine/portable/src/def_read.c index 12509fb0cf..f617d54776 100644 --- a/doomsday/engine/portable/src/def_read.c +++ b/doomsday/engine/portable/src/def_read.c @@ -1326,7 +1326,7 @@ static int DED_ReadData(ded_t* ded, const char* buffer, const char* sourceFile) { READLABEL; RV_URI("Material", &sl->material, 0) - RV_URI("Texture", &sl->material, MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME ) + RV_URI("Texture", &sl->material, MN_TEXTURES_NAME ) RV_FLAGS("Flags", sl->flags, "slf_") RV_FLT("Offset", sl->offset) RV_FLT("Color limit", sl->colorLimit) @@ -1427,7 +1427,7 @@ static int DED_ReadData(ded_t* ded, const char* buffer, const char* sourceFile) { READLABEL; RV_URI("Material", &sl->material, 0) - RV_URI("Texture", &sl->material, MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME) + RV_URI("Texture", &sl->material, MN_TEXTURES_NAME) RV_FLAGS("Flags", sl->flags, "slf_") RV_FLT("Offset", sl->offset) RV_FLT("Color limit", sl->colorLimit) @@ -1525,7 +1525,7 @@ static int DED_ReadData(ded_t* ded, const char* buffer, const char* sourceFile) if(ISLABEL("Material") || ISLABEL("Texture") || ISLABEL("Flat")) { // A new material path. ddstring_t mnamespace; Str_Init(&mnamespace); - Str_Set(&mnamespace, ISLABEL("Material")? "" : ISLABEL("Texture")? MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME : MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME); + Str_Set(&mnamespace, ISLABEL("Material")? "" : ISLABEL("Texture")? MN_TEXTURES_NAME : MN_FLATS_NAME); mn = DED_NewEntry((void**)&tenv->materials, &tenv->count, sizeof(*mn)); FINDBEGIN; for(;;) @@ -1722,15 +1722,15 @@ static int DED_ReadData(ded_t* ded, const char* buffer, const char* sourceFile) RV_FLAGS("Flags", dtl->flags, "dtf_") if(ISLABEL("Texture")) { - READURI(&dtl->material1, MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME) + READURI(&dtl->material1, MN_TEXTURES_NAME) } else if(ISLABEL("Wall")) // Alias { - READURI(&dtl->material1, MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME) + READURI(&dtl->material1, MN_TEXTURES_NAME) } else if(ISLABEL("Flat")) { - READURI(&dtl->material2, MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME) + READURI(&dtl->material2, MN_FLATS_NAME) } else if(ISLABEL("Lump")) { @@ -1789,11 +1789,11 @@ static int DED_ReadData(ded_t* ded, const char* buffer, const char* sourceFile) } else if(ISLABEL("Texture")) { - READURI(&ref->material, MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME) + READURI(&ref->material, MN_TEXTURES_NAME) } else if(ISLABEL("Flat")) { - READURI(&ref->material, MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME) + READURI(&ref->material, MN_FLATS_NAME) } else RV_END CHECKSC; @@ -1837,11 +1837,11 @@ static int DED_ReadData(ded_t* ded, const char* buffer, const char* sourceFile) } else if(ISLABEL("Flat")) { - READURI(&gen->material, MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME) + READURI(&gen->material, MN_FLATS_NAME) } else if(ISLABEL("Texture")) { - READURI(&gen->material, MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME) + READURI(&gen->material, MN_TEXTURES_NAME) } else RV_STR("Mobj", gen->type) @@ -2003,11 +2003,11 @@ static int DED_ReadData(ded_t* ded, const char* buffer, const char* sourceFile) } else if(ISLABEL("Texture")) { - READURI(&decor->material, MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME) + READURI(&decor->material, MN_TEXTURES_NAME) } else if(ISLABEL("Flat")) { - READURI(&decor->material, MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME) + READURI(&decor->material, MN_FLATS_NAME) } else if(ISLABEL("Model")) { @@ -2124,7 +2124,7 @@ static int DED_ReadData(ded_t* ded, const char* buffer, const char* sourceFile) { ded_group_member_t* memb; ddstring_t mnamespace; Str_Init(&mnamespace); - Str_Set(&mnamespace, ISLABEL("Texture")? MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME : MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME); + Str_Set(&mnamespace, ISLABEL("Texture")? MN_TEXTURES_NAME : MN_FLATS_NAME); // Need to allocate new stage? if(sub >= grp->count.num) @@ -2261,7 +2261,7 @@ static int DED_ReadData(ded_t* ded, const char* buffer, const char* sourceFile) } else if(ISLABEL("Act texture")) // Alias { - READURI(&l->actMaterial, MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME) + READURI(&l->actMaterial, MN_TEXTURES_NAME) } else if(ISLABEL("Deact material")) { @@ -2269,7 +2269,7 @@ static int DED_ReadData(ded_t* ded, const char* buffer, const char* sourceFile) } else if(ISLABEL("Deact texture")) // Alias { - READURI(&l->deactMaterial, MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME) + READURI(&l->deactMaterial, MN_TEXTURES_NAME) } else RV_INT("Act type", l->actLineType) diff --git a/doomsday/engine/portable/src/finaleinterpreter.c b/doomsday/engine/portable/src/finaleinterpreter.c index c070eb6a57..26985ef2d5 100644 --- a/doomsday/engine/portable/src/finaleinterpreter.c +++ b/doomsday/engine/portable/src/finaleinterpreter.c @@ -1206,16 +1206,16 @@ DEFFC(End) DEFFC(BGFlat) { ddstring_t path; Str_Init(&path); - Str_Appendf(&path, MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":%s", OP_CSTRING(0)); - changePageBackground(fi->_pages[PAGE_PICS], Materials_ToMaterial(Materials_CheckNumForName(Str_Text(&path)))); + Str_Appendf(&path, MN_FLATS_NAME":%s", OP_CSTRING(0)); + changePageBackground(fi->_pages[PAGE_PICS], Materials_ToMaterial(Materials_IndexForName(Str_Text(&path)))); Str_Free(&path); } DEFFC(BGTexture) { ddstring_t path; Str_Init(&path); - Str_Appendf(&path, MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME":%s", OP_CSTRING(0)); - changePageBackground(fi->_pages[PAGE_PICS], Materials_ToMaterial(Materials_CheckNumForName(Str_Text(&path)))); + Str_Appendf(&path, MN_TEXTURES_NAME":%s", OP_CSTRING(0)); + changePageBackground(fi->_pages[PAGE_PICS], Materials_ToMaterial(Materials_IndexForName(Str_Text(&path)))); Str_Free(&path); } diff --git a/doomsday/engine/portable/src/gl_texmanager.c b/doomsday/engine/portable/src/gl_texmanager.c index 5ec2a57f74..6ca3783104 100644 --- a/doomsday/engine/portable/src/gl_texmanager.c +++ b/doomsday/engine/portable/src/gl_texmanager.c @@ -172,21 +172,94 @@ void GL_TexRegister(void) C_CMD_FLAGS("texreset", "", ResetTextures, CMDF_NO_DEDICATED); } -static gltexture_type_t GLTextureTypeForTextureNamespaceId(texturenamespaceid_t texNamespace) +static gltexture_type_t GLTextureTypeForTextureNamespace(texturenamespaceid_t texNamespace) { switch(texNamespace) { case TN_SYSTEM: return GLT_SYSTEM; case TN_FLATS: return GLT_FLAT; case TN_TEXTURES: return GLT_PATCHCOMPOSITE; - case TN_PATCHES: return GLT_PATCH; case TN_SPRITES: return GLT_SPRITE; + case TN_PATCHES: return GLT_PATCH; default: - Con_Error("GLTextureTypeForTextureNamespaceId: Invalid namespace id %i.", texNamespace); + Con_Error("GLTextureTypeForTextureNamespace: Invalid namespaceid #%i.", texNamespace); return 0; // Unreachable. } } +/** + * This is a hash function. Given a gltexture name it generates a + * somewhat-random number between 0 and GLTEXTURE_NAME_HASH_SIZE. + * + * @return The generated hash index. + */ +static uint hashForGLTextureName(const char* name) +{ + ushort key = 0; + int i; + + // Stop when the name ends. + for(i = 0; *name; ++i, name++) + { + if(i == 0) + key ^= (int) (*name); + else if(i == 1) + key *= (int) (*name); + else if(i == 2) + { + key -= (int) (*name); + i = -1; + } + } + + return key % GLTEXTURE_NAME_HASH_SIZE; +} + +/** + * Given a name and gltexture type, search the gltextures db for a match. + * \assume Caller knows what it's doing; params arn't validity checked. + * + * @param name Name of the gltexture to search for. Must have been + * transformed to all lower case. + * @param type Specific gltexture type. + * @return Ptr to the found gltexture_t else, @c NULL. + */ +static gltexture_t* getGLTextureByName(const char* name, uint hash, + gltexture_type_t type) +{ + if(glTextureTypeData[type].hashTable[hash]) + { + gltexture_t* tex = glTextures[glTextureTypeData[type].hashTable[hash] - 1]; + for(;;) + { + if(tex->type == type && !strncmp(tex->name, name, 8)) + return tex; + if(!tex->hashNext) + break; + tex = glTextures[tex->hashNext - 1]; + } + } + return 0; // Not found. +} + +static const gltexture_t* findGLTextureByName(const char* rawName, + texturenamespaceid_t texNamespace) +{ + char name[9]; + uint hash; + int n; + + if(!rawName || !rawName[0]) + return NULL; + + // Prepare 'name'. + for(n = 0; *rawName && n < 8; ++n, rawName++) + name[n] = tolower(*rawName); + name[n] = '\0'; + hash = hashForGLTextureName(name); + return getGLTextureByName(name, hash, GLTextureTypeForTextureNamespace(texNamespace)); +} + void GL_EarlyInitTextureManager(void) { GL_InitSmartFilterHQ2x(); @@ -324,7 +397,7 @@ void GL_ClearSystemTextures(void) } memset(sysFlareTextures, 0, sizeof(sysFlareTextures)); - Materials_DeleteTextures(MATERIALS_SYSTEM_RESOURCE_NAMESPACE_NAME); + Materials_DeleteTextures(MN_SYSTEM_NAME); UI_ClearTextures(); Rend_ParticleClearSystemTextures(); @@ -1738,67 +1811,10 @@ void GL_DeleteRawImages(void) Z_Free(rawTexs); } -/** - * This is a hash function. Given a gltexture name it generates a - * somewhat-random number between 0 and GLTEXTURE_NAME_HASH_SIZE. - * - * @return The generated hash index. - */ -static uint hashForGLTextureName(const char* name) -{ - ushort key = 0; - int i; - - // Stop when the name ends. - for(i = 0; *name; ++i, name++) - { - if(i == 0) - key ^= (int) (*name); - else if(i == 1) - key *= (int) (*name); - else if(i == 2) - { - key -= (int) (*name); - i = -1; - } - } - - return key % GLTEXTURE_NAME_HASH_SIZE; -} - -/** - * Given a name and gltexture type, search the gltextures db for a match. - * \assume Caller knows what it's doing; params arn't validity checked. - * - * @param name Name of the gltexture to search for. Must have been - * transformed to all lower case. - * @param texNamespace Specific TN_* texture namespace id. - * @return Ptr to the found gltexture_t else, @c NULL. - */ -static gltexture_t* getGLTextureByName(const char* name, uint hash, - texturenamespaceid_t texNamespace) -{ - gltexture_type_t type = GLTextureTypeForTextureNamespaceId(texNamespace); - if(glTextureTypeData[type].hashTable[hash]) - { - gltexture_t* tex = glTextures[glTextureTypeData[type].hashTable[hash] - 1]; - for(;;) - { - if(tex->type == type && !strncmp(tex->name, name, 8)) - return tex; - if(!tex->hashNext) - break; - tex = glTextures[tex->hashNext - 1]; - } - } - return 0; // Not found. -} - static __inline gltexture_t* getGLTexture(gltextureid_t id) { if(id != 0 && id <= numGLTextures) return glTextures[id - 1]; - return NULL; } @@ -1869,20 +1885,27 @@ const gltexture_t* GL_CreateGLTexture(const char* rawName, uint index, } } -uint GL_TextureIndexForName(const char* name, texturenamespaceid_t texNamespace) +uint GL_GLTextureIndexForUri2(const dduri_t* uri, boolean silent) { const gltexture_t* glTex; - if(!VALID_TEXTURENAMESPACEID(texNamespace)) - Con_Error("GL_TextureIndexForName: Invalid namespace id %i.", texNamespace); - if((glTex = GL_GetGLTextureByName(name, texNamespace))) + if((glTex = GL_GLTextureByUri2(uri, silent))) return glTex->index + 1; - Con_Message("GL_TextureIndexForName: Warning, unknown texture '%s' with namespace id %i.\n", - name, texNamespace); + if(!silent) + { + ddstring_t* path = Uri_ToString(uri); + Con_Message("Warning, unknown texture: %s\n", Str_Text(path)); + Str_Delete(path); + } return 0; } +uint GL_GLTextureIndexForUri(const dduri_t* uri) +{ + return GL_GLTextureIndexForUri2(uri, false); +} + const gltexturevariant_t* GL_PrepareGLTexture(gltextureid_t id, void* context, - byte* result) + byte* result) { return GLTexture_Prepare(getGLTexture(id), context, result); } @@ -1911,73 +1934,46 @@ void GL_DeleteAllTexturesForGLTextures(gltexture_type_t type) } } -const gltexture_t* GL_GetGLTexture(gltextureid_t id) +const gltexture_t* GL_ToGLTexture(gltextureid_t id) { return getGLTexture(id); } -const gltexture_t* GL_GetGLTextureByName(const char* rawName, texturenamespaceid_t texNamespace) -{ - char name[9]; - uint hash; - int n; - - if(!rawName || !rawName[0]) - return NULL; - - // Prepare 'name'. - for(n = 0; *rawName && n < 8; ++n, rawName++) - name[n] = tolower(*rawName); - name[n] = '\0'; - hash = hashForGLTextureName(name); - - return getGLTextureByName(name, hash, texNamespace); -} - -static texturenamespaceid_t parseTextureNamespace(const ddstring_t* str) -{ - if(!str || Str_IsEmpty(str)) - return TN_ANY; - if(!Str_CompareIgnoreCase(str, TEXTURES_TEXTURES_RESOURCE_NAMESPACE_NAME)) - return TN_TEXTURES; - if(!Str_CompareIgnoreCase(str, TEXTURES_FLATS_RESOURCE_NAMESPACE_NAME)) - return TN_FLATS; - if(!Str_CompareIgnoreCase(str, TEXTURES_SPRITES_RESOURCE_NAMESPACE_NAME)) - return TN_SPRITES; - if(!Str_CompareIgnoreCase(str, TEXTURES_PATCHES_RESOURCE_NAMESPACE_NAME)) - return TN_PATCHES; - if(!Str_CompareIgnoreCase(str, TEXTURES_SYSTEM_RESOURCE_NAMESPACE_NAME)) - return TN_SYSTEM; - return TEXTURENAMESPACE_COUNT; // Unknown. -} - -const gltexture_t* GL_GetGLTextureByUri(const dduri_t* uri) +const gltexture_t* GL_GLTextureByUri2(const dduri_t* uri, boolean silent) { ddstring_t* path; if(uri && NULL != (path = Uri_Resolved(uri))) { - texturenamespaceid_t texNamespace = parseTextureNamespace(Uri_Scheme(uri)); + texturenamespaceid_t texNamespace = DD_ParseTextureNamespace(Str_Text(Uri_Scheme(uri))); const gltexture_t* tex; if(texNamespace == TEXTURENAMESPACE_COUNT) { - ddstring_t* path = Uri_ComposePath(uri); - Con_Message("Warning, unknown texture namespace '%s' encountered parsing " - "uri: %s", Str_Text(Uri_Scheme(uri)), Str_Text(path)); - Str_Delete(path); + if(!silent) + { + ddstring_t* path = Uri_ToString(uri); + Con_Message("Warning, unknown texture namespace '%s' encountered parsing " + "uri: %s", Str_Text(Uri_Scheme(uri)), Str_Text(path)); + Str_Delete(path); + } return NULL; } - tex = GL_GetGLTextureByName(Str_Text(Uri_Path(uri)), texNamespace); + tex = findGLTextureByName(Str_Text(Uri_Path(uri)), texNamespace); Str_Delete(path); return tex; } return NULL; } -const gltexture_t* GL_GetGLTextureByIndex(int index, texturenamespaceid_t texNamespace) +const gltexture_t* GL_GLTextureByUri(const dduri_t* uri) +{ + return GL_GLTextureByUri2(uri, false); +} + +const gltexture_t* GL_GLTextureByIndex(int index, texturenamespaceid_t texNamespace) { - gltexture_type_t type = GLTextureTypeForTextureNamespaceId(texNamespace); + gltexture_type_t type = GLTextureTypeForTextureNamespace(texNamespace); uint i; for(i = 0; i < numGLTextures; ++i) { diff --git a/doomsday/engine/portable/src/p_material.c b/doomsday/engine/portable/src/p_material.c index 1f91c35351..7238b84080 100644 --- a/doomsday/engine/portable/src/p_material.c +++ b/doomsday/engine/portable/src/p_material.c @@ -79,7 +79,7 @@ void Material_Ticker(material_t* mat, timespan_t time) } {const gltexture_t* glTex; - if((glTex = GL_GetGLTextureByUri(lsDef->texture))) + if((glTex = GL_GLTextureByUri(lsDef->texture))) { layer->tex = glTex->id; mat->inter = inter; diff --git a/doomsday/engine/portable/src/p_materialmanager.c b/doomsday/engine/portable/src/p_materialmanager.c index 6143e7a3d6..6d9aca07f0 100644 --- a/doomsday/engine/portable/src/p_materialmanager.c +++ b/doomsday/engine/portable/src/p_materialmanager.c @@ -50,18 +50,6 @@ // TYPES ------------------------------------------------------------------- -typedef enum { - MN_ANY = -1, - MATERIALNAMESPACEID_FIRST, - MN_TEXTURES = MATERIALNAMESPACEID_FIRST, - MN_FLATS, - MN_SPRITES, - MN_SYSTEM, - MATERIALNAMESPACEID_COUNT -} materialnamespaceid_t; - -#define VALID_MATERIALNAMESPACEID(id) ((id) >= MATERIALNAMESPACEID_FIRST && (id) < MATERIALNAMESPACEID_COUNT) - typedef struct materialbind_s { char name[9]; material_t* mat; @@ -119,14 +107,7 @@ static material_t* materialsHead; // Head of the linked list of materials. static materialbind_t* materialBinds; static materialnum_t maxMaterialBinds; -static uint hashTable[MATERIALNAMESPACEID_COUNT][MATERIAL_NAME_HASH_SIZE]; - -static const ddstring_t mnamespaceIdentifiers[MATERIALNAMESPACEID_COUNT] = { - { MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME":" }, - { MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":" }, - { MATERIALS_SPRITES_RESOURCE_NAMESPACE_NAME":" }, - { MATERIALS_SYSTEM_RESOURCE_NAMESPACE_NAME":" } -}; +static uint hashTable[MATERIALNAMESPACE_COUNT][MATERIAL_NAME_HASH_SIZE]; // CODE -------------------------------------------------------------------- @@ -135,6 +116,34 @@ void P_MaterialsRegister(void) C_CMD("listmaterials", NULL, ListMaterials); } +static const ddstring_t* nameForMaterialNamespaceId(materialnamespaceid_t id) +{ + static const ddstring_t emptyString = { "" }; + static const ddstring_t namespaces[MATERIALNAMESPACE_COUNT] = { + /* MN_SYSTEM */ { MN_SYSTEM_NAME }, + /* MN_FLATS */ { MN_FLATS_NAME }, + /* MN_TEXTURES */ { MN_TEXTURES_NAME }, + /* MN_SPRITES */ { MN_SPRITES_NAME } + }; + if(VALID_MATERIALNAMESPACE(id)) + return &namespaces[id]; + return &emptyString; +} + +static materialnamespaceid_t materialNamespaceIdForTextureNamespaceId(texturenamespaceid_t id) +{ + static const materialnamespaceid_t namespaceIds[TEXTURENAMESPACE_COUNT] = { + /* TN_SYSTEM */ { MN_SYSTEM }, + /* TN_FLATS */ { MN_FLATS }, + /* TN_TEXTURES */ { MN_TEXTURES }, + /* TN_SPRITES */ { MN_SPRITES }, + /* TN_PATCHES */ { MN_ANY } // No materials for these yet. + }; + if(VALID_TEXTURENAMESPACE(id)) + return namespaceIds[id]; + return MATERIALNAMESPACE_COUNT; // Unknown. +} + static __inline materialbind_t* bindForMaterial(const material_t* mat) { if(mat->_bindId) return &materialBinds[mat->_bindId-1]; @@ -146,21 +155,6 @@ static int compareMaterialBindByName(const void* e1, const void* e2) return stricmp((*(const materialbind_t**)e1)->name, (*(const materialbind_t**)e2)->name); } -static materialnamespaceid_t parseMaterialNamespaceIdent(const char* name) -{ - const char* p = name; - materialnamespaceid_t mni = MN_ANY; - if(!stricmp(name, MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME)) - mni = MN_TEXTURES; - else if(!stricmp(name, MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME)) - mni = MN_FLATS; - else if(!stricmp(name, MATERIALS_SPRITES_RESOURCE_NAMESPACE_NAME)) - mni = MN_SPRITES; - else if(!stricmp(name, MATERIALS_SYSTEM_RESOURCE_NAMESPACE_NAME)) - mni = MN_SYSTEM; - return mni; -} - /** * This is a hash function. Given a material name it generates a * somewhat-random number between 0 and MATERIAL_NAME_HASH_SIZE. @@ -252,133 +246,6 @@ static void newMaterialNameBinding(material_t* mat, const char* name, hashTable[mnamespace][hash] = (mb - materialBinds) + 1; } -/** - * Find name-associated definitions for the known material bindings. - */ -void Materials_LinkAssociatedDefinitions(void) -{ - uint i; - for(i = 0; i < numMaterialBinds; ++i) - { - materialbind_t* mb = &materialBinds[i]; - if(mb->mnamespace == MN_SYSTEM) - continue; - - // Surface decorations (lights and models). - mb->decoration[0] = Def_GetDecoration(mb->mat, 0); - mb->decoration[1] = Def_GetDecoration(mb->mat, 1); - - // Reflection (aka shiny surface). - mb->reflection[0] = Def_GetReflection(mb->mat, 0); - mb->reflection[1] = Def_GetReflection(mb->mat, 1); - - // Generator (particles). - mb->ptcGen[0] = Def_GetGenerator(mb->mat, 0); - mb->ptcGen[1] = Def_GetGenerator(mb->mat, 1); - - // Detail texture. - mb->detail[0] = Def_GetDetailTex(mb->mat, 0); - mb->detail[1] = Def_GetDetailTex(mb->mat, 1); - } -} - -/** - * One time initialization of the materials list. Called during init. - */ -void Materials_Initialize(void) -{ - if(initedOk) - return; // Already been here. - - materialsBlockSet = ZBlockSet_Construct(sizeof(material_t), - MATERIALS_BLOCK_ALLOC, PU_APPSTATIC); - materialsHead = NULL; - - materialBinds = NULL; - numMaterialBinds = maxMaterialBinds = 0; - - // Clear the name bind hash tables. - memset(hashTable, 0, sizeof(hashTable)); - - initedOk = true; -} - -/** - * Release all memory acquired for the materials list. - * Called during shutdown. - */ -void Materials_Shutdown(void) -{ - if(!initedOk) - return; - - ZBlockSet_Destruct(materialsBlockSet); - materialsBlockSet = NULL; - materialsHead = NULL; - - // Destroy the bindings. - if(materialBinds) - { - Z_Free(materialBinds); - materialBinds = NULL; - } - numMaterialBinds = maxMaterialBinds = 0; - - initedOk = false; -} - -/** - * Deletes all GL texture instances, linked to materials. - * - * @param mnamespace @c MN_ANY = delete everything, ELSE - * Only delete those currently in use by materials - * in the specified namespace. - */ -void Materials_DeleteTextures(const char* namespaceName) -{ - materialnamespaceid_t mnamespace = MN_ANY; - - if(namespaceName && namespaceName[0]) - { - if((mnamespace = parseMaterialNamespaceIdent(namespaceName)) == MN_ANY) - { -#if _DEBUG - Con_Message("Warning:Materials_DeleteTextures: Attempt to delete in unknown namespace (%s), ignoring.\n", - namespaceName); -#endif - return; - } - } - - if(mnamespace == MN_ANY) - { // Delete the lot. - GL_DeleteAllTexturesForGLTextures(GLT_ANY); - return; - } - - if(!VALID_MATERIALNAMESPACEID(mnamespace)) - Con_Error("Materials_DeleteTextures: Internal error, " - "invalid materialgroup '%i'.", (int) mnamespace); - - if(materialBinds) - { - uint i; - for(i = 0; i < MATERIAL_NAME_HASH_SIZE; ++i) - if(hashTable[mnamespace][i]) - { - materialbind_t* mb = &materialBinds[hashTable[mnamespace][i] - 1]; - - for(;;) - { - Material_DeleteTextures(mb->mat); - if(!mb->hashNext) - break; - mb = &materialBinds[mb->hashNext - 1]; - } - } - } -} - static material_t* allocMaterial(void) { material_t* mat = ZBlockSet_Allocate(materialsBlockSet); @@ -406,7 +273,7 @@ static void materialUpdateCustomStatus(material_t* mat) mat->flags &= ~MATF_CUSTOM; for(i = 0; i < mat->numLayers; ++i) { - if(GLTexture_IsFromIWAD(GL_GetGLTexture(mat->layers[i].tex))) + if(GLTexture_IsFromIWAD(GL_ToGLTexture(mat->layers[i].tex))) continue; mat->flags |= MATF_CUSTOM; break; @@ -469,29 +336,120 @@ static material_t* getMaterialByNum(materialnum_t num) return 0; } -static const ddstring_t* nameForNamespaceId(materialnamespaceid_t id) +void Materials_Initialize(void) { - static ddstring_t emptyString = { "" }; - if(VALID_MATERIALNAMESPACEID(id)) - return &mnamespaceIdentifiers[id]; - return &emptyString; + if(initedOk) + return; // Already been here. + + materialsBlockSet = ZBlockSet_Construct(sizeof(material_t), + MATERIALS_BLOCK_ALLOC, PU_APPSTATIC); + materialsHead = NULL; + + materialBinds = NULL; + numMaterialBinds = maxMaterialBinds = 0; + + // Clear the name bind hash tables. + memset(hashTable, 0, sizeof(hashTable)); + + initedOk = true; } -const ddstring_t* Materials_NamespaceNameForTextureNamespaceId(texturenamespaceid_t texNamespace) +void Materials_Shutdown(void) { - static const ddstring_t emptyString = { "" }; - if(!VALID_TEXTURENAMESPACEID(texNamespace)) - Con_Error("Materials::NamespaceNameForTextureNamespaceId: Internal error, " - "invalid texture namespace id %i.", (int) texNamespace); - switch(texNamespace) + if(!initedOk) + return; + + ZBlockSet_Destruct(materialsBlockSet); + materialsBlockSet = NULL; + materialsHead = NULL; + + // Destroy the bindings. + if(materialBinds) + { + Z_Free(materialBinds); + materialBinds = NULL; + } + numMaterialBinds = maxMaterialBinds = 0; + + initedOk = false; +} + +void Materials_LinkAssociatedDefinitions(void) +{ + uint i; + for(i = 0; i < numMaterialBinds; ++i) + { + materialbind_t* mb = &materialBinds[i]; + if(mb->mnamespace == MN_SYSTEM) + continue; + + // Surface decorations (lights and models). + mb->decoration[0] = Def_GetDecoration(mb->mat, 0); + mb->decoration[1] = Def_GetDecoration(mb->mat, 1); + + // Reflection (aka shiny surface). + mb->reflection[0] = Def_GetReflection(mb->mat, 0); + mb->reflection[1] = Def_GetReflection(mb->mat, 1); + + // Generator (particles). + mb->ptcGen[0] = Def_GetGenerator(mb->mat, 0); + mb->ptcGen[1] = Def_GetGenerator(mb->mat, 1); + + // Detail texture. + mb->detail[0] = Def_GetDetailTex(mb->mat, 0); + mb->detail[1] = Def_GetDetailTex(mb->mat, 1); + } +} + +void Materials_DeleteTextures(const char* namespaceName) +{ + materialnamespaceid_t matNamespace = MN_ANY; + + if(namespaceName && namespaceName[0]) { - case TN_TEXTURES: return nameForNamespaceId(MN_TEXTURES); - case TN_FLATS: return nameForNamespaceId(MN_FLATS); - case TN_SPRITES: return nameForNamespaceId(MN_SPRITES); - case TN_SYSTEM: return nameForNamespaceId(MN_SYSTEM); - default: - return NULL; // Unreachable. + matNamespace = DD_ParseMaterialNamespace(namespaceName); + if(!VALID_MATERIALNAMESPACE(matNamespace)) + { +#if _DEBUG + Con_Message("Warning:Materials_DeleteTextures: Attempt to delete in unknown namespace (%s), ignoring.\n", + namespaceName); +#endif + return; + } + } + + if(matNamespace == MN_ANY) + { // Delete the lot. + GL_DeleteAllTexturesForGLTextures(GLT_ANY); + return; } + + if(!VALID_MATERIALNAMESPACE(matNamespace)) + Con_Error("Materials_DeleteTextures: Internal error, " + "invalid materialgroup '%i'.", (int) matNamespace); + + if(materialBinds) + { + uint i; + for(i = 0; i < MATERIAL_NAME_HASH_SIZE; ++i) + if(hashTable[matNamespace][i]) + { + materialbind_t* mb = &materialBinds[hashTable[matNamespace][i] - 1]; + + for(;;) + { + Material_DeleteTextures(mb->mat); + if(!mb->hashNext) + break; + mb = &materialBinds[mb->hashNext - 1]; + } + } + } +} + +const ddstring_t* Materials_NamespaceNameForTextureNamespace(texturenamespaceid_t texNamespace) +{ + return nameForMaterialNamespaceId(materialNamespaceIdForTextureNamespaceId(texNamespace)); } /** @@ -581,7 +539,7 @@ Con_Message("Materials_New: Warning, attempted to create material with " name[n] = '\0'; hash = hashForName(name); - mnamespace = parseMaterialNamespaceIdent(Str_Text(Uri_Scheme(rawName))); + mnamespace = DD_ParseMaterialNamespace(Str_Text(Uri_Scheme(rawName))); // Check if we've already created a material for this. if(mnamespace == MN_ANY) { // Caller doesn't care which namespace. This is only valid if we @@ -594,7 +552,7 @@ Con_Message("Materials_New: Warning, attempted to create material with " } else { - if(!VALID_MATERIALNAMESPACEID(mnamespace)) + if(!VALID_MATERIALNAMESPACE(mnamespace)) { #if _DEBUG Con_Message("Materials_New: Warning, attempted to create material in " @@ -698,10 +656,10 @@ material_t* Materials_NewFromDef(ded_material_t* def) const ded_material_layer_t* l = &def->layers[0]; if(l->stages[0].texture) // Not unused. { - if(!(tex = GL_GetGLTextureByUri(l->stages[0].texture))) + if(!(tex = GL_GLTextureByUri(l->stages[0].texture))) { - ddstring_t* materialPath = Uri_ComposePath(def->id); - ddstring_t* texturePath = Uri_ComposePath(l->stages[0].texture); + ddstring_t* materialPath = Uri_ToString(def->id); + ddstring_t* texturePath = Uri_ToString(l->stages[0].texture); VERBOSE( Con_Message("Warning: Unknown texture '%s' in Material '%s' (layer %i stage %i).\n", Str_Text(texturePath), Str_Text(materialPath), 0, 0) ); Str_Delete(materialPath); @@ -732,7 +690,7 @@ Str_Delete(path); } hash = hashForName(name); - mnamespace = parseMaterialNamespaceIdent(Str_Text(Uri_Scheme(rawName))); + mnamespace = DD_ParseMaterialNamespace(Str_Text(Uri_Scheme(rawName))); // Check if we've already created a material for this. if(mnamespace == MN_ANY) { // Caller doesn't care which namespace. This is only valid if we @@ -745,7 +703,7 @@ Str_Delete(path); } else { - if(!VALID_MATERIALNAMESPACEID(mnamespace)) + if(!VALID_MATERIALNAMESPACE(mnamespace)) { #if _DEBUG Con_Message("Warning: Attempted to create/update Material in unknown Namespace '%i', ignoring.\n", @@ -825,8 +783,8 @@ static materialnum_t Materials_CheckNumForPath2(const dduri_t* uri) if(Str_IsEmpty(Uri_Path(uri)) || !Str_CompareIgnoreCase(Uri_Path(uri), "-")) return 0; - mnamespace = parseMaterialNamespaceIdent(Str_Text(Uri_Scheme(uri))); - if(mnamespace != MN_ANY && !VALID_MATERIALNAMESPACEID(mnamespace)) + mnamespace = DD_ParseMaterialNamespace(Str_Text(Uri_Scheme(uri))); + if(mnamespace != MN_ANY && !VALID_MATERIALNAMESPACE(mnamespace)) { #if _DEBUG Con_Message("Materials_ToMaterial2: Internal error, invalid namespace '%i'\n", @@ -879,39 +837,7 @@ static materialnum_t Materials_NumForPath2(const dduri_t* path) return result; } -/** - * Given a name and namespace, search the materials db for a match. - * \note Part of the Doomsday public API. - * \note2 Same as Materials_CheckNumForName except will log an error - * message if the material being searched for is not found. - * - * @param name Name of the material to search for. - * @param mnamespace MG_* namespace. - * - * @return Unique identifier of the found material, else zero. - */ -materialnum_t Materials_NumForName2(const dduri_t* path) -{ - if(path) - { - return Materials_NumForPath2(path); - } - return 0; -} - -materialnum_t Materials_NumForName(const char* path) -{ - if(path && path[0]) - { - dduri_t* uri = Uri_Construct2(path, RC_NULL); - materialnum_t result = Materials_NumForName2(uri); - Uri_Destruct(uri); - return result; - } - return 0; -} - -materialnum_t Materials_CheckNumForName2(const dduri_t* path) +materialnum_t Materials_IndexForUri(const dduri_t* path) { if(path) { @@ -920,12 +846,12 @@ materialnum_t Materials_CheckNumForName2(const dduri_t* path) return 0; } -materialnum_t Materials_CheckNumForName(const char* path) +materialnum_t Materials_IndexForName(const char* path) { if(path && path[0]) { dduri_t* uri = Uri_Construct2(path, RC_NULL); - materialnum_t result = Materials_CheckNumForName2(uri); + materialnum_t result = Materials_IndexForUri(uri); Uri_Destruct(uri); return result; } @@ -940,7 +866,7 @@ materialnum_t Materials_CheckNumForName(const char* path) * * @return The associated name. */ -const char* Materials_GetName(material_t* mat) +const char* Materials_GetSymbolicName(material_t* mat) { materialnum_t num; @@ -953,7 +879,7 @@ const char* Materials_GetName(material_t* mat) return "NOMAT"; // Should never happen. } -dduri_t* Materials_GetPath(material_t* mat) +dduri_t* Materials_GetUri(material_t* mat) { materialbind_t* mb; dduri_t* uri; @@ -962,14 +888,17 @@ dduri_t* Materials_GetPath(material_t* mat) if(!mat) { #if _DEBUG - Con_Message("Warning:Materials_GetPath: Attempted with invalid reference (mat==0), returning 0.\n"); + Con_Message("Warning:Materials_GetUri: Attempted with invalid reference (mat==0), returning 0.\n"); #endif return 0; } - mb = bindForMaterial(mat); Str_Init(&path); - Str_Appendf(&path, "%s%s", mb? Str_Text(nameForNamespaceId(mb->mnamespace)) : "", Materials_GetName(mat)); + mb = bindForMaterial(mat); + if(NULL != mb) + { + Str_Appendf(&path, "%s:%s", Str_Text(nameForMaterialNamespaceId(mb->mnamespace)), Materials_GetSymbolicName(mat)); + } uri = Uri_Construct2(Str_Text(&path), RC_NULL); Str_Free(&path); return uri; @@ -1160,7 +1089,7 @@ byte Materials_Prepare(material_snapshot_t* snapshot, material_t* mat, boolean s // Setup the primary texturing pass. if(mat->layers[0].tex) { - const gltexture_t* tex = GL_GetGLTexture(mat->layers[0].tex); + const gltexture_t* tex = GL_ToGLTexture(mat->layers[0].tex); int magMode = glmode[texMagMode]; vec2_t scale; @@ -1307,14 +1236,16 @@ static void printMaterialInfo(const materialbind_t* mb, boolean printNamespace) { int numDigits = M_NumDigits(numMaterialBinds); - Con_Printf(" %*u: \"%s%s\" [%i, %i]", numDigits, (unsigned int) mb->mat->_bindId, - printNamespace? Str_Text(nameForNamespaceId(mb->mnamespace)) : "", mb->name, - mb->mat->width, mb->mat->height); + Con_Printf(" %*u: \"\n"); + if(printNamespace) + Con_Printf("%s:", Str_Text(nameForMaterialNamespaceId(mb->mnamespace))); + Con_Printf("%s\" [%i, %i]", numDigits, (unsigned int) mb->mat->_bindId, + mb->name, mb->mat->width, mb->mat->height); /*{ uint i; for(i = 0; i < mb->mat->numLayers; ++i) { - Con_Printf(" %i:%s", i, GL_GetGLTexture(mb->mat->layers[i].tex)->name); + Con_Printf(" %i:%s", i, GL_ToGLTexture(mb->mat->layers[i].tex)->name); }}*/ Con_Printf("\n"); } @@ -1324,7 +1255,7 @@ static materialbind_t** collectMaterials(materialnamespaceid_t mnamespace, const { size_t n = 0; - if(VALID_MATERIALNAMESPACEID(mnamespace)) + if(VALID_MATERIALNAMESPACE(mnamespace)) { if(materialBinds) { @@ -1391,8 +1322,8 @@ static size_t printMaterials2(materialnamespaceid_t mnamespace, const char* like size_t count = 0; materialbind_t** foundMaterials = collectMaterials(mnamespace, like, &count, 0); - if(VALID_MATERIALNAMESPACEID(mnamespace)) - Con_FPrintf(CBLF_YELLOW, "Known Materials in \"%s\":\n", Str_Text(nameForNamespaceId(mnamespace))); + if(VALID_MATERIALNAMESPACE(mnamespace)) + Con_FPrintf(CBLF_YELLOW, "Known Materials in \"%s\":\n", Str_Text(nameForMaterialNamespaceId(mnamespace))); else // Any namespace. Con_FPrintf(CBLF_YELLOW, "Known Materials:\n"); @@ -1403,7 +1334,7 @@ static size_t printMaterials2(materialnamespaceid_t mnamespace, const char* like } // Print the result index key. - if(VALID_MATERIALNAMESPACEID(mnamespace)) + if(VALID_MATERIALNAMESPACE(mnamespace)) { Con_Printf(" uid: \"name\" [width, height]\n"); Con_FPrintf(CBLF_RULER, ""); @@ -1431,7 +1362,7 @@ static size_t printMaterials2(materialnamespaceid_t mnamespace, const char* like static void printMaterials(materialnamespaceid_t mnamespace, const char* like) { // Only one namespace to print? - if(VALID_MATERIALNAMESPACEID(mnamespace)) + if(VALID_MATERIALNAMESPACE(mnamespace)) { printMaterials2(mnamespace, like); return; @@ -1439,7 +1370,7 @@ static void printMaterials(materialnamespaceid_t mnamespace, const char* like) // Collect and sort in each namespace separately. { int i; - for(i = MATERIALNAMESPACEID_FIRST; i < MATERIALNAMESPACEID_COUNT; ++i) + for(i = MATERIALNAMESPACE_FIRST; i < MATERIALNAMESPACE_COUNT; ++i) { if(printMaterials2((materialnamespaceid_t)i, like) != 0) Con_FPrintf(CBLF_RULER, ""); @@ -1638,7 +1569,7 @@ void Materials_AnimateAnimGroup(animgroup_t* group) if(mat->def && mat->def->layers[0].stageCount.num > 1) { - if(GL_GetGLTextureByUri(mat->def->layers[0].stages[0].texture)) + if(GL_GLTextureByUri(mat->def->layers[0].stages[0].texture)) continue; // Animated elsewhere. } @@ -1726,8 +1657,8 @@ void Materials_PrecacheAnimGroup(material_t* mat, boolean yes) D_CMD(ListMaterials) { - materialnamespaceid_t mnamespace = (argc > 1? parseMaterialNamespaceIdent(argv[1]) : MN_ANY); - if(argc > 2 && mnamespace == MN_ANY) + materialnamespaceid_t mnamespace = (argc > 1? DD_ParseMaterialNamespace(argv[1]) : MN_ANY); + if(argc > 2 && !VALID_MATERIALNAMESPACE(mnamespace)) { Con_Printf("Invalid namespace \"%s\".\n", argv[1]); return false; diff --git a/doomsday/engine/portable/src/r_data.c b/doomsday/engine/portable/src/r_data.c index 298f407d2a..9252634699 100644 --- a/doomsday/engine/portable/src/r_data.c +++ b/doomsday/engine/portable/src/r_data.c @@ -966,12 +966,19 @@ static patchtex_t* getPatchTex(patchid_t id) return NULL; } -static patchid_t patchForName(const char* name) +static patchid_t findPatchTextureByName(const char* name) { + assert(name && name[0]); + { const gltexture_t* glTex; - if((glTex = GL_GetGLTextureByName(name, TN_PATCHES))) - return glTex->index; - return 0; + dduri_t* uri = Uri_Construct2(name, RC_NULL); + Uri_SetScheme(uri, TN_PATCHES_NAME); + glTex = GL_GLTextureByUri(uri); + Uri_Destruct(uri); + if(glTex == NULL) + return 0; + return glTex->index; + } } /** @@ -996,7 +1003,7 @@ void R_ClearPatchTexs(void) * Get a patchtex_t data structure for a patch specified with a WAD lump * number. Allocates a new patchtex_t if it hasn't been loaded yet. */ -patchid_t R_RegisterAsPatch(const char* name) +patchid_t R_RegisterPatch(const char* name) { assert(name); { @@ -1009,7 +1016,7 @@ patchid_t R_RegisterAsPatch(const char* name) return 0; // Already defined as a patch? - if((id = patchForName(name)) != 0) + if((id = findPatchTextureByName(name)) != 0) return id; if((lump = W_CheckNumForName(name)) == -1) @@ -1089,7 +1096,7 @@ patchid_t R_PrecachePatch(const char* name, patchinfo_t* info) return 0; {patchid_t patch; - if((patch = R_RegisterAsPatch(name)) != 0) + if((patch = R_RegisterPatch(name)) != 0) { GL_PreparePatch(getPatchTex(patch)); if(info) @@ -1731,7 +1738,7 @@ void R_InitTextures(void) // Create a material for this texture. Str_Clear(&path); - Str_Appendf(&path, MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME":%s", texDef->name); + Str_Appendf(&path, MN_TEXTURES_NAME":%s", texDef->name); uri = Uri_Construct2(Str_Text(&path), RC_NULL); Materials_New(uri, texDef->width, texDef->height, ((texDef->flags & TXDF_NODRAW)? MATF_NO_DRAW : 0), tex->id, 0, 0); @@ -1860,7 +1867,7 @@ void R_InitFlats(void) // Create a material for this flat. // \note that width = 64, height = 64 regardless of the flat dimensions. Str_Clear(&path); - Str_Appendf(&path, MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":%s", flat->name); + Str_Appendf(&path, MN_FLATS_NAME":%s", flat->name); uri = Uri_Construct2(Str_Text(&path), RC_NULL); Materials_New(uri, 64, 64, 0, tex->id, 0, 0); @@ -1989,7 +1996,7 @@ void R_SpriteTexturesInit(void) // Create a new Material for this. { dduri_t* uri; ddstring_t path; Str_Init(&path); - Str_Appendf(&path, MATERIALS_SPRITES_RESOURCE_NAMESPACE_NAME":%s", name); + Str_Appendf(&path, MN_SPRITES_NAME":%s", name); uri = Uri_Construct2(Str_Text(&path), RC_NULL); Materials_New(uri, sprTex->width, sprTex->height, 0, glTex->id, sprTex->offX, sprTex->offY); Uri_Destruct(uri); @@ -2050,7 +2057,7 @@ Con_Message("R_GetSkinTex: Too many model skins!\n"); if(verbose) { - ddstring_t* searchPath = Uri_ComposePath(skin); + ddstring_t* searchPath = Uri_ToString(skin); Con_Message("SkinTex: \"%s\" -> %li\n", F_PrettyPath(searchPath), (long) (1 + (st - skinNames))); Str_Delete(searchPath); } @@ -2432,7 +2439,7 @@ void R_InitAnimGroup(ded_group_t* def) if(!gm->material) continue; - if((num = Materials_CheckNumForName2(gm->material)) != 0) + if((num = Materials_IndexForUri(gm->material)) != 0) { // Only create a group when the first texture is found. if(groupNumber == -1) diff --git a/doomsday/engine/portable/src/r_draw.c b/doomsday/engine/portable/src/r_draw.c index d64b1de516..7fdf9aab2d 100644 --- a/doomsday/engine/portable/src/r_draw.c +++ b/doomsday/engine/portable/src/r_draw.c @@ -232,7 +232,7 @@ void R_DrawViewBorder(void) glColor4f(1, 1, 1, 1); // View background. - mat = Materials_ToMaterial(Materials_NumForName2(borderGraphicsNames[BG_BACKGROUND])); + mat = Materials_ToMaterial(Materials_IndexForUri(borderGraphicsNames[BG_BACKGROUND])); if(mat) { material_snapshot_t ms; diff --git a/doomsday/engine/portable/src/r_sky.c b/doomsday/engine/portable/src/r_sky.c index 801fef9642..c05c063741 100644 --- a/doomsday/engine/portable/src/r_sky.c +++ b/doomsday/engine/portable/src/r_sky.c @@ -103,7 +103,7 @@ static void configureDefaultSky(void) skylayer_t* slayer = &skyLayers[i]; slayer->flags = (i == 0? SLF_ENABLED : 0); - slayer->material = Materials_NumForName(MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME":SKY1"); + slayer->material = Materials_IndexForName(MN_TEXTURES_NAME":SKY1"); slayer->offset = 0; // Default the fadeout to black. slayer->fadeout.use = (i == 0); @@ -274,7 +274,7 @@ void R_SetupSky(ded_sky_t* sky) R_SkyLayerEnable(i, true); R_SkyLayerMasked(i, (def->flags & SLF_MASKED) != 0); { materialnum_t material; - if(def->material && (material = Materials_NumForName2(def->material)) == 0) + if(def->material && (material = Materials_IndexForUri(def->material)) == 0) { ddstring_t* path = Uri_ToString(def->material); Con_Message("Warning, unknown material \"%s\" in sky def %i, using default.\n", Str_Text(path), i); diff --git a/doomsday/engine/portable/src/r_things.c b/doomsday/engine/portable/src/r_things.c index 9b890c0b1d..8c9a587225 100644 --- a/doomsday/engine/portable/src/r_things.c +++ b/doomsday/engine/portable/src/r_things.c @@ -407,9 +407,9 @@ void R_PreInitSprites(void) } { ddstring_t path; Str_Init(&path); - Str_Appendf(&path, MATERIALS_SPRITES_RESOURCE_NAMESPACE_NAME":%s", name); + Str_Appendf(&path, MN_SPRITES_NAME":%s", name); - sprFrame->mat = Materials_ToMaterial(Materials_NumForName(Str_Text(&path))); + sprFrame->mat = Materials_ToMaterial(Materials_IndexForName(Str_Text(&path))); Str_Free(&path); } diff --git a/doomsday/engine/portable/src/rend_console.c b/doomsday/engine/portable/src/rend_console.c index cddab8331d..e25ac5c18b 100644 --- a/doomsday/engine/portable/src/rend_console.c +++ b/doomsday/engine/portable/src/rend_console.c @@ -267,7 +267,7 @@ void Rend_ConsoleUpdateBackground(const cvar_t* unused) { assert(inited); consoleBackgroundMaterial = Materials_ToMaterial( - Materials_CheckNumForName(consoleBackgroundMaterialName)); + Materials_IndexForName(consoleBackgroundMaterialName)); } void Rend_ConsoleToggleFullscreen(void) diff --git a/doomsday/engine/portable/src/rend_main.c b/doomsday/engine/portable/src/rend_main.c index 49cae3718f..52d9c67703 100644 --- a/doomsday/engine/portable/src/rend_main.c +++ b/doomsday/engine/portable/src/rend_main.c @@ -2251,11 +2251,11 @@ static boolean rendSegSection(subsector_t* ssec, seg_t* seg, else if(texMode == 1) // For debug, render the "missing" texture instead of the texture // chosen for surfaces to fix the HOMs. - mat = Materials_ToMaterial(Materials_NumForName(MATERIALS_SYSTEM_RESOURCE_NAMESPACE_NAME":missing")); + mat = Materials_ToMaterial(Materials_IndexForName(MN_SYSTEM_NAME":missing")); else // texMode == 2 // For lighting debug, render all solid surfaces using the gray // texture. - mat = Materials_ToMaterial(Materials_NumForName(MATERIALS_SYSTEM_RESOURCE_NAMESPACE_NAME":gray")); + mat = Materials_ToMaterial(Materials_IndexForName(MN_SYSTEM_NAME":gray")); // Make any necessary adjustments to the surface flags to suit the // current texture mode. @@ -3535,7 +3535,7 @@ static __inline float getSkyCeiling(plane_t* ffloor, plane_t* fceil, plane_t* bf memset(rTU, 0, sizeof(rTU)); setGeometryZ(polyType, edgeDeltasZ, numVerts, rvertices, (polyType == RPT_NORMAL? rtexcoords : 0), (polyType == RPT_NORMAL? rcolors : 0), (polyType == RPT_NORMAL? rcolorsShiny : 0)); - prepareSkyMaskSurface(polyType, numVerts, rvertices, (polyType == RPT_NORMAL? rtexcoords : 0), (polyType == RPT_NORMAL? rcolors : 0), (polyType == RPT_NORMAL? rcolorsShiny : 0), rTU, 0, surfaceNormal, 0, 1, 0, ambientLightColor, ambientLightLevel, lightLevelDeltaLeft, lightLevelDeltaRight, lightLevelDeltaBottom, lightLevelDeltaTop, 0, 0, 0, 0, seg->length, true, renderTextures!=2?ffloor->PS_material:Materials_ToMaterial(Materials_NumForName(MATERIALS_SYSTEM_RESOURCE_NAMESPACE_NAME":gray")), false); + prepareSkyMaskSurface(polyType, numVerts, rvertices, (polyType == RPT_NORMAL? rtexcoords : 0), (polyType == RPT_NORMAL? rcolors : 0), (polyType == RPT_NORMAL? rcolorsShiny : 0), rTU, 0, surfaceNormal, 0, 1, 0, ambientLightColor, ambientLightLevel, lightLevelDeltaLeft, lightLevelDeltaRight, lightLevelDeltaBottom, lightLevelDeltaTop, 0, 0, 0, 0, seg->length, true, renderTextures!=2?ffloor->PS_material:Materials_ToMaterial(Materials_IndexForName(MN_SYSTEM_NAME":gray")), false); RL_AddPoly(PT_TRIANGLE_STRIP, polyType, rvertices, (polyType == RPT_NORMAL? rtexcoords : 0), 0, 0, (polyType == RPT_NORMAL? rcolors : 0), numVerts, 0, 0, 0, rTU); } segPtr++; @@ -3631,7 +3631,7 @@ static __inline float getSkyCeiling(plane_t* ffloor, plane_t* fceil, plane_t* bf memset(rTU, 0, sizeof(rTU)); setGeometryZ(polyType, edgeDeltasZ, numVerts, rvertices, (polyType == RPT_NORMAL? rtexcoords : 0), (polyType == RPT_NORMAL? rcolors : 0), (polyType == RPT_NORMAL? rcolorsShiny : 0)); - prepareSkyMaskSurface(polyType, numVerts, rvertices, (polyType == RPT_NORMAL? rtexcoords : 0), (polyType == RPT_NORMAL? rcolors : 0), (polyType == RPT_NORMAL? rcolorsShiny : 0), rTU, 0, surfaceNormal, 0, 1, 0, ambientLightColor, ambientLightLevel, lightLevelDeltaLeft, lightLevelDeltaRight, lightLevelDeltaBottom, lightLevelDeltaTop, 0, 0, 0, 0, seg->length, true, renderTextures!=2?fceil->PS_material:Materials_ToMaterial(Materials_NumForName(MATERIALS_SYSTEM_RESOURCE_NAMESPACE_NAME":gray")), false); + prepareSkyMaskSurface(polyType, numVerts, rvertices, (polyType == RPT_NORMAL? rtexcoords : 0), (polyType == RPT_NORMAL? rcolors : 0), (polyType == RPT_NORMAL? rcolorsShiny : 0), rTU, 0, surfaceNormal, 0, 1, 0, ambientLightColor, ambientLightLevel, lightLevelDeltaLeft, lightLevelDeltaRight, lightLevelDeltaBottom, lightLevelDeltaTop, 0, 0, 0, 0, seg->length, true, renderTextures!=2?fceil->PS_material:Materials_ToMaterial(Materials_IndexForName(MN_SYSTEM_NAME":gray")), false); RL_AddPoly(PT_TRIANGLE_STRIP, polyType, rvertices, (polyType == RPT_NORMAL? rtexcoords : 0), 0, 0, (polyType == RPT_NORMAL? rcolors : 0), numVerts, 0, 0, 0, rTU); } segPtr++; @@ -3758,7 +3758,7 @@ static __inline float getSkyCeiling(plane_t* ffloor, plane_t* fceil, plane_t* bf memset(rTU, 0, sizeof(rTU)); setGeometryZ(polyType, edgeDeltasZ, numVerts, rvertices, (polyType == RPT_NORMAL? rtexcoords : 0), (polyType == RPT_NORMAL? rcolors : 0), (polyType == RPT_NORMAL? rcolorsShiny : 0)); - prepareSkyMaskSurface(polyType, numVerts, rvertices, (polyType == RPT_NORMAL? rtexcoords : 0), (polyType == RPT_NORMAL? rcolors : 0), (polyType == RPT_NORMAL? rcolorsShiny : 0), rTU, 0, surfaceNormal, 0, 1, 0, ambientLightColor, ambientLightLevel, lightLevelDeltaLeft, lightLevelDeltaRight, lightLevelDeltaBottom, lightLevelDeltaTop, 0, 0, 0, 0, seg->length, true, renderTextures!=2?fceil->PS_material:Materials_ToMaterial(Materials_NumForName(MATERIALS_SYSTEM_RESOURCE_NAMESPACE_NAME":gray")), false); + prepareSkyMaskSurface(polyType, numVerts, rvertices, (polyType == RPT_NORMAL? rtexcoords : 0), (polyType == RPT_NORMAL? rcolors : 0), (polyType == RPT_NORMAL? rcolorsShiny : 0), rTU, 0, surfaceNormal, 0, 1, 0, ambientLightColor, ambientLightLevel, lightLevelDeltaLeft, lightLevelDeltaRight, lightLevelDeltaBottom, lightLevelDeltaTop, 0, 0, 0, 0, seg->length, true, renderTextures!=2?fceil->PS_material:Materials_ToMaterial(Materials_IndexForName(MN_SYSTEM_NAME":gray")), false); RL_AddPoly(PT_TRIANGLE_STRIP, polyType, rvertices, (polyType == RPT_NORMAL? rtexcoords : 0), 0, 0, (polyType == RPT_NORMAL? rcolors : 0), numVerts, 0, 0, 0, rTU); } @@ -4036,10 +4036,10 @@ static void Rend_RenderSubsector(uint ssecidx) else if(texMode == 1) // For debug, render the "missing" texture instead of the texture // chosen for surfaces to fix the HOMs. - mat = Materials_ToMaterial(Materials_NumForName(MATERIALS_SYSTEM_RESOURCE_NAMESPACE_NAME":missing")); + mat = Materials_ToMaterial(Materials_IndexForName(MN_SYSTEM_NAME":missing")); else // For lighting debug, render all solid surfaces using the gray texture. - mat = Materials_ToMaterial(Materials_NumForName(MATERIALS_SYSTEM_RESOURCE_NAMESPACE_NAME":gray")); + mat = Materials_ToMaterial(Materials_IndexForName(MN_SYSTEM_NAME":gray")); V2_Copy(texOffset, suf->visOffset); @@ -4089,7 +4089,7 @@ static void Rend_RenderSubsector(uint ssecidx) vec3_t normal; V3_Copy(normal, plane->PS_normal); Rend_RenderPlane(ssec, PLN_MID, plane->visHeight, normal, - renderTextures!=2? sect->SP_floormaterial : Materials_ToMaterial(Materials_NumForName(MATERIALS_SYSTEM_RESOURCE_NAMESPACE_NAME":gray")), + renderTextures!=2? sect->SP_floormaterial : Materials_ToMaterial(Materials_IndexForName(MN_SYSTEM_NAME":gray")), suf->flags, suf->inFlags, suf->rgba, BM_NORMAL, NULL, NULL, false, devRendSkyMode != 0, @@ -4103,7 +4103,7 @@ static void Rend_RenderSubsector(uint ssecidx) vec3_t normal; V3_Copy(normal, plane->PS_normal); Rend_RenderPlane(ssec, PLN_MID, plane->visHeight, normal, - renderTextures!=2? sect->SP_ceilmaterial : Materials_ToMaterial(Materials_NumForName(MATERIALS_SYSTEM_RESOURCE_NAMESPACE_NAME":gray")), + renderTextures!=2? sect->SP_ceilmaterial : Materials_ToMaterial(Materials_IndexForName(MN_SYSTEM_NAME":gray")), suf->flags, suf->inFlags, suf->rgba, BM_NORMAL, NULL, NULL, false, devRendSkyMode != 0, @@ -4996,7 +4996,7 @@ static void Rend_RenderBoundingBoxes(void) glEnable(GL_TEXTURE_2D); glDisable(GL_CULL_FACE); - mat = Materials_ToMaterial(Materials_NumForName(MATERIALS_SYSTEM_RESOURCE_NAMESPACE_NAME":bbox")); + mat = Materials_ToMaterial(Materials_IndexForName(MN_SYSTEM_NAME":bbox")); Materials_Prepare(&ms, mat, true, NULL); GL_BindTexture(ms.units[MTU_PRIMARY].tex->glName, ms.units[MTU_PRIMARY].magMode); diff --git a/doomsday/engine/portable/src/rend_model.c b/doomsday/engine/portable/src/rend_model.c index 83fdc62e87..c4c32d7514 100644 --- a/doomsday/engine/portable/src/rend_model.c +++ b/doomsday/engine/portable/src/rend_model.c @@ -775,7 +775,7 @@ static void Mod_RenderSubModel(uint number, const rendmodelparams_t* params) if(renderTextures == 2) { // For lighting debug, render all surfaces using the gray texture. - material_t* mat = Materials_ToMaterial(Materials_NumForName(MATERIALS_SYSTEM_RESOURCE_NAMESPACE_NAME":gray")); + material_t* mat = Materials_ToMaterial(Materials_IndexForName(MN_SYSTEM_NAME":gray")); if(mat) { diff --git a/doomsday/engine/portable/src/rend_sky.c b/doomsday/engine/portable/src/rend_sky.c index b74f9f6f50..fa32948a16 100644 --- a/doomsday/engine/portable/src/rend_sky.c +++ b/doomsday/engine/portable/src/rend_sky.c @@ -269,11 +269,11 @@ void Rend_SkyRenderer(int hemi, const rendskysphereparams_t* params) material_t* material; if(renderTextures == 2) - material = Materials_ToMaterial(Materials_NumForName( - MATERIALS_SYSTEM_RESOURCE_NAMESPACE_NAME":gray" )); + material = Materials_ToMaterial(Materials_IndexForName( + MN_SYSTEM_NAME":gray" )); else - material = Materials_ToMaterial(Materials_NumForName( - MATERIALS_SYSTEM_RESOURCE_NAMESPACE_NAME":missing" )); + material = Materials_ToMaterial(Materials_IndexForName( + MN_SYSTEM_NAME":missing" )); memset(&p, 0, sizeof(p)); p.flags = MLF_LOAD_AS_SKY; diff --git a/doomsday/engine/portable/src/rend_sprite.c b/doomsday/engine/portable/src/rend_sprite.c index ac6c4d4283..ab7db43755 100644 --- a/doomsday/engine/portable/src/rend_sprite.c +++ b/doomsday/engine/portable/src/rend_sprite.c @@ -353,7 +353,7 @@ void Rend_DrawPSprite(const rendpspriteparams_t *params) } else if(renderTextures == 2) { // For lighting debug, render all solid surfaces using the gray texture. - material_t* mat = Materials_ToMaterial(Materials_NumForName(MATERIALS_SYSTEM_RESOURCE_NAMESPACE_NAME":gray")); + material_t* mat = Materials_ToMaterial(Materials_IndexForName(MN_SYSTEM_NAME":gray")); material_snapshot_t ms; Materials_Prepare(&ms, mat, true, NULL); @@ -858,7 +858,7 @@ void Rend_RenderSprite(const rendspriteparams_t* params) mat = params->mat; else if(renderTextures == 2) // For lighting debug, render all solid surfaces using the gray texture. - mat = Materials_ToMaterial(Materials_NumForName(MATERIALS_SYSTEM_RESOURCE_NAMESPACE_NAME":gray")); + mat = Materials_ToMaterial(Materials_IndexForName(MN_SYSTEM_NAME":gray")); if(mat) { diff --git a/doomsday/engine/portable/src/resourcenamespace.c b/doomsday/engine/portable/src/resourcenamespace.c index 77b9f6561c..b827622b89 100644 --- a/doomsday/engine/portable/src/resourcenamespace.c +++ b/doomsday/engine/portable/src/resourcenamespace.c @@ -96,14 +96,20 @@ static void formSearchPathList(ddstring_t* pathList, resourcenamespace_t* rn) // Join the extra pathlist from the resource namespace to the final pathlist? { uint i; for(i = 0; i < rn->_extraSearchPathsCount; ++i) - Str_Appendf(pathList, "%s;", Str_Text(Uri_ComposePath(rn->_extraSearchPaths[i]))); - } + { + ddstring_t* path = Uri_ComposePath(rn->_extraSearchPaths[i]); + Str_Appendf(pathList, "%s;", Str_Text(path)); + Str_Delete(path); + }} // Join the pathlist from the resource namespace to the final pathlist. { uint i; for(i = 0; i < rn->_searchPathsCount; ++i) - Str_Appendf(pathList, "%s;", Str_Text(Uri_ComposePath(rn->_searchPaths[i]))); - } + { + ddstring_t* path = Uri_ComposePath(rn->_searchPaths[i]); + Str_Appendf(pathList, "%s;", Str_Text(path)); + Str_Delete(path); + }} // A command line default path? if(rn->_overrideName && ArgCheckWith(Str_Text(rn->_overrideName), 1)) diff --git a/doomsday/engine/portable/src/uri.c b/doomsday/engine/portable/src/uri.c index 3a407746f5..cc096ca009 100644 --- a/doomsday/engine/portable/src/uri.c +++ b/doomsday/engine/portable/src/uri.c @@ -299,6 +299,16 @@ void Uri_SetScheme(dduri_t* uri, const char* scheme) Str_Set(&uri->_scheme, scheme); } +void Uri_SetPath(dduri_t* uri, const char* path) +{ + if(!uri) + { + Con_Error("Attempted Uri::SetPath with invalid reference (this==0)."); + return; // Unreachable. + } + Str_Set(&uri->_path, path); +} + void Uri_SetUri3(dduri_t* uri, const char* path, resourceclass_t defaultResourceClass) { if(!uri) diff --git a/doomsday/plugins/common/src/hu_stuff.c b/doomsday/plugins/common/src/hu_stuff.c index fc3d55932c..d2283f1401 100644 --- a/doomsday/plugins/common/src/hu_stuff.c +++ b/doomsday/plugins/common/src/hu_stuff.c @@ -1297,7 +1297,7 @@ void M_DrawBackgroundBox(float x, float y, float w, float h, boolean background, if(background) { - DGL_SetMaterial(P_ToPtr(DMU_MATERIAL, Materials_NumForName(borderGraphics[0]))); + DGL_SetMaterial(P_ToPtr(DMU_MATERIAL, Materials_IndexForName(borderGraphics[0]))); DGL_DrawRectTiled(x, y, w, h, 64, 64); } diff --git a/doomsday/plugins/common/src/p_mapsetup.c b/doomsday/plugins/common/src/p_mapsetup.c index f8f6c38ea3..39a3d31076 100644 --- a/doomsday/plugins/common/src/p_mapsetup.c +++ b/doomsday/plugins/common/src/p_mapsetup.c @@ -929,7 +929,7 @@ static void P_FinalizeMap(void) if(!(gameModeBits & (GM_DOOM2_HACX|GM_DOOM_CHEX))) { uint i, k; - material_t* mat = P_ToPtr(DMU_MATERIAL, Materials_NumForName(MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME":NUKE24")); + material_t* mat = P_ToPtr(DMU_MATERIAL, Materials_IndexForName(MN_TEXTURES_NAME":NUKE24")); material_t* bottomMat, *midMat; float yoff; sidedef_t* sidedef; diff --git a/doomsday/plugins/common/src/p_saveg.c b/doomsday/plugins/common/src/p_saveg.c index 4045fd41bb..41b82df14c 100644 --- a/doomsday/plugins/common/src/p_saveg.c +++ b/doomsday/plugins/common/src/p_saveg.c @@ -3043,8 +3043,8 @@ static int SV_ReadFloor(floor_t* floor) else { ddstring_t path; Str_Init(&path); - Str_Appendf(&path, MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":%s", W_LumpName(SV_ReadShort())); - floor->material = P_ToPtr(DMU_MATERIAL, Materials_NumForName(Str_Text(&path))); + Str_Appendf(&path, MN_FLATS_NAME":%s", W_LumpName(SV_ReadShort())); + floor->material = P_ToPtr(DMU_MATERIAL, Materials_IndexForName(Str_Text(&path))); Str_Free(&path); } @@ -3092,8 +3092,8 @@ static int SV_ReadFloor(floor_t* floor) floor->state = (int) SV_ReadLong(); floor->newSpecial = SV_ReadLong(); { ddstring_t path; Str_Init(&path); - Str_Appendf(&path, MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":%s", W_LumpName(SV_ReadShort())); - floor->material = P_ToPtr(DMU_MATERIAL, Materials_NumForName(Str_Text(&path))); + Str_Appendf(&path, MN_FLATS_NAME":%s", W_LumpName(SV_ReadShort())); + floor->material = P_ToPtr(DMU_MATERIAL, Materials_IndexForName(Str_Text(&path))); Str_Free(&path); } diff --git a/doomsday/plugins/common/src/p_svtexarc.c b/doomsday/plugins/common/src/p_svtexarc.c index c763b231cd..ea498ebbd0 100644 --- a/doomsday/plugins/common/src/p_svtexarc.c +++ b/doomsday/plugins/common/src/p_svtexarc.c @@ -99,7 +99,7 @@ static materialarchive_serialid_t insertSerialIdForMaterial(materialarchive_t* m assert(mat); { dduri_t* path; - if((path = Materials_GetPath(mat))) + if((path = Materials_GetUri(mat))) { // Insert a new element in the index. insertSerialId(mArc, mArc->count+1, path, mat); @@ -117,7 +117,7 @@ static materialarchive_serialid_t getSerialIdForMaterial(materialarchive_t* mArc { materialarchive_serialid_t id = 0; dduri_t* path; - if((path = Materials_GetPath(mat))) + if((path = Materials_GetUri(mat))) { uint i; for(i = 0; i < mArc->count; ++i) @@ -157,7 +157,7 @@ static material_t* materialForSerialId(const materialarchive_t* mArc, if(serialId != 0 && (rec = getRecord(mArc, serialId-1, group))) { if(rec->material == 0) - rec->material = P_ToPtr(DMU_MATERIAL, Materials_NumForName2(rec->path)); + rec->material = P_ToPtr(DMU_MATERIAL, Materials_IndexForUri(rec->path)); return rec->material; } return 0; @@ -206,24 +206,23 @@ static int readRecord(materialarchive_t* mArc, materialarchive_record_t* rec) else { char name[9]; - ddstring_t path; byte oldMNI; SV_Read(name, 8); name[8] = 0; - oldMNI = SV_ReadByte(); + if(!rec->path) rec->path = Uri_ConstructDefault(); - Str_Init(&path); + + oldMNI = SV_ReadByte(); switch(oldMNI % 4) { - case 0: Str_Appendf(&path, MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME":%s", name); break; - case 1: Str_Appendf(&path, MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":%s", name); break; - case 2: Str_Appendf(&path, MATERIALS_SPRITES_RESOURCE_NAMESPACE_NAME":%s", name); break; - case 3: Str_Appendf(&path, MATERIALS_SYSTEM_RESOURCE_NAMESPACE_NAME":%s", name); break; + case 0: Uri_SetScheme(rec->path, MN_TEXTURES_NAME); break; + case 1: Uri_SetScheme(rec->path, MN_FLATS_NAME); break; + case 2: Uri_SetScheme(rec->path, MN_SPRITES_NAME); break; + case 3: Uri_SetScheme(rec->path, MN_SYSTEM_NAME); break; } - Uri_SetUri(rec->path, &path); - Str_Free(&path); + Uri_SetPath(rec->path, name); } return true; // Continue iteration. } @@ -357,12 +356,12 @@ void MaterialArchive_Read(materialarchive_t* materialArchive, int version) } materialArchive->count = 0; - readMaterialGroup(materialArchive, (version >= 1? "" : MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":")); + readMaterialGroup(materialArchive, (version >= 1? "" : MN_FLATS_NAME":")); if(materialArchive->version == 0) { // The old format saved flats and textures in seperate groups. materialArchive->numFlats = materialArchive->count; - readMaterialGroup(materialArchive, (version >= 1? "" : MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME":")); + readMaterialGroup(materialArchive, (version >= 1? "" : MN_TEXTURES_NAME":")); } } diff --git a/doomsday/plugins/common/src/p_switch.c b/doomsday/plugins/common/src/p_switch.c index 19d079e4cb..86df216a9c 100644 --- a/doomsday/plugins/common/src/p_switch.c +++ b/doomsday/plugins/common/src/p_switch.c @@ -178,12 +178,12 @@ void P_InitSwitchList(void) break; Str_Clear(&path); - Str_Appendf(&path, MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME":%s", switchInfo[i].name1); - switchlist[index++] = P_ToPtr(DMU_MATERIAL, Materials_CheckNumForName(Str_Text(&path))); + Str_Appendf(&path, MN_TEXTURES_NAME":%s", switchInfo[i].name1); + switchlist[index++] = P_ToPtr(DMU_MATERIAL, Materials_IndexForName(Str_Text(&path))); Str_Clear(&path); - Str_Appendf(&path, MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME":%s", switchInfo[i].name2); - switchlist[index++] = P_ToPtr(DMU_MATERIAL, Materials_CheckNumForName(Str_Text(&path))); + Str_Appendf(&path, MN_TEXTURES_NAME":%s", switchInfo[i].name2); + switchlist[index++] = P_ToPtr(DMU_MATERIAL, Materials_IndexForName(Str_Text(&path))); } Str_Free(&path); @@ -259,11 +259,11 @@ void P_InitSwitchList(void) if(!SHORT(sList[i].episode)) break; Str_Clear(&path); - Str_Appendf(&path, MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME":%s", sList[i].name1); - switchlist[index++] = P_ToPtr(DMU_MATERIAL, Materials_NumForName(Str_Text(&path))); + Str_Appendf(&path, MN_TEXTURES_NAME":%s", sList[i].name1); + switchlist[index++] = P_ToPtr(DMU_MATERIAL, Materials_IndexForName(Str_Text(&path))); Str_Clear(&path); - Str_Appendf(&path, MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME":%s", sList[i].name2); - switchlist[index++] = P_ToPtr(DMU_MATERIAL, Materials_NumForName(Str_Text(&path))); + Str_Appendf(&path, MN_TEXTURES_NAME":%s", sList[i].name2); + switchlist[index++] = P_ToPtr(DMU_MATERIAL, Materials_IndexForName(Str_Text(&path))); if(verbose > (lumpNum > 0? 1 : 2)) { Con_Message(" %d: Epi:%d A:\"%s\" B:\"%s\"\n", i, SHORT(sList[i].episode), sList[i].name1, sList[i].name2); diff --git a/doomsday/plugins/common/src/p_terraintype.c b/doomsday/plugins/common/src/p_terraintype.c index ae7c074eda..903c7337f8 100644 --- a/doomsday/plugins/common/src/p_terraintype.c +++ b/doomsday/plugins/common/src/p_terraintype.c @@ -171,24 +171,24 @@ void P_InitTerrainTypes(void) } matTTypeDefs[] = { #if __JDOOM__ || __JDOOM64__ - { MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":FWATER1", "Water" }, - { MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":LAVA1", "Lava" }, - { MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":BLOOD1", "Blood" }, - { MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":NUKAGE1", "Nukage" }, - { MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":SLIME01", "Slime" }, + { MN_FLATS_NAME":FWATER1", "Water" }, + { MN_FLATS_NAME":LAVA1", "Lava" }, + { MN_FLATS_NAME":BLOOD1", "Blood" }, + { MN_FLATS_NAME":NUKAGE1", "Nukage" }, + { MN_FLATS_NAME":SLIME01", "Slime" }, #endif #if __JHERETIC__ - { MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":FLTWAWA1", "Water" }, - { MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":FLTFLWW1", "Water" }, - { MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":FLTLAVA1", "Lava" }, - { MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":FLATHUH1", "Lava" }, - { MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":FLTSLUD1", "Sludge" }, + { MN_FLATS_NAME":FLTWAWA1", "Water" }, + { MN_FLATS_NAME":FLTFLWW1", "Water" }, + { MN_FLATS_NAME":FLTLAVA1", "Lava" }, + { MN_FLATS_NAME":FLATHUH1", "Lava" }, + { MN_FLATS_NAME":FLTSLUD1", "Sludge" }, #endif #if __JHEXEN__ - { MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":X_005", "Water" }, - { MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":X_001", "Lava" }, - { MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":X_009", "Sludge" }, - { MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":F_033", "Ice" }, + { MN_FLATS_NAME":X_005", "Water" }, + { MN_FLATS_NAME":X_001", "Lava" }, + { MN_FLATS_NAME":X_009", "Sludge" }, + { MN_FLATS_NAME":F_033", "Ice" }, #endif { 0, 0 } }; @@ -204,7 +204,7 @@ void P_InitTerrainTypes(void) uint idx = findTerrainTypeNumForName(matTTypeDefs[i].ttName); if(idx) { - material_t* mat = P_ToPtr(DMU_MATERIAL, Materials_CheckNumForName(matTTypeDefs[i].matPath)); + material_t* mat = P_ToPtr(DMU_MATERIAL, Materials_IndexForName(matTTypeDefs[i].matPath)); if(mat) { Con_Message("P_InitTerrainTypes: Material '%s' linked to terrain type '%s'.\n", diff --git a/doomsday/plugins/common/src/p_xgsave.c b/doomsday/plugins/common/src/p_xgsave.c index 74c9cd03dc..c20d2950b4 100644 --- a/doomsday/plugins/common/src/p_xgsave.c +++ b/doomsday/plugins/common/src/p_xgsave.c @@ -268,8 +268,8 @@ int SV_ReadXGPlaneMover(xgplanemover_t* mov) else { ddstring_t path; Str_Init(&path); - Str_Appendf(&path, MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":%s", W_LumpName(SV_ReadLong())); - mov->setMaterial = P_ToPtr(DMU_MATERIAL, Materials_NumForName(Str_Text(&path))); + Str_Appendf(&path, MN_FLATS_NAME":%s", W_LumpName(SV_ReadLong())); + mov->setMaterial = P_ToPtr(DMU_MATERIAL, Materials_IndexForName(Str_Text(&path))); Str_Free(&path); } diff --git a/doomsday/plugins/jdoom/src/m_cheat.c b/doomsday/plugins/jdoom/src/m_cheat.c index f44bb57f60..3f3e4ca4d2 100644 --- a/doomsday/plugins/jdoom/src/m_cheat.c +++ b/doomsday/plugins/jdoom/src/m_cheat.c @@ -524,10 +524,10 @@ static void printDebugInfo(player_t* plr) Con_Message("\nSubsector %i:\n", P_ToIndex(sub)); Con_Message(" FloorZ:%g Material:%s\n", P_GetFloatp(sub, DMU_FLOOR_HEIGHT), - Materials_GetName(P_GetPtrp(sub, DMU_FLOOR_MATERIAL))); + Materials_GetSymbolicName(P_GetPtrp(sub, DMU_FLOOR_MATERIAL))); Con_Message(" CeilingZ:%g Material:%s\n", P_GetFloatp(sub, DMU_CEILING_HEIGHT), - Materials_GetName(P_GetPtrp(sub, DMU_CEILING_MATERIAL))); + Materials_GetSymbolicName(P_GetPtrp(sub, DMU_CEILING_MATERIAL))); Con_Message("Player height:%g Player radius:%g\n", plr->plr->mo->height, plr->plr->mo->radius); } diff --git a/doomsday/plugins/jdoom/src/p_oldsvg.c b/doomsday/plugins/jdoom/src/p_oldsvg.c index 1dc9856583..b140946da8 100644 --- a/doomsday/plugins/jdoom/src/p_oldsvg.c +++ b/doomsday/plugins/jdoom/src/p_oldsvg.c @@ -593,8 +593,8 @@ typedef struct { floor->state = (int) SV_ReadLong(); floor->newSpecial = SV_ReadLong(); { ddstring_t path; Str_Init(&path); - Str_Appendf(&path, MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":%s", W_LumpName(SV_ReadShort())); - floor->material = P_ToPtr(DMU_MATERIAL, Materials_NumForName(Str_Text(&path))); + Str_Appendf(&path, MN_FLATS_NAME":%s", W_LumpName(SV_ReadShort())); + floor->material = P_ToPtr(DMU_MATERIAL, Materials_IndexForName(Str_Text(&path))); Str_Free(&path); } floor->floorDestHeight = FIX2FLT(SV_ReadLong()); diff --git a/doomsday/plugins/jdoom/src/p_spec.c b/doomsday/plugins/jdoom/src/p_spec.c index ab980b71b4..0dabfa5182 100644 --- a/doomsday/plugins/jdoom/src/p_spec.c +++ b/doomsday/plugins/jdoom/src/p_spec.c @@ -144,115 +144,91 @@ static animdef_t animsDoom2[] = { */ static void loadAnimDefs(animdef_t* animDefs, boolean isCustom) { + dduri_t* startPath = Uri_ConstructDefault(); + dduri_t* endPath = Uri_ConstructDefault(); + boolean lastIsTexture; int i; // Read structures until -1 is found for(i = 0; animDefs[i].istexture != -1 ; ++i) { + boolean isTexture = animDefs[i].istexture != 0; int groupNum, ticsPerFrame, numFrames; + uint startFrame, endFrame; - if(!animDefs[i].istexture) + if(i == 0 || isTexture != lastIsTexture) { - uint startFrame, endFrame, n; + Uri_SetScheme(startPath, isTexture? TN_TEXTURES_NAME : TN_FLATS_NAME); + Uri_SetScheme(endPath, isTexture? TN_TEXTURES_NAME : TN_FLATS_NAME); + lastIsTexture = isTexture; + } + Uri_SetPath(startPath, animDefs[i].startname); + Uri_SetPath(endPath, animDefs[i].endname); + + if(0 == (startFrame = GL_GLTextureIndexForUri2(startPath, !isCustom)) || + 0 == (endFrame = GL_GLTextureIndexForUri2(endPath, !isCustom))) + continue; - if((startFrame = GL_TextureIndexForName(animDefs[i].startname, TN_FLATS)) == 0 || - (endFrame = GL_TextureIndexForName(animDefs[i].endname, TN_FLATS)) == 0) - continue; + numFrames = (endFrame > startFrame? endFrame - startFrame : startFrame - endFrame) + 1; + ticsPerFrame = LONG(animDefs[i].speed); - numFrames = (endFrame > startFrame? endFrame - startFrame : startFrame - endFrame) + 1; - ticsPerFrame = LONG(animDefs[i].speed); + if(numFrames < 2) + { + Con_Message("loadAnimDefs: Warning, bad cycle from %s to %s in sequence %i.\n", animDefs[i].startname, animDefs[i].endname, i); + continue; + } - if(numFrames < 2) - { - Con_Message("loadAnimDefs: Warning, bad cycle from %s to %s in sequence %i.\n", animDefs[i].startname, animDefs[i].endname, i); - continue; - } + if(0 == startFrame && 0 == endFrame) + continue; - if(startFrame && endFrame) - { // We have a valid animation. - if(verbose > (isCustom? 1 : 2)) - { - Con_Message(" %d: From:\"%s\" To:\"%s\" Tics:%i\n", i, animDefs[i].startname, animDefs[i].endname, ticsPerFrame); - } - - /** - * Doomsday's group animation needs to know the texture/flat - * numbers of ALL frames in the animation group so we'll - * have to step through the directory adding frames as we - * go. (DOOM only required the start/end texture/flat - * numbers and would animate all textures/flats inbetween). - */ - - // Create a new animation group for it. - groupNum = Materials_CreateAnimGroup(AGF_SMOOTH); - - // Add all frames from start to end to the group. - if(endFrame > startFrame) - { - for(n = startFrame; n <= endFrame; n++) - { - materialnum_t frame = DD_MaterialForTextureIndex(n, TN_FLATS); - if(frame != 0) - Materials_AddAnimGroupFrame(groupNum, frame, ticsPerFrame, 0); - } - } - else - { - for(n = endFrame; n >= startFrame; n--) - { - materialnum_t frame = DD_MaterialForTextureIndex(n, TN_FLATS); - if(frame != 0) - Materials_AddAnimGroupFrame(groupNum, frame, ticsPerFrame, 0); - } - } - } - } - else - { // Same as above but for texture groups. - uint startFrame, endFrame, n; + /** + * A valid animation. + * + * Doomsday's group animation needs to know the texture/flat + * numbers of ALL frames in the animation group so we'll + * have to step through the directory adding frames as we + * go. (DOOM only required the start/end texture/flat + * numbers and would animate all textures/flats inbetween). + */ - if((startFrame = GL_TextureIndexForName(animDefs[i].startname, TN_TEXTURES)) == 0 || - (endFrame = GL_TextureIndexForName(animDefs[i].endname, TN_TEXTURES)) == 0) - continue; + if(verbose > (isCustom? 1 : 2)) + { + ddstring_t* from = Uri_ToString(startPath); + ddstring_t* to = Uri_ToString(endPath); + Con_Message(" %d: From:\"%s\" To:\"%s\" Tics:%i\n", + i, Str_Text(from), Str_Text(to), ticsPerFrame); + Str_Delete(from); + Str_Delete(to); + } - numFrames = (endFrame > startFrame? endFrame - startFrame : startFrame - endFrame) + 1; - ticsPerFrame = LONG(animDefs[i].speed); + // Find an animation group for this. + groupNum = Materials_CreateAnimGroup(AGF_SMOOTH); - if(numFrames < 2) + // Add all frames from start to end to the group. + if(endFrame > startFrame) + { + uint n; + for(n = startFrame; n <= endFrame; ++n) { - Con_Message("loadAnimDefs: Warning, bad cycle from %s to %s in sequence %i.\n", animDefs[i].startname, animDefs[i].endname, i); - continue; + materialnum_t frame = DD_MaterialForTextureIndex(n, isTexture? TN_TEXTURES : TN_FLATS); + if(frame != 0) + Materials_AddAnimGroupFrame(groupNum, frame, ticsPerFrame, 0); } - - if(startFrame && endFrame) + } + else + { + uint n; + for(n = endFrame; n >= startFrame; n--) { - if(verbose > (isCustom? 1 : 2)) - { - Con_Message(" %d: From:\"%s\" To:\"%s\" Tics:%i\n", i, animDefs[i].startname, animDefs[i].endname, ticsPerFrame); - } - - groupNum = Materials_CreateAnimGroup(AGF_SMOOTH); - if(endFrame > startFrame) - { - for(n = startFrame; n <= endFrame; n++) - { - materialnum_t frame = DD_MaterialForTextureIndex(n, TN_TEXTURES); - if(frame != 0) - Materials_AddAnimGroupFrame(groupNum, frame, ticsPerFrame, 0); - } - } - else - { - for(n = endFrame; n >= startFrame; n--) - { - materialnum_t frame = DD_MaterialForTextureIndex(n, TN_TEXTURES); - if(frame != 0) - Materials_AddAnimGroupFrame(groupNum, frame, ticsPerFrame, 0); - } - } + materialnum_t frame = DD_MaterialForTextureIndex(n, isTexture? TN_TEXTURES : TN_FLATS); + if(frame != 0) + Materials_AddAnimGroupFrame(groupNum, frame, ticsPerFrame, 0); } } } + + Uri_Destruct(startPath); + Uri_Destruct(endPath); } void P_InitPicAnims(void) diff --git a/doomsday/plugins/jdoom64/src/m_cheat.c b/doomsday/plugins/jdoom64/src/m_cheat.c index 131cf9c906..7100ab9014 100644 --- a/doomsday/plugins/jdoom64/src/m_cheat.c +++ b/doomsday/plugins/jdoom64/src/m_cheat.c @@ -231,10 +231,10 @@ void printDebugInfo(player_t* plr) Con_Message("\nSubsector %i:\n", P_ToIndex(sub)); Con_Message(" FloorZ:%g Material:%s\n", P_GetFloatp(sub, DMU_FLOOR_HEIGHT), - Materials_GetName(P_GetPtrp(sub, DMU_FLOOR_MATERIAL))); + Materials_GetSymbolicName(P_GetPtrp(sub, DMU_FLOOR_MATERIAL))); Con_Message(" CeilingZ:%g Material:%s\n", P_GetFloatp(sub, DMU_CEILING_HEIGHT), - Materials_GetName(P_GetPtrp(sub, DMU_CEILING_MATERIAL))); + Materials_GetSymbolicName(P_GetPtrp(sub, DMU_CEILING_MATERIAL))); Con_Message("Player height:%g Player radius:%g\n", plr->plr->mo->height, plr->plr->mo->radius); } diff --git a/doomsday/plugins/jdoom64/src/p_spec.c b/doomsday/plugins/jdoom64/src/p_spec.c index 5dd8c75bd5..b37eeae46d 100644 --- a/doomsday/plugins/jdoom64/src/p_spec.c +++ b/doomsday/plugins/jdoom64/src/p_spec.c @@ -130,115 +130,91 @@ static animdef_t animsShared[] = { */ static void loadAnimDefs(animdef_t* animDefs, boolean isCustom) { + dduri_t* startPath = Uri_ConstructDefault(); + dduri_t* endPath = Uri_ConstructDefault(); + boolean lastIsTexture; int i; // Read structures until -1 is found for(i = 0; animDefs[i].istexture != -1 ; ++i) { + boolean isTexture = animDefs[i].istexture != 0; int groupNum, ticsPerFrame, numFrames; + uint startFrame, endFrame; - if(!animDefs[i].istexture) + if(i == 0 || isTexture != lastIsTexture) { - uint startFrame, endFrame, n; + Uri_SetScheme(startPath, isTexture? TN_TEXTURES_NAME : TN_FLATS_NAME); + Uri_SetScheme(endPath, isTexture? TN_TEXTURES_NAME : TN_FLATS_NAME); + lastIsTexture = isTexture; + } + Uri_SetPath(startPath, animDefs[i].startname); + Uri_SetPath(endPath, animDefs[i].endname); + + if(0 == (startFrame = GL_GLTextureIndexForUri2(startPath, !isCustom)) || + 0 == (endFrame = GL_GLTextureIndexForUri2(endPath, !isCustom))) + continue; - if((startFrame = GL_TextureIndexForName(animDefs[i].startname, TN_FLATS)) == 0 || - (endFrame = GL_TextureIndexForName(animDefs[i].endname, TN_FLATS)) == 0) - continue; + numFrames = (endFrame > startFrame? endFrame - startFrame : startFrame - endFrame) + 1; + ticsPerFrame = LONG(animDefs[i].speed); - numFrames = (endFrame > startFrame? endFrame - startFrame : startFrame - endFrame) + 1; - ticsPerFrame = LONG(animDefs[i].speed); + if(numFrames < 2) + { + Con_Message("loadAnimDefs: Warning, bad cycle from %s to %s in sequence %i.\n", animDefs[i].startname, animDefs[i].endname, i); + continue; + } - if(numFrames < 2) - { - Con_Message(" Warning, bad cycle from %s to %s in sequence %i.\n", animDefs[i].startname, animDefs[i].endname, i); - continue; - } + if(0 == startFrame && 0 == endFrame) + continue; - if(startFrame && endFrame) - { // We have a valid animation. - if(verbose > (isCustom? 1 : 2)) - { - Con_Message(" %d: From:\"%s\" To:\"%s\" Tics:%i\n", i, animDefs[i].startname, animDefs[i].endname, ticsPerFrame); - } - - /** - * Doomsday's group animation needs to know the texture/flat - * numbers of ALL frames in the animation group so we'll - * have to step through the directory adding frames as we - * go. (DOOM only required the start/end texture/flat - * numbers and would animate all textures/flats inbetween). - */ - - // Create a new animation group for it. - groupNum = Materials_CreateAnimGroup(AGF_SMOOTH); - - // Add all frames from start to end to the group. - if(endFrame > startFrame) - { - for(n = startFrame; n <= endFrame; n++) - { - materialnum_t frame = DD_MaterialForTextureIndex(n, TN_FLATS); - if(frame != 0) - Materials_AddAnimGroupFrame(groupNum, frame, ticsPerFrame, 0); - } - } - else - { - for(n = endFrame; n >= startFrame; n--) - { - materialnum_t frame = DD_MaterialForTextureIndex(n, TN_FLATS); - if(frame != 0) - Materials_AddAnimGroupFrame(groupNum, frame, ticsPerFrame, 0); - } - } - } - } - else - { // Same as above but for texture groups. - uint startFrame, endFrame, n; + /** + * A valid animation. + * + * Doomsday's group animation needs to know the texture/flat + * numbers of ALL frames in the animation group so we'll + * have to step through the directory adding frames as we + * go. (DOOM only required the start/end texture/flat + * numbers and would animate all textures/flats inbetween). + */ - if((startFrame = GL_TextureIndexForName(animDefs[i].startname, TN_TEXTURES)) == 0 || - (endFrame = GL_TextureIndexForName(animDefs[i].endname, TN_TEXTURES)) == 0) - continue; + if(verbose > (isCustom? 1 : 2)) + { + ddstring_t* from = Uri_ToString(startPath); + ddstring_t* to = Uri_ToString(endPath); + Con_Message(" %d: From:\"%s\" To:\"%s\" Tics:%i\n", + i, Str_Text(from), Str_Text(to), ticsPerFrame); + Str_Delete(from); + Str_Delete(to); + } - numFrames = (endFrame > startFrame? endFrame - startFrame : startFrame - endFrame) + 1; - ticsPerFrame = LONG(animDefs[i].speed); + // Find an animation group for this. + groupNum = Materials_CreateAnimGroup(AGF_SMOOTH); - if(numFrames < 2) + // Add all frames from start to end to the group. + if(endFrame > startFrame) + { + uint n; + for(n = startFrame; n <= endFrame; ++n) { - Con_Message("loadAnimDefs: Warning, bad cycle from %s to %s in sequence %i.\n", animDefs[i].startname, animDefs[i].endname, i); - continue; + materialnum_t frame = DD_MaterialForTextureIndex(n, isTexture? TN_TEXTURES : TN_FLATS); + if(frame != 0) + Materials_AddAnimGroupFrame(groupNum, frame, ticsPerFrame, 0); } - - if(startFrame && endFrame) + } + else + { + uint n; + for(n = endFrame; n >= startFrame; n--) { - if(verbose > (isCustom? 1 : 2)) - { - Con_Message(" %d: From:\"%s\" To:\"%s\" Tics:%i\n", i, animDefs[i].startname, animDefs[i].endname, ticsPerFrame); - } - - groupNum = Materials_CreateAnimGroup(AGF_SMOOTH); - if(endFrame > startFrame) - { - for(n = startFrame; n <= endFrame; n++) - { - materialnum_t frame = DD_MaterialForTextureIndex(n, TN_TEXTURES); - if(frame != 0) - Materials_AddAnimGroupFrame(groupNum, frame, ticsPerFrame, 0); - } - } - else - { - for(n = endFrame; n >= startFrame; n--) - { - materialnum_t frame = DD_MaterialForTextureIndex(n, TN_TEXTURES); - if(frame != 0) - Materials_AddAnimGroupFrame(groupNum, frame, ticsPerFrame, 0); - } - } + materialnum_t frame = DD_MaterialForTextureIndex(n, isTexture? TN_TEXTURES : TN_FLATS); + if(frame != 0) + Materials_AddAnimGroupFrame(groupNum, frame, ticsPerFrame, 0); } } } + + Uri_Destruct(startPath); + Uri_Destruct(endPath); } void P_InitPicAnims(void) diff --git a/doomsday/plugins/jheretic/src/in_lude.c b/doomsday/plugins/jheretic/src/in_lude.c index fae1d44d2d..e9c40d9f5e 100644 --- a/doomsday/plugins/jheretic/src/in_lude.c +++ b/doomsday/plugins/jheretic/src/in_lude.c @@ -633,7 +633,7 @@ void IN_Drawer(void) void IN_DrawStatBack(void) { - DGL_SetMaterial(P_ToPtr(DMU_MATERIAL, Materials_NumForName(MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":FLOOR16"))); + DGL_SetMaterial(P_ToPtr(DMU_MATERIAL, Materials_IndexForName(MN_FLATS_NAME":FLOOR16"))); DGL_Enable(DGL_TEXTURE_2D); DGL_Color4f(1, 1, 1, 1); diff --git a/doomsday/plugins/jheretic/src/m_cheat.c b/doomsday/plugins/jheretic/src/m_cheat.c index 035fdcf0f1..7cee18bbcb 100644 --- a/doomsday/plugins/jheretic/src/m_cheat.c +++ b/doomsday/plugins/jheretic/src/m_cheat.c @@ -391,10 +391,10 @@ static void printDebugInfo(int player) Con_Message("\nSubsector %i:\n", P_ToIndex(sub)); Con_Message(" FloorZ:%g Material:%s\n", P_GetFloatp(sub, DMU_FLOOR_HEIGHT), - Materials_GetName(P_GetPtrp(sub, DMU_FLOOR_MATERIAL))); + Materials_GetSymbolicName(P_GetPtrp(sub, DMU_FLOOR_MATERIAL))); Con_Message(" CeilingZ:%g Material:%s\n", P_GetFloatp(sub, DMU_CEILING_HEIGHT), - Materials_GetName(P_GetPtrp(sub, DMU_CEILING_MATERIAL))); + Materials_GetSymbolicName(P_GetPtrp(sub, DMU_CEILING_MATERIAL))); Con_Message("Player height:%g Player radius:%g\n", plr->plr->mo->height, plr->plr->mo->radius); } diff --git a/doomsday/plugins/jheretic/src/p_oldsvg.c b/doomsday/plugins/jheretic/src/p_oldsvg.c index ff86cacd56..1bb73d43f5 100644 --- a/doomsday/plugins/jheretic/src/p_oldsvg.c +++ b/doomsday/plugins/jheretic/src/p_oldsvg.c @@ -609,8 +609,8 @@ typedef struct { floor->state = (int) SV_v13_ReadLong(); floor->newSpecial = SV_v13_ReadLong(); { ddstring_t path; Str_Init(&path); - Str_Appendf(&path, MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":%s", W_LumpName(SV_v13_ReadShort())); - floor->material = P_ToPtr(DMU_MATERIAL, Materials_NumForName(Str_Text(&path))); + Str_Appendf(&path, MN_FLATS_NAME":%s", W_LumpName(SV_v13_ReadShort())); + floor->material = P_ToPtr(DMU_MATERIAL, Materials_IndexForName(Str_Text(&path))); Str_Free(&path); } floor->floorDestHeight = FIX2FLT(SV_v13_ReadLong()); diff --git a/doomsday/plugins/jheretic/src/p_spec.c b/doomsday/plugins/jheretic/src/p_spec.c index 82f5562739..f749b2cf65 100644 --- a/doomsday/plugins/jheretic/src/p_spec.c +++ b/doomsday/plugins/jheretic/src/p_spec.c @@ -279,115 +279,91 @@ static animdef_t anims[] = { */ static void loadAnimDefs(animdef_t* animDefs, boolean isCustom) { + dduri_t* startPath = Uri_ConstructDefault(); + dduri_t* endPath = Uri_ConstructDefault(); + boolean lastIsTexture; int i; // Read structures until -1 is found for(i = 0; animDefs[i].istexture != -1 ; ++i) { + boolean isTexture = animDefs[i].istexture != 0; int groupNum, ticsPerFrame, numFrames; + uint startFrame, endFrame; - if(!animDefs[i].istexture) + if(i == 0 || isTexture != lastIsTexture) { - uint startFrame, endFrame, n; + Uri_SetScheme(startPath, isTexture? TN_TEXTURES_NAME : TN_FLATS_NAME); + Uri_SetScheme(endPath, isTexture? TN_TEXTURES_NAME : TN_FLATS_NAME); + lastIsTexture = isTexture; + } + Uri_SetPath(startPath, animDefs[i].startname); + Uri_SetPath(endPath, animDefs[i].endname); + + if(0 == (startFrame = GL_GLTextureIndexForUri2(startPath, !isCustom)) || + 0 == (endFrame = GL_GLTextureIndexForUri2(endPath, !isCustom))) + continue; - if((startFrame = GL_TextureIndexForName(animDefs[i].startname, TN_FLATS)) == 0 || - (endFrame = GL_TextureIndexForName(animDefs[i].endname, TN_FLATS)) == 0) - continue; + numFrames = (endFrame > startFrame? endFrame - startFrame : startFrame - endFrame) + 1; + ticsPerFrame = LONG(animDefs[i].speed); - numFrames = (endFrame > startFrame? endFrame - startFrame : startFrame - endFrame) + 1; - ticsPerFrame = LONG(animDefs[i].speed); + if(numFrames < 2) + { + Con_Message("loadAnimDefs: Warning, bad cycle from %s to %s in sequence %i.\n", animDefs[i].startname, animDefs[i].endname, i); + continue; + } - if(numFrames < 2) - { - Con_Message("loadAnimDefs: Warning, bad cycle from %s to %s in sequence %i.\n", animDefs[i].startname, animDefs[i].endname, i); - continue; - } + if(0 == startFrame && 0 == endFrame) + continue; - if(startFrame && endFrame) - { // We have a valid animation. - if(verbose > (isCustom? 1 : 2)) - { - Con_Message(" %d: From:\"%s\" To:\"%s\" Tics:%i\n", i, animDefs[i].startname, animDefs[i].endname, ticsPerFrame); - } - - /** - * Doomsday's group animation needs to know the texture/flat - * numbers of ALL frames in the animation group so we'll - * have to step through the directory adding frames as we - * go. (DOOM only required the start/end texture/flat - * numbers and would animate all textures/flats inbetween). - */ - - // Create a new animation group for it. - groupNum = Materials_CreateAnimGroup(AGF_SMOOTH); - - // Add all frames from start to end to the group. - if(endFrame > startFrame) - { - for(n = startFrame; n <= endFrame; n++) - { - materialnum_t frame = DD_MaterialForTextureIndex(n, TN_FLATS); - if(frame != 0) - Materials_AddAnimGroupFrame(groupNum, frame, ticsPerFrame, 0); - } - } - else - { - for(n = endFrame; n >= startFrame; n--) - { - materialnum_t frame = DD_MaterialForTextureIndex(n, TN_FLATS); - if(frame != 0) - Materials_AddAnimGroupFrame(groupNum, frame, ticsPerFrame, 0); - } - } - } - } - else - { // Same as above but for texture groups. - uint startFrame, endFrame, n; + /** + * A valid animation. + * + * Doomsday's group animation needs to know the texture/flat + * numbers of ALL frames in the animation group so we'll + * have to step through the directory adding frames as we + * go. (DOOM only required the start/end texture/flat + * numbers and would animate all textures/flats inbetween). + */ - if((startFrame = GL_TextureIndexForName(animDefs[i].startname, TN_TEXTURES)) == 0 || - (endFrame = GL_TextureIndexForName(animDefs[i].endname, TN_TEXTURES)) == 0) - continue; + if(verbose > (isCustom? 1 : 2)) + { + ddstring_t* from = Uri_ToString(startPath); + ddstring_t* to = Uri_ToString(endPath); + Con_Message(" %d: From:\"%s\" To:\"%s\" Tics:%i\n", + i, Str_Text(from), Str_Text(to), ticsPerFrame); + Str_Delete(from); + Str_Delete(to); + } - numFrames = (endFrame > startFrame? endFrame - startFrame : startFrame - endFrame) + 1; - ticsPerFrame = LONG(animDefs[i].speed); + // Find an animation group for this. + groupNum = Materials_CreateAnimGroup(AGF_SMOOTH); - if(numFrames < 2) + // Add all frames from start to end to the group. + if(endFrame > startFrame) + { + uint n; + for(n = startFrame; n <= endFrame; ++n) { - Con_Message("loadAnimDefs: Warning, bad cycle from %s to %s in sequence %i.\n", animDefs[i].startname, animDefs[i].endname, i); - continue; + materialnum_t frame = DD_MaterialForTextureIndex(n, isTexture? TN_TEXTURES : TN_FLATS); + if(frame != 0) + Materials_AddAnimGroupFrame(groupNum, frame, ticsPerFrame, 0); } - - if(startFrame && endFrame) + } + else + { + uint n; + for(n = endFrame; n >= startFrame; n--) { - if(verbose > (isCustom? 1 : 2)) - { - Con_Message(" %d: From:\"%s\" To:\"%s\" Tics:%i\n", i, animDefs[i].startname, animDefs[i].endname, ticsPerFrame); - } - - groupNum = Materials_CreateAnimGroup(AGF_SMOOTH); - if(endFrame > startFrame) - { - for(n = startFrame; n <= endFrame; n++) - { - materialnum_t frame = DD_MaterialForTextureIndex(n, TN_TEXTURES); - if(frame != 0) - Materials_AddAnimGroupFrame(groupNum, frame, ticsPerFrame, 0); - } - } - else - { - for(n = endFrame; n >= startFrame; n--) - { - materialnum_t frame = DD_MaterialForTextureIndex(n, TN_TEXTURES); - if(frame != 0) - Materials_AddAnimGroupFrame(groupNum, frame, ticsPerFrame, 0); - } - } + materialnum_t frame = DD_MaterialForTextureIndex(n, isTexture? TN_TEXTURES : TN_FLATS); + if(frame != 0) + Materials_AddAnimGroupFrame(groupNum, frame, ticsPerFrame, 0); } } } + + Uri_Destruct(startPath); + Uri_Destruct(endPath); } void P_InitPicAnims(void) diff --git a/doomsday/plugins/jhexen/src/m_cheat.c b/doomsday/plugins/jhexen/src/m_cheat.c index 077b30a2a6..c7b030900c 100644 --- a/doomsday/plugins/jhexen/src/m_cheat.c +++ b/doomsday/plugins/jhexen/src/m_cheat.c @@ -466,10 +466,10 @@ static void printDebugInfo(int player) Con_Message("\nSubsector %i:\n", P_ToIndex(sub)); Con_Message(" FloorZ:%g Material:%s\n", P_GetFloatp(sub, DMU_FLOOR_HEIGHT), - Materials_GetName(P_GetPtrp(sub, DMU_FLOOR_MATERIAL))); + Materials_GetSymbolicName(P_GetPtrp(sub, DMU_FLOOR_MATERIAL))); Con_Message(" CeilingZ:%g Material:%s\n", P_GetFloatp(sub, DMU_CEILING_HEIGHT), - Materials_GetName(P_GetPtrp(sub, DMU_CEILING_MATERIAL))); + Materials_GetSymbolicName(P_GetPtrp(sub, DMU_CEILING_MATERIAL))); Con_Message("Player height:%g Player radius:%g\n", plr->plr->mo->height, plr->plr->mo->radius); } diff --git a/doomsday/plugins/jhexen/src/p_acs.c b/doomsday/plugins/jhexen/src/p_acs.c index 7ef136b47c..9c0fa4afb6 100644 --- a/doomsday/plugins/jhexen/src/p_acs.c +++ b/doomsday/plugins/jhexen/src/p_acs.c @@ -1294,8 +1294,8 @@ static int CmdChangeFloor(void) ddstring_t path; Str_Init(&path); - Str_Appendf(&path, MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":%s", GetACString(Pop())); - mat = P_ToPtr(DMU_MATERIAL, Materials_NumForName(Str_Text(&path))); + Str_Appendf(&path, MN_FLATS_NAME":%s", GetACString(Pop())); + mat = P_ToPtr(DMU_MATERIAL, Materials_IndexForName(Str_Text(&path))); Str_Free(&path); tag = Pop(); @@ -1323,8 +1323,8 @@ static int CmdChangeFloorDirect(void) tag = LONG(*PCodePtr++); Str_Init(&path); - Str_Appendf(&path, MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":%s", GetACString(LONG(*PCodePtr++))); - mat = P_ToPtr(DMU_MATERIAL, Materials_NumForName(Str_Text(&path))); + Str_Appendf(&path, MN_FLATS_NAME":%s", GetACString(LONG(*PCodePtr++))); + mat = P_ToPtr(DMU_MATERIAL, Materials_IndexForName(Str_Text(&path))); Str_Free(&path); list = P_GetSectorIterListForTag(tag, false); @@ -1349,8 +1349,8 @@ static int CmdChangeCeiling(void) ddstring_t path; Str_Init(&path); - Str_Appendf(&path, MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":%s", GetACString(Pop())); - mat = P_ToPtr(DMU_MATERIAL, Materials_NumForName(Str_Text(&path))); + Str_Appendf(&path, MN_FLATS_NAME":%s", GetACString(Pop())); + mat = P_ToPtr(DMU_MATERIAL, Materials_IndexForName(Str_Text(&path))); Str_Free(&path); tag = Pop(); @@ -1377,8 +1377,8 @@ static int CmdChangeCeilingDirect(void) tag = LONG(*PCodePtr++); Str_Init(&path); - Str_Appendf(&path, MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":%s", GetACString(LONG(*PCodePtr++))); - mat = P_ToPtr(DMU_MATERIAL, Materials_NumForName(Str_Text(&path))); + Str_Appendf(&path, MN_FLATS_NAME":%s", GetACString(LONG(*PCodePtr++))); + mat = P_ToPtr(DMU_MATERIAL, Materials_IndexForName(Str_Text(&path))); Str_Free(&path); list = P_GetSectorIterListForTag(tag, false); @@ -1724,8 +1724,8 @@ static int CmdSetLineTexture(void) ddstring_t path; Str_Init(&path); - Str_Appendf(&path, MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME":%s", GetACString(Pop())); - mat = P_ToPtr(DMU_MATERIAL, Materials_NumForName(Str_Text(&path))); + Str_Appendf(&path, MN_TEXTURES_NAME":%s", GetACString(Pop())); + mat = P_ToPtr(DMU_MATERIAL, Materials_IndexForName(Str_Text(&path))); Str_Free(&path); position = Pop(); diff --git a/doomsday/plugins/jhexen/src/p_anim.c b/doomsday/plugins/jhexen/src/p_anim.c index f95a863184..f31b30f3f0 100644 --- a/doomsday/plugins/jhexen/src/p_anim.c +++ b/doomsday/plugins/jhexen/src/p_anim.c @@ -28,22 +28,22 @@ #include "p_mapsetup.h" #include "p_mapspec.h" -static void parseAnimGroup(texturenamespaceid_t texNamespace) +static void parseAnimGroup(boolean isTexture, boolean isCustom) { boolean ignore = true, done; int groupNumber = 0; uint texNumBase = 0; - - if(!(texNamespace == TN_FLATS || texNamespace == TN_TEXTURES)) - Con_Error("parseAnimGroup: Internal Error, invalid namespace %i.", - (int) texNamespace); + dduri_t* path; if(!SC_GetString()) // Name. { SC_ScriptError("Missing string."); } - if((texNumBase = GL_TextureIndexForName(sc_String, texNamespace)) != 0) + path = Uri_ConstructDefault(); + Uri_SetScheme(path, isTexture? TN_TEXTURES_NAME : TN_FLATS_NAME); + Uri_SetPath(path, sc_String); + if((texNumBase = GL_GLTextureIndexForUri2(path, !isCustom)) != 0) ignore = false; if(!ignore) @@ -76,12 +76,13 @@ static void parseAnimGroup(texturenamespaceid_t texNamespace) } else { + Uri_Destruct(path); SC_ScriptError(0); } if(!ignore) { - materialnum_t frame = DD_MaterialForTextureIndex(texNumBase + picNum - 1, texNamespace); + materialnum_t frame = DD_MaterialForTextureIndex(texNumBase + picNum - 1, isTexture? TN_TEXTURES : TN_FLATS); if(frame != 0) Materials_AddAnimGroupFrame(groupNumber, frame, min, (max > 0? max - min : 0)); } @@ -97,32 +98,36 @@ static void parseAnimGroup(texturenamespaceid_t texNamespace) done = true; } } while(!done); + + Uri_Destruct(path); } void P_InitPicAnims(void) { - lumpnum_t lump = W_CheckNumForName("ANIMDEFS"); + lumpnum_t lumpNum = W_CheckNumForName("ANIMDEFS"); + boolean isCustom, isTexture; - if(lump != -1) - { - SC_OpenLump(lump); + if(lumpNum == -1) + return; + isCustom = !W_LumpFromIWAD(lumpNum); - while(SC_GetString()) + SC_OpenLump(lumpNum); + while(SC_GetString()) + { + if(SC_Compare("texture")) { - if(SC_Compare("flat")) - { - parseAnimGroup(TN_FLATS); - } - else if(SC_Compare("texture")) - { - parseAnimGroup(TN_TEXTURES); - } - else - { - SC_ScriptError(0); - } + isTexture = true; + } + else if(SC_Compare("flat")) + { + isTexture = false; + } + else + { + SC_ScriptError(0); } - SC_Close(); + parseAnimGroup(isTexture, isCustom); } + SC_Close(); } diff --git a/doomsday/plugins/jhexen/src/p_mapinfo.c b/doomsday/plugins/jhexen/src/p_mapinfo.c index 0e330f88f0..8c9866b23f 100644 --- a/doomsday/plugins/jhexen/src/p_mapinfo.c +++ b/doomsday/plugins/jhexen/src/p_mapinfo.c @@ -169,7 +169,7 @@ void P_InitMapInfo(void) defMapInfo.warpTrans = 0; defMapInfo.nextMap = 0; // Always go to map 0 if not specified. defMapInfo.cdTrack = 1; - defMapInfo.sky1Material = Materials_NumForName(gameMode == hexen_demo ? MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME":SKY2" : MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME":SKY1"); + defMapInfo.sky1Material = Materials_IndexForName(gameMode == hexen_demo ? MN_TEXTURES_NAME":SKY2" : MN_TEXTURES_NAME":SKY1"); defMapInfo.sky2Material = defMapInfo.sky1Material; defMapInfo.sky1ScrollDelta = 0; defMapInfo.sky2ScrollDelta = 0; @@ -256,8 +256,8 @@ void P_InitMapInfo(void) case MCMD_SKY1: SC_MustGetString(); { ddstring_t path; Str_Init(&path); - Str_Appendf(&path, MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME":%s", sc_String); - info->sky1Material = Materials_NumForName(Str_Text(&path)); + Str_Appendf(&path, MN_TEXTURES_NAME":%s", sc_String); + info->sky1Material = Materials_IndexForName(Str_Text(&path)); Str_Free(&path); } SC_MustGetNumber(); @@ -267,8 +267,8 @@ void P_InitMapInfo(void) case MCMD_SKY2: SC_MustGetString(); { ddstring_t path; Str_Init(&path); - Str_Appendf(&path, MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME":%s", sc_String); - info->sky2Material = Materials_NumForName(Str_Text(&path)); + Str_Appendf(&path, MN_TEXTURES_NAME":%s", sc_String); + info->sky2Material = Materials_IndexForName(Str_Text(&path)); Str_Free(&path); } SC_MustGetNumber(); diff --git a/doomsday/plugins/wadmapconverter/src/load.c b/doomsday/plugins/wadmapconverter/src/load.c index f1884c77c5..cd09ee4f65 100644 --- a/doomsday/plugins/wadmapconverter/src/load.c +++ b/doomsday/plugins/wadmapconverter/src/load.c @@ -231,10 +231,10 @@ const materialref_t* RegisterMaterial(const char* name, boolean isFlat) memcpy(m->name, name, 8); m->name[8] = '\0'; // First try the prefered namespace, then any. - Str_Appendf(&path, "%s%s", isFlat? MATERIALS_FLATS_RESOURCE_NAMESPACE_NAME":" : MATERIALS_TEXTURES_RESOURCE_NAMESPACE_NAME":", m->name); - m->num = Materials_CheckNumForName(Str_Text(&path)); + Str_Appendf(&path, "%s%s", isFlat? MN_FLATS_NAME":" : MN_TEXTURES_NAME":", m->name); + m->num = Materials_IndexForName(Str_Text(&path)); if(m->num == 0) - m->num = Materials_CheckNumForName(name); + m->num = Materials_IndexForName(name); Str_Free(&path); }