package electrosphere.renderer.pipelines; import org.lwjgl.opengl.GL40; import electrosphere.engine.Globals; import electrosphere.renderer.OpenGLState; import electrosphere.renderer.RenderPipelineState; import electrosphere.renderer.RenderingEngine; import electrosphere.renderer.texture.Texture; import electrosphere.renderer.ui.DrawableElement; import electrosphere.renderer.ui.Element; /** * Main ui rendering pipeline */ public class UIPipeline implements RenderPipeline { @Override public void render(OpenGLState openGLState, RenderPipelineState renderPipelineState) { // //Black background // if(Globals.RENDER_FLAG_RENDER_BLACK_BACKGROUND){ GL40.glUseProgram(RenderingEngine.screenTextureShaders.getShaderId()); openGLState.glDepthTest(false); GL40.glBindVertexArray(RenderingEngine.screenTextureVAO); Texture blackTexture = Globals.assetManager.fetchTexture(Globals.blackTexture); if(blackTexture != null){ blackTexture.bind(openGLState); } GL40.glDrawArrays(GL40.GL_TRIANGLES, 0, 6); GL40.glBindVertexArray(0); } // //White background // if(Globals.RENDER_FLAG_RENDER_WHITE_BACKGROUND){ GL40.glUseProgram(RenderingEngine.screenTextureShaders.getShaderId()); openGLState.glDepthTest(false); GL40.glBindVertexArray(RenderingEngine.screenTextureVAO); Texture blackTexture = Globals.assetManager.fetchTexture(Globals.offWhiteTexture); if(blackTexture != null){ blackTexture.bind(openGLState); } GL40.glDrawArrays(GL40.GL_TRIANGLES, 0, 6); GL40.glBindVertexArray(0); } // // Set render pipeline state // if(Globals.RENDER_FLAG_RENDER_UI){ renderPipelineState.setUseMeshShader(true); renderPipelineState.setBufferStandardUniforms(false); renderPipelineState.setBufferNonStandardUniforms(true); renderPipelineState.setUseMaterial(true); renderPipelineState.setUseShadowMap(false); renderPipelineState.setUseBones(false); renderPipelineState.setUseLight(false); openGLState.glDepthTest(false); for(Element currentElement : Globals.elementManager.getWindowList()){ if(currentElement instanceof DrawableElement){ DrawableElement drawable = (DrawableElement) currentElement; if(drawable.getVisible()){ drawable.draw(RenderingEngine.GL_DEFAULT_FRAMEBUFFER, Globals.WINDOW_WIDTH, Globals.WINDOW_HEIGHT); } } } } } }