the UI update part 1
This commit is contained in:
parent
cc2709aa93
commit
9fdb9a23c0
10
assets/Shaders/plane/plane.fs
Normal file
10
assets/Shaders/plane/plane.fs
Normal file
@ -0,0 +1,10 @@
|
||||
#version 330 core
|
||||
out vec4 FragColor;
|
||||
|
||||
in vec2 TexCoords;
|
||||
|
||||
uniform sampler2D screenTexture;
|
||||
|
||||
void main(){
|
||||
FragColor = texture(screenTexture, TexCoords);
|
||||
}
|
||||
29
assets/Shaders/plane/plane.vs
Normal file
29
assets/Shaders/plane/plane.vs
Normal file
@ -0,0 +1,29 @@
|
||||
#version 330 core
|
||||
layout (location = 0) in vec3 aPos;
|
||||
layout (location = 4) in vec2 aTexCoords;
|
||||
|
||||
out vec2 TexCoords;
|
||||
|
||||
uniform vec3 mPosition;
|
||||
uniform vec3 mDimension;
|
||||
uniform vec3 tPosition;
|
||||
uniform vec3 tDimension;
|
||||
|
||||
void main(){
|
||||
vec2 finalPos = vec2(
|
||||
aPos.x * mDimension.x - (1 - mDimension.x) + mPosition.x,
|
||||
aPos.y * mDimension.y + (1 - mDimension.y) - mPosition.y
|
||||
);
|
||||
gl_Position = vec4(finalPos.x, finalPos.y, 0.0, 1.0);
|
||||
|
||||
vec2 finalTex = vec2(
|
||||
aTexCoords.x * tDimension.x + tPosition.x,
|
||||
aTexCoords.y * tDimension.y + tPosition.y
|
||||
);
|
||||
// vec2 finalTex = aTexCoords;
|
||||
// vec2 finalTex = vec2(
|
||||
// aTexCoords.x + 0.7,
|
||||
// aTexCoords.y
|
||||
// );
|
||||
TexCoords = finalTex;
|
||||
}
|
||||
BIN
assets/Textures/Testing1.png
Normal file
BIN
assets/Textures/Testing1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.4 KiB |
BIN
assets/Textures/ui/WindowBorder.png
Normal file
BIN
assets/Textures/ui/WindowBorder.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.8 KiB |
@ -86,7 +86,7 @@ public class LoadingThread extends Thread {
|
||||
|
||||
Globals.currentMenu = MenuUtils.createTitleMenu();
|
||||
|
||||
loadingBox.setDraw(false);
|
||||
loadingBox.setVisible(false);
|
||||
|
||||
MenuUtils.makeMenuDrawable(Globals.currentMenu);
|
||||
|
||||
@ -102,7 +102,7 @@ public class LoadingThread extends Thread {
|
||||
|
||||
case LOAD_MAIN_GAME:
|
||||
|
||||
loadingBox.setDraw(true);
|
||||
loadingBox.setVisible(true);
|
||||
|
||||
//disable menu input
|
||||
Globals.controlHandler.setHandlerState(ControlHandler.ControlsState.NO_INPUT);
|
||||
@ -162,7 +162,7 @@ public class LoadingThread extends Thread {
|
||||
Globals.controlHandler.hideMouse();
|
||||
|
||||
|
||||
loadingBox.setDraw(false);
|
||||
loadingBox.setVisible(false);
|
||||
|
||||
RenderUtils.recaptureScreen();
|
||||
|
||||
@ -187,7 +187,7 @@ public class LoadingThread extends Thread {
|
||||
|
||||
case LOAD_ARENA:
|
||||
|
||||
loadingBox.setDraw(true);
|
||||
loadingBox.setVisible(true);
|
||||
|
||||
//disable menu input
|
||||
Globals.controlHandler.setHandlerState(ControlHandler.ControlsState.NO_INPUT);
|
||||
@ -242,7 +242,7 @@ public class LoadingThread extends Thread {
|
||||
//hide cursor
|
||||
Globals.controlHandler.hideMouse();
|
||||
|
||||
loadingBox.setDraw(false);
|
||||
loadingBox.setVisible(false);
|
||||
|
||||
RenderUtils.recaptureScreen();
|
||||
|
||||
@ -544,14 +544,14 @@ public class LoadingThread extends Thread {
|
||||
//// EntityUtils.getEntityRotation(tree).rotateAxis((float)-Math.PI/2.0f, new Vector3f(1,0,0));
|
||||
// }
|
||||
|
||||
// Random rand = new Random();
|
||||
// for(int i = 0; i < 1000; i++){
|
||||
// String wheatPath = "Models/wheat2.fbx";
|
||||
// Entity wheatStalk = EntityUtils.spawnDrawableEntity(wheatPath);
|
||||
// EntityUtils.getPosition(wheatStalk).set(rand.nextFloat() * 20, 0, rand.nextFloat() * 20);
|
||||
// EntityUtils.getRotation(wheatStalk).rotateLocalX(-(float)Math.PI/2.0f);
|
||||
// EntityUtils.getScale(wheatStalk).set(1, 1, 2);
|
||||
// }
|
||||
Random rand = new Random();
|
||||
for(int i = 0; i < 1000; i++){
|
||||
String wheatPath = "Models/wheat2.fbx";
|
||||
Entity wheatStalk = EntityUtils.spawnDrawableEntity(wheatPath);
|
||||
EntityUtils.getPosition(wheatStalk).set(rand.nextFloat() * 20, 0, rand.nextFloat() * 20);
|
||||
EntityUtils.getRotation(wheatStalk).rotateLocalX(-(float)Math.PI/2.0f);
|
||||
EntityUtils.getScale(wheatStalk).set(1, 1, 2);
|
||||
}
|
||||
|
||||
// String buildingPath = "Models/building1.fbx";
|
||||
// Entity building = EntityUtils.spawnDrawableEntity(buildingPath);
|
||||
|
||||
@ -173,6 +173,9 @@ public class Globals {
|
||||
public static Material materialDefault;
|
||||
|
||||
public static String blackTexture;
|
||||
public static String testingTexture;
|
||||
|
||||
public static String planeModelID;
|
||||
|
||||
public static ArrayList<PointLight> lightPointListDefault;
|
||||
public static SpotLight lightSpotDefault;
|
||||
@ -328,7 +331,7 @@ public class Globals {
|
||||
particleBillboardModel = assetManager.registerModel(RenderUtils.createParticleModel());
|
||||
//black texture for backgrouns
|
||||
blackTexture = "Textures/b1.png";
|
||||
Globals.assetManager.addTexturePathtoQueue("Textures/b1.png");
|
||||
Globals.assetManager.addTexturePathtoQueue(blackTexture);
|
||||
//loading box
|
||||
loadingBox = WidgetUtils.createVerticallyAlignedTextBox(520, 100, 50, 7, 1, "LOADING", true);
|
||||
//init default shaderProgram
|
||||
@ -345,6 +348,13 @@ public class Globals {
|
||||
assetManager.addModelPathToQueue("Models/unitcylinder.fbx");
|
||||
assetManager.addModelPathToQueue("Models/unitplane.fbx");
|
||||
assetManager.addModelPathToQueue("Models/unitcube.fbx");
|
||||
planeModelID = assetManager.registerModel(RenderUtils.createPlaneModel());
|
||||
|
||||
//init ui images
|
||||
assetManager.addTexturePathtoQueue("Textures/ui/WindowBorder.png");
|
||||
|
||||
testingTexture = "Textures/Testing1.png";
|
||||
Globals.assetManager.addTexturePathtoQueue(testingTexture);
|
||||
|
||||
//as these assets are required for the renderer to work, we go ahead and
|
||||
//load them into memory now. The loading time penalty is worth it I think.
|
||||
|
||||
@ -18,6 +18,7 @@ public class Menu {
|
||||
MULTIPLAYER_MENU,
|
||||
IP_MENU,
|
||||
OPTIONS_MAIN_MENU,
|
||||
TEST,
|
||||
}
|
||||
|
||||
MenuType type;
|
||||
|
||||
@ -44,6 +44,11 @@ public class MenuTransition {
|
||||
m.dispose();
|
||||
Globals.currentMenu = MenuUtils.createOptionsMainMenu();
|
||||
break;
|
||||
//test
|
||||
case 4:
|
||||
m.dispose();
|
||||
Globals.currentMenu = MenuUtils.createTestMainMenu();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case MULTIPLAYER_MENU:
|
||||
@ -106,6 +111,10 @@ public class MenuTransition {
|
||||
m.dispose();
|
||||
Globals.currentMenu = MenuUtils.createTitleMenu();
|
||||
break;
|
||||
case TEST:
|
||||
m.dispose();
|
||||
Globals.currentMenu = MenuUtils.createTitleMenu();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -24,7 +24,7 @@ public class MenuUtils {
|
||||
rVal.addOption( WidgetUtils.createVerticallyAlignedMinSizeTextBoxFromCharCount(40, 40, screenTop - 200, "MULTIPLAYER", true));
|
||||
rVal.addOption( WidgetUtils.createVerticallyAlignedMinSizeTextBoxFromCharCount(40, 40, screenTop - 275, "ARENA", true));
|
||||
rVal.addOption( WidgetUtils.createVerticallyAlignedMinSizeTextBoxFromCharCount(40, 40, screenTop - 350, "OPTIONS", true));
|
||||
rVal.addOption( WidgetUtils.createVerticallyAlignedMinSizeTextBoxFromCharCount(40, 40, screenTop - 350, "UI TESTING", true));
|
||||
rVal.addOption( WidgetUtils.createVerticallyAlignedMinSizeTextBoxFromCharCount(40, 40, screenTop - 425, "UI TESTING", true));
|
||||
return rVal;
|
||||
}
|
||||
|
||||
@ -61,15 +61,21 @@ public class MenuUtils {
|
||||
return rVal;
|
||||
}
|
||||
|
||||
public static Menu createTestMainMenu(){
|
||||
Menu rVal = new Menu(MenuType.TEST);
|
||||
rVal.addElement(WidgetUtils.createWindowTEST());
|
||||
return rVal;
|
||||
}
|
||||
|
||||
public static void makeMenuDrawable(Menu m){
|
||||
for(Widget w : m.widgetList){
|
||||
w.setDraw(true);
|
||||
w.setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
public static void makeMenuUndrawable(Menu m){
|
||||
for(Widget w : m.widgetList){
|
||||
w.setDraw(false);
|
||||
w.setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -10,15 +10,25 @@ 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(){
|
||||
|
||||
}
|
||||
@ -53,14 +63,25 @@ public class Material {
|
||||
// }
|
||||
}
|
||||
|
||||
public void setTexturePointer(int pointer){
|
||||
texturePointer = pointer;
|
||||
usesFetch = false;
|
||||
}
|
||||
|
||||
public void apply_material(){
|
||||
Texture diffuseTexture = Globals.assetManager.fetchTexture(diffuse);
|
||||
if(diffuseTexture != null){
|
||||
diffuseTexture.bind(0);
|
||||
}
|
||||
Texture specularTexture = Globals.assetManager.fetchTexture(specular);
|
||||
if(specularTexture != null){
|
||||
specularTexture.bind(1);
|
||||
//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){
|
||||
|
||||
@ -608,7 +608,7 @@ public class Mesh {
|
||||
textureListArrayUniformName = uniformName;
|
||||
}
|
||||
|
||||
public void set_material(Material input){
|
||||
public void setMaterial(Material input){
|
||||
this.material = input;
|
||||
}
|
||||
|
||||
|
||||
@ -362,6 +362,12 @@ public class Model {
|
||||
}
|
||||
}
|
||||
|
||||
public void drawFramebuffer(){
|
||||
for(Mesh m : meshes){
|
||||
m.complexDraw(true, false, true, false, false, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
public void pushUniformToMesh(String meshName, String uniformKey, Object uniform){
|
||||
for(Mesh m : meshes){
|
||||
if(m.nodeID.equals(meshName)){
|
||||
|
||||
@ -334,7 +334,7 @@ public class ModelUtils {
|
||||
Globals.assetManager.addTexturePathtoQueue("/Textures/Ground/Dirt1.png");
|
||||
groundMat.set_diffuse("/Textures/Ground/Dirt1.png");
|
||||
groundMat.set_specular("/Textures/Ground/Dirt1.png");
|
||||
m.set_material(groundMat);
|
||||
m.setMaterial(groundMat);
|
||||
|
||||
rVal.meshes.add(m);
|
||||
return rVal;
|
||||
@ -560,7 +560,7 @@ public class ModelUtils {
|
||||
Globals.assetManager.addTexturePathtoQueue("/Textures/Ground/Dirt1.png");
|
||||
groundMat.set_diffuse("/Textures/Ground/Dirt1.png");
|
||||
groundMat.set_specular("/Textures/Ground/Dirt1.png");
|
||||
m.set_material(groundMat);
|
||||
m.setMaterial(groundMat);
|
||||
|
||||
rVal.meshes.add(m);
|
||||
return rVal;
|
||||
@ -680,7 +680,7 @@ public class ModelUtils {
|
||||
Globals.assetManager.addTexturePathtoQueue("/Textures/Fonts/myfont1-harsher.png");
|
||||
uiMat.set_diffuse("/Textures/Fonts/myfont1-harsher.png");
|
||||
uiMat.set_specular("/Textures/Fonts/myfont1-harsher.png");
|
||||
m.set_material(uiMat);
|
||||
m.setMaterial(uiMat);
|
||||
|
||||
rVal.meshes.add(m);
|
||||
|
||||
|
||||
@ -562,4 +562,125 @@ public class RenderUtils {
|
||||
return particleModel;
|
||||
}
|
||||
|
||||
|
||||
public static Model createPlaneModel(){
|
||||
Model rVal = new Model();
|
||||
|
||||
rVal.meshes = new ArrayList();
|
||||
rVal.modelMatrix = new Matrix4f();
|
||||
|
||||
|
||||
Mesh planeMesh = new Mesh();
|
||||
|
||||
|
||||
planeMesh.mesh = null;
|
||||
|
||||
//
|
||||
// VAO
|
||||
//
|
||||
planeMesh.vertexArrayObject = glGenVertexArrays();
|
||||
glBindVertexArray(planeMesh.vertexArrayObject);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
float[] vertexcoords = {
|
||||
-1.0f, 1.0f, 0.0f,
|
||||
1.0f, 1.0f, 0.0f,
|
||||
-1.0f, -1.0f, 0.0f,
|
||||
1.0f, -1.0f, 0.0f,
|
||||
|
||||
};
|
||||
|
||||
//
|
||||
//Buffer data to GPU
|
||||
//
|
||||
|
||||
try {
|
||||
planeMesh.vertexCount = vertexcoords.length / 3;
|
||||
FloatBuffer VertexArrayBufferData = BufferUtils.createFloatBuffer(planeMesh.vertexCount * 3);
|
||||
float[] temp = new float[3];
|
||||
for (int i = 0; i < planeMesh.vertexCount; i++) {
|
||||
temp[0] = vertexcoords[i * 3 + 0];
|
||||
temp[1] = vertexcoords[i * 3 + 1];
|
||||
temp[2] = vertexcoords[i * 3 + 2];
|
||||
VertexArrayBufferData.put(temp);
|
||||
}
|
||||
VertexArrayBufferData.flip();
|
||||
planeMesh.buffer_vertices(VertexArrayBufferData, 3);
|
||||
} catch (NullPointerException ex){
|
||||
ex.printStackTrace();
|
||||
}
|
||||
|
||||
int[] facedata = {
|
||||
0,1,2,
|
||||
1,2,3,
|
||||
};
|
||||
|
||||
//
|
||||
// FACES
|
||||
//
|
||||
planeMesh.faceCount = facedata.length / 3;
|
||||
planeMesh.elementCount = facedata.length;
|
||||
IntBuffer elementArrayBufferData = BufferUtils.createIntBuffer(planeMesh.elementCount);
|
||||
for(int i = 0; i < planeMesh.faceCount; i++){
|
||||
int[] temp = new int[3];
|
||||
temp[0] = facedata[i * 3 + 0];
|
||||
temp[1] = facedata[i * 3 + 1];
|
||||
temp[2] = facedata[i * 3 + 2];
|
||||
elementArrayBufferData.put(temp);
|
||||
}
|
||||
elementArrayBufferData.flip();
|
||||
planeMesh.buffer_faces(elementArrayBufferData);
|
||||
|
||||
//
|
||||
// TEXTURE COORDS
|
||||
//
|
||||
FloatBuffer texture_coords = BufferUtils.createFloatBuffer(8);
|
||||
float[] texturedata = {
|
||||
0,1,
|
||||
1,1,
|
||||
0,0,
|
||||
1,0
|
||||
};
|
||||
texture_coords.put(texturedata);
|
||||
texture_coords.flip();
|
||||
planeMesh.buffer_texture_coords(texture_coords, 2);
|
||||
|
||||
|
||||
|
||||
|
||||
planeMesh.shader = ShaderProgram.loadSpecificShader("Shaders/plane/plane.vs", "Shaders/plane/plane.fs");
|
||||
planeMesh.hasBones = false;
|
||||
|
||||
|
||||
|
||||
|
||||
glBindVertexArray(0);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
planeMesh.nodeID = "plane";
|
||||
|
||||
planeMesh.parent = rVal;
|
||||
|
||||
|
||||
rVal.meshes.add(planeMesh);
|
||||
|
||||
|
||||
return rVal;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -168,7 +168,7 @@ public class RenderingEngine {
|
||||
lightDepthShaderProgram = ShaderProgram.loadSpecificShader("/Shaders/lightDepth/lightDepth.vs", "/Shaders/lightDepth/lightDepth.fs");
|
||||
Globals.depthMapShaderProgramLoc = lightDepthShaderProgram.shaderProgram;
|
||||
lightDepthBuffer = FramebufferUtils.generateDepthBuffer();
|
||||
Globals.shadowMapTextureLoc = lightDepthBuffer.getTexture();
|
||||
Globals.shadowMapTextureLoc = lightDepthBuffer.getTexturePointer();
|
||||
// glEnable(GL_CULL_FACE); // enabled for shadow mapping
|
||||
|
||||
//
|
||||
@ -563,7 +563,7 @@ public class RenderingEngine {
|
||||
// GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||
Globals.renderingEngine.setActiveShader(screenTextureShaders);
|
||||
glBindVertexArray(screenTextureVAO);
|
||||
glBindTexture(GL_TEXTURE_2D, screenFramebuffer.getTexture());
|
||||
glBindTexture(GL_TEXTURE_2D, screenFramebuffer.getTexturePointer());
|
||||
// glBindTexture(GL_TEXTURE_2D, lightDepthBuffer.getTexture());
|
||||
glDrawArrays(GL_TRIANGLES, 0, 6);
|
||||
glBindVertexArray(0);
|
||||
@ -574,8 +574,8 @@ public class RenderingEngine {
|
||||
Matrix4f modelTransformMatrix = new Matrix4f();
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
for(Widget currentWidget : Globals.widgetManager.getWidgetList()){
|
||||
if(currentWidget.isDraw()){
|
||||
currentWidget.draw();
|
||||
if(currentWidget.getVisible()){
|
||||
currentWidget.draw(GL_DEFAULT_FRAMEBUFFER);
|
||||
}
|
||||
}
|
||||
|
||||
@ -614,4 +614,8 @@ public class RenderingEngine {
|
||||
return activeProgram;
|
||||
}
|
||||
|
||||
public void bindFramebuffer(int framebufferPointer){
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, framebufferPointer);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -14,23 +14,23 @@ import static org.lwjgl.opengl.GL30.glGenFramebuffers;
|
||||
*/
|
||||
public class Framebuffer {
|
||||
|
||||
int framebuffer;
|
||||
int texture;
|
||||
int framebufferPointer;
|
||||
int texturePointer;
|
||||
|
||||
public Framebuffer(){
|
||||
framebuffer = glGenFramebuffers();
|
||||
framebufferPointer = glGenFramebuffers();
|
||||
}
|
||||
|
||||
public void setTexture(int texture){
|
||||
this.texture = texture;
|
||||
public void setTexturePointer(int texturePointer){
|
||||
this.texturePointer = texturePointer;
|
||||
}
|
||||
|
||||
public int getTexture(){
|
||||
return texture;
|
||||
public int getTexturePointer(){
|
||||
return texturePointer;
|
||||
}
|
||||
|
||||
public void bind(){
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, framebufferPointer);
|
||||
}
|
||||
|
||||
public boolean isComplete(){
|
||||
@ -38,11 +38,11 @@ public class Framebuffer {
|
||||
return glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE;
|
||||
}
|
||||
|
||||
public int getFramebufferID(){
|
||||
return framebuffer;
|
||||
public int getFramebufferPointer(){
|
||||
return framebufferPointer;
|
||||
}
|
||||
|
||||
public void free(){
|
||||
glDeleteFramebuffers(framebuffer);
|
||||
glDeleteFramebuffers(framebufferPointer);
|
||||
}
|
||||
}
|
||||
|
||||
@ -58,7 +58,7 @@ public class FramebufferUtils {
|
||||
//these make sure the texture actually clamps to the borders of the quad
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
buffer.setTexture(texture);
|
||||
buffer.setTexturePointer(texture);
|
||||
//bind texture to fbo
|
||||
int mipMapLevel = 0;
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, mipMapLevel);
|
||||
@ -75,6 +75,37 @@ public class FramebufferUtils {
|
||||
return buffer;
|
||||
}
|
||||
|
||||
public static Framebuffer generateTextureFramebuffer(int width, int height){
|
||||
Framebuffer buffer = new Framebuffer();
|
||||
buffer.bind();
|
||||
//texture
|
||||
int texture = glGenTextures();
|
||||
glBindTexture(GL_TEXTURE_2D,texture);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
//these make sure the texture actually clamps to the borders of the quad
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
buffer.setTexturePointer(texture);
|
||||
//bind texture to fbo
|
||||
int mipMapLevel = 0;
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, mipMapLevel);
|
||||
//renderbuffer
|
||||
int renderBuffer = glGenRenderbuffers();
|
||||
glBindRenderbuffer(GL_RENDERBUFFER, renderBuffer);
|
||||
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height);
|
||||
//bind rbo to fbo
|
||||
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, renderBuffer);
|
||||
//check make sure compiled
|
||||
if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE){
|
||||
System.out.println("Framebuffer is not complete!");
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static Renderbuffer generateScreensizeStencilDepthRenderbuffer(){
|
||||
Renderbuffer buffer = new Renderbuffer();
|
||||
buffer.bind();
|
||||
@ -101,7 +132,7 @@ public class FramebufferUtils {
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
|
||||
float borderColor[] = { 1.0f, 1.0f, 1.0f, 1.0f };
|
||||
glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, borderColor);
|
||||
buffer.setTexture(texture);
|
||||
buffer.setTexturePointer(texture);
|
||||
|
||||
|
||||
|
||||
|
||||
@ -25,7 +25,7 @@ import static org.lwjgl.opengl.GL30.*;
|
||||
* @author amaterasu
|
||||
*/
|
||||
public class Texture {
|
||||
int texture_pointer;
|
||||
int texturePointer;
|
||||
int width;
|
||||
int height;
|
||||
boolean hasTransparency;
|
||||
@ -36,9 +36,9 @@ public class Texture {
|
||||
public Texture(String path){
|
||||
this.path = path;
|
||||
//generate the texture object on gpu
|
||||
texture_pointer = glGenTextures();
|
||||
texturePointer = glGenTextures();
|
||||
//bind the new texture
|
||||
glBindTexture(GL_TEXTURE_2D, texture_pointer);
|
||||
glBindTexture(GL_TEXTURE_2D, texturePointer);
|
||||
//how are we gonna wrap the texture??
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
|
||||
@ -126,12 +126,12 @@ public class Texture {
|
||||
|
||||
public void bind(){
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
glBindTexture(GL_TEXTURE_2D, texture_pointer);
|
||||
glBindTexture(GL_TEXTURE_2D, texturePointer);
|
||||
}
|
||||
|
||||
public void bind(int attrib_val){
|
||||
glActiveTexture(GL_TEXTURE0 + attrib_val);
|
||||
glBindTexture(GL_TEXTURE_2D, texture_pointer);
|
||||
glBindTexture(GL_TEXTURE_2D, texturePointer);
|
||||
}
|
||||
|
||||
public boolean isTransparent(){
|
||||
@ -141,4 +141,8 @@ public class Texture {
|
||||
public String getPath(){
|
||||
return path;
|
||||
}
|
||||
|
||||
public int getTexturePointer(){
|
||||
return texturePointer;
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,22 +6,14 @@ package electrosphere.renderer.ui;
|
||||
*/
|
||||
public abstract class Widget {
|
||||
|
||||
int width;
|
||||
int height;
|
||||
public int width;
|
||||
public int height;
|
||||
|
||||
int positionX;
|
||||
int positionY;
|
||||
public int positionX;
|
||||
public int positionY;
|
||||
|
||||
boolean draw;
|
||||
public boolean visible = false;
|
||||
|
||||
public Widget(int positionX, int positionY, int width, int height, boolean draw) {
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
this.positionX = positionX;
|
||||
this.positionY = positionY;
|
||||
this.draw = draw;
|
||||
}
|
||||
|
||||
public int getWidth() {
|
||||
return width;
|
||||
}
|
||||
@ -38,8 +30,8 @@ public abstract class Widget {
|
||||
return positionY;
|
||||
}
|
||||
|
||||
public boolean isDraw() {
|
||||
return draw;
|
||||
public boolean getVisible() {
|
||||
return visible;
|
||||
}
|
||||
|
||||
public void setWidth(int width) {
|
||||
@ -58,10 +50,10 @@ public abstract class Widget {
|
||||
this.positionY = positionY;
|
||||
}
|
||||
|
||||
public void setDraw(boolean draw) {
|
||||
this.draw = draw;
|
||||
public void setVisible(boolean draw) {
|
||||
this.visible = draw;
|
||||
}
|
||||
|
||||
public abstract void draw();
|
||||
public abstract void draw(int parentFramebufferPointer);
|
||||
|
||||
}
|
||||
|
||||
@ -2,6 +2,8 @@ package electrosphere.renderer.ui;
|
||||
|
||||
import electrosphere.main.Globals;
|
||||
import electrosphere.renderer.ui.font.TextBox;
|
||||
import electrosphere.renderer.ui.layout.LayoutSchemeListScrollable;
|
||||
import electrosphere.renderer.ui.widgets.ImagePanel;
|
||||
|
||||
/**
|
||||
*
|
||||
@ -45,4 +47,42 @@ public class WidgetUtils {
|
||||
return rVal;
|
||||
}
|
||||
|
||||
public static LayoutSchemeListScrollable createListTEST(){
|
||||
LayoutSchemeListScrollable rVal = new LayoutSchemeListScrollable(200, 200, 500, 500, true);
|
||||
rVal.addWidget(createVerticallyAlignedMinSizeTextBoxFromCharCount(25, 25, 0, "TESTESTESTEST", true));
|
||||
rVal.addWidget(WidgetUtils.createTextBox(100, 100, 500, 500, 3, 10, "TEST", true));
|
||||
Globals.widgetManager.registerWidget(rVal);
|
||||
return rVal;
|
||||
}
|
||||
|
||||
public static Widget createWindowTEST(){
|
||||
Window rVal = new Window(500, 500, 500, 500);
|
||||
//panel 1
|
||||
ImagePanel imagePanel = new ImagePanel();
|
||||
imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.testingTexture));
|
||||
imagePanel.setPositionX(100);
|
||||
imagePanel.setPositionY(100);
|
||||
imagePanel.setVisible(true);
|
||||
rVal.addWidget(imagePanel);
|
||||
//panel 2
|
||||
imagePanel = new ImagePanel();
|
||||
imagePanel.setTexture(Globals.assetManager.fetchTexture(Globals.testingTexture));
|
||||
imagePanel.setVisible(true);
|
||||
rVal.addWidget(imagePanel);
|
||||
rVal.setVisible(true);
|
||||
//window top
|
||||
imagePanel = new ImagePanel();
|
||||
imagePanel.setTexture(Globals.assetManager.fetchTexture("Textures/ui/WindowBorder.png"));
|
||||
imagePanel.setWidth(100);
|
||||
imagePanel.setHeight(50);
|
||||
imagePanel.setPositionX(200);
|
||||
imagePanel.setPositionY(50);
|
||||
imagePanel.setVisible(true);
|
||||
rVal.addWidget(imagePanel);
|
||||
rVal.setVisible(true);
|
||||
Globals.widgetManager.registerWidget(rVal);
|
||||
return rVal;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
93
src/main/java/electrosphere/renderer/ui/Window.java
Normal file
93
src/main/java/electrosphere/renderer/ui/Window.java
Normal file
@ -0,0 +1,93 @@
|
||||
package electrosphere.renderer.ui;
|
||||
|
||||
import electrosphere.main.Globals;
|
||||
import electrosphere.renderer.Material;
|
||||
import electrosphere.renderer.Model;
|
||||
import electrosphere.renderer.framebuffer.Framebuffer;
|
||||
import electrosphere.renderer.framebuffer.FramebufferUtils;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import org.joml.Vector3f;
|
||||
import static org.lwjgl.opengl.GL11.*;
|
||||
import static org.lwjgl.opengl.GL30.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author amaterasu
|
||||
*/
|
||||
public class Window extends Widget {
|
||||
List<Widget> widgetList = new LinkedList();
|
||||
Framebuffer widgetBuffer;
|
||||
Material customMat = new Material();
|
||||
|
||||
Vector3f boxPosition = new Vector3f();
|
||||
Vector3f boxDimensions = new Vector3f();
|
||||
Vector3f texPosition = new Vector3f(0,0,0);
|
||||
Vector3f texScale = new Vector3f(1,1,0);
|
||||
|
||||
public Window(int positionX, int positionY, int width, int height){
|
||||
//TODO: figure out why this has to be 1920x1080
|
||||
// widgetBuffer = FramebufferUtils.generateTextureFramebuffer(width, height);
|
||||
widgetBuffer = FramebufferUtils.generateScreensizeTextureFramebuffer();
|
||||
customMat.setTexturePointer(widgetBuffer.getTexturePointer());
|
||||
float ndcX = (float)positionX/Globals.WINDOW_WIDTH;
|
||||
float ndcY = (float)positionY/Globals.WINDOW_HEIGHT;
|
||||
float ndcWidth = (float)width/Globals.WINDOW_WIDTH;
|
||||
float ndcHeight = (float)height/Globals.WINDOW_HEIGHT;
|
||||
boxPosition = new Vector3f(ndcX,ndcY,0);
|
||||
boxDimensions = new Vector3f(ndcWidth,ndcHeight,0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(int parentFramebufferPointer) {
|
||||
|
||||
widgetBuffer.bind();
|
||||
|
||||
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
for(Widget child : widgetList){
|
||||
child.draw(widgetBuffer.getFramebufferPointer());
|
||||
}
|
||||
//this call binds the screen as the "texture" we're rendering to
|
||||
//have to call before actually rendering
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, parentFramebufferPointer);
|
||||
|
||||
Model planeModel = Globals.assetManager.fetchModel(Globals.planeModelID);
|
||||
planeModel.pushUniformToMesh("plane", "mPosition", boxPosition);
|
||||
planeModel.pushUniformToMesh("plane", "mDimension", boxDimensions);
|
||||
planeModel.pushUniformToMesh("plane", "tPosition", texPosition);
|
||||
planeModel.pushUniformToMesh("plane", "tDimension", texScale);
|
||||
planeModel.meshes.get(0).setMaterial(customMat);
|
||||
planeModel.drawUI();
|
||||
}
|
||||
|
||||
public void pack() {
|
||||
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||
}
|
||||
|
||||
public void addWidget(Widget widget) {
|
||||
widgetList.add(widget);
|
||||
widget.setVisible(false);
|
||||
}
|
||||
|
||||
public List<Widget> getWidgets() {
|
||||
return widgetList;
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||
}
|
||||
|
||||
public void setTextureCoord(int x, int y){
|
||||
float ndcX = (float)x/Globals.WINDOW_WIDTH;
|
||||
float ndcY = (float)y/Globals.WINDOW_HEIGHT;
|
||||
texPosition = new Vector3f(ndcX,ndcY,0);
|
||||
}
|
||||
|
||||
public void setTextureScale(int x, int y){
|
||||
float ndcWidth = (float)x/Globals.WINDOW_WIDTH;
|
||||
float ndcHeight = (float)y/Globals.WINDOW_HEIGHT;
|
||||
texScale = new Vector3f(ndcWidth,ndcHeight,0);
|
||||
}
|
||||
}
|
||||
@ -25,7 +25,6 @@ public class TextBox extends Widget{
|
||||
Vector3f color = new Vector3f(0,0,0);
|
||||
|
||||
public TextBox(int positionX, int positionY, int width, int height, int rows, int cols, String text, boolean render, boolean editable) {
|
||||
super(positionX,positionY,width,height,render);
|
||||
this.positionX = positionX;
|
||||
this.positionY = positionY;
|
||||
this.width = width;
|
||||
@ -73,7 +72,8 @@ public class TextBox extends Widget{
|
||||
|
||||
|
||||
@Override
|
||||
public void draw(){
|
||||
public void draw(int parentFramebufferPointer){
|
||||
Globals.renderingEngine.bindFramebuffer(parentFramebufferPointer);
|
||||
float ndcX = (float)positionX/Globals.WINDOW_WIDTH;
|
||||
float ndcY = (float)positionY/Globals.WINDOW_HEIGHT;
|
||||
float ndcWidth = (float)width/Globals.WINDOW_WIDTH;
|
||||
|
||||
@ -1,46 +0,0 @@
|
||||
package electrosphere.renderer.ui.layout;
|
||||
|
||||
import electrosphere.renderer.ui.Widget;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author amaterasu
|
||||
*/
|
||||
public class LayoutSchemeList extends Widget implements LayoutScheme {
|
||||
|
||||
List<Widget> widgetList = new LinkedList();
|
||||
|
||||
public LayoutSchemeList(int positionX, int positionY, int width, int height, boolean draw){
|
||||
super(positionX,positionY,width,height,draw);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw() {
|
||||
for(Widget child : widgetList){
|
||||
child.draw();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addWidget(Widget widget) {
|
||||
widgetList.add(widget);
|
||||
widget.setDraw(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Widget> getWidgets() {
|
||||
return widgetList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void pack() {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,54 +1,96 @@
|
||||
package electrosphere.renderer.ui.layout;
|
||||
|
||||
import electrosphere.main.Globals;
|
||||
import electrosphere.renderer.Material;
|
||||
import electrosphere.renderer.framebuffer.Framebuffer;
|
||||
import electrosphere.renderer.ui.Widget;
|
||||
import electrosphere.renderer.Model;
|
||||
import electrosphere.renderer.assetmanager.AssetDataStrings;
|
||||
import electrosphere.renderer.framebuffer.FramebufferUtils;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import org.joml.Vector3f;
|
||||
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
||||
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
||||
import static org.lwjgl.opengl.GL11.GL_TEXTURE_2D;
|
||||
import static org.lwjgl.opengl.GL11.glBindTexture;
|
||||
import static org.lwjgl.opengl.GL11.glClear;
|
||||
import static org.lwjgl.opengl.GL11.glClearColor;
|
||||
import static org.lwjgl.opengl.GL13.GL_TEXTURE0;
|
||||
import static org.lwjgl.opengl.GL13.GL_TEXTURE1;
|
||||
import static org.lwjgl.opengl.GL13.GL_TEXTURE2;
|
||||
import static org.lwjgl.opengl.GL13.GL_TEXTURE3;
|
||||
import static org.lwjgl.opengl.GL13.glActiveTexture;
|
||||
import static org.lwjgl.opengl.GL30.GL_FRAMEBUFFER;
|
||||
import static org.lwjgl.opengl.GL30.glBindFramebuffer;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author amaterasu
|
||||
*/
|
||||
public class LayoutSchemeListScrollable extends Widget implements LayoutScheme {
|
||||
public class LayoutSchemeListScrollable extends Widget {
|
||||
|
||||
List<Widget> widgetList = new LinkedList();
|
||||
Framebuffer widgetBuffer = new Framebuffer();
|
||||
Framebuffer widgetBuffer = FramebufferUtils.generateScreensizeTextureFramebuffer();
|
||||
Material customMat = new Material();
|
||||
|
||||
Vector3f boxPosition = new Vector3f();
|
||||
Vector3f boxDimensions = new Vector3f();
|
||||
Vector3f texPosition = new Vector3f(0,0,0);
|
||||
Vector3f texScale = new Vector3f(1,1,0);
|
||||
|
||||
public LayoutSchemeListScrollable(int positionX, int positionY, int width, int height, boolean draw){
|
||||
super(positionX,positionY,width,height,draw);
|
||||
customMat.setTexturePointer(widgetBuffer.getTexturePointer());
|
||||
// customMat.setTexturePointer(Globals.assetManager.fetchTexture("Textures/Branch.png").getTexturePointer());
|
||||
|
||||
float ndcX = (float)positionX/Globals.WINDOW_WIDTH;
|
||||
float ndcY = (float)positionY/Globals.WINDOW_HEIGHT;
|
||||
float ndcWidth = (float)width/Globals.WINDOW_WIDTH;
|
||||
float ndcHeight = (float)height/Globals.WINDOW_HEIGHT;
|
||||
boxPosition = new Vector3f(ndcX,ndcY,0);
|
||||
boxDimensions = new Vector3f(ndcWidth,ndcHeight,0);
|
||||
}
|
||||
|
||||
static float aaaa = 0;
|
||||
|
||||
@Override
|
||||
public void draw() {
|
||||
public void draw(int parentFramebufferPointer) {
|
||||
widgetBuffer.bind();
|
||||
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
for(Widget child : widgetList){
|
||||
child.draw();
|
||||
child.draw(widgetBuffer.getFramebufferPointer());
|
||||
}
|
||||
//this call binds the screen as the "texture" we're rendering to
|
||||
//have to call before actually rendering
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
aaaa = aaaa + 0.0005f;
|
||||
if(aaaa > 1){
|
||||
aaaa = -1;
|
||||
}
|
||||
texPosition.y = aaaa;
|
||||
Model planeModel = Globals.assetManager.fetchModel(Globals.planeModelID);
|
||||
planeModel.pushUniformToMesh("plane", "mPosition", boxPosition);
|
||||
planeModel.pushUniformToMesh("plane", "mDimension", boxDimensions);
|
||||
planeModel.pushUniformToMesh("plane", "tPosition", texPosition);
|
||||
planeModel.pushUniformToMesh("plane", "tDimension", texScale);
|
||||
planeModel.meshes.get(0).setMaterial(customMat);
|
||||
planeModel.drawUI();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void pack() {
|
||||
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addWidget(Widget widget) {
|
||||
widgetList.add(widget);
|
||||
widget.setDraw(false);
|
||||
widget.setVisible(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Widget> getWidgets() {
|
||||
return widgetList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||
}
|
||||
|
||||
@ -7,7 +7,7 @@ import electrosphere.renderer.ui.Widget;
|
||||
import electrosphere.renderer.ui.font.FontUtils;
|
||||
import org.joml.Vector3f;
|
||||
|
||||
public class TextBox extends Widget{
|
||||
public class TextBox extends Widget{
|
||||
|
||||
|
||||
int positionX;
|
||||
@ -20,7 +20,6 @@ public class TextBox extends Widget{
|
||||
Vector3f scalar;
|
||||
|
||||
public TextBox(int positionX, int positionY, int width, int height, String text, boolean render, boolean editable) {
|
||||
super(positionX,positionY,width,height,render);
|
||||
this.positionX = positionX;
|
||||
this.positionY = positionY;
|
||||
this.width = width;
|
||||
@ -30,7 +29,6 @@ public class TextBox extends Widget{
|
||||
}
|
||||
|
||||
public TextBox(int positionX, int positionY, int width, int height, String text, boolean render, boolean editable, Vector3f scalar) {
|
||||
super(positionX,positionY,width,height,render);
|
||||
this.positionX = positionX;
|
||||
this.positionY = positionY;
|
||||
this.width = width;
|
||||
@ -57,7 +55,7 @@ public class TextBox extends Widget{
|
||||
|
||||
|
||||
@Override
|
||||
public void draw(){
|
||||
public void draw(int parentFramebufferPointer){
|
||||
throw new UnsupportedOperationException("Transparent Text box draw function not implemented yet oop");
|
||||
// float ndcX = (float)positionX/Globals.WINDOW_WIDTH;
|
||||
// float ndcY = (float)positionY/Globals.WINDOW_HEIGHT;
|
||||
|
||||
@ -0,0 +1,90 @@
|
||||
package electrosphere.renderer.ui.widgets;
|
||||
|
||||
import electrosphere.main.Globals;
|
||||
import electrosphere.renderer.Material;
|
||||
import electrosphere.renderer.Model;
|
||||
import electrosphere.renderer.framebuffer.Framebuffer;
|
||||
import electrosphere.renderer.framebuffer.FramebufferUtils;
|
||||
import electrosphere.renderer.texture.Texture;
|
||||
import electrosphere.renderer.ui.Widget;
|
||||
import org.joml.Vector3f;
|
||||
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
||||
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
||||
import static org.lwjgl.opengl.GL11.glClear;
|
||||
import static org.lwjgl.opengl.GL11.glClearColor;
|
||||
import static org.lwjgl.opengl.GL30.GL_FRAMEBUFFER;
|
||||
import static org.lwjgl.opengl.GL30.glBindFramebuffer;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author amaterasu
|
||||
*/
|
||||
public class ImagePanel extends Widget {
|
||||
|
||||
Material customMat = new Material();
|
||||
Texture texture = null;
|
||||
|
||||
Vector3f boxPosition = new Vector3f(0,0,0);
|
||||
Vector3f boxDimensions = new Vector3f(1,1,0);
|
||||
Vector3f texPosition = new Vector3f(0,0,0);
|
||||
Vector3f texScale = new Vector3f(1,1,0);
|
||||
|
||||
public ImagePanel(){
|
||||
texture = Globals.assetManager.fetchTexture("Textures/default_diffuse.png");
|
||||
customMat.setTexturePointer(texture.getTexturePointer());
|
||||
}
|
||||
|
||||
public void setTexture(Texture texture){
|
||||
customMat.setTexturePointer(texture.getTexturePointer());
|
||||
}
|
||||
|
||||
public Texture getTexture(){
|
||||
return texture;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPositionY(int positionY) {
|
||||
float ndcY = (float)positionY/Globals.WINDOW_HEIGHT;
|
||||
boxPosition.y = ndcY;
|
||||
super.setPositionY(positionY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPositionX(int positionX) {
|
||||
float ndcX = (float)positionX/Globals.WINDOW_WIDTH;
|
||||
boxPosition.x = ndcX;
|
||||
super.setPositionX(positionX);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHeight(int height) {
|
||||
float ndcHeight = (float)height/Globals.WINDOW_HEIGHT;
|
||||
boxDimensions.y = ndcHeight;
|
||||
super.setHeight(height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setWidth(int width) {
|
||||
float ndcWidth = (float)width/Globals.WINDOW_WIDTH;
|
||||
boxDimensions.x = ndcWidth;
|
||||
super.setWidth(width);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void draw(int parentFramebufferPointer) {
|
||||
//this call binds the screen as the "texture" we're rendering to
|
||||
//have to call before actually rendering
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, parentFramebufferPointer);
|
||||
|
||||
Model planeModel = Globals.assetManager.fetchModel(Globals.planeModelID);
|
||||
planeModel.pushUniformToMesh("plane", "mPosition", boxPosition);
|
||||
planeModel.pushUniformToMesh("plane", "mDimension", boxDimensions);
|
||||
planeModel.pushUniformToMesh("plane", "tPosition", texPosition);
|
||||
planeModel.pushUniformToMesh("plane", "tDimension", texScale);
|
||||
planeModel.meshes.get(0).setMaterial(customMat);
|
||||
planeModel.drawUI();
|
||||
}
|
||||
|
||||
}
|
||||
@ -88,7 +88,7 @@ public class ModelLoader {
|
||||
}
|
||||
//once we've either added default textures or actual textures,
|
||||
//set the current mesh's material to this new one
|
||||
current_mesh.set_material(final_material);
|
||||
current_mesh.setMaterial(final_material);
|
||||
} else {
|
||||
LoggerInterface.loggerRenderer.WARNING("Failed to load texture for node " + current_mesh.nodeID + " of model " + path);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user