add yoga double free minimization
Some checks reported errors
studiorailgun/Renderer/pipeline/head Something is wrong with the build of this commit
Some checks reported errors
studiorailgun/Renderer/pipeline/head Something is wrong with the build of this commit
This commit is contained in:
parent
bca1789457
commit
fc4730c24a
@ -6,6 +6,7 @@ import java.util.Map;
|
|||||||
import org.joml.Vector2i;
|
import org.joml.Vector2i;
|
||||||
import org.lwjgl.opengl.GL40;
|
import org.lwjgl.opengl.GL40;
|
||||||
|
|
||||||
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.renderer.shader.ShaderProgram;
|
import electrosphere.renderer.shader.ShaderProgram;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -179,6 +180,7 @@ public class OpenGLState {
|
|||||||
if(DISABLE_CACHING || program != activeShader){
|
if(DISABLE_CACHING || program != activeShader){
|
||||||
activeShader = program;
|
activeShader = program;
|
||||||
GL40.glUseProgram(activeShader.getShaderId());
|
GL40.glUseProgram(activeShader.getShaderId());
|
||||||
|
Globals.renderingEngine.checkError();
|
||||||
renderPipelineState.setCurrentShaderPointer(activeShader.getShaderId());
|
renderPipelineState.setCurrentShaderPointer(activeShader.getShaderId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,11 +9,13 @@ import org.joml.Vector3f;
|
|||||||
import org.lwjgl.BufferUtils;
|
import org.lwjgl.BufferUtils;
|
||||||
import org.lwjgl.opengl.GL30;
|
import org.lwjgl.opengl.GL30;
|
||||||
import org.lwjgl.opengl.GL31;
|
import org.lwjgl.opengl.GL31;
|
||||||
|
import org.lwjgl.opengl.GL40;
|
||||||
|
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.entity.types.camera.CameraEntityUtils;
|
import electrosphere.entity.types.camera.CameraEntityUtils;
|
||||||
import electrosphere.logger.LoggerInterface;
|
import electrosphere.logger.LoggerInterface;
|
||||||
import electrosphere.renderer.OpenGLState;
|
import electrosphere.renderer.OpenGLState;
|
||||||
|
import electrosphere.renderer.RenderingEngine;
|
||||||
import electrosphere.renderer.shader.ShaderProgram;
|
import electrosphere.renderer.shader.ShaderProgram;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -158,7 +160,11 @@ public class LightManager {
|
|||||||
public void bindBuffer(OpenGLState openGLState){
|
public void bindBuffer(OpenGLState openGLState){
|
||||||
//get position of lights object in shader
|
//get position of lights object in shader
|
||||||
int bufferIndex = GL31.glGetUniformBlockIndex(openGLState.getActiveShader().getShaderId(), "Lights");
|
int bufferIndex = GL31.glGetUniformBlockIndex(openGLState.getActiveShader().getShaderId(), "Lights");
|
||||||
Globals.renderingEngine.checkError();
|
int glErrorCode = Globals.renderingEngine.getError();
|
||||||
|
//TODO: fix manually ignoring GL_INVALID_VALUE from call
|
||||||
|
if(glErrorCode != 0 && glErrorCode != GL40.GL_INVALID_VALUE){
|
||||||
|
LoggerInterface.loggerRenderer.DEBUG_LOOP(RenderingEngine.getErrorInEnglish(glErrorCode));
|
||||||
|
}
|
||||||
if(bufferIndex == ShaderProgram.INVALID_UNIFORM_NAME){
|
if(bufferIndex == ShaderProgram.INVALID_UNIFORM_NAME){
|
||||||
LoggerInterface.loggerRenderer.INFO("Tried to buffer light manager to shader that does not have it active.");
|
LoggerInterface.loggerRenderer.INFO("Tried to buffer light manager to shader that does not have it active.");
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -365,7 +365,6 @@ public class Mesh {
|
|||||||
selectedProgram = shader;
|
selectedProgram = shader;
|
||||||
}
|
}
|
||||||
openGLState.setActiveShader(renderPipelineState, selectedProgram);
|
openGLState.setActiveShader(renderPipelineState, selectedProgram);
|
||||||
Globals.renderingEngine.checkError();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(renderPipelineState.getUseLight()){
|
if(renderPipelineState.getUseLight()){
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import electrosphere.renderer.RenderPipelineState;
|
|||||||
import electrosphere.renderer.model.Material;
|
import electrosphere.renderer.model.Material;
|
||||||
import electrosphere.renderer.model.Model;
|
import electrosphere.renderer.model.Model;
|
||||||
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
import electrosphere.renderer.ui.elementtypes.DrawableElement;
|
||||||
|
import electrosphere.renderer.ui.elementtypes.Element;
|
||||||
import electrosphere.renderer.ui.events.Event;
|
import electrosphere.renderer.ui.events.Event;
|
||||||
import electrosphere.renderer.ui.font.Font;
|
import electrosphere.renderer.ui.font.Font;
|
||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
@ -127,6 +128,7 @@ public class BitmapCharacter extends StandardElement implements DrawableElement
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void applyYoga(int parentX, int parentY) {
|
public void applyYoga(int parentX, int parentY) {
|
||||||
|
if(this.yogaNode != Element.NULL_YOGA_ELEMENT){
|
||||||
//get the values from yoga
|
//get the values from yoga
|
||||||
float leftRaw = Yoga.YGNodeLayoutGetLeft(yogaNode);
|
float leftRaw = Yoga.YGNodeLayoutGetLeft(yogaNode);
|
||||||
float topRaw = Yoga.YGNodeLayoutGetTop(yogaNode);
|
float topRaw = Yoga.YGNodeLayoutGetTop(yogaNode);
|
||||||
@ -141,5 +143,6 @@ public class BitmapCharacter extends StandardElement implements DrawableElement
|
|||||||
this.absoluteY = parentY + internalPositionY;
|
this.absoluteY = parentY + internalPositionY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -76,7 +76,7 @@ public class Label extends StandardContainerElement implements DrawableElement {
|
|||||||
void generateLetters(){
|
void generateLetters(){
|
||||||
//free children
|
//free children
|
||||||
for(Element child : childList){
|
for(Element child : childList){
|
||||||
Yoga.YGNodeFree(child.getYogaNode());
|
child.destroy();
|
||||||
}
|
}
|
||||||
childList.clear();
|
childList.clear();
|
||||||
int accumulatingWidth = 0;
|
int accumulatingWidth = 0;
|
||||||
|
|||||||
@ -238,11 +238,14 @@ public class StandardContainerElement extends StandardElement implements Contain
|
|||||||
for(Element child : childList){
|
for(Element child : childList){
|
||||||
child.destroy();
|
child.destroy();
|
||||||
}
|
}
|
||||||
|
if(this.yogaNode != Element.NULL_YOGA_ELEMENT){
|
||||||
Yoga.YGNodeFree(this.yogaNode);
|
Yoga.YGNodeFree(this.yogaNode);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void applyYoga(int parentX, int parentY) {
|
public void applyYoga(int parentX, int parentY) {
|
||||||
|
if(this.yogaNode != Element.NULL_YOGA_ELEMENT){
|
||||||
//get the values from yoga
|
//get the values from yoga
|
||||||
float leftRaw = Yoga.YGNodeLayoutGetLeft(yogaNode);
|
float leftRaw = Yoga.YGNodeLayoutGetLeft(yogaNode);
|
||||||
float topRaw = Yoga.YGNodeLayoutGetTop(yogaNode);
|
float topRaw = Yoga.YGNodeLayoutGetTop(yogaNode);
|
||||||
@ -265,6 +268,7 @@ public class StandardContainerElement extends StandardElement implements Contain
|
|||||||
child.applyYoga(parentX + internalPositionX,parentY + internalPositionY);
|
child.applyYoga(parentX + internalPositionX,parentY + internalPositionY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setJustifyContent(YogaJustification justification){
|
public void setJustifyContent(YogaJustification justification){
|
||||||
|
|||||||
@ -157,7 +157,10 @@ public class StandardElement implements Element {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void destroy(){
|
public void destroy(){
|
||||||
|
if(this.yogaNode != Element.NULL_YOGA_ELEMENT){
|
||||||
Yoga.YGNodeFree(this.yogaNode);
|
Yoga.YGNodeFree(this.yogaNode);
|
||||||
|
this.yogaNode = Element.NULL_YOGA_ELEMENT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -167,6 +170,7 @@ public class StandardElement implements Element {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void applyYoga(int parentX, int parentY) {
|
public void applyYoga(int parentX, int parentY) {
|
||||||
|
if(this.yogaNode != Element.NULL_YOGA_ELEMENT){
|
||||||
//get the values from yoga
|
//get the values from yoga
|
||||||
float leftRaw = Yoga.YGNodeLayoutGetLeft(yogaNode);
|
float leftRaw = Yoga.YGNodeLayoutGetLeft(yogaNode);
|
||||||
float topRaw = Yoga.YGNodeLayoutGetTop(yogaNode);
|
float topRaw = Yoga.YGNodeLayoutGetTop(yogaNode);
|
||||||
@ -183,6 +187,7 @@ public class StandardElement implements Element {
|
|||||||
this.absoluteY = parentY + internalPositionY;
|
this.absoluteY = parentY + internalPositionY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,5 @@
|
|||||||
package electrosphere.renderer.ui.elements;
|
package electrosphere.renderer.ui.elements;
|
||||||
|
|
||||||
import org.lwjgl.util.yoga.Yoga;
|
|
||||||
|
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.renderer.OpenGLState;
|
import electrosphere.renderer.OpenGLState;
|
||||||
import electrosphere.renderer.RenderPipelineState;
|
import electrosphere.renderer.RenderPipelineState;
|
||||||
@ -110,7 +108,7 @@ public class TextBox extends StandardDrawableContainerElement {
|
|||||||
void generateLetters(){
|
void generateLetters(){
|
||||||
//free children
|
//free children
|
||||||
for(Element child : childList){
|
for(Element child : childList){
|
||||||
Yoga.YGNodeFree(child.getYogaNode());
|
child.destroy();
|
||||||
}
|
}
|
||||||
childList.clear();
|
childList.clear();
|
||||||
String[] words = text.split(" ");
|
String[] words = text.split(" ");
|
||||||
|
|||||||
@ -355,6 +355,7 @@ public class Window implements DrawableElement, ContainerElement, NavigableEleme
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void applyYoga(int parentX, int parentY) {
|
public void applyYoga(int parentX, int parentY) {
|
||||||
|
if(this.yogaNode != Element.NULL_YOGA_ELEMENT){
|
||||||
Yoga.YGNodeStyleSetWidth(parentWindowYogaNode, Globals.WINDOW_WIDTH);
|
Yoga.YGNodeStyleSetWidth(parentWindowYogaNode, Globals.WINDOW_WIDTH);
|
||||||
Yoga.YGNodeStyleSetHeight(parentWindowYogaNode, Globals.WINDOW_HEIGHT);
|
Yoga.YGNodeStyleSetHeight(parentWindowYogaNode, Globals.WINDOW_HEIGHT);
|
||||||
//calculate yoga layout
|
//calculate yoga layout
|
||||||
@ -375,6 +376,7 @@ public class Window implements DrawableElement, ContainerElement, NavigableEleme
|
|||||||
child.applyYoga(this.positionX,this.positionY);
|
child.applyYoga(this.positionX,this.positionY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setDirection(int layout) {
|
public void setDirection(int layout) {
|
||||||
|
|||||||
@ -1,7 +1,5 @@
|
|||||||
package electrosphere.renderer.ui.elements;
|
package electrosphere.renderer.ui.elements;
|
||||||
|
|
||||||
import org.lwjgl.util.yoga.Yoga;
|
|
||||||
|
|
||||||
import electrosphere.engine.Globals;
|
import electrosphere.engine.Globals;
|
||||||
import electrosphere.logger.LoggerInterface;
|
import electrosphere.logger.LoggerInterface;
|
||||||
import electrosphere.renderer.OpenGLState;
|
import electrosphere.renderer.OpenGLState;
|
||||||
@ -88,7 +86,7 @@ public class Word extends StandardDrawableContainerElement {
|
|||||||
void generateLetters(){
|
void generateLetters(){
|
||||||
//free children
|
//free children
|
||||||
for(Element child : childList){
|
for(Element child : childList){
|
||||||
Yoga.YGNodeFree(child.getYogaNode());
|
child.destroy();
|
||||||
}
|
}
|
||||||
childList.clear();
|
childList.clear();
|
||||||
for(int i = 0; i < text.length(); i++){
|
for(int i = 0; i < text.length(); i++){
|
||||||
|
|||||||
@ -4,6 +4,11 @@ import electrosphere.renderer.ui.events.Event;
|
|||||||
|
|
||||||
public interface Element {
|
public interface Element {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A yoga element that either hasn't been created or has already been destroyed
|
||||||
|
*/
|
||||||
|
public static final int NULL_YOGA_ELEMENT = -1;
|
||||||
|
|
||||||
//width and height
|
//width and height
|
||||||
public int getWidth();
|
public int getWidth();
|
||||||
public int getHeight();
|
public int getHeight();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user