framebuffer fixes
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				studiorailgun/Renderer/pipeline/head There was a failure building this commit
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	studiorailgun/Renderer/pipeline/head There was a failure building this commit
				
			This commit is contained in:
		
							parent
							
								
									1873b8abad
								
							
						
					
					
						commit
						b863c33253
					
				| @ -125,6 +125,7 @@ public class OpenGLState { | ||||
|         if(DISABLE_CACHING || this.activeTexture != texture){ | ||||
|             this.activeTexture = texture; | ||||
|             GL40.glActiveTexture(this.activeTexture); | ||||
|             Globals.renderingEngine.checkError(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @ -148,6 +149,7 @@ public class OpenGLState { | ||||
|             unitToPointerMap.put(textureUnit,texturePointer); | ||||
|             this.glActiveTexture(textureUnit); | ||||
|             GL40.glBindTexture(textureType,texturePointer); | ||||
|             Globals.renderingEngine.checkError(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -330,7 +330,7 @@ public class RenderingEngine { | ||||
|         defaultFramebuffer = new Framebuffer(0); | ||||
|          | ||||
|         //generate framebuffers | ||||
|         screenTextureColor = FramebufferUtils.generateScreenTextureColor(openGLState, Globals.userSettings.getRenderResolutionX(), Globals.userSettings.getRenderResolutionY()); | ||||
|         screenTextureColor = FramebufferUtils.generateScreenTextureColorAlpha(openGLState, Globals.userSettings.getRenderResolutionX(), Globals.userSettings.getRenderResolutionY()); | ||||
|         screenTextureDepth = FramebufferUtils.generateScreenTextureDepth(openGLState, Globals.userSettings.getRenderResolutionX(), Globals.userSettings.getRenderResolutionY()); | ||||
|         screenFramebuffer = FramebufferUtils.generateScreenTextureFramebuffer(openGLState, Globals.userSettings.getRenderResolutionX(), Globals.userSettings.getRenderResolutionY(), screenTextureColor, screenTextureDepth); | ||||
|         openGLState.glBindFramebuffer(GL_FRAMEBUFFER, GL_DEFAULT_FRAMEBUFFER); | ||||
| @ -368,7 +368,7 @@ public class RenderingEngine { | ||||
|     static Framebuffer gameImageNormalsFramebuffer; | ||||
|     static ShaderProgram renderNormalsShader; | ||||
|         */ | ||||
|         gameImageNormalsTexture = FramebufferUtils.generateScreenTextureColor(openGLState, Globals.userSettings.getRenderResolutionX(), Globals.userSettings.getRenderResolutionY()); | ||||
|         gameImageNormalsTexture = FramebufferUtils.generateScreenTextureColorAlpha(openGLState, Globals.userSettings.getRenderResolutionX(), Globals.userSettings.getRenderResolutionY()); | ||||
|         Texture gameImageNormalsDepthTexture = FramebufferUtils.generateScreenTextureDepth(openGLState, Globals.userSettings.getRenderResolutionX(), Globals.userSettings.getRenderResolutionY()); | ||||
|         gameImageNormalsFramebuffer = FramebufferUtils.generateScreenTextureFramebuffer(openGLState, Globals.userSettings.getRenderResolutionX(), Globals.userSettings.getRenderResolutionY(), gameImageNormalsTexture, gameImageNormalsDepthTexture); | ||||
|         renderNormalsShader = ShaderProgram.loadSpecificShader("Shaders/anime/renderNormals.vs", "Shaders/anime/renderNormals.fs"); | ||||
|  | ||||
| @ -211,7 +211,6 @@ public class Framebuffer { | ||||
|             throw new IllegalStateException("Trying to attach uninitialized image to frame buffer!"); | ||||
|         } | ||||
|         openGLState.glBindFramebuffer(GL40.GL_FRAMEBUFFER, this.framebufferPointer); | ||||
|         texture.bind(openGLState); //texture must be bound at least once so that the object is created prior to attaching to framebuffer | ||||
|         GL40.glFramebufferTexture2D(GL40.GL_FRAMEBUFFER, GL40.GL_COLOR_ATTACHMENT0 + attachmentNum, GL40.GL_TEXTURE_2D, texture.getTexturePointer(), 0); | ||||
|         Globals.renderingEngine.checkError(); | ||||
|         openGLState.glBindFramebuffer(GL40.GL_FRAMEBUFFER, 0); | ||||
| @ -225,7 +224,6 @@ public class Framebuffer { | ||||
|     public void setDepthAttachment(OpenGLState openGLState, Texture depthTexture){ | ||||
|         openGLState.glBindFramebuffer(GL40.GL_FRAMEBUFFER, this.framebufferPointer); | ||||
|         this.depthTexture = depthTexture; | ||||
|         depthTexture.bind(openGLState); //texture must be bound at least once so that the object is created prior to attaching to framebuffer | ||||
|         GL40.glFramebufferTexture2D(GL40.GL_FRAMEBUFFER, GL40.GL_DEPTH_ATTACHMENT, GL40.GL_TEXTURE_2D, depthTexture.getTexturePointer(), 0); | ||||
|         Globals.renderingEngine.checkError(); | ||||
|         openGLState.glBindFramebuffer(GL40.GL_FRAMEBUFFER, 0); | ||||
|  | ||||
| @ -46,26 +46,34 @@ 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.glTexImage2D(openGLState, width, height, GL_RGB, GL40.GL_RGB32F, GL_UNSIGNED_BYTE); | ||||
|         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(openGLState, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); | ||||
|         texture.setWrap(openGLState, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); | ||||
| 
 | ||||
|         //guarantees that the texture object has actually been created (calling gen buffers does not guarantee object creation) | ||||
|         texture.bind(openGLState); | ||||
|         openGLState.glBindTexture(GL40.GL_TEXTURE_2D, Texture.DEFAULT_TEXTURE); | ||||
| 
 | ||||
|         texture.checkStatus(openGLState); | ||||
|         return texture; | ||||
|     } | ||||
| 
 | ||||
|     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.glTexImage2D(openGLState, width, height, GL_RGBA, GL40.GL_RGB32F, GL_UNSIGNED_BYTE); | ||||
|         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(openGLState, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); | ||||
|         texture.setWrap(openGLState, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); | ||||
| 
 | ||||
|         //guarantees that the texture object has actually been created (calling gen buffers does not guarantee object creation) | ||||
|         texture.bind(openGLState); | ||||
|         openGLState.glBindTexture(GL40.GL_TEXTURE_2D, Texture.DEFAULT_TEXTURE); | ||||
| 
 | ||||
|         texture.checkStatus(openGLState); | ||||
|         return texture; | ||||
|     } | ||||
| @ -74,6 +82,10 @@ public class FramebufferUtils { | ||||
|         Texture texture = new Texture(); | ||||
|         texture.glTexImage2D(openGLState, width, height, GL_DEPTH_COMPONENT, GL_FLOAT); | ||||
| 
 | ||||
|         //guarantees that the texture object has actually been created (calling gen buffers does not guarantee object creation) | ||||
|         texture.bind(openGLState); | ||||
|         openGLState.glBindTexture(GL40.GL_TEXTURE_2D, Texture.DEFAULT_TEXTURE); | ||||
| 
 | ||||
|         texture.checkStatus(openGLState); | ||||
|         return texture; | ||||
|     } | ||||
|  | ||||
| @ -34,6 +34,11 @@ public class Texture { | ||||
|      */ | ||||
|     public static final int UNINITIALIZED_TEXTURE = -1; | ||||
| 
 | ||||
|     /** | ||||
|      * The texture name for the default texture (ie the screen) | ||||
|      */ | ||||
|     public static final int DEFAULT_TEXTURE = 0; | ||||
| 
 | ||||
|     //the pointer for the texture | ||||
|     int texturePointer = UNINITIALIZED_TEXTURE; | ||||
|     //the width of the texture | ||||
| @ -254,7 +259,7 @@ public class Texture { | ||||
|             //buffer the texture information | ||||
|             this.pixelFormat = GL_RED; | ||||
|             this.datatype = GL_FLOAT; | ||||
|             GL40.glTexImage2D(GL_TEXTURE_2D, 0, GL_R32F, width, height, 0, GL_RED, GL_FLOAT, buffer); | ||||
|             this.glTexImage2D(openGlState, width, height, GL_RED, GL_FLOAT); | ||||
|             //check build status | ||||
|             String errorMessage = RenderingEngine.getErrorInEnglish(Globals.renderingEngine.getError()); | ||||
|             if(errorMessage != null){ | ||||
| @ -393,6 +398,29 @@ public class Texture { | ||||
|         Globals.renderingEngine.checkError(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Specifies a 2d image | ||||
|      * @param width The width of the image | ||||
|      * @param height The height of the image | ||||
|      * @param format The format of the pixels (ie GL_RGB, GL_RGBA, etc) | ||||
|      * @param internalformat The specific format type (ie GL_RGB32F, GL_RGBA32F, GL_R8, etc) | ||||
|      * @param datatype The data type of a single component of a pixel (ie GL_BYTE, GL_UNSIGNED_INT, etc) | ||||
|      */ | ||||
|     public void glTexImage2D(OpenGLState openGLState, int width, int height, int format, int internalformat, int datatype){ | ||||
|         //store provided values | ||||
|         this.width = width; | ||||
|         this.height = height; | ||||
|         this.pixelFormat = format; | ||||
|         this.datatype = datatype; | ||||
|         //static values going into call | ||||
|         int level = 0; | ||||
|         int border = 0; //this must be 0 according to docs | ||||
|         openGLState.glBindTexture(GL_TEXTURE_2D,texturePointer); | ||||
|         Globals.renderingEngine.checkError(); | ||||
|         GL40.glTexImage2D(GL_TEXTURE_2D, level, internalformat, width, height, border, format, datatype, MemoryUtil.NULL); | ||||
|         Globals.renderingEngine.checkError(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Specifies a 2d image | ||||
|      * @param width The width of the image | ||||
| @ -489,6 +517,13 @@ public class Texture { | ||||
|                         LoggerInterface.loggerRenderer.ERROR("Texture is greater width than environment allows", new IllegalStateException("Texture is greater width than environment allows")); | ||||
|                     } | ||||
|                 } break; | ||||
|                 case GL40.GL_INVALID_ENUM: { | ||||
| 
 | ||||
|                 } break; | ||||
|                 default: { | ||||
|                     String message = "Texture undefined error status! " + errorCode; | ||||
|                     LoggerInterface.loggerRenderer.ERROR(new IllegalStateException(message)); | ||||
|                 } break; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user