Skip to content

Commit

Permalink
GRAPHICS: Remove excess debug spam and unused rendering queues
Browse files Browse the repository at this point in the history
Remove excessive debug and investigation output.

Move renderHints to a modelnode variable (_renderHints); _mesh might
not exist directly in the modelnode, but the root state mesh could
be used for rendering instead.

Remove unused renderqueue from RenderMan; observations indicate that
for non-transparent data, the order of loading matches order of model
and modelnode rendering. Do not sort visible world objects to
preserve rendering order.

Signed-off-by: mirv <mirv.sillyfish@gmail.com>
  • Loading branch information
mirv-sillyfish committed Oct 6, 2023
1 parent 3d9853c commit 8183a41
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 220 deletions.
74 changes: 5 additions & 69 deletions src/graphics/aurora/model_kotor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,8 +115,7 @@ static const uint32_t kControllerTypeSizeMid = 484;
static const uint32_t kControllerTypeSizeMid_Y = 488;
static const uint32_t kControllerTypeSelfIllumColor = 100;
static const uint32_t kControllerTypeAlpha = 128;
Graphics::Aurora::ModelNode_KotOR *my_male01_node = nullptr;
Graphics::Aurora::ModelNode_KotOR *my_male02_node = nullptr;

namespace Graphics {

namespace Aurora {
Expand Down Expand Up @@ -181,12 +180,11 @@ Model_KotOR::Model_KotOR(const Common::UString &name, bool kotor2, bool xbox, Mo

Model_KotOR::~Model_KotOR() {
}
uint32_t indent = 0;

void Model_KotOR::load(ParserContext &ctx) {
if (ctx.mdl->readUint32LE() != 0)
throw Common::Exception("Unsupported KotOR ASCII MDL");

printf("Loading kotor model\n");
uint32_t sizeModelData = ctx.mdl->readUint32LE();
uint32_t sizeRawData = ctx.mdl->readUint32LE();

Expand All @@ -197,11 +195,9 @@ void Model_KotOR::load(ParserContext &ctx) {

_name = Common::readStringFixed(*ctx.mdl, Common::kEncodingASCII, 32);
ctx.mdlName = _name;
printf("model name: %s\n", _name.c_str());

uint32_t nodeHeadPointer = ctx.mdl->readUint32LE();
uint32_t nodeCount = ctx.mdl->readUint32LE();
printf("node count: %u\n", nodeCount);

ctx.mdl->skip(24 + 4); // Unknown + Reference count

Expand All @@ -211,8 +207,6 @@ void Model_KotOR::load(ParserContext &ctx) {

uint8_t classification = ctx.mdl->readByte();
uint8_t fogged = ctx.mdl->readByte();
printf("classification: %u\n", classification);
printf("fogged: %u\n", fogged);

ctx.mdl->skip(4); // Unknown

Expand All @@ -232,13 +226,10 @@ void Model_KotOR::load(ParserContext &ctx) {
boundingMax[2] = ctx.mdl->readIEEEFloatLE();

float radius = ctx.mdl->readIEEEFloatLE();
printf("model radius: %f\n", radius);

float modelScale = ctx.mdl->readIEEEFloatLE();
printf("model scale: %f\n", modelScale);

_superModelName = Common::readStringFixed(*ctx.mdl, Common::kEncodingASCII, 32);
printf("supermodel name: %s\n", _superModelName.c_str());

ctx.mdl->skip(4); // Root node pointer again

Expand All @@ -254,28 +245,24 @@ void Model_KotOR::load(ParserContext &ctx) {

newState(ctx);

indent += 4;
ModelNode_KotOR *rootNode = new ModelNode_KotOR(*this);
ctx.nodes.push_back(rootNode);

ctx.mdl->seek(ctx.offModelData + nodeHeadPointer);
rootNode->load(ctx);
indent -= 4;

addState(ctx);

std::vector<uint32_t> animOffsets;
readArray(*ctx.mdl, ctx.offModelData + animOffset, animCount, animOffsets);

for (std::vector<uint32_t>::const_iterator offset = animOffsets.begin(); offset != animOffsets.end(); ++offset) {
indent += 4;
newState(ctx);

if (readAnim(ctx, ctx.offModelData + *offset))
addState(ctx);

ctx.clear();
indent -= 4;
}
}

Expand Down Expand Up @@ -468,9 +455,6 @@ void ModelNode_KotOR::load(Model_KotOR::ParserContext &ctx) {

if (_nodeNumber < ctx.names.size()) {
_name = ctx.names[_nodeNumber];
printf("%*s node name: %s\n", indent, "", _name.c_str());
} else {
printf("%*s node name: [blank]\n", indent, "");
}

ctx.mdl->skip(6 + 4); // Unknown + parent pointer
Expand All @@ -497,8 +481,6 @@ void ModelNode_KotOR::load(Model_KotOR::ParserContext &ctx) {

std::vector<uint32_t> children;
Model::readArray(*ctx.mdl, ctx.offModelData + childrenOffset, childrenCount, children);
printf("%*s child count: %u\n", indent, "", childrenCount);


uint32_t controllerKeyOffset, controllerKeyCount;
Model::readArrayDef(*ctx.mdl, controllerKeyOffset, controllerKeyCount);
Expand All @@ -517,57 +499,44 @@ void ModelNode_KotOR::load(Model_KotOR::ParserContext &ctx) {
if ((ctx.flags & 0xF400) != 0)
throw Common::Exception("Unknown node flags %04X", ctx.flags);

printf("%*s node flags: %08X\n", indent, "", ctx.flags);

if (ctx.flags & kNodeFlagHasLight) {
// TODO: Light
printf("%*s node has light flag\n", indent, "");
//ctx.mdl->skip(0x5C);
readLight(ctx);
}

if (ctx.flags & kNodeFlagHasEmitter) {
printf("%*s node has emitter flag\n", indent, "");
readEmitter(ctx);
}

if (ctx.flags & kNodeFlagHasReference) {
printf("%*s node has reference flag\n", indent, "");
// TODO: Reference
ctx.mdl->skip(0x44);
}

if (ctx.flags & kNodeFlagHasMesh) {
printf("%*s node has mesh flag\n", indent, "");
readMesh(ctx);
}

if (ctx.flags & kNodeFlagHasSkin) {
printf("%*s node has skin flag\n", indent, "");
readSkin(ctx);
_model->notifyHasSkinNodes();
}

if (ctx.flags & kNodeFlagHasAnim) {
// TODO: Anim
printf("%*s node has anim flag\n", indent, "");
ctx.mdl->skip(0x38);
}

if (ctx.flags & kNodeFlagHasDangly) {
printf("%*s node has dangly flag\n", indent, "");
// TODO: Dangly
ctx.mdl->skip(0x18);
}

if (ctx.flags & kNodeFlagHasAABB) {
printf("%*s node has aabb flag\n", indent, "");
// TODO: AABB
ctx.mdl->skip(0x4);
}

if (ctx.flags & kNodeFlagHasSaber) {
printf("%*s node has saber flag\n", indent, "");
readSaber(ctx);
}

Expand All @@ -593,11 +562,9 @@ void ModelNode_KotOR::load(Model_KotOR::ParserContext &ctx) {
}
meshName += ".";
meshName += ctx.mdlName;
printf("%*s mesh name: %s\n", indent, "", meshName.c_str());

if (GfxMan.isRendererExperimental()) {
Graphics::Mesh::Mesh *checkMesh = MeshMan.getMesh(meshName);
checkMesh = nullptr;
if (checkMesh) {
delete _mesh->data->rawMesh;
_mesh->data->rawMesh = checkMesh;
Expand All @@ -620,22 +587,13 @@ void ModelNode_KotOR::load(Model_KotOR::ParserContext &ctx) {

MeshMan.addMesh(_mesh->data->rawMesh);
}
_mesh->data->rawMesh->useIncrement();
}

if (_light) {
printf("%*s light colour: %f, %f, %f\n", indent, "", _light->colour[0], _light->colour[1], _light->colour[2]);
printf("%*s light radius: %f\n", indent, "", _light->radius);
printf("%*s light multiplier: %f\n", indent, "", _light->multiplier);
LightMan.registerLight(_light);
}
printf("%*s------------------\n", indent, "");

indent += 4;
int i = 0;
for (std::vector<uint32_t>::const_iterator child = children.begin(); child != children.end(); ++child) {
printf("%*s loading child %d with id %u\n", indent, "", i, children[i]);
i++;
ModelNode_KotOR *childNode = new ModelNode_KotOR(*_model);
ctx.nodes.push_back(childNode);

Expand All @@ -644,7 +602,6 @@ void ModelNode_KotOR::load(Model_KotOR::ParserContext &ctx) {
ctx.mdl->seek(ctx.offModelData + *child);
childNode->load(ctx);
}
indent -= 4;
}

void ModelNode_KotOR::readNodeControllers(Model_KotOR::ParserContext &ctx,
Expand All @@ -658,7 +615,6 @@ void ModelNode_KotOR::readNodeControllers(Model_KotOR::ParserContext &ctx,
uint16_t dataIndex = ctx.mdl->readUint16LE();
uint8_t columnCount = ctx.mdl->readByte();
ctx.mdl->skip(3);
printf("%*s node controller type: %u\n", indent, "", type);
switch (type) {
case kControllerTypePosition:
readPositionController(columnCount, rowCount, timeIndex, dataIndex, dataFloat);
Expand All @@ -667,9 +623,7 @@ void ModelNode_KotOR::readNodeControllers(Model_KotOR::ParserContext &ctx,
readOrientationController(columnCount, rowCount, timeIndex, dataIndex, dataFloat, dataInt);
break;
case kControllerTypeVerticalDisplacement:
printf("%*s column count: %u\n", indent, "", columnCount);
for (int n = 0; n < columnCount; ++n) {
printf("%*s vertical displacement: %f\n", indent, "", dataFloat[dataIndex +n]);
_displacement.push_back(dataFloat[dataIndex + n]);
}
break;
Expand Down Expand Up @@ -820,6 +774,8 @@ void ModelNode_KotOR::readOrientationController(uint8_t columnCount, uint16_t ro
}

void ModelNode_KotOR::readMesh(Model_KotOR::ParserContext &ctx) {
_mesh = new Mesh();

size_t P = ctx.mdl->pos();

ctx.mdl->skip(8); // Function pointers
Expand All @@ -837,33 +793,26 @@ void ModelNode_KotOR::readMesh(Model_KotOR::ParserContext &ctx) {
boundingMax[1] = ctx.mdl->readIEEEFloatLE();
boundingMax[2] = ctx.mdl->readIEEEFloatLE();

float radius = ctx.mdl->readIEEEFloatLE();
printf("%*s mesh radius: %f\n", indent, "", radius);
_mesh->radius = ctx.mdl->readIEEEFloatLE();

float pointsAverage[3];
pointsAverage[0] = ctx.mdl->readIEEEFloatLE();
pointsAverage[1] = ctx.mdl->readIEEEFloatLE();
pointsAverage[2] = ctx.mdl->readIEEEFloatLE();

_mesh = new Mesh();

_mesh->ambient[0] = ctx.mdl->readIEEEFloatLE();
_mesh->ambient[1] = ctx.mdl->readIEEEFloatLE();
_mesh->ambient[2] = ctx.mdl->readIEEEFloatLE();
printf("%*s mesh ambient: %f %f %f\n", indent, "", _mesh->ambient[0], _mesh->ambient[1], _mesh->ambient[2]);

_mesh->diffuse[0] = ctx.mdl->readIEEEFloatLE();
_mesh->diffuse[1] = ctx.mdl->readIEEEFloatLE();
_mesh->diffuse[2] = ctx.mdl->readIEEEFloatLE();
printf("%*s mesh diffuse: %f %f %f\n", indent, "", _mesh->diffuse[0], _mesh->diffuse[1], _mesh->diffuse[2]);

_mesh->specular[0] = 0;
_mesh->specular[1] = 0;
_mesh->specular[2] = 0;
printf("%*s mesh specular: %f %f %f\n", indent, "", _mesh->specular[0], _mesh->specular[1], _mesh->specular[2]);

_mesh->transparencyHint = ctx.mdl->readUint32LE();
printf("%*s mesh transparency hint: %u\n", indent, "", _mesh->transparencyHint);

ctx.textures.clear();
ctx.textures.push_back(Common::readStringFixed(*ctx.mdl, Common::kEncodingASCII, 32));
Expand Down Expand Up @@ -899,8 +848,6 @@ void ModelNode_KotOR::readMesh(Model_KotOR::ParserContext &ctx) {

ctx.vertexCount = ctx.mdl->readUint16LE();
ctx.textureCount = ctx.mdl->readUint16LE();
printf("%*s mesh vertex count: %u\n", indent, "", ctx.vertexCount);


ctx.mdl->skip(2);

Expand All @@ -911,14 +858,6 @@ void ModelNode_KotOR::readMesh(Model_KotOR::ParserContext &ctx) {
byte render = ctx.mdl->readByte();
_mesh->render = render == 1;

printf("%*s unknown flags: 0x%02X, 0x%02X, 0x%02X, 0x%02X\n",
indent,
"",
unknownFlag1,
shadow,
unknownFlag2,
render);

ctx.mdl->skip(10);

if (ctx.kotor2)
Expand Down Expand Up @@ -947,9 +886,6 @@ void ModelNode_KotOR::readMesh(Model_KotOR::ParserContext &ctx) {
ctx.textures[0] = ctx.texture;

ctx.textures.resize(ctx.textureCount);
for (size_t i = 0; i < ctx.textureCount; ++i) {
printf("%*s texture: %s\n", indent, "", ctx.textures[i].c_str());
}
loadTextures(ctx.textures);


Expand Down
1 change: 0 additions & 1 deletion src/graphics/aurora/model_nwn.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1331,7 +1331,6 @@ void ModelNode_NWN_ASCII::load(Model_NWN::ParserContext &ctx,
_mesh->data->rawMesh->init();
MeshMan.addMesh(_mesh->data->rawMesh);
}
_mesh->data->rawMesh->useIncrement();

if (GfxMan.isRendererExperimental())
buildMaterial();
Expand Down

0 comments on commit 8183a41

Please sign in to comment.