From 9750091a4941f74058fd07da6c5e814b3458fb19 Mon Sep 17 00:00:00 2001 From: austin Date: Wed, 14 Aug 2024 08:53:00 -0400 Subject: [PATCH] texture state caching fix --- docs/src/progress/currenttarget.md | 1 - docs/src/progress/renderertodo.md | 3 + .../foliagemanager/ClientFoliageManager.java | 2 +- src/main/java/electrosphere/engine/Main.java | 26 ------- .../engine/assetmanager/AssetManager.java | 2 +- .../assetmanager/queue/QueuedTexture.java | 3 +- .../electrosphere/renderer/OpenGLState.java | 12 +--- .../framebuffer/FramebufferUtils.java | 60 ++++++++-------- .../renderer/texture/Texture.java | 68 +++++++++---------- .../renderer/ui/font/FontManager.java | 3 +- .../renderer/ui/font/FontUtils.java | 5 +- 11 files changed, 78 insertions(+), 107 deletions(-) diff --git a/docs/src/progress/currenttarget.md b/docs/src/progress/currenttarget.md index 93026a62..754dc90e 100644 --- a/docs/src/progress/currenttarget.md +++ b/docs/src/progress/currenttarget.md @@ -19,5 +19,4 @@ Strafing walking animation + bug fixes - Rendering pipelines are broken when the katana is not drawn Fix grass rendering distance diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 02ddbf82..d5ce1bdd 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -560,6 +560,9 @@ Update frame data for first person 2h sword swing to align with third person bet Fix katana is frustum culled incorrectly - This is because the data is incorrect (blender has an animation already applied, need to push down) +(08/14/2024) +Fix rendering pipelines being broken when the katana is not drawn + # TODO diff --git a/src/main/java/electrosphere/client/foliagemanager/ClientFoliageManager.java b/src/main/java/electrosphere/client/foliagemanager/ClientFoliageManager.java index 82dc3d95..8d6bb544 100644 --- a/src/main/java/electrosphere/client/foliagemanager/ClientFoliageManager.java +++ b/src/main/java/electrosphere/client/foliagemanager/ClientFoliageManager.java @@ -475,7 +475,7 @@ public class ClientFoliageManager { buffer.position(0); buffer.limit(TARGET_FOLIAGE_SPACING * TARGET_FOLIAGE_SPACING * SINGLE_FOLIAGE_DATA_SIZE_BYTES); //construct data texture - Texture dataTexture = new Texture(buffer,SINGLE_FOLIAGE_DATA_SIZE_BYTES / 4,TARGET_FOLIAGE_SPACING * TARGET_FOLIAGE_SPACING); + Texture dataTexture = new Texture(Globals.renderingEngine.getOpenGLState(),buffer,SINGLE_FOLIAGE_DATA_SIZE_BYTES / 4,TARGET_FOLIAGE_SPACING * TARGET_FOLIAGE_SPACING); //create entity Entity grassEntity = EntityCreationUtils.createClientSpatialEntity(); diff --git a/src/main/java/electrosphere/engine/Main.java b/src/main/java/electrosphere/engine/Main.java index 2870d624..9a6efe4a 100644 --- a/src/main/java/electrosphere/engine/Main.java +++ b/src/main/java/electrosphere/engine/Main.java @@ -471,7 +471,6 @@ public class Main { LoggerInterface.loggerStartup.INFO("Initialize control handler"); Globals.controlHandler = ControlHandler.generateExampleControlsMap(); Globals.controlHandler.setCallbacks(); -// Globals.controlHandler = FileLoadingUtils.loadModelObjectFromBakedJsonFile("/Config/keybinds.json",ControlHandler.class); } /** @@ -482,31 +481,6 @@ public class Main { public static void setFramestep(int framestep){ Main.framestep = framestep; } - - - - - // public static void updateMouseVariables(){ - // glfwGetCursorPos(Globals.window, mouse_X_Buffer, mouse_Y_Buffer); - // xpos = mouse_X_Buffer[0]; - // ypos = mouse_Y_Buffer[0]; - // float xoffset = (float) (xpos - mouse_lastX) * mouseSensitivity; - // float yoffset = (float) (mouse_lastY - ypos) * mouseSensitivity; - // mouse_lastX = (float) xpos; - // mouse_lastY = (float) ypos; - - // if(Globals.controlHandler != null && !Globals.controlHandler.isMouseVisible()){ - // yaw = yaw + xoffset; - // pitch = pitch - yoffset; - - // if (pitch > 100.0f) { - // pitch = 100.0f; - // } - // if (pitch < -99.0f) { - // pitch = -99.0f; - // } - // } - // } diff --git a/src/main/java/electrosphere/engine/assetmanager/AssetManager.java b/src/main/java/electrosphere/engine/assetmanager/AssetManager.java index a30ee27e..829c6bc5 100644 --- a/src/main/java/electrosphere/engine/assetmanager/AssetManager.java +++ b/src/main/java/electrosphere/engine/assetmanager/AssetManager.java @@ -104,7 +104,7 @@ public class AssetManager { //textures from disk to gpu for(String currentPath : texturesInQueue){ texturesInQueue.remove(currentPath); - texturesLoadedIntoMemory.put(currentPath, new Texture(currentPath)); + texturesLoadedIntoMemory.put(currentPath, new Texture(Globals.renderingEngine.getOpenGLState(), currentPath)); } //audio from disk if(Globals.audioEngine != null && Globals.audioEngine.initialized()){ diff --git a/src/main/java/electrosphere/engine/assetmanager/queue/QueuedTexture.java b/src/main/java/electrosphere/engine/assetmanager/queue/QueuedTexture.java index 80f3aeda..23a84cba 100644 --- a/src/main/java/electrosphere/engine/assetmanager/queue/QueuedTexture.java +++ b/src/main/java/electrosphere/engine/assetmanager/queue/QueuedTexture.java @@ -2,6 +2,7 @@ package electrosphere.engine.assetmanager.queue; import java.awt.image.BufferedImage; +import electrosphere.engine.Globals; import electrosphere.renderer.texture.Texture; /** @@ -29,7 +30,7 @@ public class QueuedTexture implements QueuedAsset { @Override public void load() { - texture = new Texture(data); + texture = new Texture(Globals.renderingEngine.getOpenGLState(), data); hasLoaded = true; } diff --git a/src/main/java/electrosphere/renderer/OpenGLState.java b/src/main/java/electrosphere/renderer/OpenGLState.java index 0ed07d35..cad7aefa 100644 --- a/src/main/java/electrosphere/renderer/OpenGLState.java +++ b/src/main/java/electrosphere/renderer/OpenGLState.java @@ -36,10 +36,6 @@ public class OpenGLState { //the key that contains the value of glBlendFunc (which would affect all buffers) static final int ALL_BUFFERS_KEY = -1; - //the currently bound texture - int boundTexturePointer = 0; - int boundTextureType = 0; - //the currently active texture int activeTexture = 0; @@ -133,11 +129,7 @@ public class OpenGLState { * @param textureValue The texture pointer */ public void glBindTexture(int textureType, int texturePointer){ - if(this.boundTexturePointer != texturePointer || this.boundTextureType != textureType){ - this.boundTextureType = textureType; - this.boundTexturePointer = texturePointer; - GL40.glBindTexture(this.boundTextureType,this.boundTexturePointer); - } + this.glBindTextureUnit(this.activeTexture, texturePointer, textureType); } /** @@ -149,7 +141,7 @@ public class OpenGLState { public void glBindTextureUnit(int textureUnit, int texturePointer, int textureType){ if(!unitToPointerMap.containsKey(textureUnit) || unitToPointerMap.get(textureUnit)!=texturePointer){ unitToPointerMap.put(textureUnit,texturePointer); - GL40.glActiveTexture(textureUnit); + this.glActiveTexture(textureUnit); GL40.glBindTexture(textureType,texturePointer); } } diff --git a/src/main/java/electrosphere/renderer/framebuffer/FramebufferUtils.java b/src/main/java/electrosphere/renderer/framebuffer/FramebufferUtils.java index 49109406..51261088 100644 --- a/src/main/java/electrosphere/renderer/framebuffer/FramebufferUtils.java +++ b/src/main/java/electrosphere/renderer/framebuffer/FramebufferUtils.java @@ -45,11 +45,11 @@ public class FramebufferUtils { public static Texture generateScreenTextureColor(OpenGLState openGLState, int width, int height){ Texture texture = new Texture(); texture.glTexImage2D(openGLState, width, height, GL_RGB, GL_UNSIGNED_BYTE); - texture.setMinFilter(GL_LINEAR); - texture.setMagFilter(GL_LINEAR); + texture.setMinFilter(openGLState, GL_LINEAR); + texture.setMagFilter(openGLState, GL_LINEAR); //these make sure the texture actually clamps to the borders of the quad - texture.setWrap(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - texture.setWrap(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + texture.setWrap(openGLState, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + texture.setWrap(openGLState, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); texture.checkStatus(openGLState); return texture; @@ -58,11 +58,11 @@ public class FramebufferUtils { public static Texture generateScreenTextureColorAlpha(OpenGLState openGLState, int width, int height){ Texture texture = new Texture(); texture.glTexImage2D(openGLState, width, height, GL_RGBA, GL_UNSIGNED_BYTE); - texture.setMinFilter(GL_LINEAR); - texture.setMagFilter(GL_LINEAR); + texture.setMinFilter(openGLState, GL_LINEAR); + texture.setMagFilter(openGLState, GL_LINEAR); //these make sure the texture actually clamps to the borders of the quad - texture.setWrap(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - texture.setWrap(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + texture.setWrap(openGLState, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + texture.setWrap(openGLState, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); texture.checkStatus(openGLState); return texture; @@ -122,11 +122,11 @@ public class FramebufferUtils { //texture Texture texture = new Texture(); texture.glTexImage2D(openGLState, Globals.WINDOW_WIDTH, Globals.WINDOW_HEIGHT, GL_RGB, GL_UNSIGNED_BYTE); - texture.setMinFilter(GL_LINEAR); - texture.setMagFilter(GL_LINEAR); + texture.setMinFilter(openGLState, GL_LINEAR); + texture.setMagFilter(openGLState, GL_LINEAR); //these make sure the texture actually clamps to the borders of the quad - texture.setWrap(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - texture.setWrap(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + texture.setWrap(openGLState, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + texture.setWrap(openGLState, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); texture.checkStatus(openGLState); //bind texture to fbo buffer.setMipMapLevel(0); @@ -148,11 +148,11 @@ public class FramebufferUtils { //texture Texture texture = new Texture(); texture.glTexImage2D(openGLState, width, height, GL_RGBA, GL_UNSIGNED_BYTE); - texture.setMinFilter(GL_LINEAR); - texture.setMagFilter(GL_LINEAR); + texture.setMinFilter(openGLState, GL_LINEAR); + texture.setMagFilter(openGLState, GL_LINEAR); //these make sure the texture actually clamps to the borders of the quad - texture.setWrap(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - texture.setWrap(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + texture.setWrap(openGLState, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + texture.setWrap(openGLState, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); texture.checkStatus(openGLState); //bind texture to fbo buffer.setMipMapLevel(0); @@ -192,11 +192,11 @@ public class FramebufferUtils { //texture Texture texture = new Texture(); texture.glTexImage2D(openGLState, depthMapWidth, depthMapHeight, GL_DEPTH_COMPONENT, GL_FLOAT); - texture.setMinFilter(GL_NEAREST); - texture.setMagFilter(GL_NEAREST); - texture.setWrap(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); - texture.setWrap(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); - texture.setBorderColor(new float[]{ 1.0f, 1.0f, 1.0f, 1.0f }); + texture.setMinFilter(openGLState, GL_NEAREST); + texture.setMagFilter(openGLState, GL_NEAREST); + texture.setWrap(openGLState, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); + texture.setWrap(openGLState, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); + texture.setBorderColor(openGLState, new float[]{ 1.0f, 1.0f, 1.0f, 1.0f }); texture.checkStatus(openGLState); //bind texture to fbo @@ -216,11 +216,11 @@ public class FramebufferUtils { public static Texture generateDepthBufferTexture(OpenGLState openGLState, int width, int height){ Texture texture = new Texture(); texture.glTexImage2D(openGLState, width, height, GL_DEPTH_COMPONENT, GL_SHORT); - texture.setMinFilter(GL_NEAREST); - texture.setMagFilter(GL_NEAREST); - texture.setWrap(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); - texture.setWrap(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); - texture.setBorderColor(new float[]{ 1.0f, 1.0f, 1.0f, 1.0f }); + texture.setMinFilter(openGLState, GL_NEAREST); + texture.setMagFilter(openGLState, GL_NEAREST); + texture.setWrap(openGLState, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); + texture.setWrap(openGLState, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); + texture.setBorderColor(openGLState, new float[]{ 1.0f, 1.0f, 1.0f, 1.0f }); texture.checkStatus(openGLState); return texture; } @@ -245,8 +245,8 @@ public class FramebufferUtils { public static Texture generateOITAccumulatorTexture(OpenGLState openGLState, int width, int height){ Texture texture = new Texture(); - texture.setMinFilter(GL_LINEAR); - texture.setMagFilter(GL_LINEAR); + texture.setMinFilter(openGLState, GL_LINEAR); + texture.setMagFilter(openGLState, GL_LINEAR); texture.glTexImage2D(openGLState, width, height, GL_RGBA, GL_HALF_FLOAT); texture.checkStatus(openGLState); return texture; @@ -254,8 +254,8 @@ public class FramebufferUtils { public static Texture generateOITRevealageTexture(OpenGLState openGLState, int width, int height){ Texture texture = new Texture(); - texture.setMinFilter(GL_LINEAR); - texture.setMagFilter(GL_LINEAR); + texture.setMinFilter(openGLState, GL_LINEAR); + texture.setMagFilter(openGLState, GL_LINEAR); texture.glTexImage2D(openGLState, width, height, GL_RED, GL_FLOAT); texture.checkStatus(openGLState); return texture; diff --git a/src/main/java/electrosphere/renderer/texture/Texture.java b/src/main/java/electrosphere/renderer/texture/Texture.java index 3fba8fd6..a1ba986e 100644 --- a/src/main/java/electrosphere/renderer/texture/Texture.java +++ b/src/main/java/electrosphere/renderer/texture/Texture.java @@ -67,18 +67,18 @@ public class Texture { * Creates an in engine texture object from a java bufferedimage object * @param bufferedImage The java bufferedimage object */ - public Texture(BufferedImage bufferedImage){ + public Texture(OpenGLState openGlState, BufferedImage bufferedImage){ this.texturePointer = glGenTextures(); //bind the new texture - glBindTexture(GL_TEXTURE_2D, texturePointer); + openGlState.glBindTexture(GL_TEXTURE_2D, texturePointer); //how are we gonna wrap the texture?? - this.setWrap(GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT); - this.setWrap(GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT); + this.setWrap(openGlState, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT); + this.setWrap(openGlState, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT); //set the border color to black - this.setBorderColor(new float[]{ 0.0f, 0.0f, 0.0f, 1.0f }); + this.setBorderColor(openGlState, new float[]{ 0.0f, 0.0f, 0.0f, 1.0f }); //set magnification and minification operation sampling strategies - this.setMinFilter(GL_LINEAR); - this.setMagFilter(GL_LINEAR); + this.setMinFilter(openGlState, GL_LINEAR); + this.setMagFilter(openGlState, GL_LINEAR); //load the image here ByteBuffer data; width = 1; @@ -123,11 +123,11 @@ public class Texture { if(hasTransparency){ this.pixelFormat = GL_RGBA; this.datatype = GL_UNSIGNED_BYTE; - this.glTexImage2D(width, height, GL_RGBA, GL_UNSIGNED_BYTE, data); + this.glTexImage2D(openGlState, width, height, GL_RGBA, GL_UNSIGNED_BYTE, data); } else { this.pixelFormat = GL_RGB; this.datatype = GL_UNSIGNED_BYTE; - this.glTexImage2D(width, height, GL_RGB, GL_UNSIGNED_BYTE, data); + this.glTexImage2D(openGlState, width, height, GL_RGB, GL_UNSIGNED_BYTE, data); } glGenerateMipmap(GL_TEXTURE_2D); //check build status @@ -135,28 +135,28 @@ public class Texture { if(errorMessage != null){ LoggerInterface.loggerRenderer.ERROR(new IllegalStateException("Texture Constructor[from bufferedimage]: " + errorMessage)); } - glBindTexture(GL_TEXTURE_2D, 0); + openGlState.glBindTexture(GL_TEXTURE_2D, 0); } /** * Creates a texture from an existing file * @param path The path to the image file */ - public Texture(String path){ + public Texture(OpenGLState openGlState, String path){ this.path = path; if(!Globals.HEADLESS){ //generate the texture object on gpu this.texturePointer = glGenTextures(); //bind the new texture - glBindTexture(GL_TEXTURE_2D, texturePointer); + openGlState.glBindTexture(GL_TEXTURE_2D, texturePointer); //how are we gonna wrap the texture?? - this.setWrap(GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT); - this.setWrap(GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT); + this.setWrap(openGlState, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT); + this.setWrap(openGlState, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT); //set the border color to black - this.setBorderColor(new float[]{ 0.0f, 0.0f, 0.0f, 1.0f }); + this.setBorderColor(openGlState, new float[]{ 0.0f, 0.0f, 0.0f, 1.0f }); //set magnification and minification operation sampling strategies - this.setMinFilter(GL_LINEAR); - this.setMagFilter(GL_LINEAR); + this.setMinFilter(openGlState, GL_LINEAR); + this.setMagFilter(openGlState, GL_LINEAR); //load the image here ByteBuffer data; width = 1; @@ -226,11 +226,11 @@ public class Texture { if(hasTransparency){ this.pixelFormat = GL_RGBA; this.datatype = GL_UNSIGNED_BYTE; - this.glTexImage2D(width, height, GL_RGBA, GL_UNSIGNED_BYTE, data); + this.glTexImage2D(openGlState, width, height, GL_RGBA, GL_UNSIGNED_BYTE, data); } else { this.pixelFormat = GL_RGB; this.datatype = GL_UNSIGNED_BYTE; - this.glTexImage2D(width, height, GL_RGB, GL_UNSIGNED_BYTE, data); + this.glTexImage2D(openGlState, width, height, GL_RGB, GL_UNSIGNED_BYTE, data); } glGenerateMipmap(GL_TEXTURE_2D); //OPTIONAL free the original image data now that it's on the gpu @@ -249,17 +249,17 @@ public class Texture { * @param width the 'width' of the 'texture' * @param height the 'height' of the 'texture' */ - public Texture(ByteBuffer buffer, int width, int height){ + public Texture(OpenGLState openGlState, ByteBuffer buffer, int width, int height){ if(!Globals.HEADLESS){ //generate the texture object on gpu this.texturePointer = glGenTextures(); //bind the new texture - glBindTexture(GL_TEXTURE_2D, texturePointer); + openGlState.glBindTexture(GL_TEXTURE_2D, texturePointer); //how are we gonna wrap the texture?? - this.setWrap(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - this.setWrap(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + this.setWrap(openGlState, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + this.setWrap(openGlState, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); //disable mipmap - this.setMinFilter(GL_LINEAR); + this.setMinFilter(openGlState, GL_LINEAR); //call if width != height so opengl figures out how to unpack it properly glPixelStorei(GL_UNPACK_ALIGNMENT, 4); //GL_RED = 32bit r value @@ -337,9 +337,9 @@ public class Texture { * @param wrapDir The direction to wrap * @param wrapType The type of wrapping to perform */ - public void setWrap(int wrapDir, int wrapType){ + public void setWrap(OpenGLState openGlState, int wrapDir, int wrapType){ //TODO: store wrap type for the direction in this object - glBindTexture(GL_TEXTURE_2D,texturePointer); + openGlState.glBindTexture(GL_TEXTURE_2D,texturePointer); glTexParameteri(GL_TEXTURE_2D, wrapDir, wrapType); } @@ -347,9 +347,9 @@ public class Texture { * Sets the border color * @param borderColor The color (must be 4 floats) */ - public void setBorderColor(float borderColor[]){ + public void setBorderColor(OpenGLState openGlState, float borderColor[]){ this.borderColor = borderColor; - glBindTexture(GL_TEXTURE_2D,texturePointer); + openGlState.glBindTexture(GL_TEXTURE_2D,texturePointer); glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, borderColor); } @@ -357,9 +357,9 @@ public class Texture { * Sets the min filter * @param minFilter The min filter */ - public void setMinFilter(int minFilter){ + public void setMinFilter(OpenGLState openGlState, int minFilter){ this.minFilter = minFilter; - glBindTexture(GL_TEXTURE_2D,texturePointer); + openGlState.glBindTexture(GL_TEXTURE_2D,texturePointer); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minFilter); } @@ -367,9 +367,9 @@ public class Texture { * Sets the max filter * @param maxFilter The max filter */ - public void setMagFilter(int maxFilter){ + public void setMagFilter(OpenGLState openGlState, int maxFilter){ this.maxFilter = maxFilter; - glBindTexture(GL_TEXTURE_2D,texturePointer); + openGlState.glBindTexture(GL_TEXTURE_2D,texturePointer); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, maxFilter); } @@ -402,7 +402,7 @@ public class Texture { * @param datatype The data type of a single component of a pixel (ie GL_BYTE, GL_UNSIGNED_INT, etc) * @param data The data to populate the image with */ - public void glTexImage2D(int width, int height, int format, int datatype, ByteBuffer data){ + public void glTexImage2D(OpenGLState openGLState, int width, int height, int format, int datatype, ByteBuffer data){ //store provided values this.width = width; this.height = height; @@ -411,7 +411,7 @@ public class Texture { //static values going into call int level = 0; int border = 0; //this must be 0 according to docs - glBindTexture(GL_TEXTURE_2D,texturePointer); + openGLState.glBindTexture(GL_TEXTURE_2D,texturePointer); GL40.glTexImage2D(GL_TEXTURE_2D, level, format, width, height, border, format, datatype, data); } diff --git a/src/main/java/electrosphere/renderer/ui/font/FontManager.java b/src/main/java/electrosphere/renderer/ui/font/FontManager.java index 8b3d83a2..60b5978d 100644 --- a/src/main/java/electrosphere/renderer/ui/font/FontManager.java +++ b/src/main/java/electrosphere/renderer/ui/font/FontManager.java @@ -5,6 +5,7 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; +import electrosphere.engine.Globals; import electrosphere.logger.LoggerInterface; import electrosphere.util.FileUtils; @@ -46,7 +47,7 @@ public class FontManager { font = new java.awt.Font(java.awt.Font.MONOSPACED, java.awt.Font.PLAIN, 16); } if(font!=null){ - defaultFont = FontUtils.loadFont(font, false); + defaultFont = FontUtils.loadFont(Globals.renderingEngine.getOpenGLState(), font, false); fontMap.put("default",defaultFont); } } diff --git a/src/main/java/electrosphere/renderer/ui/font/FontUtils.java b/src/main/java/electrosphere/renderer/ui/font/FontUtils.java index f091a974..4b438806 100644 --- a/src/main/java/electrosphere/renderer/ui/font/FontUtils.java +++ b/src/main/java/electrosphere/renderer/ui/font/FontUtils.java @@ -1,5 +1,6 @@ package electrosphere.renderer.ui.font; +import electrosphere.renderer.OpenGLState; import electrosphere.renderer.model.Material; import electrosphere.renderer.texture.Texture; @@ -68,7 +69,7 @@ public class FontUtils { * @param antiAlias if true, antialias, otherwise dont * @return The engine font object */ - protected static Font loadFont(java.awt.Font font, boolean antiAlias) { + protected static Font loadFont(OpenGLState openGLState, java.awt.Font font, boolean antiAlias) { int imageWidth = 0; int imageHeight = 0; @@ -152,7 +153,7 @@ public class FontUtils { //create material with new font image Material uiMat = new Material(); - Texture texture = new Texture(image); + Texture texture = new Texture(openGLState, image); uiMat.setTexturePointer(texture.getTexturePointer());