mirror of
https://github.com/redstrate/Novus.git
synced 2025-04-26 13:47:46 +00:00
Use the parameters defined in the material instead of hardcoding
This was only useful for testing, the new renderer loads the parameters the material stores now.
This commit is contained in:
parent
c1b45611a2
commit
7cd519fac2
7 changed files with 34 additions and 17 deletions
2
extern/libphysis
vendored
2
extern/libphysis
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit bccb0503fadb1cd69f27e9aa62ff4d446de76226
|
Subproject commit 3a1bc2770dd8cb4ccadccb60c1ae20692aaeb00f
|
|
@ -228,6 +228,30 @@ RenderMaterial MDLPart::createMaterial(const physis_Material &material)
|
||||||
auto shpkData = physis_gamedata_extract_file(data, shpkPath.c_str());
|
auto shpkData = physis_gamedata_extract_file(data, shpkPath.c_str());
|
||||||
if (shpkData.data != nullptr) {
|
if (shpkData.data != nullptr) {
|
||||||
newMaterial.shaderPackage = physis_parse_shpk(shpkData);
|
newMaterial.shaderPackage = physis_parse_shpk(shpkData);
|
||||||
|
|
||||||
|
// create the material parameters for this shader package
|
||||||
|
newMaterial.materialBuffer =
|
||||||
|
renderer->device().createBuffer(newMaterial.shaderPackage.material_parameters_size, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
|
||||||
|
|
||||||
|
// assumed to be floats, maybe not always true?
|
||||||
|
std::vector<float> buffer(newMaterial.shaderPackage.material_parameters_size / sizeof(float));
|
||||||
|
|
||||||
|
// copy the material data
|
||||||
|
for (int i = 0; i < newMaterial.shaderPackage.num_material_parameters; i++) {
|
||||||
|
auto param = newMaterial.shaderPackage.material_parameters[i];
|
||||||
|
|
||||||
|
for (int j = 0; j < newMaterial.mat.num_constants; j++) {
|
||||||
|
auto constant = newMaterial.mat.constants[j];
|
||||||
|
|
||||||
|
if (constant.id == param.id) {
|
||||||
|
for (int z = 0; z < constant.num_values; z++) {
|
||||||
|
buffer[(param.byte_offset / sizeof(float)) + z] = constant.values[z];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
renderer->device().copyToBuffer(newMaterial.materialBuffer, buffer.data(), buffer.size() * sizeof(float));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -221,7 +221,7 @@ void MtrlPart::rebuild()
|
||||||
auto layout = new QFormLayout();
|
auto layout = new QFormLayout();
|
||||||
groupBox->setLayout(layout);
|
groupBox->setLayout(layout);
|
||||||
|
|
||||||
auto label = new QLabel(QString::number(constant.value));
|
auto label = new QLabel(QStringLiteral("%1 %2 %3 %4").arg(constant.values[0]).arg(constant.values[1]).arg(constant.values[2]).arg(constant.values[3]));
|
||||||
layout->addRow(i18n("Value:"), label);
|
layout->addRow(i18n("Value:"), label);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,8 @@ struct RenderMaterial {
|
||||||
RenderTexture *normalTexture = nullptr;
|
RenderTexture *normalTexture = nullptr;
|
||||||
RenderTexture *specularTexture = nullptr;
|
RenderTexture *specularTexture = nullptr;
|
||||||
RenderTexture *multiTexture = nullptr;
|
RenderTexture *multiTexture = nullptr;
|
||||||
|
|
||||||
|
Buffer materialBuffer;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DrawObject {
|
struct DrawObject {
|
||||||
|
|
|
@ -84,7 +84,6 @@ private:
|
||||||
Buffer g_CameraParameter;
|
Buffer g_CameraParameter;
|
||||||
Buffer g_InstanceParameter;
|
Buffer g_InstanceParameter;
|
||||||
Buffer g_ModelParameter;
|
Buffer g_ModelParameter;
|
||||||
Buffer g_MaterialParameter;
|
|
||||||
Buffer g_TransparencyMaterialParameter;
|
Buffer g_TransparencyMaterialParameter;
|
||||||
Buffer g_CommonParameter;
|
Buffer g_CommonParameter;
|
||||||
Buffer g_LightParam;
|
Buffer g_LightParam;
|
||||||
|
|
|
@ -98,16 +98,6 @@ GameRenderer::GameRenderer(Device &device, GameData *data)
|
||||||
m_device.copyToBuffer(g_ModelParameter, &modelParameter, sizeof(ModelParameter));
|
m_device.copyToBuffer(g_ModelParameter, &modelParameter, sizeof(ModelParameter));
|
||||||
}
|
}
|
||||||
|
|
||||||
// material data
|
|
||||||
{
|
|
||||||
g_MaterialParameter = m_device.createBuffer(sizeof(MaterialParameters), VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
|
|
||||||
|
|
||||||
MaterialParameters materialParameter{};
|
|
||||||
materialParameter.parameters[0] = glm::vec4(1.0f, 1.0f, 1.0f, 0.0f); // diffuse color then alpha threshold
|
|
||||||
materialParameter.parameters[5].z = 1.0f;
|
|
||||||
m_device.copyToBuffer(g_MaterialParameter, &materialParameter, sizeof(MaterialParameters));
|
|
||||||
}
|
|
||||||
|
|
||||||
// material data
|
// material data
|
||||||
{
|
{
|
||||||
g_TransparencyMaterialParameter = m_device.createBuffer(sizeof(MaterialParameters), VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
|
g_TransparencyMaterialParameter = m_device.createBuffer(sizeof(MaterialParameters), VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
|
||||||
|
@ -1202,7 +1192,7 @@ GameRenderer::createDescriptorFor(const DrawObject *object, const CachedPipeline
|
||||||
info->range = buffer.size;
|
info->range = buffer.size;
|
||||||
};
|
};
|
||||||
|
|
||||||
auto bindBuffer = [this, &useUniformBuffer, &info, j, &object, pass](const char *name) {
|
auto bindBuffer = [this, &useUniformBuffer, &info, j, &object, pass, material](const char *name) {
|
||||||
qInfo() << "Requesting" << name << "at" << j;
|
qInfo() << "Requesting" << name << "at" << j;
|
||||||
|
|
||||||
if (strcmp(name, "g_CameraParameter") == 0) {
|
if (strcmp(name, "g_CameraParameter") == 0) {
|
||||||
|
@ -1219,7 +1209,9 @@ GameRenderer::createDescriptorFor(const DrawObject *object, const CachedPipeline
|
||||||
// The composite semi-transparency uses a different alphathreshold
|
// The composite semi-transparency uses a different alphathreshold
|
||||||
useUniformBuffer(g_TransparencyMaterialParameter);
|
useUniformBuffer(g_TransparencyMaterialParameter);
|
||||||
} else {
|
} else {
|
||||||
useUniformBuffer(g_MaterialParameter);
|
Q_ASSERT(material);
|
||||||
|
Q_ASSERT(material->materialBuffer.buffer);
|
||||||
|
useUniformBuffer(material->materialBuffer);
|
||||||
}
|
}
|
||||||
} else if (strcmp(name, "g_LightParam") == 0) {
|
} else if (strcmp(name, "g_LightParam") == 0) {
|
||||||
useUniformBuffer(g_LightParam);
|
useUniformBuffer(g_LightParam);
|
||||||
|
|
|
@ -100,8 +100,8 @@ RenderManager::RenderManager(GameData *data)
|
||||||
createInfo.ppEnabledExtensionNames = instanceExtensions.data();
|
createInfo.ppEnabledExtensionNames = instanceExtensions.data();
|
||||||
createInfo.enabledExtensionCount = instanceExtensions.size();
|
createInfo.enabledExtensionCount = instanceExtensions.size();
|
||||||
createInfo.pApplicationInfo = &applicationInfo;
|
createInfo.pApplicationInfo = &applicationInfo;
|
||||||
createInfo.ppEnabledLayerNames = layers;
|
// createInfo.ppEnabledLayerNames = layers;
|
||||||
createInfo.enabledLayerCount = 1;
|
// createInfo.enabledLayerCount = 1;
|
||||||
|
|
||||||
vkCreateInstance(&createInfo, nullptr, &m_device->instance);
|
vkCreateInstance(&createInfo, nullptr, &m_device->instance);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue