mirror of
https://github.com/mwpenny/portal64-still-alive.git
synced 2024-10-19 22:27:36 -04:00
Work on lua bindings some more
This commit is contained in:
parent
a9b9f336c9
commit
ba063fad60
|
@ -120,6 +120,10 @@ local function populate_name_mapping(path, object, result)
|
|||
return
|
||||
end
|
||||
|
||||
if (result[object]) then
|
||||
error("Path already set for object " .. result[object] .. " with new path " .. path)
|
||||
end
|
||||
|
||||
result[object] = path
|
||||
|
||||
for k, v in pairs(object) do
|
||||
|
@ -189,10 +193,12 @@ function process_definitions(definitions)
|
|||
local name_mapping = {}
|
||||
|
||||
for k, v in pairs(definitions) do
|
||||
print("populating name mapping for " .. v.name)
|
||||
populate_name_mapping(v.name, v.data, name_mapping)
|
||||
end
|
||||
|
||||
for k, v in pairs(definitions) do
|
||||
print("replacing references for " .. v.name)
|
||||
v.data = replace_references(v.data, name_mapping, v.name)
|
||||
end
|
||||
end
|
|
@ -230,6 +230,10 @@ void CFileDefinition::AddMacro(const std::string& name, const std::string& value
|
|||
mMacros.push_back(name + " " + value);
|
||||
}
|
||||
|
||||
void CFileDefinition::AddHeader(const std::string& name) {
|
||||
mHeaders.insert(name);
|
||||
}
|
||||
|
||||
std::string CFileDefinition::GetVertexBuffer(std::shared_ptr<ExtendedMesh> mesh, VertexType vertexType, int textureWidth, int textureHeight, const std::string& modelSuffix) {
|
||||
for (auto existing = mVertexBuffers.begin(); existing != mVertexBuffers.end(); ++existing) {
|
||||
if (existing->second.mTargetMesh == mesh && existing->second.mVertexType == vertexType) {
|
||||
|
@ -379,7 +383,7 @@ void CFileDefinition::Generate(std::ostream& output, const std::string& location
|
|||
}
|
||||
|
||||
void CFileDefinition::GenerateHeader(std::ostream& output, const std::string& headerFileName) {
|
||||
std::string infdef = std::string("__") + headerFileName + "_H__";
|
||||
std::string infdef = std::string("__SKOUT_") + headerFileName + "_H__";
|
||||
|
||||
makeCCompatible(infdef);
|
||||
std::transform(infdef.begin(), infdef.end(), infdef.begin(), ::toupper);
|
||||
|
@ -388,7 +392,7 @@ void CFileDefinition::GenerateHeader(std::ostream& output, const std::string& he
|
|||
output << "#define " << infdef << std::endl;
|
||||
output << std::endl;
|
||||
|
||||
std::set<std::string> includes;
|
||||
std::set<std::string> includes = mHeaders;
|
||||
|
||||
for (auto it = mDefinitions.begin(); it != mDefinitions.end(); ++it) {
|
||||
auto headers = (*it)->GetTypeHeaders();
|
||||
|
|
|
@ -34,6 +34,8 @@ public:
|
|||
std::string AddDataDefinition(const std::string& nameHint, const std::string& dataType, bool isArray, const std::string& location, std::unique_ptr<DataChunk> data);
|
||||
void AddMacro(const std::string& name, const std::string& value);
|
||||
|
||||
void AddHeader(const std::string& name);
|
||||
|
||||
std::string GetVertexBuffer(std::shared_ptr<ExtendedMesh> mesh, VertexType vertexType, int textureWidth, int textureHeight, const std::string& modelSuffix);
|
||||
std::string GetCullingBuffer(const std::string& name, const aiVector3D& min, const aiVector3D& max, const std::string& modelSuffix);
|
||||
|
||||
|
@ -60,6 +62,7 @@ private:
|
|||
float mFixedPointScale;
|
||||
float mModelScale;
|
||||
aiQuaternion mModelRotate;
|
||||
std::set<std::string> mHeaders;
|
||||
std::set<std::string> mUsedNames;
|
||||
std::map<std::string, VertexBufferDefinition> mVertexBuffers;
|
||||
std::vector<std::unique_ptr<FileDefinition>> mDefinitions;
|
||||
|
|
|
@ -136,6 +136,13 @@ void processCFileDefinition(lua_State* L, CFileDefinition& fileDef, const char*
|
|||
fileDef.AddDefinition(std::move(definition));
|
||||
}
|
||||
|
||||
int luaAddHeader(lua_State* L) {
|
||||
CFileDefinition* fileDefinition = (CFileDefinition*)lua_touserdata(L, lua_upvalueindex(1));
|
||||
const char* header = luaL_checkstring(L, 1);
|
||||
fileDefinition->AddHeader(header);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void dumpDefinitions(lua_State* L, CFileDefinition& fileDef, const char* filename) {
|
||||
int topStart = lua_gettop(L);
|
||||
|
||||
|
@ -184,6 +191,11 @@ void dumpDefinitions(lua_State* L, CFileDefinition& fileDef, const char* filenam
|
|||
lua_pop(L, 1);
|
||||
}
|
||||
|
||||
|
||||
lua_settop(L, topStart);
|
||||
}
|
||||
|
||||
void populateLuaDefinitionWrite(lua_State* L, CFileDefinition& fileDef) {
|
||||
lua_pushlightuserdata(L, &fileDef);
|
||||
lua_pushcclosure(L, luaAddHeader, 1);
|
||||
lua_setglobal(L, "add_header");
|
||||
}
|
|
@ -6,4 +6,6 @@
|
|||
|
||||
void dumpDefinitions(lua_State* L, CFileDefinition& fileDef, const char* filename);
|
||||
|
||||
void populateLuaDefinitionWrite(lua_State* L, CFileDefinition& fileDef);
|
||||
|
||||
#endif
|
|
@ -55,6 +55,7 @@ void generateFromLuaScript(
|
|||
populateLuaScene(L, scene);
|
||||
populateLuaNodeGroups(L, nodeGroups);
|
||||
populateLuaMesh(L, scene, fileDefinition, settings);
|
||||
populateLuaDefinitionWrite(L, fileDefinition);
|
||||
|
||||
for (unsigned i = 0; i < sizeof(luaFiles) / sizeof(*luaFiles); ++i) {
|
||||
struct LuaFile* file = &luaFiles[i];
|
||||
|
|
|
@ -1,12 +1,18 @@
|
|||
#include "LuaMesh.h"
|
||||
|
||||
#include "../definition_generator/MeshDefinitionGenerator.h"
|
||||
#include "../definition_generator/MaterialGenerator.h"
|
||||
#include "./LuaBasicTypes.h"
|
||||
#include "./LuaScene.h"
|
||||
#include "../MeshWriter.h"
|
||||
#include "./LuaDisplayListSettings.h"
|
||||
|
||||
void toLua(lua_State* L, Material* material) {
|
||||
if (!material) {
|
||||
lua_pushnil(L);
|
||||
return;
|
||||
}
|
||||
|
||||
lua_createtable(L, 1, 0);
|
||||
|
||||
luaL_getmetatable(L, "Material");
|
||||
|
@ -15,11 +21,20 @@ void toLua(lua_State* L, Material* material) {
|
|||
toLua(L, material->mName);
|
||||
lua_setfield(L, -2, "name");
|
||||
|
||||
toLua(L, MaterialGenerator::MaterialIndexMacroName(material->mName));
|
||||
lua_setfield(L, -2, "macro_name");
|
||||
|
||||
lua_pushlightuserdata(L, material);
|
||||
lua_setfield(L, -2, "ptr");
|
||||
}
|
||||
|
||||
void fromLua(lua_State* L, Material *& material) {
|
||||
if (lua_isnil(L, -1)) {
|
||||
material = nullptr;
|
||||
lua_pop(L, 1);
|
||||
return;
|
||||
}
|
||||
|
||||
lua_getfield(L, -1, "ptr");
|
||||
material = (Material*)lua_touserdata(L, -1);
|
||||
lua_pop(L, 2);
|
||||
|
|
|
@ -55,7 +55,10 @@ TextureCoordinateState::TextureCoordinateState():
|
|||
|
||||
TileState::TileState():
|
||||
isOn(false),
|
||||
format(G_IM_FMT::G_IM_FMT_RGBA),
|
||||
size(G_IM_SIZ::G_IM_SIZ_16b),
|
||||
line(0),
|
||||
tmem(0),
|
||||
pallete(0) {
|
||||
|
||||
}
|
||||
|
|
|
@ -13,6 +13,10 @@ void loadTextureFromAiMaterial(TextureCache& cache, Material& material, aiString
|
|||
state.isOn = true;
|
||||
state.texture = useTexture;
|
||||
|
||||
state.format = fmt;
|
||||
state.size = siz;
|
||||
state.tmem = 0;
|
||||
|
||||
state.sCoord.mask = log2(state.texture->Width());
|
||||
state.tCoord.mask = log2(state.texture->Height());
|
||||
|
||||
|
|
Loading…
Reference in a new issue