Renderer/src/main/java/electrosphere/renderer/Material.java
2023-01-28 22:23:01 -05:00

111 lines
3.5 KiB
Java

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package electrosphere.renderer;
import electrosphere.engine.Globals;
import electrosphere.renderer.texture.Texture;
import org.lwjgl.PointerBuffer;
import org.lwjgl.assimp.AIMaterial;
import org.lwjgl.assimp.AIMaterialProperty;
import static org.lwjgl.opengl.GL11.GL_TEXTURE_2D;
import static org.lwjgl.opengl.GL11.glBindTexture;
import static org.lwjgl.opengl.GL13.GL_TEXTURE0;
import static org.lwjgl.opengl.GL13.glActiveTexture;
/**
*
* @author amaterasu
*/
public class Material {
String diffuse;
String specular;
boolean hasTransparency = false;
boolean usesFetch = true;
int texturePointer;
public Material(){
}
//basically useless because blender doesn't support exporting mats with fbx
public static Material load_material_from_aimaterial(AIMaterial input){
Material rVal = new Material();
// if(input.mNumProperties() > 0){
// PointerBuffer property_buffer = input.mProperties();
// while(property_buffer.hasRemaining()){
// AIMaterialProperty new_property = AIMaterialProperty.create(property_buffer.get());
// // System.out.println("Property: " + new_property.mKey().dataString());
// }
// }
return rVal;
}
public String get_diffuse(){
return diffuse;
}
public String get_specular(){
return specular;
}
public void set_diffuse(String t){
diffuse = t;
// if(t.isTransparent()){
// hasTransparency = true;
// }
}
public void set_specular(String t){
specular = t;
// if(t.isTransparent()){
// hasTransparency = true;
// }
}
public void setTexturePointer(int pointer){
texturePointer = pointer;
usesFetch = false;
}
public void apply_material(){
//basically a switch for the case where we want to manually set texture pointer
if(usesFetch){
Texture diffuseTexture = Globals.assetManager.fetchTexture(diffuse);
if(diffuseTexture != null){
diffuseTexture.bind(0);
}
Texture specularTexture = Globals.assetManager.fetchTexture(specular);
if(specularTexture != null){
specularTexture.bind(1);
}
} else {
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texturePointer);
}
}
public void apply_material(int diffuse_channel, int specular_channel){
Texture diffuseTexture = Globals.assetManager.fetchTexture(diffuse);
if(diffuseTexture != null){
diffuseTexture.bind(diffuse_channel);
}
Texture specularTexture = Globals.assetManager.fetchTexture(specular);
if(specularTexture != null){
specularTexture.bind(specular_channel);
}
}
public boolean isTransparent(){
boolean rVal = false;
Texture diffuseTexture = Globals.assetManager.fetchTexture(diffuse);
if(diffuseTexture != null && diffuseTexture.isTransparent()){
rVal = true;
}
Texture specularTexture = Globals.assetManager.fetchTexture(specular);
if(specularTexture != null && specularTexture.isTransparent()){
rVal = true;
}
return rVal;
}
}