Merge pull request #108 from Bigpet/viewport_fix
Backup and restore the viewport size when rendering sliders
This commit is contained in:
@@ -24,8 +24,10 @@ import itdelatrisu.opsu.objects.curves.Vec2f;
|
|||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.FloatBuffer;
|
import java.nio.FloatBuffer;
|
||||||
|
import java.nio.IntBuffer;
|
||||||
|
|
||||||
import org.lwjgl.BufferUtils;
|
import org.lwjgl.BufferUtils;
|
||||||
|
import org.lwjgl.opengl.EXTFramebufferObject;
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
import org.lwjgl.opengl.GL13;
|
import org.lwjgl.opengl.GL13;
|
||||||
import org.lwjgl.opengl.GL14;
|
import org.lwjgl.opengl.GL14;
|
||||||
@@ -114,10 +116,14 @@ public class CurveRenderState {
|
|||||||
mapping = cache.insert(hitObject);
|
mapping = cache.insert(hitObject);
|
||||||
fbo = mapping;
|
fbo = mapping;
|
||||||
|
|
||||||
int old_fb = GL11.glGetInteger(GL30.GL_FRAMEBUFFER_BINDING);
|
int oldFb = GL11.glGetInteger(EXTFramebufferObject.GL_FRAMEBUFFER_BINDING_EXT);
|
||||||
int old_tex = GL11.glGetInteger(GL11.GL_TEXTURE_BINDING_2D);
|
int oldTex = GL11.glGetInteger(GL11.GL_TEXTURE_BINDING_2D);
|
||||||
|
|
||||||
GL30.glBindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, fbo.getID());
|
//glGetInteger requires a buffer of size 16, even though just 4
|
||||||
|
//values are returned in this specific case
|
||||||
|
IntBuffer oldViewport = BufferUtils.createIntBuffer(16);
|
||||||
|
GL11.glGetInteger(GL11.GL_VIEWPORT, oldViewport);
|
||||||
|
EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, fbo.getID());
|
||||||
GL11.glViewport(0, 0, fbo.width, fbo.height);
|
GL11.glViewport(0, 0, fbo.width, fbo.height);
|
||||||
GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
||||||
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
|
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
|
||||||
@@ -125,8 +131,9 @@ public class CurveRenderState {
|
|||||||
this.draw_curve(color, borderColor, curve);
|
this.draw_curve(color, borderColor, curve);
|
||||||
color.a = 1f;
|
color.a = 1f;
|
||||||
|
|
||||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, old_tex);
|
GL11.glBindTexture(GL11.GL_TEXTURE_2D, oldTex);
|
||||||
GL30.glBindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, old_fb);
|
EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, oldFb);
|
||||||
|
GL11.glViewport(oldViewport.get(0), oldViewport.get(1), oldViewport.get(2), oldViewport.get(3));
|
||||||
Utils.COLOR_WHITE_FADE.a = alpha;
|
Utils.COLOR_WHITE_FADE.a = alpha;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,10 +19,8 @@ package itdelatrisu.opsu.render;
|
|||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
|
||||||
|
import org.lwjgl.opengl.EXTFramebufferObject;
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
import org.lwjgl.opengl.GL20;
|
|
||||||
import org.lwjgl.opengl.GL30;
|
|
||||||
import org.lwjgl.opengl.GL32;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a rendertarget. For now this maps to an OpenGL FBO via LWJGL.
|
* Represents a rendertarget. For now this maps to an OpenGL FBO via LWJGL.
|
||||||
@@ -50,16 +48,16 @@ public class Rendertarget {
|
|||||||
private Rendertarget(int width, int height) {
|
private Rendertarget(int width, int height) {
|
||||||
this.width = width;
|
this.width = width;
|
||||||
this.height = height;
|
this.height = height;
|
||||||
fboID = GL30.glGenFramebuffers();
|
fboID = EXTFramebufferObject.glGenFramebuffersEXT();
|
||||||
textureID = GL11.glGenTextures();
|
textureID = GL11.glGenTextures();
|
||||||
depthBufferID = GL30.glGenRenderbuffers();
|
depthBufferID = EXTFramebufferObject.glGenRenderbuffersEXT();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bind this rendertarget as the primary framebuffer.
|
* Bind this rendertarget as the primary framebuffer.
|
||||||
*/
|
*/
|
||||||
public void bind() {
|
public void bind() {
|
||||||
GL30.glBindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, fboID);
|
EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, fboID);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -83,7 +81,7 @@ public class Rendertarget {
|
|||||||
* Bind the default framebuffer.
|
* Bind the default framebuffer.
|
||||||
*/
|
*/
|
||||||
public static void unbind() {
|
public static void unbind() {
|
||||||
GL30.glBindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, 0);
|
EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -93,8 +91,9 @@ public class Rendertarget {
|
|||||||
* @param height the height
|
* @param height the height
|
||||||
*/
|
*/
|
||||||
public static Rendertarget createRTTFramebuffer(int width, int height) {
|
public static Rendertarget createRTTFramebuffer(int width, int height) {
|
||||||
int old_framebuffer = GL11.glGetInteger(GL30.GL_READ_FRAMEBUFFER_BINDING);
|
int old_framebuffer = GL11.glGetInteger(EXTFramebufferObject.GL_FRAMEBUFFER_BINDING_EXT);
|
||||||
int old_texture = GL11.glGetInteger(GL11.GL_TEXTURE_BINDING_2D);
|
int old_texture = GL11.glGetInteger(GL11.GL_TEXTURE_BINDING_2D);
|
||||||
|
int old_drawbuffer = GL11.glGetInteger(GL11.GL_DRAW_BUFFER);
|
||||||
Rendertarget buffer = new Rendertarget(width,height);
|
Rendertarget buffer = new Rendertarget(width,height);
|
||||||
buffer.bind();
|
buffer.bind();
|
||||||
|
|
||||||
@@ -104,15 +103,14 @@ public class Rendertarget {
|
|||||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
|
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
|
||||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
|
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
|
||||||
|
|
||||||
GL30.glBindRenderbuffer(GL30.GL_RENDERBUFFER, buffer.depthBufferID);
|
EXTFramebufferObject.glBindRenderbufferEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, buffer.depthBufferID);
|
||||||
GL30.glRenderbufferStorage(GL30.GL_RENDERBUFFER, GL11.GL_DEPTH_COMPONENT, width, height);
|
EXTFramebufferObject.glRenderbufferStorageEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, GL11.GL_DEPTH_COMPONENT, width, height);
|
||||||
GL30.glFramebufferRenderbuffer(GL30.GL_FRAMEBUFFER, GL30.GL_DEPTH_ATTACHMENT, GL30.GL_RENDERBUFFER, buffer.depthBufferID);
|
EXTFramebufferObject.glFramebufferRenderbufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_DEPTH_ATTACHMENT_EXT, EXTFramebufferObject.GL_RENDERBUFFER_EXT, buffer.depthBufferID);
|
||||||
|
|
||||||
GL32.glFramebufferTexture(GL30.GL_FRAMEBUFFER, GL30.GL_COLOR_ATTACHMENT0, fboTexture, 0);
|
EXTFramebufferObject.glFramebufferTexture2DEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_COLOR_ATTACHMENT0_EXT, GL11.GL_TEXTURE_2D, fboTexture, 0);
|
||||||
GL20.glDrawBuffers(GL30.GL_COLOR_ATTACHMENT0);
|
|
||||||
|
|
||||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, old_texture);
|
GL11.glBindTexture(GL11.GL_TEXTURE_2D, old_texture);
|
||||||
GL30.glBindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, old_framebuffer);
|
EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, old_framebuffer);
|
||||||
|
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
@@ -122,8 +120,8 @@ public class Rendertarget {
|
|||||||
* to use this rendertarget with OpenGL after calling this method.
|
* to use this rendertarget with OpenGL after calling this method.
|
||||||
*/
|
*/
|
||||||
public void destroyRTT() {
|
public void destroyRTT() {
|
||||||
GL30.glDeleteFramebuffers(fboID);
|
EXTFramebufferObject.glDeleteFramebuffersEXT(fboID);
|
||||||
GL30.glDeleteRenderbuffers(depthBufferID);
|
EXTFramebufferObject.glDeleteRenderbuffersEXT(depthBufferID);
|
||||||
GL11.glDeleteTextures(textureID);
|
GL11.glDeleteTextures(textureID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user