Skip to content

Commit

Permalink
Added public API for Material module
Browse files Browse the repository at this point in the history
Now the wadmapconverter and dehread plugins compile and link
successfully.
  • Loading branch information
skyjake committed Jan 2, 2013
1 parent 9ea9bff commit 4071eeb
Show file tree
Hide file tree
Showing 13 changed files with 87 additions and 36 deletions.
7 changes: 4 additions & 3 deletions doomsday/engine/api/api_base.h
Expand Up @@ -31,9 +31,10 @@ enum {
DE_API_DIRECT_DATA_ACCESS_v1 = 300, // 1.10
DE_API_FILE_SYSTEM_v1 = 400, // 1.10
DE_API_MAP_EDIT_v1 = 500, // 1.10
DE_API_PLUGIN_v1 = 600, // 1.10
DE_API_URI_v1 = 700, // 1.10
DE_API_WAD_v1 = 800 // 1.10
DE_API_MATERIALS_v1 = 600, // 1.10
DE_API_PLUGIN_v1 = 700, // 1.10
DE_API_URI_v1 = 800, // 1.10
DE_API_WAD_v1 = 900 // 1.10
};

/**
Expand Down
33 changes: 33 additions & 0 deletions doomsday/engine/api/api_material.h
@@ -0,0 +1,33 @@
#ifndef DOOMSDAY_API_MATERIAL_H
#define DOOMSDAY_API_MATERIAL_H

#include "api_base.h"
#include "api_uri.h"

/**
* @defgroup material Materials
* @ingroup resource
*/
///@{

DENG_API_TYPEDEF(Material)
{
de_api_t api;

materialid_t (*IdForTextureUri)(Uri const *textureUri);
Uri *(*ComposeUri)(materialid_t materialId);
}
DENG_API_T(Material);

#ifndef DENG_NO_API_MACROS_MATERIALS
#define DD_MaterialForTextureUri _api_Material.IdForTextureUri
#define Materials_ComposeUri _api_Material.ComposeUri
#endif

#ifdef __DOOMSDAY__
DENG_USING_API(Material);
#endif

///@}

#endif // DOOMSDAY_API_MATERIAL_H
10 changes: 1 addition & 9 deletions doomsday/engine/api/doomsday.h
Expand Up @@ -88,6 +88,7 @@ struct font_s;
#include "api_def.h"
#include "api_filesys.h"
#include "api_console.h"
#include "api_material.h"
#include "api_mpe.h"

#include "filehandle.h"
Expand Down Expand Up @@ -195,14 +196,6 @@ boolean DD_GameInfo(GameInfo* info);
ddplayer_t* DD_GetPlayer(int number);
///@}

/**
* @defgroup material Materials
* @ingroup resource
*/
///@{
materialid_t DD_MaterialForTextureUri(Uri const *textureUri);
///@}

/// @addtogroup input
///@{
// Base: Input.
Expand Down Expand Up @@ -505,7 +498,6 @@ void P_SetPolyobjCallback(void (*func)(struct mobj_s*, void*, void*));
// Play: Materials.
materialid_t Materials_ResolveUri(const Uri* uri);
materialid_t Materials_ResolveUriCString(const char* path);
Uri* Materials_ComposeUri(materialid_t materialId);

///@}

Expand Down
2 changes: 2 additions & 0 deletions doomsday/engine/engine.pro
Expand Up @@ -80,6 +80,7 @@ DENG_API_HEADERS = \
api/api_console.h \
api/api_def.h \
api/api_filesys.h \
api/api_material.h \
api/api_mpe.h \
api/api_plugin.h \
api/api_uri.h \
Expand Down Expand Up @@ -418,6 +419,7 @@ deng_nodisplaymode {

# Platform-independent sources.
SOURCES += \
src/api_material.cpp \
src/audio/audiodriver.cpp \
src/audio/audiodriver_music.c \
src/audio/m_mus2midi.c \
Expand Down
1 change: 0 additions & 1 deletion doomsday/engine/include/resource/materials.h
Expand Up @@ -357,7 +357,6 @@ void Materials_Ticker(timespan_t elapsed);
uint Materials_Size(void);
materialid_t Materials_Id(material_t *material);
material_t *Materials_ToMaterial(materialid_t materialId);
Uri *Materials_ComposeUri(materialid_t materialId);
boolean Materials_HasDecorations(material_t *material);
ded_ptcgen_t const *Materials_PtcGenDef(material_t *material);
boolean Materials_IsMaterialInAnimGroup(material_t *material, int animGroupNum);
Expand Down
Expand Up @@ -23,6 +23,8 @@
#ifndef LIBDENG_RESOURCE_TEXTUREVARIANTSPECIFICATION_H
#define LIBDENG_RESOURCE_TEXTUREVARIANTSPECIFICATION_H

#include "dd_types.h"

/**
* Texture (content) Source.
*/
Expand Down
36 changes: 36 additions & 0 deletions doomsday/engine/src/api_material.cpp
@@ -0,0 +1,36 @@
#define DENG_NO_API_MACROS_MATERIALS

#include "de_base.h"
#include "de_resource.h"
#include "api_material.h"

materialid_t DD_MaterialForTextureUri(uri_s const *_textureUri)
{
if(!_textureUri) return NOMATERIALID;

try
{
de::Uri uri = App_Textures()->find(reinterpret_cast<de::Uri const &>(*_textureUri)).composeUri();
uri.setScheme(DD_MaterialSchemeNameForTextureScheme(uri.scheme()));
return App_Materials()->resolveUri2(uri, true/*quiet please*/);
}
catch(de::Textures::UnknownSchemeError const &er)
{
// Log but otherwise ignore this error.
LOG_WARNING(er.asText() + ", ignoring.");
}
catch(de::Textures::NotFoundError const &)
{} // Ignore this error.

return NOMATERIALID;
}

// materials.cpp
DENG_EXTERN_C struct uri_s *Materials_ComposeUri(materialid_t materialId);

DENG_DECLARE_API(Material) =
{
{ DE_API_MATERIALS_v1 },
DD_MaterialForTextureUri,
Materials_ComposeUri
};
21 changes: 0 additions & 21 deletions doomsday/engine/src/dd_main.cpp
Expand Up @@ -2655,27 +2655,6 @@ AutoStr *DD_MaterialSchemeNameForTextureScheme(ddstring_t const *textureSchemeNa
}
}

materialid_t DD_MaterialForTextureUri(uri_s const *_textureUri)
{
if(!_textureUri) return NOMATERIALID;

try
{
de::Uri uri = App_Textures()->find(reinterpret_cast<de::Uri const &>(*_textureUri)).composeUri();
uri.setScheme(DD_MaterialSchemeNameForTextureScheme(uri.scheme()));
return App_Materials()->resolveUri2(uri, true/*quiet please*/);
}
catch(Textures::UnknownSchemeError const &er)
{
// Log but otherwise ignore this error.
LOG_WARNING(er.asText() + ", ignoring.");
}
catch(Textures::NotFoundError const &)
{} // Ignore this error.

return NOMATERIALID;
}

/**
* Gets the data of a player.
*/
Expand Down
2 changes: 2 additions & 0 deletions doomsday/engine/src/library.cpp
Expand Up @@ -31,6 +31,7 @@
#include "api_def.h"
#include "api_console.h"
#include "api_filesys.h"
#include "api_material.h"
#include "api_mpe.h"

struct library_s { // typedef Library
Expand Down Expand Up @@ -175,6 +176,7 @@ void Library_PublishAPIs(Library *lib)
setAPI(DE_API_DEFINITIONS_v1, &_api_Def);
setAPI(DE_API_FILE_SYSTEM_v1, &_api_F);
setAPI(DE_API_MAP_EDIT_v1, &_api_MPE);
setAPI(DE_API_MATERIALS_v1, &_api_Material);
setAPI(DE_API_PLUGIN_v1, &_api_Plug);
setAPI(DE_API_URI_v1, &_api_Uri);
setAPI(DE_API_WAD_v1, &_api_W);
Expand Down
4 changes: 2 additions & 2 deletions doomsday/engine/src/resource/materials.cpp
Expand Up @@ -1759,8 +1759,8 @@ material_t *Materials_ToMaterial(materialid_t materialId)
return App_Materials()->toMaterial(materialId);
}

/// @note Part of the Doomsday public API.
struct uri_s *Materials_ComposeUri(materialid_t materialId)
#undef Materials_ComposeUri
DENG_EXTERN_C struct uri_s *Materials_ComposeUri(materialid_t materialId)
{
de::Uri uri = App_Materials()->composeUri(materialId);
return Uri_Dup(reinterpret_cast<uri_s *>(&uri));
Expand Down
1 change: 1 addition & 0 deletions doomsday/plugins/wadmapconverter/include/wadmapconverter.h
Expand Up @@ -32,6 +32,7 @@
extern Id1Map* DENG_PLUGIN_GLOBAL(map);

DENG_USING_API(Base);
DENG_USING_API(Material);
DENG_USING_API(MPE);
DENG_USING_API(Plug);
DENG_USING_API(Uri);
Expand Down
2 changes: 2 additions & 0 deletions doomsday/plugins/wadmapconverter/src/wadmapconverter.cpp
Expand Up @@ -285,13 +285,15 @@ extern "C" const char* deng_LibraryType(void)
}

DENG_DECLARE_API(Base);
DENG_DECLARE_API(Material);
DENG_DECLARE_API(MPE);
DENG_DECLARE_API(Plug);
DENG_DECLARE_API(Uri);
DENG_DECLARE_API(W);

DENG_API_EXCHANGE(
DENG_GET_API(DE_API_BASE_v1, Base);
DENG_GET_API(DE_API_MATERIALS_v1, Material);
DENG_GET_API(DE_API_MAP_EDIT_v1, MPE);
DENG_GET_API(DE_API_PLUGIN_v1, Plug);
DENG_GET_API(DE_API_URI_v1, Uri);
Expand Down
2 changes: 2 additions & 0 deletions doomsday/server/server.pro
Expand Up @@ -74,6 +74,7 @@ DENG_API_HEADERS = \
$$SRC/api/api_console.h \
$$SRC/api/api_def.h \
$$SRC/api/api_filesys.h \
$$SRC/api/api_material.h \
$$SRC/api/api_mpe.h \
$$SRC/api/api_plugin.h \
$$SRC/api/api_uri.h \
Expand Down Expand Up @@ -327,6 +328,7 @@ SOURCES += $$SRC/src/ui/displaymode_dummy.c
# Platform-independent sources.
SOURCES += \
src/server_dummies.c \
$$SRC/src/api_material.cpp \
$$SRC/src/audio/s_cache.c \
$$SRC/src/audio/s_environ.cpp \
$$SRC/src/audio/s_logic.c \
Expand Down

0 comments on commit 4071eeb

Please sign in to comment.