Skip to content

Commit

Permalink
Merge pull request #110 from GrimoireGL/fix/e2e-testing
Browse files Browse the repository at this point in the history
fix: add material replacable feature
  • Loading branch information
kyasbal authored Nov 7, 2017
2 parents d2d402c + 965df9e commit 0ee531b
Showing 1 changed file with 40 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,51 +7,56 @@ import GLTFParser from "../Parser";
import Material from "grimoirejs-fundamental/ref/Material/Material";
import MaterialFactory from "grimoirejs-fundamental/ref/Material/MaterialFactory";
import TextureReference from "grimoirejs-fundamental/ref/Material/TextureReference";
import Pass from "grimoirejs-fundamental/ref/Material/Pass";

export default class DefaultPBRMetallicRoughnessInstanciator implements IGLTFMaterialInstanciator {
async tryInstanciate(matFactory: MaterialFactory, materialData: GLTFMaterial, textures: { [key: string]: Texture2D; }, gltfData: GLTF, parser: GLTFParser): Promise<Material> {
if (materialData["pbrMetallicRoughness"]) {
const material = await matFactory.instanciate("gltf-pbr-metallic-roughness");
const pmr = materialData["pbrMetallicRoughness"];
const pass = material.techniques["default"].passes[0];
if (pmr.baseColorFactor) {
pass.setArgument("baseColorFactor", pmr.baseColorFactor, null);
}
if (pmr.baseColorTexture) {
pass.setArgument("baseColorTexture", new TextureReference(textures[pmr.baseColorTexture.index]), null);
}
if (pmr.metallicFactor) {
pass.setArgument("metallicFactor", pmr.metallicFactor, null);
}
// TODO Remove? metallicTexture and roughnessTexture was removed from specification?
if ((pmr as any).metallicTexture) {
pass.setArgument("metallicTexture", new TextureReference(textures[(pmr as any).metallicTexture.index]), null);
}
if ((pmr as any).roughnessTexture) {
pass.setArgument("roughnessTexture", new TextureReference(textures[(pmr as any).roughnessTexture.index]), null);
}
if (pmr.roughnessFactor) {
pass.setArgument("roughnessFactor", pmr.roughnessFactor, null);
}
if (pmr.metallicRoughnessTexture) {
pass.setArgument("metallicRoughnessTexture", new TextureReference(textures[pmr.metallicRoughnessTexture.index]), null);
}
if (materialData["emissiveFactor"]) {
pass.setArgument("emissiveFactor", materialData.emissiveFactor, null);
}
if (materialData["emissiveTexture"]) {
pass.setArgument("emissiveTexture", new TextureReference(textures[materialData.emissiveTexture.index]), null);
}
if (materialData["normalTexture"]) {
pass.setArgument("normalTexture", new TextureReference(textures[materialData.normalTexture.index]), null);
}
if (materialData["occlusionTexture"]) {
pass.setArgument("occlusionTexture", new TextureReference(textures[materialData.occlusionTexture.index]), null);
}
this.__applyPBRMetallicRoughnessParameters(materialData, pass, textures);
return material;
} else {
return null;
}
}


private __applyPBRMetallicRoughnessParameters(materialData: GLTFMaterial, pass: Pass, textures: { [key: string]: Texture2D; }) {
const pmr = materialData["pbrMetallicRoughness"];
if (pmr.baseColorFactor) {
pass.setArgument("baseColorFactor", pmr.baseColorFactor, null);
}
if (pmr.baseColorTexture) {
pass.setArgument("baseColorTexture", new TextureReference(textures[pmr.baseColorTexture.index]), null);
}
if (pmr.metallicFactor) {
pass.setArgument("metallicFactor", pmr.metallicFactor, null);
}
// TODO Remove? metallicTexture and roughnessTexture was removed from specification?
if ((pmr as any).metallicTexture) {
pass.setArgument("metallicTexture", new TextureReference(textures[(pmr as any).metallicTexture.index]), null);
}
if ((pmr as any).roughnessTexture) {
pass.setArgument("roughnessTexture", new TextureReference(textures[(pmr as any).roughnessTexture.index]), null);
}
if (pmr.roughnessFactor) {
pass.setArgument("roughnessFactor", pmr.roughnessFactor, null);
}
if (pmr.metallicRoughnessTexture) {
pass.setArgument("metallicRoughnessTexture", new TextureReference(textures[pmr.metallicRoughnessTexture.index]), null);
}
if (materialData["emissiveFactor"]) {
pass.setArgument("emissiveFactor", materialData.emissiveFactor, null);
}
if (materialData["emissiveTexture"]) {
pass.setArgument("emissiveTexture", new TextureReference(textures[materialData.emissiveTexture.index]), null);
}
if (materialData["normalTexture"]) {
pass.setArgument("normalTexture", new TextureReference(textures[materialData.normalTexture.index]), null);
}
if (materialData["occlusionTexture"]) {
pass.setArgument("occlusionTexture", new TextureReference(textures[materialData.occlusionTexture.index]), null);
}
}
}

0 comments on commit 0ee531b

Please sign in to comment.