Work on lua bindings some more

This commit is contained in:
James Lambert 2022-09-05 21:23:48 -06:00
parent a9b9f336c9
commit ba063fad60
9 changed files with 53 additions and 3 deletions

View file

@ -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

View file

@ -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();

View file

@ -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;

View file

@ -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");
}

View file

@ -6,4 +6,6 @@
void dumpDefinitions(lua_State* L, CFileDefinition& fileDef, const char* filename);
void populateLuaDefinitionWrite(lua_State* L, CFileDefinition& fileDef);
#endif

View file

@ -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];

View file

@ -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);

View file

@ -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) {
}

View file

@ -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());